Re: Review for GetWALAvailability()
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: alvherre@2ndquadrant.com
Cc: masao.fujii@oss.nttdata.com, pgsql-hackers@lists.postgresql.org
Date: 2020-06-17T01:17:07Z
Lists: pgsql-hackers
At Tue, 16 Jun 2020 14:31:43 -0400, Alvaro Herrera <alvherre@2ndquadrant.com> wrote in > On 2020-Jun-16, Kyotaro Horiguchi wrote: > > > I noticed the another issue. If some required WALs are removed, the > > slot will be "invalidated", that is, restart_lsn is set to invalid > > value. As the result we hardly see the "lost" state. > > > > It can be "fixed" by remembering the validity of a slot separately > > from restart_lsn. Is that worth doing? > > We discussed this before. I agree it would be better to do this > in some way, but I fear that if we do it naively, some code might exist > that reads the LSN without realizing that it needs to check the validity > flag first. Yes, that was my main concern on it. That's error-prone. How about remembering the LSN where invalidation happened? It's safe since no others than slot-monitoring functions would look last_invalidated_lsn. It can be reset if active_pid is a valid pid. InvalidateObsoleteReplicationSlots: ... SpinLockAcquire(&s->mutex); + s->data.last_invalidated_lsn = s->data.restart_lsn; s->data.restart_lsn = InvalidXLogRecPtr; SpinLockRelease(&s->mutex); > On the other hand, maybe this is not a problem in practice, because if > such a bug occurs, what will happen is that trying to read WAL from such > a slot will return the error message that the WAL file cannot be found. > Maybe this is acceptable? I'm not sure. For my part a problem of that would we need to look into server logs to know what is acutally going on. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Persist slot invalidation correctly
- 4ae08cd5fd19 14.0 landed
- 3b4b541777f0 13.0 landed
-
Adjust max_slot_wal_keep_size behavior per review
- b8fd4e02c6d0 14.0 landed
- 6f7a862bed3a 13.0 landed
-
Save slot's restart_lsn when invalidated due to size
- 12e52ba5a76e 13.0 landed
- 0188bb82531f 14.0 landed
-
Fix issues in invalidation of obsolete replication slots.
- 08aa3151e730 13.0 landed
- f9e9704f09da 14.0 landed