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

View File

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

View File

@ -405,12 +405,13 @@ WriteToSmgr(TableWriteState *writeState, char *data, uint32 dataLength)
PageInit(page, BLCKSZ, 0); PageInit(page, BLCKSZ, 0);
/* always appending */ /* 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); to_write = Min(phdr->pd_upper - phdr->pd_lower, remaining);
memcpy(page + phdr->pd_lower, data, to_write); memcpy(page + phdr->pd_lower, data, to_write);
phdr->pd_lower += to_write; phdr->pd_lower += to_write;
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
data += to_write; data += to_write;