Re: Assertion failure in SnapBuildInitialSnapshot()
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Sawada Masahiko <sawada.mshk@gmail.com>, kuroda.hayato@fujitsu.com, Thomas Munro <thomas.munro@gmail.com>
Date: 2022-11-16T18:26:49Z
Lists: pgsql-hackers
Hi, On 2022-11-16 14:22:01 +0530, Amit Kapila wrote: > On Wed, Nov 16, 2022 at 7:30 AM Andres Freund <andres@anarazel.de> wrote: > > > > On 2022-11-15 16:20:00 +0530, Amit Kapila wrote: > > > On Tue, Nov 15, 2022 at 8:08 AM Andres Freund <andres@anarazel.de> wrote: > > > > nor do we enforce in an obvious place that we > > > > don't already hold a snapshot. > > > > > > > > > > We have a check for (FirstXactSnapshot == NULL) in > > > RestoreTransactionSnapshot->SetTransactionSnapshot. Won't that be > > > sufficient? > > > > I don't think that'd e.g. catch a catalog snapshot being held, yet that'd > > still be bad. And I think checking in SetTransactionSnapshot() is too late, > > we've already overwritten MyProc->xmin by that point. > > > > So, shall we add the below Asserts in SnapBuildInitialSnapshot() after > we have the Assert for Assert(!FirstSnapshotSet)? > Assert(FirstXactSnapshot == NULL); > Assert(!HistoricSnapshotActive()); I don't think that'd catch a catalog snapshot. But perhaps the better answer for the catalog snapshot is to just invalidate it explicitly. The user doesn't have control over the catalog snapshot being taken, and it's not too hard to imagine the walsender code triggering one somewhere. So maybe we should add something like: InvalidateCatalogSnapshot(); /* about to overwrite MyProc->xmin */ if (HaveRegisteredOrActiveSnapshot()) elog(ERROR, "cannot build an initial slot snapshot when snapshots exist") Assert(!HistoricSnapshotActive()); I think we'd not need to assert FirstXactSnapshot == NULL or !FirstSnapshotSet with that, because those would show up in HaveRegisteredOrActiveSnapshot(). Greetings, Andres Freund
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix a race condition in updating procArray->replication_slot_xmin.
- 2a5225b99d76 19 (unreleased) landed
- fd7c86cfaf13 18.2 landed
- 123b851abdac 17.8 landed
- 82146672261d 16.12 landed
- fa557d3005e7 15.16 landed
- 57048d6e1733 14.21 landed
-
Don't retreat slot's confirmed_flush LSN.
- ad5eaf390c58 18.0 cited
-
Add additional checks while creating the initial decoding snapshot.
- 240e0dbacd39 16.0 landed