Re: Introduce XID age and inactive timeout based replication slot invalidation
От | Bharath Rupireddy |
---|---|
Тема | Re: Introduce XID age and inactive timeout based replication slot invalidation |
Дата | |
Msg-id | CALj2ACXQmGx-L073=8CUSOk3hhe=HL_e6dveYeR9WJcEh+7jvg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Introduce XID age and inactive timeout based replication slot invalidation (Amit Kapila <amit.kapila16@gmail.com>) |
Ответы |
Re: Introduce XID age and inactive timeout based replication slot invalidation
Re: Introduce XID age and inactive timeout based replication slot invalidation |
Список | pgsql-hackers |
On Sat, Mar 23, 2024 at 11:27 AM Amit Kapila <amit.kapila16@gmail.com> wrote: > > How about adding the test in 019_replslot_limit? It is not a direct > fit but I feel later we can even add 'invalid_timeout' related tests > in this file which will use last_inactive_time feature. I'm thinking the other way. Now, the new TAP file 043_replslot_misc.pl can have last_inactive_time tests, and later invalid_timeout ones too. This way 019_replslot_limit.pl is not cluttered. > It is also > possible that some of the tests added by the 'invalid_timeout' feature > will obviate the need for some of these tests. Might be. But, I prefer to keep both these tests separate but in the same file 043_replslot_misc.pl. Because we cover some corner cases the last_inactive_time is set upon loading the slot from disk. > Review of v15 > ============== > 1. > @@ -1026,7 +1026,8 @@ CREATE VIEW pg_replication_slots AS > L.conflicting, > L.invalidation_reason, > L.failover, > - L.synced > + L.synced, > + L.last_inactive_time > FROM pg_get_replication_slots() AS L > > As mentioned previously, let's keep these new fields before > conflicting and after two_phase. Sorry, I forgot to notice that comment (out of a flood of comments really :)). Now, done that way. > 2. > +# Get last_inactive_time value after slot's creation. Note that the > slot is still > +# inactive unless it's used by the standby below. > +my $last_inactive_time_1 = $primary->safe_psql('postgres', > + qq(SELECT last_inactive_time FROM pg_replication_slots WHERE > slot_name = '$sb_slot' AND last_inactive_time IS NOT NULL;) > +); > > We should check $last_inactive_time_1 to be a valid value and add a > similar check for logical slots. That's taken care by the type cast we do, right? Isn't that enough? is( $primary->safe_psql( 'postgres', qq[SELECT last_inactive_time > '$last_inactive_time'::timestamptz FROM pg_replication_slots WHERE slot_name = '$sb_slot' AND last_inactive_time IS NOT NULL;] ), 't', 'last inactive time for an inactive physical slot is updated correctly'); For instance, setting last_inactive_time_1 to an invalid value fails with the following error: error running SQL: 'psql:<stdin>:1: ERROR: invalid input syntax for type timestamp with time zone: "foo" LINE 1: SELECT last_inactive_time > 'foo'::timestamptz FROM pg_repli... > 3. BTW, why don't we set last_inactive_time for temporary slots > (RS_TEMPORARY) as well? Don't we even invalidate temporary slots? If > so, then I think we should set last_inactive_time for those as well > and later allow them to be invalidated based on timeout parameter. WFM. Done that way. Please see the attached v16 patch. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
Вложения
В списке pgsql-hackers по дате отправления: