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

yjhjstz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit f770fbb757c0714333812e975f88e51158d2ea35
Author: Aegeaner <[email protected]>
AuthorDate: Tue Nov 15 10:25:00 2022 +0800

    Check with assert if AO table's toast table kept existing relfrozenxid 
unchanged. (#13499)
    
    CLUSTER operation on append-optimized tables does not compute freeze limit
    (frozenXid) because AO tables do not have relfrozenxid.  The toast tables
    need to keep existing relfrozenxid value unchanged in this case.
---
 src/backend/commands/cluster.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 0517912ffd..bdb03c7691 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -1393,20 +1393,6 @@ swap_relation_files(Oid r1, Oid r2, bool 
target_is_pg_class,
                        if (relform1->reltoastrelid && relform2->reltoastrelid)
                        {
                                /* Recursively swap the contents of the toast 
tables */
-#ifdef USE_ASSERT_CHECKING
-                               /*
-                                * CLUSTER operation on append-optimized tables 
does not
-                                * compute freeze limit (frozenXid) because AO 
tables do not
-                                * have relfrozenxid.  The toast tables need to 
keep existing
-                                * relfrozenxid value unchanged in this case.
-                                *
-                                * assert, if the frozenXid is invalid, it must 
be AO table.
-                                */
-                               bool isAO1 = (relform1->relam == 
AO_ROW_TABLE_AM_OID);
-                               bool isAO2 = (relform2->relam == 
AO_ROW_TABLE_AM_OID);
-                               if (!TransactionIdIsNormal(frozenXid))
-                                       Assert(isAO1 && isAO2); 
-#endif
                                swap_relation_files(relform1->reltoastrelid,
                                                                        
relform2->reltoastrelid,
                                                                        
target_is_pg_class,
@@ -1453,6 +1439,24 @@ swap_relation_files(Oid r1, Oid r2, bool 
target_is_pg_class,
                }
        }
 
+#ifdef USE_ASSERT_CHECKING
+               /* 
+                * Check with assert if AO table's toast table kept existing 
relfrozenxid unchanged.
+                * 
+                * CLUSTER operation on append-optimized tables does not
+                * compute freeze limit (frozenXid) because AO tables do not
+                * have relfrozenxid.  The toast tables need to keep existing
+                * relfrozenxid value unchanged in this case.
+               */
+               if (swap_toast_by_content 
+                       && frozenXid == InvalidTransactionId 
+                       && relform1->relkind == RELKIND_TOASTVALUE 
+                       && relform2->relkind == RELKIND_TOASTVALUE)
+               {
+                       Assert(relform1->relfrozenxid == 
relform2->relfrozenxid);
+               }
+#endif
+
        /*
         * If we're swapping two toast tables by content, do the same for their
         * valid index. The swap can actually be safely done only if the 
relations


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

Reply via email to