On Mon, Mar 17, 2025 at 6:53 AM Hayato Kuroda (Fujitsu)
<kuroda.hay...@fujitsu.com> wrote:
>
> OK, let me share patched for back branches. Mostly the same fix patched as 
> master
> can be used for PG14-PG17, like attached.
>

A few comments:
==============
1.
+SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr
lsn, TransactionId xid)
{
dlist_iter txn_i;
ReorderBufferTXN *txn;
+ ReorderBufferTXN *curr_txn;
+
+ curr_txn = ReorderBufferTXNByXid(builder->reorder, xid, false, NULL,
InvalidXLogRecPtr, false);

The above is used to access invalidations from curr_txn. I am thinking
about whether it would be better to expose a new function to get
invalidations for a txn based on xid instead of getting
ReorderBufferTXN. It would avoid any layering violation and misuse of
ReorderBufferTXN by other modules.

2. The patch has a lot of tests to verify the same points. Can't we
have one simple test using SQL API based on what Andres presented in
an email [1]?

3. I have made minor changes in the comments in the attached.

[1] - 
https://www.postgresql.org/message-id/20231119021830.d6t6aaxtrkpn743y%40awork3.anarazel.de

-- 
With Regards,
Amit Kapila.
diff --git a/src/backend/replication/logical/snapbuild.c 
b/src/backend/replication/logical/snapbuild.c
index 16acb506141..fd1a3e75b29 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -739,7 +739,8 @@ SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, 
XLogRecPtr lsn, Transact
        /*
         * Iterate through all toplevel transactions. This can include
         * subtransactions which we just don't yet know to be that, but that's
-        * fine, they will just get an unnecessary snapshot queued.
+        * fine, they will just get an unnecessary snapshot and invalidations
+        * queued.
         */
        dlist_foreach(txn_i, &builder->reorder->toplevel_by_lsn)
        {
@@ -787,12 +788,12 @@ SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, 
XLogRecPtr lsn, Transact
                                                                 
builder->snapshot);
 
                /*
-                * Add invalidation messages to the reorder buffer of inprogress
+                * Add invalidation messages to the reorder buffer of 
in-progress
                 * transactions except the current committed transaction, for 
which we
                 * will execute invalidations at the end.
                 *
                 * It is required, otherwise, we will end up using the stale 
catcache
-                * contents built by the current transaction even after its 
decoding
+                * contents built by the current transaction even after its 
decoding,
                 * which should have been invalidated due to concurrent catalog
                 * changing transaction.
                 */
@@ -1071,8 +1072,8 @@ SnapBuildCommitTxn(SnapBuild *builder, XLogRecPtr lsn, 
TransactionId xid,
                SnapBuildSnapIncRefcount(builder->snapshot);
 
                /*
-                * add a new catalog snapshot and invalidations messages to all
-                * currently running transactions
+                * Add a new catalog snapshot and invalidations messages to all
+                * currently running transactions.
                 */
                SnapBuildDistributeSnapshotAndInval(builder, lsn, xid);
        }

Reply via email to