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