address review comments

merge-cstore-pykello
Jeff Davis 2020-09-11 16:28:57 -07:00
parent dee408248c
commit 573555747f
3 changed files with 9 additions and 5 deletions

View File

@ -300,6 +300,10 @@ typedef struct SmgrAddr
uint32 offset;
} SmgrAddr;
/*
* Map logical offsets (as tracked in the metadata) to a physical page and
* offset where the data is kept.
*/
static inline SmgrAddr
logical_to_smgr(uint64 logicalOffset)
{
@ -307,7 +311,7 @@ logical_to_smgr(uint64 logicalOffset)
SmgrAddr addr;
addr.blockno = logicalOffset / bytes_per_page;
addr.offset = logicalOffset % bytes_per_page;
addr.offset = SizeOfPageHeaderData + (logicalOffset % bytes_per_page);
return addr;
}

View File

@ -1175,14 +1175,13 @@ ReadFromSmgr(Relation rel, uint64 offset, uint32 size)
PageHeader phdr;
uint32 to_read;
SmgrAddr addr = logical_to_smgr(offset + read);
uint32 pageoffset = addr.offset + SizeOfPageHeaderData;
buffer = ReadBuffer(rel, addr.blockno);
page = BufferGetPage(buffer);
phdr = (PageHeader)page;
to_read = Min(size - read, phdr->pd_upper - pageoffset);
memcpy(resultBuffer->data + read, page + pageoffset, to_read);
to_read = Min(size - read, phdr->pd_upper - addr.offset);
memcpy(resultBuffer->data + read, page + addr.offset, to_read);
ReleaseBuffer(buffer);
read += to_read;
}

View File

@ -405,12 +405,13 @@ WriteToSmgr(TableWriteState *writeState, char *data, uint32 dataLength)
PageInit(page, BLCKSZ, 0);
/* always appending */
Assert(phdr->pd_lower == addr.offset + SizeOfPageHeaderData);
Assert(phdr->pd_lower == addr.offset);
to_write = Min(phdr->pd_upper - phdr->pd_lower, remaining);
memcpy(page + phdr->pd_lower, data, to_write);
phdr->pd_lower += to_write;
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
data += to_write;