This is an automated email from the ASF dual-hosted git repository.

chenjinbao1989 pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/cbdb-postgres-merge by this 
push:
     new 4f6311a1887 Fix compile errors for appendonly
4f6311a1887 is described below

commit 4f6311a188772550985331cd5e1791d601e11ca8
Author: Jinbao Chen <[email protected]>
AuthorDate: Mon Sep 29 11:08:14 2025 +0800

    Fix compile errors for appendonly
---
 src/backend/access/appendonly/aomd.c               | 45 ++++++++++------------
 src/backend/access/appendonly/aosegfiles.c         | 23 +++++------
 .../access/appendonly/appendonly_compaction.c      | 14 +++----
 src/backend/access/appendonly/appendonlyam.c       | 26 ++++++-------
 .../access/appendonly/appendonlyam_handler.c       | 20 +++++-----
 src/backend/access/appendonly/appendonlywriter.c   |  9 ++---
 src/backend/catalog/catalog.c                      |  4 +-
 src/backend/cdb/cdbappendonlystorageread.c         |  2 +-
 src/backend/cdb/cdbappendonlystoragewrite.c        |  4 +-
 src/backend/cdb/cdbappendonlyxlog.c                |  2 +-
 src/backend/cdb/cdbbufferedread.c                  |  2 +-
 src/backend/storage/smgr/md.c                      |  2 +-
 src/backend/storage/smgr/smgr.c                    |  2 +-
 src/include/access/aomd.h                          |  4 +-
 src/include/catalog/catalog.h                      |  5 ++-
 src/include/catalog/pg_attribute_encoding.h        |  3 +-
 src/include/cdb/cdbappendonlystorageread.h         |  2 +-
 src/include/cdb/cdbappendonlystoragewrite.h        |  4 +-
 src/include/cdb/cdbappendonlyxlog.h                |  6 +--
 src/include/cdb/cdbbufferedread.h                  |  4 +-
 src/include/common/relpath.h                       |  2 +-
 src/include/storage/md.h                           |  2 +-
 src/include/storage/smgr.h                         |  2 +-
 src/include/storage/sync.h                         |  2 +-
 24 files changed, 89 insertions(+), 102 deletions(-)

diff --git a/src/backend/access/appendonly/aomd.c 
b/src/backend/access/appendonly/aomd.c
index 342e7771b7b..0ce46426c58 100644
--- a/src/backend/access/appendonly/aomd.c
+++ b/src/backend/access/appendonly/aomd.c
@@ -62,7 +62,7 @@ AOSegmentFilePathNameLen(Relation rel)
        int             len;
                
        /* Get base path for this relation file */
-       basepath = relpathbackend(rel->rd_node, rel->rd_backend, MAIN_FORKNUM);
+       basepath = relpathbackend(rel->rd_locator, rel->rd_backend, 
MAIN_FORKNUM);
 
        /*
         * The basepath will be the RelFileNode number.  Optional part is dot 
"." plus 
@@ -133,7 +133,7 @@ MakeAOSegmentFileName(Relation rel,
        int32   fileSegNoLocal;
 
        /* Get base path for this relation file */
-       basepath = relpathbackend(rel->rd_node, rel->rd_backend, MAIN_FORKNUM);
+       basepath = relpathbackend(rel->rd_locator, rel->rd_backend, 
MAIN_FORKNUM);
 
        FormatAOSegmentFileName(basepath, segno, filenum, &fileSegNoLocal, 
filepathname);
        
