Hi!

PREAMBLE

For a last couple of months, I stumbled into a problem while running tests
on ARM (Debain, aarch64) and some more wired platforms
for my 64–bit XIDs patch set. Test contrib/test_decoding
(catalog_change_snapshot) rarely failed with the next message:

TRAP: FailedAssertion("TransactionIdIsNormal(InitialRunningXacts[0]) &&
TransactionIdIsNormal(builder->xmin)", File: "snapbuild.c"

I have plenty of failing on ARM, couple on x86 and none (if memory serves)
on x86–64.

At first, my thought was to blame my 64–bit XID patch for what, but this is
not the case. This error persist from PG15 to PG10
without any patch applied. Though hard to reproduce.


PROBLEM

After some investigation, I think, the problem is in the snapbuild.c
(commit 272248a0c1b1, see [0]). We do allocate InitialRunningXacts
array in the context of builder->context, but for the time when we call
SnapBuildPurgeOlderTxn this context may be already free'd. Thus,
InitialRunningXacts array become array of 2139062143 (i.e. 0x7F7F7F7F)
values. This is not caused buildfarm to fail due to that code:

if (!NormalTransactionIdPrecedes(InitialRunningXacts[0],
                                 builder->xmin))
    return;

Since the cluster is initialised with XID way less than 0x7F7F7F7F, we get
to return here, but the problem is still existing.
I've attached the patch based on branch REL_15_STABLE to reproduce the
problem on x86-64.

On my patch set of 64–bit XID's this problem manifested since I do init
cluster with XID far beyond 32–bit bound.

Alternatively, I did try to use my patch [1] to init cluster with first
transaction 2139062143 (i.e. 0x7F7F7F7F).
Then put pg_sleep call just like in the attached patch:
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -968,6 +968,8 @@ SnapBuildPurgeOlderTxn(SnapBuild *builder)
        if (NInitialRunningXacts == 0)
                return;

+       pg_usleep(1000000L * 2L);
+
        /* bound check if there is at least one transaction to remove */
        if (!NormalTransactionIdPrecedes(InitialRunningXacts[0],

 builder->xmin))

Run installcheck-force for many times for a test_decoding/
catalog_change_snapshot's and got a segfault.


CONCLUSION

In snapbuild.c, context allocated array InitialRunningXacts may be free'd,
this caused assertion failed (at best) or
may lead to the more serious problems.


P.S.

Simple fix like:
@@ -1377,7 +1379,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr
lsn, xl_running_xacts *runn
                 * changes. See SnapBuildXidSetCatalogChanges.
                 */
                NInitialRunningXacts = nxacts;
-               InitialRunningXacts = MemoryContextAlloc(builder->context,
sz);
+               InitialRunningXacts = MemoryContextAlloc(TopMemoryContext,
sz);
                memcpy(InitialRunningXacts, running->xids, sz);
                qsort(InitialRunningXacts, nxacts, sizeof(TransactionId),
xidComparator);

seems to solve the described problem, but I'm not in the context of [0] and
why array is allocated in builder->context.


[0] https://postgr.es/m/81D0D8B0-E7C4-4999-B616-1E5004DBDCD2%40amazon.com
[1]
https://www.postgresql.org/message-id/flat/CACG=ezaa4vqYjJ16yoxgrpa-=gxnf0vv3ey9bjgrrrfn2yy...@mail.gmail.com

-- 
Best regards,
Maxim Orlov.
From d09a031f1f807cdfe1e02000b2bf4fd3eaaedd8f Mon Sep 17 00:00:00 2001
From: Maxim Orlov <orlo...@gmail.com>
Date: Mon, 21 Nov 2022 14:50:02 +0300
Subject: [PATCH] catalog_change_snapshot-fail

---
 contrib/test_decoding/Makefile              | 1007 ++++++++++++++++++-
 src/backend/replication/logical/snapbuild.c |   12 +
 2 files changed, 1012 insertions(+), 7 deletions(-)

diff --git a/contrib/test_decoding/Makefile b/contrib/test_decoding/Makefile
index c7ce603706..aaf7a63411 100644
--- a/contrib/test_decoding/Makefile
+++ b/contrib/test_decoding/Makefile
@@ -3,12 +3,1006 @@
 MODULES = test_decoding
 PGFILEDESC = "test_decoding - example of a logical decoding output plugin"
 
-REGRESS = ddl xact rewrite toast permissions decoding_in_xact \
-       decoding_into_rel binary prepared replorigin time messages \
-       spill slot truncate stream stats twophase twophase_stream
-ISOLATION = mxact delayed_startup ondisk_startup concurrent_ddl_dml \
-       oldest_xmin snapshot_transfer subxact_without_top concurrent_stream \
-       twophase_snapshot slot_creation_error catalog_change_snapshot
+ISOLATION = catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot \
+                       catalog_change_snapshot
 
 REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf
 ISOLATION_OPTS = --temp-config $(top_srcdir)/contrib/test_decoding/logical.conf
@@ -17,7 +1011,6 @@ ISOLATION_OPTS = --temp-config 
$(top_srcdir)/contrib/test_decoding/logical.conf
 # typical installcheck users do not have (e.g. buildfarm clients).
 NO_INSTALLCHECK = 1
 
-TAP_TESTS = 1
 
 ifdef USE_PGXS
 PG_CONFIG = pg_config
diff --git a/src/backend/replication/logical/snapbuild.c 
b/src/backend/replication/logical/snapbuild.c
index cdf4aa01e9..54cd6f0e67 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -277,6 +277,7 @@ static bool ExportInProgress = false;
  * transaction has catalog change. But that won't be a problem since we
  * use snapshot built during decoding only for reading system catalogs.
  */
+static TransactionId InitialXact = InvalidTransactionId;
 static TransactionId *InitialRunningXacts = NULL;
 static int     NInitialRunningXacts = 0;
 
@@ -968,6 +969,12 @@ SnapBuildPurgeOlderTxn(SnapBuild *builder)
        if (NInitialRunningXacts == 0)
                return;
 
+       pg_usleep(1000000L * 2L);
+
+       if (InitialRunningXacts[0] != InitialXact)
+               elog(PANIC, "XIDS doesn't match (%u vs %u)", 
InitialRunningXacts[0],
+                        InitialXact);
+
        /* bound check if there is at least one transaction to remove */
        if (!NormalTransactionIdPrecedes(InitialRunningXacts[0],
                                                                         
builder->xmin))
@@ -991,12 +998,16 @@ SnapBuildPurgeOlderTxn(SnapBuild *builder)
        }
 
        if (surviving_xids > 0)
+       {
                memcpy(InitialRunningXacts, workspace,
                           sizeof(TransactionId) * surviving_xids);
+               InitialXact = InitialRunningXacts[0];
+       }
        else
        {
                pfree(InitialRunningXacts);
                InitialRunningXacts = NULL;
+               InitialXact = InvalidTransactionId;
        }
 
        elog(DEBUG3, "purged initial running transactions from %u to %u, oldest 
running xid %u",
@@ -1380,6 +1391,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, 
xl_running_xacts *runn
                InitialRunningXacts = MemoryContextAlloc(builder->context, sz);
                memcpy(InitialRunningXacts, running->xids, sz);
                qsort(InitialRunningXacts, nxacts, sizeof(TransactionId), 
xidComparator);
+               InitialXact = InitialRunningXacts[0];
 
                /* there won't be any state to cleanup */
                return false;
-- 
2.38.1

Reply via email to