RE: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns
Takamichi Osumi (Fujitsu) <osumi.takamichi@fujitsu.com>
From: "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com>
To: 'Masahiko Sawada' <sawada.mshk@gmail.com>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: "Drouvot, Bertrand" <bdrouvot@amazon.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, "Oh, Mike" <minsoo@amazon.com>
Date: 2021-10-13T12:58:34Z
Lists: pgsql-hackers
On Monday, October 11, 2021 3:28 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > On Fri, Oct 8, 2021 at 4:50 PM Kyotaro Horiguchi <horikyota.ntt@gmail.com> > wrote: > > > > At Thu, 7 Oct 2021 13:20:14 +0900, Masahiko Sawada > > <sawada.mshk@gmail.com> wrote in > > > Another idea to fix this problem would be that before calling > > > SnapBuildCommitTxn() we create transaction entries in ReorderBuffer > > > for (sub)transactions whose COMMIT record has > XACT_XINFO_HAS_INVALS, > > > and then mark all of them as catalog-changed by calling > > > ReorderBufferXidSetCatalogChanges(). I've attached a PoC patch for > > > this idea. What the patch does is essentially the same as what the > > > proposed patch does. But the patch doesn't modify the > > > SnapBuildCommitTxn(). And we remember the list of last running > > > transactions in reorder buffer and the list is periodically purged > > > during decoding RUNNING_XACTS records, eventually making it empty. > > > > I came up with the third way. SnapBuildCommitTxn already properly > > handles the case where a ReorderBufferTXN with > > RBTXN_HAS_CATALOG_CHANGES. So this issue can be resolved by > create > > such ReorderBufferTXNs in SnapBuildProcessRunningXacts. > > Thank you for the idea and patch! > > It's much simpler than mine. I think that creating an entry of a catalog-changed > transaction in the reorder buffer before > SunapBuildCommitTxn() is the right direction. > > After more thought, given DDLs are not likely to happen than DML in practice, > probably we can always mark both the top transaction and its subtransactions > as containing catalog changes if the commit record has > XACT_XINFO_HAS_INVALS? I believe this is not likely to lead to overhead in > practice. That way, the patch could be more simple and doesn't need the > change of AssertTXNLsnOrder(). > > I've attached another PoC patch. Also, I've added the tests for this issue in > test_decoding. I also felt that your patch addresses the problem in a good way. Even without setting xid by NEW_CID decoding like in the original scenario, we can set catalog change flag. One really minor comment I have is, in DecodeCommit(), you don't need to declar i. It's defined at the top of the function. + for (int i = 0; i < parsed->nsubxacts; i++) Best Regards, Takamichi Osumi
Commits
-
Fix the incorrect assertion introduced in commit 7f13ac8123.
- d2169c998553 16.0 landed
-
Fix catalog lookup with the wrong snapshot during logical decoding.
- 7f13ac812313 16.0 landed
- 272248a0c1b1 15.0 landed
- 68dcce247f1a 14.6 landed
- 547b963683e3 13.9 landed
- 794460783125 12.13 landed
- e721123b7a0c 11.18 landed
- bf0718c137c4 10.23 landed
-
Clean up assorted failures under clang's -fsanitize=undefined checks.
- 46ab07ffda9d 15.0 cited