Use RelFileLocator in PG 16

This is PG commit b0a55e43299c4ea2a9a8c757f9c26352407d0ccc
pg16_kickoff
onderkalaci 2023-04-26 18:13:44 +03:00
parent 890deac272
commit 65c88fe854
9 changed files with 65 additions and 64 deletions

View File

@ -1435,7 +1435,7 @@ ColumnarPerStripeScanCost(RelOptInfo *rel, Oid relationId, int numberOfColumnsRe
ereport(ERROR, (errmsg("could not open relation with OID %u", relationId))); ereport(ERROR, (errmsg("could not open relation with OID %u", relationId)));
} }
List *stripeList = StripesForRelfilenode(relation->rd_node); List *stripeList = StripesForRelfilenode(relation->rd_locator);
RelationClose(relation); RelationClose(relation);
uint32 maxColumnCount = 0; uint32 maxColumnCount = 0;
@ -1492,7 +1492,7 @@ ColumnarTableStripeCount(Oid relationId)
ereport(ERROR, (errmsg("could not open relation with OID %u", relationId))); ereport(ERROR, (errmsg("could not open relation with OID %u", relationId)));
} }
List *stripeList = StripesForRelfilenode(relation->rd_node); List *stripeList = StripesForRelfilenode(relation->rd_locator);
int stripeCount = list_length(stripeList); int stripeCount = list_length(stripeList);
RelationClose(relation); RelationClose(relation);

View File

