Re: logical replication: restart_lsn can go backwards (and more), seems broken since 9.4
Tomas Vondra <tomas@vondra.me>
From: Tomas Vondra <tomas@vondra.me>
To: Masahiko Sawada <sawada.mshk@gmail.com>,
Amit Kapila <amit.kapila16@gmail.com>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2024-11-15T17:48:05Z
Lists: pgsql-hackers
On 11/15/24 18:40, Masahiko Sawada wrote: > On Thu, Nov 14, 2024 at 10:16 PM Amit Kapila <amit.kapila16@gmail.com> wrote: >> >> On Thu, Nov 14, 2024 at 7:08 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote: >>> >>> Sure. I've attached the updated patch. I just added the commit message. >>> >> >> @@ -1815,6 +1818,8 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr >> current_lsn, XLogRecPtr restart >> confirmed_flush = slot->data.confirmed_flush; >> SpinLockRelease(&slot->mutex); >> >> + spin_released = true; >> + >> elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after >> %X/%X, current candidate %X/%X, current after %X/%X, flushed up to >> %X/%X", >> LSN_FORMAT_ARGS(restart_lsn), >> LSN_FORMAT_ARGS(current_lsn), >> @@ -1823,6 +1828,9 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr >> current_lsn, XLogRecPtr restart >> LSN_FORMAT_ARGS(confirmed_flush)); >> } >> >> + if (!spin_released) >> + SpinLockRelease(&slot->mutex); >> >> This coding pattern looks odd to me. We can consider releasing >> spinlock in the other two if/else if checks. I understand it is a >> matter of individual preference, so, if you and or others prefer the >> current way, that is also fine with me. Other than this, the patch >> looks good to me. > > Indeed, I prefer your idea. I"ve attached the updated patch. I'll push > it early next week unless there are further comments. > I'm not particularly attached to how I did this in my WIP patch, it was simply the simplest way to make it work for experimentation. I'd imagine it'd be best to just mirror how LogicalIncreaseXminForSlot() does this. regards -- Tomas Vondra
Commits
-
Fix a possibility of logical replication slot's restart_lsn going backwards.
- e5ed873b1b4a 18.0 landed
- 568e78a653ee 17.2 landed
- f353911337cf 16.6 landed
- 91771b3fbbc3 15.10 landed
- 26c4e8968690 14.15 landed
- 15dc1abb17dd 13.18 landed
-
Introduce logical decoding.
- b89e151054a0 9.4.0 cited