Re: Restricting maximum keep segments by repslots
Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
From: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
To: andres@anarazel.de
Cc: peter.eisentraut@2ndquadrant.com, pgsql-hackers@postgresql.org
Date: 2017-11-09T08:31:28Z
Lists: pgsql-hackers
Attachments
- 0001-Add-WAL-releaf-vent-for-replication-slots-4.patch (text/x-patch)
Oops! The previous patch is forgetting the default case and crashes. At Wed, 08 Nov 2017 13:14:31 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote in <20171108.131431.170534842.horiguchi.kyotaro@lab.ntt.co.jp> > > I don't think 'distance' is a good metric - that's going to continually > > change. Why not store the LSN that's available and provide a function > > that computes this? Or just rely on the lsn - lsn operator? > > It seems reasonable.,The 'secured minimum LSN' is common among > all slots so showing it in the view may look a bit stupid but I > don't find another suitable place for it. distance = 0 meant the > state that the slot is living but insecured in the previous patch > and that information is lost by changing 'distance' to > 'min_secure_lsn'. > > Thus I changed the 'live' column to 'status' and show that staus > in text representation. > > status: secured | insecured | broken > > So this looks like the following (max_slot_wal_keep_size = 8MB, > which is a half of the default segment size) > > -- slots that required WAL is surely available > select restart_lsn, status, min_secure_lsn, pg_current_wal_lsn() from pg_replication_slots; > restart_lsn | status | min_recure_lsn | pg_current_wal_lsn > ------------+---------+----------------+-------------------- > 0/1A000060 | secured | 0/1A000000 | 0/1B42BC78 > > -- slots that required WAL is still available but insecured > restart_lsn | status | min_recure_lsn | pg_current_wal_lsn > ------------+-----------+----------------+-------------------- > 0/1A000060 | insecured | 0/1C000000 | 0/1D76C948 > > -- slots that required WAL is lost > # We should have seen the log 'Some replication slots have lost...' > > restart_lsn | status | min_recure_lsn | pg_current_wal_lsn > ------------+--------+----------------+-------------------- > 0/1A000060 | broken | 0/1C000000 | 0/1D76C9F0 > > > I noticed that I abandoned the segment fragment of > max_slot_wal_keep_size in calculating in the routines. The > current patch honors the frament part of max_slot_wal_keep_size. I changed IsLsnStillAvailable to return meaningful values regardless whether max_slot_wal_keep_size is set or not. # I had been forgetting to count the version for latestst several # patches. I give the version '4' - as the next of the last # numbered patch. -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Save slot's restart_lsn when invalidated due to size
- 12e52ba5a76e 13.0 landed
- 0188bb82531f 14.0 landed
-
Fix checkpoint signalling
- 1816a1c6ffe4 13.0 landed
-
Check slot->restart_lsn validity in a few more places
- d0abe78d8427 13.0 landed
-
Allow users to limit storage reserved by replication slots
- c6550776394e 13.0 landed
-
Remove header noise from test_decoding test
- 69360b34589b 13.0 landed
-
Rework WAL-reading supporting structs
- 709d003fbd98 13.0 cited
-
Flip argument order in XLogSegNoOffsetToRecPtr
- a22445ff0be2 12.0 cited