@ -57,7 +57,8 @@
#include "utils/memutils.h" #include "utils/memutils.h"
#include "utils/lsyscache.h" #include "utils/lsyscache.h"
#include "utils/rel.h" #include "utils/rel.h"
#include "utils/relfilenodemap.h" #include "storage/relfilelocator.h"
#include "utils/relfilenumbermap.h"
#define COLUMNAR_RELOPTION_NAMESPACE "columnar" #define COLUMNAR_RELOPTION_NAMESPACE "columnar"
#define SLOW_METADATA_ACCESS_WARNING \ #define SLOW_METADATA_ACCESS_WARNING \
@ -112,7 +113,7 @@ static Oid ColumnarChunkGroupRelationId(void);
static Oid ColumnarChunkIndexRelationId(void); static Oid ColumnarChunkIndexRelationId(void);
static Oid ColumnarChunkGroupIndexRelationId(void); static Oid ColumnarChunkGroupIndexRelationId(void);
static Oid ColumnarNamespaceId(void); static Oid ColumnarNamespaceId(void);
static uint64 LookupStorageId(RelFileNode relfilenode); static uint64 LookupStorageId(RelFileLocator relfilenode);
static uint64 GetHighestUsedRowNumber(uint64 storageId); static uint64 GetHighestUsedRowNumber(uint64 storageId);
static void DeleteStorageFromColumnarMetadataTable(Oid metadataTableId, static void DeleteStorageFromColumnarMetadataTable(Oid metadataTableId,
AttrNumber storageIdAtrrNumber, AttrNumber storageIdAtrrNumber,
@ -591,14 +592,14 @@ ReadColumnarOptions(Oid regclass, ColumnarOptions *options)
* of columnar.chunk. * of columnar.chunk.
*/ */
void void
SaveStripeSkipList(RelFileNode relfilenode, uint64 stripe, StripeSkipList *chunkList, SaveStripeSkipList(RelFileLocator relFileLocator, uint64 stripe, StripeSkipList *chunkList,
TupleDesc tupleDescriptor) TupleDesc tupleDescriptor)
{ {
uint32 columnIndex = 0; uint32 columnIndex = 0;
uint32 chunkIndex = 0; uint32 chunkIndex = 0;
uint32 columnCount = chunkList->columnCount; uint32 columnCount = chunkList->columnCount;
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relFileLocator);
Oid columnarChunkOid = ColumnarChunkRelationId(); Oid columnarChunkOid = ColumnarChunkRelationId();
Relation columnarChunk = table_open(columnarChunkOid, RowExclusiveLock); Relation columnarChunk = table_open(columnarChunkOid, RowExclusiveLock);
ModifyState *modifyState = StartModifyRelation(columnarChunk); ModifyState *modifyState = StartModifyRelation(columnarChunk);
@ -657,10 +658,10 @@ SaveStripeSkipList(RelFileNode relfilenode, uint64 stripe, StripeSkipList *chunk
* SaveChunkGroups saves the metadata for given chunk groups in columnar.chunk_group. * SaveChunkGroups saves the metadata for given chunk groups in columnar.chunk_group.
*/ */
void void
SaveChunkGroups(RelFileNode relfilenode, uint64 stripe, SaveChunkGroups(RelFileLocator relFileLocator, uint64 stripe,
List *chunkGroupRowCounts) List *chunkGroupRowCounts)
{ {
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relFileLocator);
Oid columnarChunkGroupOid = ColumnarChunkGroupRelationId(); Oid columnarChunkGroupOid = ColumnarChunkGroupRelationId();
Relation columnarChunkGroup = table_open(columnarChunkGroupOid, RowExclusiveLock); Relation columnarChunkGroup = table_open(columnarChunkGroupOid, RowExclusiveLock);
ModifyState *modifyState = StartModifyRelation(columnarChunkGroup); ModifyState *modifyState = StartModifyRelation(columnarChunkGroup);
@ -693,7 +694,7 @@ SaveChunkGroups(RelFileNode relfilenode, uint64 stripe,
* ReadStripeSkipList fetches chunk metadata for a given stripe. * ReadStripeSkipList fetches chunk metadata for a given stripe.
*/ */
StripeSkipList * StripeSkipList *
ReadStripeSkipList(RelFileNode relfilenode, uint64 stripe, TupleDesc tupleDescriptor, ReadStripeSkipList(RelFileLocator relfilelocator, uint64 stripe, TupleDesc tupleDescriptor,
uint32 chunkCount, Snapshot snapshot) uint32 chunkCount, Snapshot snapshot)
{ {
int32 columnIndex = 0; int32 columnIndex = 0;
@ -701,7 +702,7 @@ ReadStripeSkipList(RelFileNode relfilenode, uint64 stripe, TupleDesc tupleDescri
uint32 columnCount = tupleDescriptor->natts; uint32 columnCount = tupleDescriptor->natts;
ScanKeyData scanKey[2]; ScanKeyData scanKey[2];
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relfilelocator);
Oid columnarChunkOid = ColumnarChunkRelationId(); Oid columnarChunkOid = ColumnarChunkRelationId();
Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock); Relation columnarChunk = table_open(columnarChunkOid, AccessShareLock);
@ -1239,9 +1240,9 @@ InsertEmptyStripeMetadataRow(uint64 storageId, uint64 stripeId, uint32 columnCou
* of the given relfilenode. * of the given relfilenode.
*/ */
List * List *
StripesForRelfilenode(RelFileNode relfilenode) StripesForRelfilenode(RelFileLocator relFileLocator)
{ {
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relFileLocator);
return ReadDataFileStripeList(storageId, GetTransactionSnapshot()); return ReadDataFileStripeList(storageId, GetTransactionSnapshot());
} }
@ -1256,9 +1257,9 @@ StripesForRelfilenode(RelFileNode relfilenode)
* returns 0. * returns 0.
*/ */
uint64 uint64
GetHighestUsedAddress(RelFileNode relfilenode) GetHighestUsedAddress(RelFileLocator relfilelocator)
{ {
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relfilelocator);
uint64 highestUsedAddress = 0; uint64 highestUsedAddress = 0;
uint64 highestUsedId = 0; uint64 highestUsedId = 0;
@ -1539,7 +1540,7 @@ BuildStripeMetadata(Relation columnarStripes, HeapTuple heapTuple)
* metadata tables. * metadata tables.
*/ */
void void
DeleteMetadataRows(RelFileNode relfilenode) DeleteMetadataRows(RelFileLocator relFileLocator)
{ {
/* /*
* During a restore for binary upgrade, metadata tables and indexes may or * During a restore for binary upgrade, metadata tables and indexes may or
@ -1550,7 +1551,7 @@ DeleteMetadataRows(RelFileNode relfilenode)
return; return;
} }
uint64 storageId = LookupStorageId(relfilenode); uint64 storageId = LookupStorageId(relFileLocator);
DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(), DeleteStorageFromColumnarMetadataTable(ColumnarStripeRelationId(),
Anum_columnar_stripe_storageid, Anum_columnar_stripe_storageid,
@ -1934,10 +1935,10 @@ ColumnarNamespaceId(void)
* false if the relation doesn't have a meta page yet. * false if the relation doesn't have a meta page yet.
*/ */
static uint64 static uint64
LookupStorageId(RelFileNode relfilenode) LookupStorageId(RelFileLocator relfilenode)
{ {
Oid relationId = RelidByRelfilenode(relfilenode.spcNode, Oid relationId = RelidByRelfilenumber(relfilenode.spcOid,
relfilenode.relNode); relfilenode.relNumber);
Relation relation = relation_open(relationId, AccessShareLock); Relation relation = relation_open(relationId, AccessShareLock);
uint64 storageId = ColumnarStorageGetStorageId(relation, false); uint64 storageId = ColumnarStorageGetStorageId(relation, false);

View File

@ -254,7 +254,7 @@ ColumnarReadFlushPendingWrites(ColumnarReadState *readState)
{ {
Assert(!readState->snapshotRegisteredByUs); Assert(!readState->snapshotRegisteredByUs);
Oid relfilenode = readState->relation->rd_node.relNode; Oid relfilenode = readState->relation->rd_locator.relNumber;
FlushWriteStateForRelfilenode(relfilenode, GetCurrentSubTransactionId()); FlushWriteStateForRelfilenode(relfilenode, GetCurrentSubTransactionId());
if (readState->snapshot == InvalidSnapshot || !IsMVCCSnapshot(readState->snapshot)) if (readState->snapshot == InvalidSnapshot || !IsMVCCSnapshot(readState->snapshot))
@ -984,7 +984,7 @@ ColumnarTableRowCount(Relation relation)
{ {
ListCell *stripeMetadataCell = NULL; ListCell *stripeMetadataCell = NULL;
uint64 totalRowCount = 0; uint64 totalRowCount = 0;
List *stripeList = StripesForRelfilenode(relation->rd_node); List *stripeList = StripesForRelfilenode(relation->rd_locator);
foreach(stripeMetadataCell, stripeList) foreach(stripeMetadataCell, stripeList)
{ {
@ -1012,7 +1012,7 @@ LoadFilteredStripeBuffers(Relation relation, StripeMetadata *stripeMetadata,
bool *projectedColumnMask = ProjectedColumnMask(columnCount, projectedColumnList); bool *projectedColumnMask = ProjectedColumnMask(columnCount, projectedColumnList);
StripeSkipList *stripeSkipList = ReadStripeSkipList(relation->rd_node, StripeSkipList *stripeSkipList = ReadStripeSkipList(relation->rd_locator,
stripeMetadata->id, stripeMetadata->id,
tupleDescriptor, tupleDescriptor,
stripeMetadata->chunkCount, stripeMetadata->chunkCount,

View File

@ -188,7 +188,7 @@ ColumnarStorageInit(SMgrRelation srel, uint64 storageId)
(char *) &metapage, sizeof(ColumnarMetapage)); (char *) &metapage, sizeof(ColumnarMetapage));
phdr->pd_lower += sizeof(ColumnarMetapage); phdr->pd_lower += sizeof(ColumnarMetapage);
log_newpage(&srel->smgr_rnode.node, MAIN_FORKNUM, log_newpage(&srel->smgr_rlocator.locator, MAIN_FORKNUM,
COLUMNAR_METAPAGE_BLOCKNO, page, true); COLUMNAR_METAPAGE_BLOCKNO, page, true);
PageSetChecksumInplace(page, COLUMNAR_METAPAGE_BLOCKNO); PageSetChecksumInplace(page, COLUMNAR_METAPAGE_BLOCKNO);
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_METAPAGE_BLOCKNO, page, true); smgrextend(srel, MAIN_FORKNUM, COLUMNAR_METAPAGE_BLOCKNO, page, true);
@ -196,7 +196,7 @@ ColumnarStorageInit(SMgrRelation srel, uint64 storageId)
/* write empty page */ /* write empty page */
PageInit(page, BLCKSZ, 0); PageInit(page, BLCKSZ, 0);
log_newpage(&srel->smgr_rnode.node, MAIN_FORKNUM, log_newpage(&srel->smgr_rlocator.locator, MAIN_FORKNUM,
COLUMNAR_EMPTY_BLOCKNO, page, true); COLUMNAR_EMPTY_BLOCKNO, page, true);
PageSetChecksumInplace(page, COLUMNAR_EMPTY_BLOCKNO); PageSetChecksumInplace(page, COLUMNAR_EMPTY_BLOCKNO);
smgrextend(srel, MAIN_FORKNUM, COLUMNAR_EMPTY_BLOCKNO, page, true); smgrextend(srel, MAIN_FORKNUM, COLUMNAR_EMPTY_BLOCKNO, page, true);

View File

@ -208,7 +208,7 @@ columnar_beginscan_extended(Relation relation, Snapshot snapshot,
uint32 flags, Bitmapset *attr_needed, List *scanQual) uint32 flags, Bitmapset *attr_needed, List *scanQual)
{ {
CheckCitusColumnarVersion(ERROR); CheckCitusColumnarVersion(ERROR);
Oid relfilenode = relation->rd_node.relNode; Oid relfilenode = relation->rd_locator.relNumber;
/* /*
* A memory context to use for scan-wide data, including the lazily * A memory context to use for scan-wide data, including the lazily
@ -434,7 +434,7 @@ columnar_index_fetch_begin(Relation rel)
{ {
CheckCitusColumnarVersion(ERROR); CheckCitusColumnarVersion(ERROR);
Oid relfilenode = rel->rd_node.relNode; Oid relfilenode = rel->rd_locator.relNumber;
if (PendingWritesInUpperTransactions(relfilenode, GetCurrentSubTransactionId())) if (PendingWritesInUpperTransactions(relfilenode, GetCurrentSubTransactionId()))
{ {
/* XXX: maybe we can just flush the data and continue */ /* XXX: maybe we can just flush the data and continue */
@ -857,8 +857,8 @@ columnar_finish_bulk_insert(Relation relation, int options)
static void static void
columnar_relation_set_new_filenode(Relation rel, columnar_relation_set_new_filelocator(Relation rel,
const RelFileNode *newrnode, const RelFileLocator *newlocator,
char persistence, char persistence,
TransactionId *freezeXid, TransactionId *freezeXid,
MultiXactId *minmulti) MultiXactId *minmulti)
@ -877,16 +877,16 @@ columnar_relation_set_new_filenode(Relation rel,
* state. If they are equal, this is a new relation object and we don't * state. If they are equal, this is a new relation object and we don't
* need to clean anything. * need to clean anything.
*/ */
if (rel->rd_node.relNode != newrnode->relNode) if (rel->rd_locator.relNumber != newlocator->relNumber)
{ {
MarkRelfilenodeDropped(rel->rd_node.relNode, GetCurrentSubTransactionId()); MarkRelfilenodeDropped(rel->rd_locator.relNumber, GetCurrentSubTransactionId());
DeleteMetadataRows(rel->rd_node); DeleteMetadataRows(rel->rd_locator);
} }
*freezeXid = RecentXmin; *freezeXid = RecentXmin;
*minmulti = GetOldestMultiXactId(); *minmulti = GetOldestMultiXactId();
SMgrRelation srel = RelationCreateStorage_compat(*newrnode, persistence, true); SMgrRelation srel = RelationCreateStorage_compat(*newlocator, persistence, true);
ColumnarStorageInit(srel, ColumnarMetadataNewStorageId()); ColumnarStorageInit(srel, ColumnarMetadataNewStorageId());
InitColumnarOptions(rel->rd_id); InitColumnarOptions(rel->rd_id);
@ -901,12 +901,12 @@ static void
columnar_relation_nontransactional_truncate(Relation rel) columnar_relation_nontransactional_truncate(Relation rel)
{ {
CheckCitusColumnarVersion(ERROR); CheckCitusColumnarVersion(ERROR);
RelFileNode relfilenode = rel->rd_node; RelFileLocator relFileLocator = rel->rd_locator;
NonTransactionDropWriteState(relfilenode.relNode); NonTransactionDropWriteState(relFileLocator.relNumber);
/* Delete old relfilenode metadata */ /* Delete old relfilenode metadata */
DeleteMetadataRows(relfilenode); DeleteMetadataRows(relFileLocator);
/* /*
* No need to set new relfilenode, since the table was created in this * No need to set new relfilenode, since the table was created in this
@ -923,7 +923,7 @@ columnar_relation_nontransactional_truncate(Relation rel)
static void static void
columnar_relation_copy_data(Relation rel, const RelFileNode *newrnode) columnar_relation_copy_data(Relation rel, const RelFileLocator *newrnode)
{ {
elog(ERROR, "columnar_relation_copy_data not implemented"); elog(ERROR, "columnar_relation_copy_data not implemented");
} }
@ -969,7 +969,7 @@ columnar_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap,
ColumnarOptions columnarOptions = { 0 }; ColumnarOptions columnarOptions = { 0 };
ReadColumnarOptions(OldHeap->rd_id, &columnarOptions); ReadColumnarOptions(OldHeap->rd_id, &columnarOptions);
ColumnarWriteState *writeState = ColumnarBeginWrite(NewHeap->rd_node, ColumnarWriteState *writeState = ColumnarBeginWrite(NewHeap->rd_locator,
columnarOptions, columnarOptions,
targetDesc); targetDesc);
@ -1044,7 +1044,7 @@ NeededColumnsList(TupleDesc tupdesc, Bitmapset *attr_needed)
static uint64 static uint64
ColumnarTableTupleCount(Relation relation) ColumnarTableTupleCount(Relation relation)
{ {
List *stripeList = StripesForRelfilenode(relation->rd_node); List *stripeList = StripesForRelfilenode(relation->rd_locator);
uint64 tupleCount = 0; uint64 tupleCount = 0;
ListCell *lc = NULL; ListCell *lc = NULL;
@ -1182,7 +1182,7 @@ static void
LogRelationStats(Relation rel, int elevel) LogRelationStats(Relation rel, int elevel)
{ {
ListCell *stripeMetadataCell = NULL; ListCell *stripeMetadataCell = NULL;
RelFileNode relfilenode = rel->rd_node; RelFileLocator relfilelocator = rel->rd_locator;
StringInfo infoBuf = makeStringInfo(); StringInfo infoBuf = makeStringInfo();
int compressionStats[COMPRESSION_COUNT] = { 0 }; int compressionStats[COMPRESSION_COUNT] = { 0 };
@ -1193,13 +1193,13 @@ LogRelationStats(Relation rel, int elevel)
uint64 droppedChunksWithData = 0; uint64 droppedChunksWithData = 0;
uint64 totalDecompressedLength = 0; uint64 totalDecompressedLength = 0;
List *stripeList = StripesForRelfilenode(relfilenode); List *stripeList = StripesForRelfilenode(relfilelocator);
int stripeCount = list_length(stripeList); int stripeCount = list_length(stripeList);
foreach(stripeMetadataCell, stripeList) foreach(stripeMetadataCell, stripeList)
{ {
StripeMetadata *stripe = lfirst(stripeMetadataCell); StripeMetadata *stripe = lfirst(stripeMetadataCell);
StripeSkipList *skiplist = ReadStripeSkipList(relfilenode, stripe->id, StripeSkipList *skiplist = ReadStripeSkipList(relfilelocator, stripe->id,
RelationGetDescr(rel), RelationGetDescr(rel),
stripe->chunkCount, stripe->chunkCount,
GetTransactionSnapshot()); GetTransactionSnapshot());
@ -1335,7 +1335,7 @@ TruncateColumnar(Relation rel, int elevel)
* new stripes be added beyond highestPhysicalAddress while * new stripes be added beyond highestPhysicalAddress while
* we're truncating. * we're truncating.
*/ */
uint64 newDataReservation = Max(GetHighestUsedAddress(rel->rd_node) + 1, uint64 newDataReservation = Max(GetHighestUsedAddress(rel->rd_locator) + 1,
ColumnarFirstLogicalOffset); ColumnarFirstLogicalOffset);
BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM); BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
@ -2085,12 +2085,12 @@ ColumnarTableDropHook(Oid relid)
* tableam tables storage is managed by postgres. * tableam tables storage is managed by postgres.
*/ */
Relation rel = table_open(relid, AccessExclusiveLock); Relation rel = table_open(relid, AccessExclusiveLock);
RelFileNode relfilenode = rel->rd_node; RelFileLocator relfilenode = rel->rd_locator;
DeleteMetadataRows(relfilenode); DeleteMetadataRows(relfilenode);
DeleteColumnarTableOptions(rel->rd_id, true); DeleteColumnarTableOptions(rel->rd_id, true);
MarkRelfilenodeDropped(relfilenode.relNode, GetCurrentSubTransactionId()); MarkRelfilenodeDropped(relfilenode.relNumber, GetCurrentSubTransactionId());
/* keep the lock since we did physical changes to the relation */ /* keep the lock since we did physical changes to the relation */
table_close(rel, NoLock); table_close(rel, NoLock);
@ -2515,7 +2515,7 @@ static const TableAmRoutine columnar_am_methods = {
.tuple_lock = columnar_tuple_lock, .tuple_lock = columnar_tuple_lock,
.finish_bulk_insert = columnar_finish_bulk_insert, .finish_bulk_insert = columnar_finish_bulk_insert,
.relation_set_new_filenode = columnar_relation_set_new_filenode, .relation_set_new_filelocator = columnar_relation_set_new_filelocator,
.relation_nontransactional_truncate = columnar_relation_nontransactional_truncate, .relation_nontransactional_truncate = columnar_relation_nontransactional_truncate,
.relation_copy_data = columnar_relation_copy_data, .relation_copy_data = columnar_relation_copy_data,
.relation_copy_for_cluster = columnar_relation_copy_for_cluster, .relation_copy_for_cluster = columnar_relation_copy_for_cluster,

View File

@ -37,7 +37,7 @@ struct ColumnarWriteState
{ {
TupleDesc tupleDescriptor; TupleDesc tupleDescriptor;
FmgrInfo **comparisonFunctionArray; FmgrInfo **comparisonFunctionArray;
RelFileNode relfilenode; RelFileLocator relfilelocator;
MemoryContext stripeWriteContext; MemoryContext stripeWriteContext;
MemoryContext perTupleContext; MemoryContext perTupleContext;
@ -84,7 +84,7 @@ static StringInfo CopyStringInfo(StringInfo sourceString);
* data load operation. * data load operation.
*/ */
ColumnarWriteState * ColumnarWriteState *
ColumnarBeginWrite(RelFileNode relfilenode, ColumnarBeginWrite(RelFileLocator relFileLocator,
ColumnarOptions options, ColumnarOptions options,
TupleDesc tupleDescriptor) TupleDesc tupleDescriptor)
{ {
@ -124,7 +124,7 @@ ColumnarBeginWrite(RelFileNode relfilenode,
options.chunkRowCount); options.chunkRowCount);
ColumnarWriteState *writeState = palloc0(sizeof(ColumnarWriteState)); ColumnarWriteState *writeState = palloc0(sizeof(ColumnarWriteState));
writeState->relfilenode = relfilenode; writeState->relfilelocator = relFileLocator;
writeState->options = options; writeState->options = options;
writeState->tupleDescriptor = CreateTupleDescCopy(tupleDescriptor); writeState->tupleDescriptor = CreateTupleDescCopy(tupleDescriptor);
writeState->comparisonFunctionArray = comparisonFunctionArray; writeState->comparisonFunctionArray = comparisonFunctionArray;
@ -174,8 +174,8 @@ ColumnarWriteRow(ColumnarWriteState *writeState, Datum *columnValues, bool *colu
writeState->stripeSkipList = stripeSkipList; writeState->stripeSkipList = stripeSkipList;
writeState->compressionBuffer = makeStringInfo(); writeState->compressionBuffer = makeStringInfo();
Oid relationId = RelidByRelfilenode(writeState->relfilenode.spcNode, Oid relationId = RelidByRelfilenode(writeState->relfilelocator.spcOid,
writeState->relfilenode.relNode); writeState->relfilelocator.relNumber);
Relation relation = relation_open(relationId, NoLock); Relation relation = relation_open(relationId, NoLock);
writeState->emptyStripeReservation = writeState->emptyStripeReservation =
ReserveEmptyStripe(relation, columnCount, chunkRowCount, ReserveEmptyStripe(relation, columnCount, chunkRowCount,
@ -393,8 +393,8 @@ FlushStripe(ColumnarWriteState *writeState)
elog(DEBUG1, "Flushing Stripe of size %d", stripeBuffers->rowCount); elog(DEBUG1, "Flushing Stripe of size %d", stripeBuffers->rowCount);
Oid relationId = RelidByRelfilenode(writeState->relfilenode.spcNode, Oid relationId = RelidByRelfilenode(writeState->relfilelocator.spcNode,
writeState->relfilenode.relNode); writeState->relfilelocator.relNode);
Relation relation = relation_open(relationId, NoLock); Relation relation = relation_open(relationId, NoLock);
/* /*
@ -486,10 +486,10 @@ FlushStripe(ColumnarWriteState *writeState)
} }
} }
SaveChunkGroups(writeState->relfilenode, SaveChunkGroups(writeState->relfilelocator,
stripeMetadata->id, stripeMetadata->id,
writeState->chunkGroupRowCounts); writeState->chunkGroupRowCounts);
SaveStripeSkipList(writeState->relfilenode, SaveStripeSkipList(writeState->relfilelocator,
stripeMetadata->id, stripeMetadata->id,
stripeSkipList, tupleDescriptor); stripeSkipList, tupleDescriptor);

View File

@ -146,7 +146,7 @@ columnar_init_write_state(Relation relation, TupleDesc tupdesc,
MemoryContextRegisterResetCallback(WriteStateContext, &cleanupCallback); MemoryContextRegisterResetCallback(WriteStateContext, &cleanupCallback);
} }
WriteStateMapEntry *hashEntry = hash_search(WriteStateMap, &relation->rd_node.relNode, WriteStateMapEntry *hashEntry = hash_search(WriteStateMap, &relation->rd_locator.relNumber,
HASH_ENTER, &found); HASH_ENTER, &found);
if (!found) if (!found)
{ {
@ -189,7 +189,7 @@ columnar_init_write_state(Relation relation, TupleDesc tupdesc,
ReadColumnarOptions(tupSlotRelationId, &columnarOptions); ReadColumnarOptions(tupSlotRelationId, &columnarOptions);
SubXidWriteState *stackEntry = palloc0(sizeof(SubXidWriteState)); SubXidWriteState *stackEntry = palloc0(sizeof(SubXidWriteState));
stackEntry->writeState = ColumnarBeginWrite(relation->rd_node, stackEntry->writeState = ColumnarBeginWrite(relation->rd_locator,
columnarOptions, columnarOptions,
tupdesc); tupdesc);
stackEntry->subXid = currentSubXid; stackEntry->subXid = currentSubXid;

View File

@ -18,7 +18,7 @@
#include "nodes/parsenodes.h" #include "nodes/parsenodes.h"
#include "storage/bufpage.h" #include "storage/bufpage.h"
#include "storage/lockdefs.h" #include "storage/lockdefs.h"
#include "storage/relfilenode.h" #include "storage/relfilelocator.h"
#include "utils/relcache.h" #include "utils/relcache.h"
#include "utils/snapmgr.h" #include "utils/snapmgr.h"
@ -224,7 +224,7 @@ extern void columnar_init_gucs(void);
extern CompressionType ParseCompressionType(const char *compressionTypeString); extern CompressionType ParseCompressionType(const char *compressionTypeString);
/* Function declarations for writing to a columnar table */ /* Function declarations for writing to a columnar table */
extern ColumnarWriteState * ColumnarBeginWrite(RelFileNode relfilenode, extern ColumnarWriteState * ColumnarBeginWrite(RelFileLocator relfilenode,
ColumnarOptions options, ColumnarOptions options,
TupleDesc tupleDescriptor); TupleDesc tupleDescriptor);
extern uint64 ColumnarWriteRow(ColumnarWriteState *state, Datum *columnValues, extern uint64 ColumnarWriteRow(ColumnarWriteState *state, Datum *columnValues,
@ -279,21 +279,21 @@ extern bool ReadColumnarOptions(Oid regclass, ColumnarOptions *options);
extern bool IsColumnarTableAmTable(Oid relationId); extern bool IsColumnarTableAmTable(Oid relationId);
/* columnar_metadata_tables.c */ /* columnar_metadata_tables.c */
extern void DeleteMetadataRows(RelFileNode relfilenode); extern void DeleteMetadataRows(RelFileLocator relFileLocator);
extern uint64 ColumnarMetadataNewStorageId(void); extern uint64 ColumnarMetadataNewStorageId(void);
extern uint64 GetHighestUsedAddress(RelFileNode relfilenode); extern uint64 GetHighestUsedAddress(RelFileLocator relFileLocator);
extern EmptyStripeReservation * ReserveEmptyStripe(Relation rel, uint64 columnCount, extern EmptyStripeReservation * ReserveEmptyStripe(Relation rel, uint64 columnCount,
uint64 chunkGroupRowCount, uint64 chunkGroupRowCount,
uint64 stripeRowCount); uint64 stripeRowCount);
extern StripeMetadata * CompleteStripeReservation(Relation rel, uint64 stripeId, extern StripeMetadata * CompleteStripeReservation(Relation rel, uint64 stripeId,
uint64 sizeBytes, uint64 rowCount, uint64 sizeBytes, uint64 rowCount,
uint64 chunkCount); uint64 chunkCount);
extern void SaveStripeSkipList(RelFileNode relfilenode, uint64 stripe, extern void SaveStripeSkipList(RelFileLocator relFileLocator, uint64 stripe,
StripeSkipList *stripeSkipList, StripeSkipList *stripeSkipList,
TupleDesc tupleDescriptor); TupleDesc tupleDescriptor);
extern void SaveChunkGroups(RelFileNode relfilenode, uint64 stripe, extern void SaveChunkGroups(RelFileLocator relFileLocator, uint64 stripe,
List *chunkGroupRowCounts); List *chunkGroupRowCounts);
extern StripeSkipList * ReadStripeSkipList(RelFileNode relfilenode, uint64 stripe, extern StripeSkipList * ReadStripeSkipList(RelFileLocator relFileLocator, uint64 stripe,
TupleDesc tupleDescriptor, TupleDesc tupleDescriptor,
uint32 chunkCount, uint32 chunkCount,
Snapshot snapshot); Snapshot snapshot);

View File

@ -49,7 +49,7 @@ typedef struct EmptyStripeReservation
uint64 stripeFirstRowNumber; uint64 stripeFirstRowNumber;
} EmptyStripeReservation; } EmptyStripeReservation;
extern List * StripesForRelfilenode(RelFileNode relfilenode); extern List * StripesForRelfilenode(RelFileLocator relfilelocator);
extern void ColumnarStorageUpdateIfNeeded(Relation rel, bool isUpgrade); extern void ColumnarStorageUpdateIfNeeded(Relation rel, bool isUpgrade);
extern List * ExtractColumnarRelOptions(List *inOptions, List **outColumnarOptions); extern List * ExtractColumnarRelOptions(List *inOptions, List **outColumnarOptions);
extern void SetColumnarRelOptions(RangeVar *rv, List *reloptions); extern void SetColumnarRelOptions(RangeVar *rv, List *reloptions);