Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns
Masahiko Sawada <sawada.mshk@gmail.com>
From: Masahiko Sawada <sawada.mshk@gmail.com>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>, "Drouvot,
Bertrand" <bdrouvot@amazon.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, "Oh,
Mike" <minsoo@amazon.com>
Date: 2022-05-30T05:42:56Z
Lists: pgsql-hackers
Attachments
- poc_add_running_catchanges_xacts_to_serialized_snapshot.patch (application/x-patch) patch
- poc_add_regression_tests.patch (application/x-patch) patch
- poc_remember_last_running_xacts_v2.patch (application/x-patch) patch v2
On Wed, May 25, 2022 at 12:11 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > On Tue, May 24, 2022 at 2:18 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > On Tue, May 24, 2022 at 7:58 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > > > > > On Mon, May 23, 2022 at 2:39 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > > > > > On Mon, May 23, 2022 at 10:03 AM Kyotaro Horiguchi > > > > <horikyota.ntt@gmail.com> wrote: > > > > > > > > > > At Sat, 21 May 2022 15:35:58 +0530, Amit Kapila <amit.kapila16@gmail.com> wrote in > > > > > > I think if we don't have any better ideas then we should go with > > > > > > either this or one of the other proposals in this thread. The other > > > > > > idea that occurred to me is whether we can somehow update the snapshot > > > > > > we have serialized on disk about this information. On each > > > > > > running_xact record when we serialize the snapshot, we also try to > > > > > > purge the committed xacts (via SnapBuildPurgeCommittedTxn). So, during > > > > > > that we can check if there are committed xacts to be purged and if we > > > > > > have previously serialized the snapshot for the prior running xact > > > > > > record, if so, we can update it with the list of xacts that have > > > > > > catalog changes. If this is feasible then I think we need to somehow > > > > > > remember the point where we last serialized the snapshot (maybe by > > > > > > using builder->last_serialized_snapshot). Even, if this is feasible we > > > > > > may not be able to do this in back-branches because of the disk-format > > > > > > change required for this. > > > > > > > > > > > > Thoughts? > > > > > > It seems to work, could you draft the patch? > > > > > > > I can help with the review and discussion. > > Okay, I'll draft the patch for this idea. I've attached three POC patches: poc_remember_last_running_xacts_v2.patch is a rebased patch of my previous proposal[1]. This is based on the original proposal: we remember the last-running-xacts list of the first decoded RUNNING_XACTS record and check if the transaction whose commit record has XACT_XINFO_HAS_INVALS and whose xid is in the list. This doesn’t require any file format changes but the transaction will end up being added to the snapshot even if it has only relcache invalidations. poc_add_running_catchanges_xacts_to_serialized_snapshot.patch is a patch for the idea Amit Kapila proposed with some changes. The basic approach is to remember the list of xids that changed catalogs and were running when serializing the snapshot. The list of xids is kept in SnapShotBuilder and is serialized and restored to/from the serialized snapshot. When decoding a commit record, we check if the transaction is already marked as catalog-changes or its xid is in the list. If so, we add it to the snapshot. Unlike the first patch, it can add only transactions properly that have changed catalogs, but as Amit mentioned before, this idea cannot be back patched as this changes the on-disk format of the serialized snapshot. poc_add_regression_tests.patch adds regression tests for this bug. The regression tests are required for both HEAD and back-patching but I've separated this patch for testing the above two patches easily. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/
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