Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 1 addition & 14 deletions columnar/src/backend/columnar/columnar_metadata.c
Original file line number Diff line number Diff line change
Expand Up @@ -2552,20 +2552,7 @@ ColumnarStorageUpdateIfNeeded(Relation rel, bool isUpgrade)
return;
}

/*
* RelationGetSmgr was added in 15, but only backported to 13.10 and 14.07
* leaving other versions requiring something like this.
*/
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

BlockNumber nblocks = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
BlockNumber nblocks = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
if (nblocks < 2)
{
ColumnarStorageInit(rel->rd_smgr, ColumnarMetadataNewStorageId());
Expand Down
60 changes: 20 additions & 40 deletions columnar/src/backend/columnar/columnar_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,24 +363,31 @@ ColumnarStorageGetReservedOffset(Relation rel, bool force)
return metapage.reservedOffset;
}


/*
* ColumnarStorageIsCurrent - return true if metapage exists and is not
* the current version.
* RelationGetSmgr got backported in 13.10 and 14.7 so redefining it for any
* version higher causes compilation errors due to redefining of the function.
* We want to use it in all versions. So we backport it ourselves in earlier
* versions, and rely on the Postgres provided version in the later versions.
*/
bool
ColumnarStorageIsCurrent(Relation rel)
#if PG_VERSION_NUM < 140007
inline SMgrRelation RelationGetSmgr(Relation rel)
{
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}
return rel->rd_smgr;
}
#endif

BlockNumber nblocks = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
/*
* ColumnarStorageIsCurrent - return true if metapage exists and is not
* the current version.
*/
bool
ColumnarStorageIsCurrent(Relation rel)
{
BlockNumber nblocks = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);

if (nblocks < 2)
{
Expand Down Expand Up @@ -464,16 +471,7 @@ ColumnarStorageReserveData(Relation rel, uint64 amount)
PhysicalAddr final = LogicalToPhysical(nextReservation - 1);

/* extend with new pages */
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

BlockNumber nblocks = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
BlockNumber nblocks = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);

while (nblocks <= final.blockno)
{
Expand Down Expand Up @@ -580,16 +578,7 @@ ColumnarStorageTruncate(Relation rel, uint64 newDataReservation)
rel->rd_id, newDataReservation);
}

if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

BlockNumber old_rel_pages = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
if (old_rel_pages == 0)
{
/* nothing to do */
Expand Down Expand Up @@ -668,16 +657,7 @@ ColumnarOverwriteMetapage(Relation relation, ColumnarMetapage columnarMetapage)
static ColumnarMetapage
ColumnarMetapageRead(Relation rel, bool force)
{
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

BlockNumber nblocks = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
BlockNumber nblocks = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
if (nblocks == 0)
{
/*
Expand Down
56 changes: 6 additions & 50 deletions columnar/src/backend/columnar/columnar_tableam.c
Original file line number Diff line number Diff line change
Expand Up @@ -1285,16 +1285,7 @@ columnar_relation_nontransactional_truncate(Relation rel)

uint64 storageId = ColumnarMetadataNewStorageId();

if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

ColumnarStorageInit(rel->rd_smgr, storageId);
ColumnarStorageInit(RelationGetSmgr(rel), storageId);
}


Expand Down Expand Up @@ -1864,16 +1855,7 @@ LogRelationStats(Relation rel, int elevel)

MemoryContextSwitchTo(oldcontext);

if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

uint64 relPages = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
uint64 relPages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
RelationCloseSmgr(rel);

Datum storageId = DirectFunctionCall1(columnar_relation_storageid,
Expand Down Expand Up @@ -1989,16 +1971,8 @@ TruncateColumnar(Relation rel, int elevel)
uint64 newDataReservation = Max(GetHighestUsedAddress(rel->rd_node) + 1,
ColumnarFirstLogicalOffset);
#endif
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

BlockNumber old_rel_pages = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
BlockNumber old_rel_pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);

if (!ColumnarStorageTruncate(rel, newDataReservation))
{
Expand Down Expand Up @@ -2553,26 +2527,17 @@ columnar_relation_size(Relation rel, ForkNumber forkNumber)
{
uint64 nblocks = 0;

if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

/* InvalidForkNumber indicates returning the size for all forks */
if (forkNumber == InvalidForkNumber)
{
for (int i = 0; i < MAX_FORKNUM; i++)
{
nblocks += smgrnblocks(rel->rd_smgr, i);
nblocks += smgrnblocks(RelationGetSmgr(rel), i);
}
}
else
{
nblocks = smgrnblocks(rel->rd_smgr, forkNumber);
nblocks = smgrnblocks(RelationGetSmgr(rel), forkNumber);
}

return nblocks * BLCKSZ;
Expand All @@ -2591,16 +2556,7 @@ columnar_estimate_rel_size(Relation rel, int32 *attr_widths,
BlockNumber *pages, double *tuples,
double *allvisfrac)
{
if (unlikely(rel->rd_smgr == NULL))
{
#if PG_VERSION_NUM >= PG_VERSION_16
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
#else
smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
#endif
}

*pages = smgrnblocks(rel->rd_smgr, MAIN_FORKNUM);
*pages = smgrnblocks(RelationGetSmgr(rel), MAIN_FORKNUM);
*tuples = ColumnarTableRowCount(rel);

/*
Expand Down
4 changes: 4 additions & 0 deletions columnar/src/include/columnar/columnar_storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,8 @@ extern void ColumnarStorageWrite(Relation rel, uint64 logicalOffset,
char *data, uint32 amount);
extern bool ColumnarStorageTruncate(Relation rel, uint64 newDataReservation);

#if PG_VERSION_NUM < 140007
inline SMgrRelation RelationGetSmgr(Relation rel);
#endif

#endif /* COLUMNAR_STORAGE_H */