mirror of https://github.com/citusdata/citus.git
address review comments
parent
dee408248c
commit
573555747f
6
cstore.h
6
cstore.h
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue