Re: Introduce XID age and inactive timeout based replication slot invalidation
Nisha Moond <nisha.moond412@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add a test for commit ac0e33136a using the injection point.
- 8a695d7998be 18.0 landed
-
Invalidate inactive replication slots.
- ac0e33136abc 18.0 landed
-
Fix incorrect slot type in BuildTupleHashTableExt
- d96d1d5152f3 18.0 cited
-
Allow synced slots to have their inactive_since.
- 6f132ed693b6 17.0 landed
-
Change last_inactive_time to inactive_since in pg_replication_slots.
- 6d49c8d4b4f4 17.0 landed
-
Track last_inactive_time in pg_replication_slots.
- a11f330b5584 17.0 landed
-
Track invalidation_reason in pg_replication_slots.
- 6ae701b4378d 17.0 landed
-
Add option force_initdb to PostgreSQL::Test::Cluster:init()
- ff9e1e764fcc 17.0 cited
-
Add a failover option to subscriptions.
- 776621a5e479 17.0 cited
-
Allow setting failover property in the replication command.
- 73292404370c 17.0 cited
-
Allow to enable failover property for replication slots via SQL API.
- c393308b69d2 17.0 cited
-
Track conflict_reason in pg_replication_slots.
- 007693f2a3ac 17.0 cited
-
Log messages for replication slot acquisition and release.
- 7c3fb505b14e 17.0 cited
-
Remove vacuum_defer_cleanup_age
- 1118cd37eb61 16.0 cited
-
Fix corruption due to vacuum_defer_cleanup_age underflowing 64bit xids
- be504a3e974d 16.0 cited
-
meson: Add initial version of meson based build system
- e6927270cd18 16.0 cited
Attachments
- v63-0001-Enhance-replication-slot-error-handling-slot-inv.patch (application/octet-stream) patch v63-0001
- v63-0002-Introduce-inactive_timeout-based-replication-slo.patch (application/octet-stream) patch v63-0002
On Wed, Jan 22, 2025 at 10:49 AM Nisha Moond <nisha.moond412@gmail.com> wrote: > > On Tue, Jan 21, 2025 at 8:22 AM Peter Smith <smithpb2250@gmail.com> wrote: > > > > Some review comments for patch v61-0001. > > > > ====== > > src/backend/replication/slot.c > > > > 2. > > + /* > > + * The logical replication slots shouldn't be invalidated as GUC > > + * max_slot_wal_keep_size is set to -1 during the binary upgrade. > > + * See check_old_cluster_for_valid_slots() where we ensure that no > > + * invalidated before the upgrade. > > + */ > > + Assert(!(*invalidated && SlotIsLogical(s) && IsBinaryUpgrade)); > > > > 2a. > > I know this sentence was the same before you moved it, but "ensure > > that no invalidated" seems like there are some words missing. > > > > Corrected. > > > 2b. > > TBH, I this part confused me (the code is repeated in a couple of > > places). AFAICT the code/comment does not match quite right. The > > comment refers to a setting that is "during binary upgrade", yet the > > Assert can only pass if IsBinaryUpgrade is false. (??) > > > > I'm unsure of the intent; perhaps it should be like: > > > > if (IsBinaryUpgrade) > > Assert(!(*invalidated && SlotIsLogical(s))); > > > > This Assert condition is correct, as we don’t want to invalidate slots > during a binary upgrade and it only triggers(raise error) when all > three conditions are true, meaning when 'IsBinaryUpgrade' is also > true. > That said, I agree with your point that we are unnecessarily checking > "(*invalidated && SlotIsLogical(s))" even when not in binary upgrade > mode. > To optimize this, we can first check 'IsBinaryUpgrade' before > evaluating the other conditions: > Assert(!(IsBinaryUpgrade && *invalidated && SlotIsLogical(s))); > - Since 'IsBinaryUpgrade' is 'false' most of the time, this approach > short-circuits evaluation, making it more efficient. > > However, if you feel that this condition isn’t as clear to read or > understand, we can separate the 'IsBinaryUpgrade' check outside the > 'Assert', as you suggested. Let me know what you think! > I discussed the above comments further with Peter off-list, and here are the v63 patches with the following changes: patch-001: The Assert and related comments have been updated for clarity. patch-002: Comments have been updated at the top of InvalidateObsoleteReplicationSlots(). -- Thanks, Nisha