From 573555747f7c0637167d81dcea0f1cd551794040 Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Fri, 11 Sep 2020 16:28:57 -0700 Subject: [PATCH] address review comments --- cstore.h | 6 +++++- cstore_reader.c | 5 ++--- cstore_writer.c | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cstore.h b/cstore.h index 9679fea9c..d0f959032 100644 --- a/cstore.h +++ b/cstore.h @@ -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; } diff --git a/cstore_reader.c b/cstore_reader.c index 4cbe2a44f..654d74697 100644 --- a/cstore_reader.c +++ b/cstore_reader.c @@ -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; } diff --git a/cstore_writer.c b/cstore_writer.c index 76e3aa070..319136dc9 100644 --- a/cstore_writer.c +++ b/cstore_writer.c @@ -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;