@@ -158,9 +158,7 @@ OpenAOSegmentFile(Relation rel,
 
        errno = 0;
 
-       RelationOpenSmgr(rel);
-
-       fd = 
rel->rd_smgr->smgr_ao->smgr_AORelOpenSegFile(RelationGetRelid(rel), 
filepathname, fileFlags);
+       fd = 
RelationGetSmgr(rel)->smgr_ao->smgr_AORelOpenSegFile(RelationGetRelid(rel), 
filepathname, fileFlags);
        if (fd < 0)
        {
                if (logicalEof == 0 && errno == ENOENT)
@@ -183,9 +181,8 @@ void
 CloseAOSegmentFile(File fd, Relation rel)
 {
        Assert(fd > 0);
-       RelationOpenSmgr(rel);
 
-       rel->rd_smgr->smgr_ao->smgr_FileClose(fd);
+       RelationGetSmgr(rel)->smgr_ao->smgr_FileClose(fd);
 }
 
 /*
@@ -200,9 +197,7 @@ TruncateAOSegmentFile(File fd, Relation rel, int32 
segFileNum, int64 offset, AOV
        Assert(fd > 0);
        Assert(offset >= 0);
 
-       RelationOpenSmgr(rel);
-
-       filesize_before = rel->rd_smgr->smgr_ao->smgr_FileSize(fd);
+       filesize_before = RelationGetSmgr(rel)->smgr_ao->smgr_FileSize(fd);
        if (filesize_before < offset)
                ereport(ERROR,
                                (errmsg("\"%s\": file size smaller than logical 
eof: %m",
@@ -225,14 +220,14 @@ TruncateAOSegmentFile(File fd, Relation rel, int32 
segFileNum, int64 offset, AOV
        }
 
        if (XLogIsNeeded() && RelationNeedsWAL(rel))
-               xlog_ao_truncate(rel->rd_node, segFileNum, offset);
+               xlog_ao_truncate(rel->rd_locator, segFileNum, offset);
 
        SIMPLE_FAULT_INJECTOR("appendonly_after_truncate_segment_file");
 
        if (file_truncate_hook)
        {
-               RelFileNodeBackend rnode;
-               rnode.node = rel->rd_node;
+               RelFileLocatorBackend rnode;
+               rnode.locator = rel->rd_locator;
                rnode.backend = rel->rd_backend;
                (*file_truncate_hook)(rnode);
        }
@@ -240,7 +235,7 @@ TruncateAOSegmentFile(File fd, Relation rel, int32 
segFileNum, int64 offset, AOV
 
 struct mdunlink_ao_callback_ctx
 {
-       RelFileNode rnode; /* used to register forget request */
+       RelFileLocator rnode; /* used to register forget request */
        char *segPath;
        char *segpathSuffixPosition;
        bool isRedo;
@@ -254,7 +249,7 @@ struct truncate_ao_callback_ctx
 };
 
 void
-mdunlink_ao(RelFileNodeBackend rnode, ForkNumber forkNumber, bool isRedo)
+mdunlink_ao(RelFileLocatorBackend rnode, ForkNumber forkNumber, bool isRedo)
 {
        const char *path = relpath(rnode, forkNumber);
 
@@ -280,7 +275,7 @@ mdunlink_ao(RelFileNodeBackend rnode, ForkNumber 
forkNumber, bool isRedo)
                char *segPathSuffixPosition = segPath + pathSize;
                struct mdunlink_ao_callback_ctx unlinkFiles;
                unlinkFiles.isRedo = isRedo;
-               unlinkFiles.rnode = rnode.node;
+               unlinkFiles.rnode = rnode.locator;
 
                strncpy(segPath, path, pathSize);
 
@@ -397,7 +392,7 @@ mdunlink_ao_perFile(const int segno, void *ctx)
 
 static void
 copy_file(char *srcsegpath, char *dstsegpath,
-                 RelFileNode dst, SMgrRelation srcSMGR, SMgrRelation dstSMGR,
+                 RelFileLocator dst, SMgrRelation srcSMGR, SMgrRelation 
dstSMGR,
                  int segfilenum, bool use_wal)
 {
        File            srcFile;
@@ -475,8 +470,8 @@ struct copy_append_only_data_callback_ctx {
        char *dstPath;
        SMgrRelation srcSMGR;
        SMgrRelation dstSMGR;
-       RelFileNode src;
-       RelFileNode dst;
+       RelFileLocator src;
+       RelFileLocator dst;
        bool useWal;
 };
 
@@ -485,7 +480,7 @@ struct copy_append_only_data_callback_ctx {
  *
  */
 void
-copy_append_only_data(RelFileNode src, RelFileNode dst,
+copy_append_only_data(RelFileLocator src, RelFileLocator dst,
                SMgrRelation srcSMGR, SMgrRelation dstSMGR,
         BackendId backendid, char relpersistence)
 {
@@ -516,8 +511,8 @@ copy_append_only_data(RelFileNode src, RelFileNode dst,
 
        if (file_extend_hook)
        {
-               RelFileNodeBackend rnode;
-               rnode.node = dst;
+               RelFileLocatorBackend rnode;
+               rnode.locator = dst;
                rnode.backend = backendid;
                (*file_extend_hook)(rnode);
        }
@@ -562,7 +557,7 @@ ao_truncate_one_rel(Relation rel)
        int pathSize;
 
        /* Get base path for this relation file */
-       basepath = relpathbackend(rel->rd_node, rel->rd_backend, MAIN_FORKNUM);
+       basepath = relpathbackend(rel->rd_locator, rel->rd_backend, 
MAIN_FORKNUM);
 
        pathSize = strlen(basepath);
        segPath = (char *) palloc(pathSize + SEGNO_SUFFIX_LENGTH);
@@ -710,7 +705,7 @@ ao_segfile_get_physical_size(Relation aorel, int segno, 
FileNumber filenum)
                   "Opening append-optimized relation \"%s\", relation id %u, 
relfilenode %u filenum #%d, logical segment #%d (physical segment file #%d)",
                   relname,
                   aorel->rd_id,
-                  aorel->rd_node.relNode,
+                  aorel->rd_locator.relNumber,
                   filenum,
                   segno,
                   fileSegNo);
@@ -722,7 +717,7 @@ ao_segfile_get_physical_size(Relation aorel, int segno, 
FileNumber filenum)
                           "No gp_relation_node entry for append-optimized 
relation \"%s\", relation id %u, relfilenode %u filenum #%d, logical segment 
#%d (physical segment file #%d)",
                           relname,
                           aorel->rd_id,
-                          aorel->rd_node.relNode,
+                          aorel->rd_locator.relNumber,
                           filenum,
                           segno,
                           fileSegNo);
diff --git a/src/backend/access/appendonly/aosegfiles.c 
b/src/backend/access/appendonly/aosegfiles.c
index f2997eb2044..7accab16ecf 100644
--- a/src/backend/access/appendonly/aosegfiles.c
+++ b/src/backend/access/appendonly/aosegfiles.c
@@ -47,7 +47,6 @@
 #include "utils/builtins.h"
 #include "utils/faultinjector.h"
 #include "utils/guc.h"
-#include "utils/int8.h"
 #include "utils/lsyscache.h"
 #include "utils/snapmgr.h"
 #include "utils/syscache.h"
@@ -621,6 +620,7 @@ ClearFileSegInfo(Relation parentrel, int segno)
        bool       *new_record_repl;
        bool            isNull;
        Oid segrelid;
+       TU_UpdateIndexes updateIndexes = TU_All;
 
        GetAppendOnlyEntryAuxOids(parentrel, &segrelid, NULL, NULL, NULL, NULL);
 
@@ -677,7 +677,7 @@ ClearFileSegInfo(Relation parentrel, int segno)
        new_tuple = heap_modify_tuple(tuple, pg_aoseg_dsc, new_record,
                                                                  
new_record_nulls, new_record_repl);
 
-       simple_heap_update(pg_aoseg_rel, &tuple->t_self, new_tuple);
+       simple_heap_update(pg_aoseg_rel, &tuple->t_self, new_tuple, 
&updateIndexes);
        heap_freetuple(new_tuple);
 
        table_endscan(aoscan);
@@ -757,6 +757,7 @@ UpdateFileSegInfo_internal(Relation parentrel,
        bool       *new_record_repl;
        bool            isNull;
        Oid segrelid;
+       TU_UpdateIndexes updateIndexes = TU_All;
 
        Assert(RelationStorageIsAoRows(parentrel));
        GetAppendOnlyEntryAuxOids(parentrel, &segrelid, NULL, NULL, NULL, NULL);
@@ -828,7 +829,7 @@ UpdateFileSegInfo_internal(Relation parentrel,
        {
                elog(ERROR, "Unexpected compressed EOF for relation %s, 
relfilenode %u, segment file %d. "
                         "EOF " INT64_FORMAT " to be updated cannot be smaller 
than current EOF " INT64_FORMAT " in pg_aoseg",
-                        RelationGetRelationName(parentrel), 
parentrel->rd_node.relNode,
+                        RelationGetRelationName(parentrel), 
parentrel->rd_locator.relNumber,
                         segno, eof, old_eof);
        }
 
@@ -849,7 +850,7 @@ UpdateFileSegInfo_internal(Relation parentrel,
        {
                elog(ERROR, "Unexpected EOF for relation %s, relfilenode %u, 
segment file %d."
                         "EOF " INT64_FORMAT " to be updated cannot be smaller 
than current EOF " INT64_FORMAT " in pg_aoseg",
-                        RelationGetRelationName(parentrel), 
parentrel->rd_node.relNode,
+                        RelationGetRelationName(parentrel), 
parentrel->rd_locator.relNumber,
                         segno, eof_uncompressed, old_eof_uncompressed);
        }
 
@@ -925,7 +926,7 @@ UpdateFileSegInfo_internal(Relation parentrel,
        new_tuple = heap_modify_tuple(tuple, pg_aoseg_dsc, new_record,
                                                                  
new_record_nulls, new_record_repl);
 
-       simple_heap_update(pg_aoseg_rel, &tuple->t_self, new_tuple);
+       simple_heap_update(pg_aoseg_rel, &tuple->t_self, new_tuple, 
&updateIndexes);
 
        heap_freetuple(new_tuple);
 
@@ -1635,10 +1636,10 @@ aorow_compression_ratio_internal(Relation parentrel)
                        {
                                compress_ratio = 1;
                        }
-                       else if (scanint8(attr1, true, &eof) &&
-                                        scanint8(attr2, true, &eof_uncomp))
+                       else
                        {
-                               /* guard against division by zero */
+                               eof = pg_strtoint64(attr1);
+                               eof_uncomp = pg_strtoint64(attr2);
                                if (eof > 0)
                                {
                                        /* calculate the compression ratio */
@@ -1648,12 +1649,6 @@ aorow_compression_ratio_internal(Relation parentrel)
                                        compress_ratio = round(compress_ratio * 
100.0) / 100.0;
                                }
                        }
-                       else
-                       {
-                               ereport(ERROR,
-                                               
(errcode(ERRCODE_INTERNAL_ERROR),
-                                               errmsg("unable to parse aorow 
compress_ratio string to int8.")));
-                       }
                }
 
                connected = false;
diff --git a/src/backend/access/appendonly/appendonly_compaction.c 
b/src/backend/access/appendonly/appendonly_compaction.c
index 05b2143b246..b8cae6ebf6c 100644
--- a/src/backend/access/appendonly/appendonly_compaction.c
+++ b/src/backend/access/appendonly/appendonly_compaction.c
@@ -252,7 +252,7 @@ AppendOnlySegmentFileTruncateToEOF(Relation aorel, int 
segno, int64 segeof, AOVa
                   get_namespace_name(RelationGetNamespace(aorel)),
                   relname,
                   aorel->rd_id,
-                  aorel->rd_node.relNode,
+                  aorel->rd_locator.relNumber,
                   segno,
                   segeof);
 
@@ -267,7 +267,7 @@ AppendOnlySegmentFileTruncateToEOF(Relation aorel, int 
segno, int64 segeof, AOVa
                           get_namespace_name(RelationGetNamespace(aorel)),
                           relname,
                           aorel->rd_id,
-                          aorel->rd_node.relNode,
+                          aorel->rd_locator.relNumber,
                           segno,
                           segeof);
        }
@@ -278,7 +278,7 @@ AppendOnlySegmentFileTruncateToEOF(Relation aorel, int 
segno, int64 segeof, AOVa
                           get_namespace_name(RelationGetNamespace(aorel)),
                           relname,
                           aorel->rd_id,
-                          aorel->rd_node.relNode,
+                          aorel->rd_locator.relNumber,
                           segno,
                           segeof);
        }
@@ -315,7 +315,7 @@ AppendOnlyMoveTuple(TupleTableSlot *slot,
        {
                ExecInsertIndexTuples(resultRelInfo,
                                                                                
                        slot, estate, false, false,
-                                                                               
                        NULL, NIL);
+                                                                               
                        NULL, NIL, false);
                ResetPerTupleExprContext(estate);
        }
 
@@ -362,7 +362,7 @@ AppendOnlyThrowAwayTuple(Relation rel, TupleTableSlot 
*slot, MemTupleBinding *mt
 
                        if (toast_isnull[i])
                                continue;
-                       else if 
(VARATT_IS_EXTERNAL_ONDISK(PointerGetDatum(value)))
+                       else if (VARATT_IS_EXTERNAL_ONDISK(value))
                                toast_delete_datum(rel, value, false);
                }
        }
@@ -727,7 +727,7 @@ AppendOptimizedTruncateToEOF(Relation aorel, 
AOVacuumRelStats *vacrelstats)
         * The algorithm below for choosing a target segment is not 
concurrent-safe.
         * Grab a lock to serialize.
         */
-       LockDatabaseObject(aorel->rd_node.dbNode, (Oid)aorel->rd_node.relNode, 
0, ExclusiveLock);
+       LockDatabaseObject(aorel->rd_locator.dbOid, 
(Oid)aorel->rd_locator.relNumber, 0, ExclusiveLock);
 
        GetAppendOnlyEntryAuxOids(aorel,
                                                          &segrelid, NULL, 
NULL, NULL, NULL);
@@ -787,7 +787,7 @@ AppendOptimizedTruncateToEOF(Relation aorel, 
AOVacuumRelStats *vacrelstats)
                }
        }
        systable_endscan(aoscan);
-       UnlockDatabaseObject(aorel->rd_node.dbNode, 
(Oid)aorel->rd_node.relNode, 0, ExclusiveLock);
+       UnlockDatabaseObject(aorel->rd_locator.dbOid, 
(Oid)aorel->rd_locator.relNumber, 0, ExclusiveLock);
        heap_close(pg_aoseg_rel, AccessShareLock);
        UnregisterSnapshot(appendOnlyMetaDataSnapshot);
 }
diff --git a/src/backend/access/appendonly/appendonlyam.c 
b/src/backend/access/appendonly/appendonlyam.c
index 2f590a8678e..f541aee4dec 100755
--- a/src/backend/access/appendonly/appendonlyam.c
+++ b/src/backend/access/appendonly/appendonlyam.c
@@ -166,7 +166,6 @@ SetNextFileSegForRead(AppendOnlyScanDesc scan)
        if (!scan->initedStorageRoutines)
        {
                PGFunction *fns = NULL;
-               RelationOpenSmgr(reln);
 
                AppendOnlyStorageRead_Init(
                                                                   
&scan->storageRead,
@@ -176,7 +175,8 @@ SetNextFileSegForRead(AppendOnlyScanDesc scan)
                                                                   
RelationGetRelid(scan->aos_rd),
                                                                   scan->title,
                                                                   
&scan->storageAttributes,
-                                                                  
&scan->aos_rd->rd_node, reln->rd_smgr->smgr_ao);
+                                                                  
&scan->aos_rd->rd_locator,
+                                                                  
RelationGetSmgr(reln)->smgr_ao);
 
                /*
                 * There is no guarantee that the current memory context will be
@@ -313,9 +313,9 @@ SetNextFileSegForRead(AppendOnlyScanDesc scan)
                   "Append-only scan initialize for table '%s', %u/%u/%u, 
segment file %u, EOF " INT64_FORMAT ", "
                   "(compression = %s, usable blocksize %d)",
                   NameStr(scan->aos_rd->rd_rel->relname),
-                  scan->aos_rd->rd_node.spcNode,
-                  scan->aos_rd->rd_node.dbNode,
-                  scan->aos_rd->rd_node.relNode,
+                  scan->aos_rd->rd_locator.spcOid,
+                  scan->aos_rd->rd_locator.dbOid,
+                  scan->aos_rd->rd_locator.relNumber,
                   segno,
                   eof,
                   (scan->storageAttributes.compress ? "true" : "false"),
@@ -347,7 +347,7 @@ 
errcontext_appendonly_insert_block_user_limit(AppendOnlyInsertDesc aoInsertDesc)
 static void
 SetCurrentFileSegForWrite(AppendOnlyInsertDesc aoInsertDesc)
 {
-       RelFileNodeBackend rnode;
+       RelFileLocatorBackend rnode;
 
        FileSegInfo *fsinfo;
        int64           eof;
@@ -355,7 +355,7 @@ SetCurrentFileSegForWrite(AppendOnlyInsertDesc aoInsertDesc)
        int64           varblockcount;
        int32           fileSegNo;
 
-       rnode.node = aoInsertDesc->aoi_rel->rd_node;
+       rnode.locator = aoInsertDesc->aoi_rel->rd_locator;
        rnode.backend = aoInsertDesc->aoi_rel->rd_backend;
 
        /* Make the 'segment' file name */
@@ -2106,8 +2106,6 @@ appendonly_fetch_init(Relation relation,
                aoFetchDesc->lastSequence[segno] = 
ReadLastSequence(aoFormData.segrelid, segno);
        }
 
-       RelationOpenSmgr(relation);
-
        AppendOnlyStorageRead_Init(
                                                           
&aoFetchDesc->storageRead,
                                                           
aoFetchDesc->initContext,
@@ -2116,7 +2114,8 @@ appendonly_fetch_init(Relation relation,
                                                           
RelationGetRelid(aoFetchDesc->relation),
                                                           aoFetchDesc->title,
                                                           
&aoFetchDesc->storageAttributes,
-                                                          &relation->rd_node, 
relation->rd_smgr->smgr_ao);
+                                                          
&relation->rd_locator,
+                                                          
RelationGetSmgr(relation)->smgr_ao);
 
 
        fns = get_funcs_for_compression(NameStr(aoFormData.compresstype));
@@ -2188,7 +2187,7 @@ appendonly_fetch(AppendOnlyFetchDesc aoFetchDesc,
                ereport(ERROR,
                                (errcode(ERRCODE_INTERNAL_ERROR),
                                 errmsg("Row No. %ld in segment file No. %d is 
out of scanning scope for target relfilenode %u.",
-                                               rowNum, segmentFileNum, 
aoFetchDesc->relation->rd_node.relNode)));
+                                               rowNum, segmentFileNum, 
aoFetchDesc->relation->rd_locator.relNumber)));
 
        /*
         * This is an improvement for brin. BRIN index stores ranges of TIDs in
@@ -2634,8 +2633,6 @@ appendonly_insert_init(Relation rel, int segno)
                                         
RelationGetRelationName(aoInsertDesc->aoi_rel));
        aoInsertDesc->title = titleBuf.data;
 
-       RelationOpenSmgr(rel);
-
        AppendOnlyStorageWrite_Init(
                                                                
&aoInsertDesc->storageWrite,
                                                                NULL,
@@ -2644,7 +2641,8 @@ appendonly_insert_init(Relation rel, int segno)
                                                                
RelationGetRelid(aoInsertDesc->aoi_rel),
                                                                
aoInsertDesc->title,
                                                                
&aoInsertDesc->storageAttributes,
-                                                               XLogIsNeeded() 
&& RelationNeedsWAL(aoInsertDesc->aoi_rel), rel->rd_smgr->smgr_ao);
+                                                               XLogIsNeeded() 
&& RelationNeedsWAL(aoInsertDesc->aoi_rel),
+                                                               
RelationGetSmgr(rel)->smgr_ao);
 
        aoInsertDesc->storageWrite.compression_functions = fns;
        aoInsertDesc->storageWrite.compressionState = cs;
diff --git a/src/backend/access/appendonly/appendonlyam_handler.c 
b/src/backend/access/appendonly/appendonlyam_handler.c
index 0136d4a850f..71ef7cef755 100644
--- a/src/backend/access/appendonly/appendonlyam_handler.c
+++ b/src/backend/access/appendonly/appendonlyam_handler.c
@@ -1076,7 +1076,7 @@ static TM_Result
 appendonly_tuple_update(Relation relation, ItemPointer otid, TupleTableSlot 
*slot,
                                        CommandId cid, Snapshot snapshot, 
Snapshot crosscheck,
                                        bool wait, TM_FailureData *tmfd,
-                                       LockTupleMode *lockmode, bool 
*update_indexes)
+                                       LockTupleMode *lockmode, 
TU_UpdateIndexes *update_indexes)
 {
        AppendOnlyInsertDesc    insertDesc;
        AppendOnlyDeleteDesc    deleteDesc;
@@ -1107,9 +1107,9 @@ appendonly_tuple_update(Relation relation, ItemPointer 
otid, TupleTableSlot *slo
 
        appendonly_insert(insertDesc, mtuple, (AOTupleId *) &slot->tts_tid);
 
-       pgstat_count_heap_update(relation, false);
+       pgstat_count_heap_update(relation, false, false);
        /* No HOT updates with AO tables. */
-       *update_indexes = true;
+       *update_indexes = TU_All;
 
        appendonly_free_memtuple(mtuple);
 
@@ -1175,7 +1175,7 @@ heap_truncate_one_relid(Oid relid)
  */
 static void
 appendonly_relation_set_new_filenode(Relation rel,
-                                                                        const 
RelFileNode *newrnode,
+                                                                        const 
RelFileLocator *newrnode,
                                                                         char 
persistence,
                                                                         
TransactionId *freezeXid,
                                                                         
MultiXactId *minmulti)
@@ -1195,7 +1195,7 @@ appendonly_relation_set_new_filenode(Relation rel,
         *
         * Segment files will be created when / if needed.
         */
-       srel = RelationCreateStorage(*newrnode, persistence, SMGR_AO, rel);
+       srel = RelationCreateStorage(*newrnode, persistence, true, SMGR_AO, 
rel);
 
        /*
         * If required, set up an init fork for an unlogged table so that it can
@@ -1241,7 +1241,7 @@ appendonly_relation_nontransactional_truncate(Relation 
rel)
 }
 
 static void
-appendonly_relation_copy_data(Relation rel, const RelFileNode *newrnode)
+appendonly_relation_copy_data(Relation rel, const RelFileLocator *newrnode)
 {
        SMgrRelation dstrel;
 
@@ -1250,7 +1250,6 @@ appendonly_relation_copy_data(Relation rel, const 
RelFileNode *newrnode)
         * implementation
         */
        dstrel = smgropen(*newrnode, rel->rd_backend, SMGR_AO, rel);
-       RelationOpenSmgr(rel);
 
        /*
         * Create and copy all forks of the relation, and schedule unlinking of
@@ -1259,9 +1258,10 @@ appendonly_relation_copy_data(Relation rel, const 
RelFileNode *newrnode)
         * NOTE: any conflict in relfilenode value will be caught in
         * RelationCreateStorage().
         */
-       RelationCreateStorage(*newrnode, rel->rd_rel->relpersistence, SMGR_AO, 
rel);
+       RelationCreateStorage(*newrnode, rel->rd_rel->relpersistence, SMGR_AO, 
true, rel);
 
-       copy_append_only_data(rel->rd_node, *newrnode, rel->rd_smgr, dstrel, 
rel->rd_backend, rel->rd_rel->relpersistence);
+       copy_append_only_data(rel->rd_locator, *newrnode, RelationGetSmgr(rel), 
dstrel,
+                                                 rel->rd_backend, 
rel->rd_rel->relpersistence);
 
        /*
         * For append-optimized tables, no forks other than the main fork should
@@ -2271,7 +2271,7 @@ static const TableAmRoutine ao_row_methods = {
        .tuple_satisfies_snapshot = appendonly_tuple_satisfies_snapshot,
        .index_delete_tuples = appendonly_index_delete_tuples,
 
-       .relation_set_new_filenode = appendonly_relation_set_new_filenode,
+       .relation_set_new_filelocator = appendonly_relation_set_new_filenode,
        .relation_nontransactional_truncate = 
appendonly_relation_nontransactional_truncate,
        .relation_copy_data = appendonly_relation_copy_data,
        .relation_copy_for_cluster = appendonly_relation_copy_for_cluster,
diff --git a/src/backend/access/appendonly/appendonlywriter.c 
b/src/backend/access/appendonly/appendonlywriter.c
index 048ce295416..368cf8207d4 100644
--- a/src/backend/access/appendonly/appendonlywriter.c
+++ b/src/backend/access/appendonly/appendonlywriter.c
@@ -40,7 +40,6 @@
 #include "utils/faultinjector.h"
 #include "utils/fmgroids.h"
 #include "utils/guc.h"
-#include "utils/int8.h"
 #include "utils/snapmgr.h"
 #include "utils/syscache.h"
 
@@ -139,7 +138,7 @@ LockSegnoForWrite(Relation rel, int segno)
         * The algorithm below for choosing a target segment is not 
concurrent-safe.
         * Grab a lock to serialize.
         */
-       LockDatabaseObject(rel->rd_node.dbNode, (Oid)rel->rd_node.relNode, 0, 
ExclusiveLock);
+       LockDatabaseObject(rel->rd_locator.dbOid, 
(Oid)rel->rd_locator.relNumber, 0, ExclusiveLock);
 
        appendOnlyMetaDataSnapshot = 
RegisterSnapshot(GetCatalogSnapshot(InvalidOid));
        GetAppendOnlyEntryAuxOids(rel,
@@ -244,7 +243,7 @@ LockSegnoForWrite(Relation rel, int segno)
        /* OK, we have the aoseg tuple locked for us. */
        systable_endscan(aoscan);
 
-       UnlockDatabaseObject(rel->rd_node.dbNode, (Oid)rel->rd_node.relNode, 0, 
ExclusiveLock);
+       UnlockDatabaseObject(rel->rd_locator.dbOid, 
(Oid)rel->rd_locator.relNumber, 0, ExclusiveLock);
 
        heap_close(pg_aoseg_rel, AccessShareLock);
 
@@ -412,7 +411,7 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
         * The algorithm below for choosing a target segment is not 
concurrent-safe.
         * Grab a lock to serialize.
         */
-       LockDatabaseObject(rel->rd_node.dbNode, (Oid)rel->rd_node.relNode, 0, 
ExclusiveLock);
+       LockDatabaseObject(rel->rd_locator.dbOid, 
(Oid)rel->rd_locator.relNumber, 0, ExclusiveLock);
 
        /*
         * Obtain the snapshot that is taken at the beginning of the 
transaction.
@@ -621,7 +620,7 @@ choose_segno_internal(Relation rel, List *avoid_segnos, 
choose_segno_mode mode)
        }
 
 cleanup:
-       UnlockDatabaseObject(rel->rd_node.dbNode, (Oid)rel->rd_node.relNode, 0, 
ExclusiveLock);
+       UnlockDatabaseObject(rel->rd_locator.dbOid, 
(Oid)rel->rd_locator.relNumber, 0, ExclusiveLock);
 
        if (Debug_appendonly_print_segfile_choice && chosen_segno != -1)
                ereport(LOG,
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c
index 0b723b8e7d3..e7c6cb7d4cf 100644
--- a/src/backend/catalog/catalog.c
+++ b/src/backend/catalog/catalog.c
@@ -97,7 +97,7 @@ bool system_relation_modified = false;
  * and the filename separately.
  */
 void
-reldir_and_filename(RelFileNode node, BackendId backend, ForkNumber forknum,
+reldir_and_filename(RelFileLocator node, BackendId backend, ForkNumber forknum,
                                        char **dir, char **filename)
 {
        char       *path;
@@ -131,7 +131,7 @@ reldir_and_filename(RelFileNode node, BackendId backend, 
ForkNumber forknum,
  * XXX This is very similar to _mdfd_segpath(), let's use that one
  */
 char *
-aorelpathbackend(RelFileNode node, BackendId backend, int32 segno)
+aorelpathbackend(RelFileLocator node, BackendId backend, int32 segno)
 {
        char       *fullpath;
        char       *path;
diff --git a/src/backend/cdb/cdbappendonlystorageread.c 
b/src/backend/cdb/cdbappendonlystorageread.c
index 67314014997..cd09976c59f 100755
--- a/src/backend/cdb/cdbappendonlystorageread.c
+++ b/src/backend/cdb/cdbappendonlystorageread.c
@@ -65,7 +65,7 @@ AppendOnlyStorageRead_Init(AppendOnlyStorageRead *storageRead,
                                                   Oid reloid,
                                                   char *title,
                                                   AppendOnlyStorageAttributes 
*storageAttributes,
-                                                  RelFileNode *relFileNode,
+                                                  RelFileLocator *relFileNode,
                                                   const struct f_smgr_ao 
*smgrAO)
 {
        uint8      *memory;
diff --git a/src/backend/cdb/cdbappendonlystoragewrite.c 
b/src/backend/cdb/cdbappendonlystoragewrite.c
index fe99836f02f..4ab94b50684 100755
--- a/src/backend/cdb/cdbappendonlystoragewrite.c
+++ b/src/backend/cdb/cdbappendonlystoragewrite.c
@@ -262,7 +262,7 @@ AppendOnlyStorageWrite_FinishSession(AppendOnlyStorageWrite 
*storageWrite)
  */
 void
 AppendOnlyStorageWrite_TransactionCreateFile(AppendOnlyStorageWrite 
*storageWrite,
-                                                                               
         RelFileNodeBackend *relFileNode,
+                                                                               
         RelFileLocatorBackend *relFileNode,
                                                                                
         int32 segmentFileNum)
 {
        Assert(segmentFileNum > 0);
@@ -301,7 +301,7 @@ AppendOnlyStorageWrite_OpenFile(AppendOnlyStorageWrite 
*storageWrite,
                                                                int version,
                                                                int64 
logicalEof,
                                                                int64 
fileLen_uncompressed,
-                                                               
RelFileNodeBackend *relFileNode,
+                                                               
RelFileLocatorBackend *relFileNode,
                                                                int32 
segmentFileNum)
 {
        File            file;
diff --git a/src/backend/cdb/cdbappendonlyxlog.c 
b/src/backend/cdb/cdbappendonlyxlog.c
index 0e9e96d7913..722bfcd8c2a 100644
--- a/src/backend/cdb/cdbappendonlyxlog.c
+++ b/src/backend/cdb/cdbappendonlyxlog.c
@@ -117,7 +117,7 @@ ao_insert_replay(XLogReaderState *record)
 /*
  * AO/CO truncate xlog record insertion.
  */
-void xlog_ao_truncate(RelFileNode relFileNode, int32 segmentFileNum, int64 
offset)
+void xlog_ao_truncate(RelFileLocator relFileNode, int32 segmentFileNum, int64 
offset)
 {
        xl_ao_truncate  xlaotruncate;
 
diff --git a/src/backend/cdb/cdbbufferedread.c 
b/src/backend/cdb/cdbbufferedread.c
index 0232490db55..2e728b36dc1 100644
--- a/src/backend/cdb/cdbbufferedread.c
+++ b/src/backend/cdb/cdbbufferedread.c
@@ -61,7 +61,7 @@ BufferedReadInit(BufferedRead *bufferedRead,
                                 int32 maxBufferLen,
                                 int32 maxLargeReadLen,
                                 char *relationName,
-                                RelFileNode *file_node,
+                                RelFileLocator *file_node,
                                 const struct f_smgr_ao *smgr)
 {
        Assert(bufferedRead != NULL);
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
index eff6954c78e..c7731b9365c 100644
--- a/src/backend/storage/smgr/md.c
+++ b/src/backend/storage/smgr/md.c
@@ -258,7 +258,7 @@ mdcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
  * If isRedo is true, it's okay for the file to exist already.
  */
 void
-mdcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo)
+mdcreate_ao(RelFileLocatorBackend rnode, int32 segmentFileNum, bool isRedo)
 {
        char       *path;
        File            fd;
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c
index 52d87ee24b9..605783c5fe6 100644
--- a/src/backend/storage/smgr/smgr.c
+++ b/src/backend/storage/smgr/smgr.c
@@ -532,7 +532,7 @@ smgrcreate(SMgrRelation reln, ForkNumber forknum, bool 
isRedo)
  *             already because we are in a WAL replay sequence.
  */
 void
-smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool isRedo)
+smgrcreate_ao(RelFileLocatorBackend rnode, int32 segmentFileNum, bool isRedo)
 {
        mdcreate_ao(rnode, segmentFileNum, isRedo);
        if (file_create_hook)
diff --git a/src/include/access/aomd.h b/src/include/access/aomd.h
index 0283df12d35..45c9d597bb4 100644
--- a/src/include/access/aomd.h
+++ b/src/include/access/aomd.h
@@ -53,10 +53,10 @@ TruncateAOSegmentFile(File fd,
 extern void ao_truncate_one_rel(Relation rel);
 
 extern void
-mdunlink_ao(RelFileNodeBackend rnode, ForkNumber forkNumber, bool isRedo);
+mdunlink_ao(RelFileLocatorBackend rnode, ForkNumber forkNumber, bool isRedo);
 
 extern void
-copy_append_only_data(RelFileNode src, RelFileNode dst, 
+copy_append_only_data(RelFileLocator src, RelFileLocator dst,
        SMgrRelation srcSMGR, SMgrRelation dstSMGR, BackendId backendid, char 
relpersistence);
 
 /*
diff --git a/src/include/catalog/catalog.h b/src/include/catalog/catalog.h
index 2afcb37034e..4824bf80456 100644
--- a/src/include/catalog/catalog.h
+++ b/src/include/catalog/catalog.h
@@ -16,6 +16,7 @@
 
 #include "catalog/pg_class.h"
 #include "storage/relfilenode.h"
+#include "storage/relfilelocator.h"
 #include "utils/relcache.h"
 
 /*
@@ -55,9 +56,9 @@ extern Oid GetNewOidWithIndex(Relation relation, Oid indexId,
 extern Oid GetNewRelFileNode(Oid reltablespace, Relation pg_class,
                                                         char relpersistence);
 
-extern void reldir_and_filename(RelFileNode rnode, BackendId backend, 
ForkNumber forknum,
+extern void reldir_and_filename(RelFileLocator rnode, BackendId backend, 
ForkNumber forknum,
                                        char **dir, char **filename);
-extern char *aorelpathbackend(RelFileNode node, BackendId backend, int32 
segno);
+extern char *aorelpathbackend(RelFileLocator node, BackendId backend, int32 
segno);
 
 extern bool system_relation_modified;
 
diff --git a/src/include/catalog/pg_attribute_encoding.h 
b/src/include/catalog/pg_attribute_encoding.h
index 7c346cdb7aa..094fb27ca4f 100644
--- a/src/include/catalog/pg_attribute_encoding.h
+++ b/src/include/catalog/pg_attribute_encoding.h
@@ -59,8 +59,7 @@ FOREIGN_KEY(attrelid REFERENCES pg_attribute(attrelid));
 typedef FormData_pg_attribute_encoding *Form_pg_attribute_encoding;
 DECLARE_TOAST(pg_attribute_encoding, 6412, 6427);
 
-DECLARE_UNIQUE_INDEX(pg_attribute_encoding_attrelid_filenum_index, 6238, on 
pg_attribute_encoding using btree(attrelid oid_ops, filenum int2_ops));
-#define AttributeEncodingAttrelidFilenumIndexId        6238
+DECLARE_UNIQUE_INDEX(pg_attribute_encoding_attrelid_filenum_index, 6453, 
AttributeEncodingAttrelidFilenumIndexId, on pg_attribute_encoding using 
btree(attrelid oid_ops, filenum int2_ops));
 
 extern PGFunction *get_funcs_for_compression(char *compresstype);
 extern StdRdOptions **RelationGetAttributeOptions(Relation rel);
diff --git a/src/include/cdb/cdbappendonlystorageread.h 
b/src/include/cdb/cdbappendonlystorageread.h
index 86e3d55e77a..818649424ce 100755
--- a/src/include/cdb/cdbappendonlystorageread.h
+++ b/src/include/cdb/cdbappendonlystorageread.h
@@ -201,7 +201,7 @@ extern void 
AppendOnlyStorageRead_Init(AppendOnlyStorageRead *storageRead,
                                                   int32 maxBufferLen,
                                                   char *relationName, Oid 
reloid, char *title,
                                                   AppendOnlyStorageAttributes 
*storageAttributes,
-                                                  RelFileNode *relFileNode, 
const struct f_smgr_ao *smgrAO);
+                                                  RelFileLocator *relFileNode, 
const struct f_smgr_ao *smgrAO);
 
 extern char *AppendOnlyStorageRead_RelationName(AppendOnlyStorageRead 
*storageRead);
 extern char *AppendOnlyStorageRead_SegmentFileName(AppendOnlyStorageRead 
*storageRead);
diff --git a/src/include/cdb/cdbappendonlystoragewrite.h 
b/src/include/cdb/cdbappendonlystoragewrite.h
index 9161d724055..23a9c11e8ad 100755
--- a/src/include/cdb/cdbappendonlystoragewrite.h
+++ b/src/include/cdb/cdbappendonlystoragewrite.h
@@ -194,14 +194,14 @@ extern void 
AppendOnlyStorageWrite_Init(AppendOnlyStorageWrite *storageWrite,
 extern void AppendOnlyStorageWrite_FinishSession(AppendOnlyStorageWrite 
*storageWrite);
 
 extern void 
AppendOnlyStorageWrite_TransactionCreateFile(AppendOnlyStorageWrite 
*storageWrite,
-                                                                               
         RelFileNodeBackend *relFileNode,
+                                                                               
         RelFileLocatorBackend *relFileNode,
                                                                                
         int32 segmentFileNum);
 extern void AppendOnlyStorageWrite_OpenFile(AppendOnlyStorageWrite 
*storageWrite,
                                                                char 
*filePathName,
                                                                int version,
                                                                int64 
logicalEof,
                                                                int64 
fileLen_uncompressed,
-                                                               
RelFileNodeBackend *relFileNode,
+                                                               
RelFileLocatorBackend *relFileNode,
                                                                int32 
segmentFileNum);
 extern void AppendOnlyStorageWrite_FlushAndCloseFile(AppendOnlyStorageWrite 
*storageWrite,
                                                                                
         int64 *newLogicalEof,
diff --git a/src/include/cdb/cdbappendonlyxlog.h 
b/src/include/cdb/cdbappendonlyxlog.h
index 67e9769fef6..c87720f6f7d 100644
--- a/src/include/cdb/cdbappendonlyxlog.h
+++ b/src/include/cdb/cdbappendonlyxlog.h
@@ -28,7 +28,7 @@
 
 typedef struct
 {
-       RelFileNode node;
+       RelFileLocator node;
        uint32          segment_filenum;
        int64           offset;
 } xl_ao_target;
@@ -50,9 +50,9 @@ typedef struct
        xl_ao_target target;
 } xl_ao_truncate;
 
-extern void xlog_ao_insert(RelFileNode relFileNode, int32 segmentFileNum,
+extern void xlog_ao_insert(RelFileLocator relFileNode, int32 segmentFileNum,
                           int64 offset, void *buffer, int32 bufferLen);
-extern void xlog_ao_truncate(RelFileNode relFileNode, int32 segmentFileNum, 
int64 offset);
+extern void xlog_ao_truncate(RelFileLocator relFileNode, int32 segmentFileNum, 
int64 offset);
 
 
 extern void appendonly_redo(XLogReaderState *record);
diff --git a/src/include/cdb/cdbbufferedread.h 
b/src/include/cdb/cdbbufferedread.h
index d4824aed406..080ac391e8c 100644
--- a/src/include/cdb/cdbbufferedread.h
+++ b/src/include/cdb/cdbbufferedread.h
@@ -73,7 +73,7 @@ typedef struct BufferedRead
        /* current read position */
        off_t                            fileOff;
 
-       RelFileNode             relFileNode;
+       RelFileLocator          relFileNode;
        /*
         * Temporary limit support for random reading.
         */
@@ -105,7 +105,7 @@ extern void BufferedReadInit(
     int32                maxBufferLen,
     int32                maxLargeReadLen,
     char                                *relationName,
-       RelFileNode              *file_node,
+       RelFileLocator           *file_node,
        const struct f_smgr_ao       *smgr);
 
 /*
diff --git a/src/include/common/relpath.h b/src/include/common/relpath.h
index 53920c62050..09e974c9928 100644
--- a/src/include/common/relpath.h
+++ b/src/include/common/relpath.h
@@ -107,6 +107,6 @@ extern char *GetRelationPath(Oid dbOid, Oid spcOid, 
RelFileNumber relNumber,
        relpathbackend((rlocator).locator, (rlocator).backend, forknum)
 
 #define aorelpath(rnode, segno) \
-               aorelpathbackend((rnode).node, (rnode).backend, (segno))
+               aorelpathbackend((rnode).locator, (rnode).backend, (segno))
 
 #endif                                                 /* RELPATH_H */
diff --git a/src/include/storage/md.h b/src/include/storage/md.h
index 753120724d1..3a2b9036da8 100644
--- a/src/include/storage/md.h
+++ b/src/include/storage/md.h
@@ -24,7 +24,7 @@ extern void mdinit(void);
 extern void mdopen(SMgrRelation reln);
 extern void mdclose(SMgrRelation reln, ForkNumber forknum);
 extern void mdcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo);
-extern void mdcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool 
isRedo);
+extern void mdcreate_ao(RelFileLocatorBackend rnode, int32 segmentFileNum, 
bool isRedo);
 extern bool mdexists(SMgrRelation reln, ForkNumber forknum);
 extern void mdunlink(RelFileLocatorBackend rlocator, ForkNumber forknum, bool 
isRedo);
 extern void mdextend(SMgrRelation reln, ForkNumber forknum,
diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h
index 069f0f20300..b49d8b123dc 100644
--- a/src/include/storage/smgr.h
+++ b/src/include/storage/smgr.h
@@ -198,7 +198,7 @@ extern void smgrcloserellocator(RelFileLocatorBackend 
rlocator);
 extern void smgrrelease(SMgrRelation reln);
 extern void smgrreleaseall(void);
 extern void smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo);
-extern void smgrcreate_ao(RelFileNodeBackend rnode, int32 segmentFileNum, bool 
isRedo);
+extern void smgrcreate_ao(RelFileLocatorBackend rnode, int32 segmentFileNum, 
bool isRedo);
 extern void smgrdosyncall(SMgrRelation *rels, int nrels);
 extern void smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo);
 extern void smgrextend(SMgrRelation reln, ForkNumber forknum,
diff --git a/src/include/storage/sync.h b/src/include/storage/sync.h
index 34b09ce6e5e..ec977e1d4c5 100644
--- a/src/include/storage/sync.h
+++ b/src/include/storage/sync.h
@@ -61,7 +61,7 @@ typedef struct FileTag
 ( \
        memset(&(a), 0, sizeof(FileTag)), \
        (a).handler = (xx_handler),     \
-       (a).rnode = (xx_rnode), \
+       (a).rlocator = (xx_rnode), \
        (a).forknum = (xx_forknum), \
        (a).segno = (xx_segno) \
 )


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to