Re: Catalog_xmin is not advanced when a logical slot is lost
sirisha chamarthi <sirichamarthi22@gmail.com>
From: sirisha chamarthi <sirichamarthi22@gmail.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>,
pgsql-hackers@lists.postgresql.org, Amit Kapila <amit.kapila16@gmail.com>,
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Date: 2022-11-21T18:48:55Z
Lists: pgsql-hackers
On Mon, Nov 21, 2022 at 10:40 AM sirisha chamarthi < sirichamarthi22@gmail.com> wrote: > > > On Mon, Nov 21, 2022 at 10:11 AM Alvaro Herrera <alvherre@alvh.no-ip.org> > wrote: > >> On 2022-Nov-21, sirisha chamarthi wrote: >> >> > It appears to be. wal_sender is setting restart_lsn to a valid LSN even >> > when the slot is invalidated. >> >> > postgres@pgvm:~$ /usr/local/pgsql/bin/pg_receivewal -S s1 -D . >> > pg_receivewal: error: unexpected termination of replication stream: >> ERROR: >> > requested WAL segment 0000000100000000000000EB has already been removed >> > pg_receivewal: disconnected; waiting 5 seconds to try again >> > ^Cpostgres@pgvm:~$ /usr/local/pgsql/bin/psql >> > psql (16devel) >> > Type "help" for help. >> > >> > postgres=# select * from pg_replication_slots; >> > server closed the connection unexpectedly >> > This probably means the server terminated abnormally >> > before or while processing the request. >> >> Whoa, I cannot reproduce this :-( >> > > I have a old .partial file in the data directory to reproduce this. > > postgres=# select * from pg_replication_slots; > slot_name | plugin | slot_type | datoid | database | temporary | active | > active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | > wal_status | safe_wal_size | two_phase > > -----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- > s2 | | physical | | | f | f | > | | | 2/DC000000 | | lost > | | f > (1 row) > > postgres=# \q > postgres@pgvm:~$ ls > 0000000100000002000000D8 0000000100000002000000D9 > 0000000100000002000000DA 0000000100000002000000DB > 0000000100000002000000DC.partial > Just to be clear, it was hitting the assert I added in the slotfuncs.c but not in the code you mentioned. Apologies for the confusion. Also it appears in the above case I mentioned, the slot is not invalidated yet as the checkpointer did not run though the state says it is lost. > > >> >> -- >> Álvaro Herrera Breisgau, Deutschland — >> https://www.EnterpriseDB.com/ >> "Java is clearly an example of money oriented programming" (A. Stepanov) >> >
Commits
-
Ignore invalidated slots while computing oldest catalog Xmin
- 36eeb37cd611 13.10 landed
- 1b3ed757145d 14.7 landed
- 1ad033df16df 15.2 landed
- 0557e1770230 16.0 landed