On Wed, 18 Dec 2024 at 13:21, Heikki Linnakangas <hlinn...@iki.fi> wrote:
> > Attached is some more cleanup on top of patch set v9, removing more dead > stuff related to wraparound. I also removed the oldestOffsetKnown > variable and related code. It was needed to deal with clusters upgraded > from buggy 9.3 and 9.4 era versions, but now that pg_upgrade will > rewrite the SLRUs, it's no longer needed. > Yep, multixact.c looks correct to me. As for "XXX could use SimpleLruTruncate()", yes, for sure. Actually, xl_multixact_truncate.startTruncMemb is also no longer needed, is it? > Does the pg_upgrade code work though, if you have that buggy situation > where oldestOffsetKnown == false ? > > > > > if (!TransactionIdIsValid(*xactptr)) > > { > > /* Corner case 3: we must be looking at unused > slot zero */ > > Assert(offset == 0); > > continue; > > } > > After upgrade, this corner case 3 would *not* happen on offset == 0. So > looks like we're still missing test coverage for this upgrade corner case. > Am I understanding correctly that you want to have a test corresponding to the buggy 9.3 and 9.4 era versions? Do you think we could imitate this scenario on a current master branch like that: 1) generate a couple of offsets segments for the first table; 2) generate more segments for a second table; 3) drop first table; 4) stop pg cluster; 5) remove pg_multixact/offsets/0000 6) upgrade? PFA, v10-0016-TEST-try-to-replicate-buggy-oldest-offset.patch This test will fail now, for an obvious reason, but is this case a relevant one? -- Best regards, Maxim Orlov.
<<attachment: v10-64-bit-mxoff.zip>>