RE: Time delayed LR (WAS Re: logical replication restrictions) - Mailing list pgsql-hackers
From | Takamichi Osumi (Fujitsu) |
---|---|
Subject | RE: Time delayed LR (WAS Re: logical replication restrictions) |
Date | |
Msg-id | TYCPR01MB8373E36240E1E0EE308D2B1BEDC79@TYCPR01MB8373.jpnprd01.prod.outlook.com Whole thread Raw |
In response to | Re: Time delayed LR (WAS Re: logical replication restrictions) (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
Re: Time delayed LR (WAS Re: logical replication restrictions)
|
List | pgsql-hackers |
Hi, On Tuesday, January 17, 2023 9:54 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > On Tue, Jan 17, 2023 at 4:30 PM Takamichi Osumi (Fujitsu) > <osumi.takamichi@fujitsu.com> wrote: > > > > On Saturday, January 14, 2023 3:27 PM vignesh C <vignesh21@gmail.com> > wrote: > > > > > 2) I'm not sure if this will add any extra coverage as the altering > > > value of min_apply_delay is already tested in the regression, if so > > > this test can be > > > removed: > > > +# Test ALTER SUBSCRIPTION. Delay 86460 seconds (1 day 1 minute). > > > +$node_subscriber->safe_psql('postgres', > > > + "ALTER SUBSCRIPTION tap_sub SET (min_apply_delay = > > > 86460000)" > > > +); > > > + > > > +# New row to trigger apply delay. > > > +$node_publisher->safe_psql('postgres', > > > + "INSERT INTO test_tab VALUES (0, 'foobar')"); > > > + > > > +check_apply_delay_log("logical replication apply delay", > > > +"80000000"); > > While addressing this point, I've noticed that there is a behavior > > difference between physical replication's recovery_min_apply_delay and > > this feature when stopping the replication during delays. > > > > At present, in the latter case, > > the apply worker exits without applying the suspended transaction > > after ALTER SUBSCRIPTION DISABLE command for the subscription. > > > > In the previous paragraph, you said the behavior difference while stopping the > replication but it is not clear from where this DISABLE command comes in that > scenario. Sorry for my unclear description. I mean "stopping the replication" is to disable the subscription during the "min_apply_delay" wait time on logical replication setup. I proposed and mentioned this discussion point to define how the time-delayed apply worker should behave when there is a transaction delayed by "min_apply_delay" parameter and additionally the user issues ALTER SUBSCRIPTION ... DISABLE during the delay. When it comes to physical replication, it's hard to find a perfect correspondent for LR's ALTER SUBSCRIPTION DISABLE command, but I chose a scenario to promote a secondary during "recovery_min_apply_delay" for comparison this time. After the promotion of the secondary in the physical replication, the transaction committed on the publisher but delayed on the secondary can be seen. This would be because CheckForStandbyTrigger in recoveryApplyDelay returns true and we apply the record by breaking the wait. I checked and got the LOG message "received promote request" in the secondary log when I tested this case. > > Meanwhile, there is no "disabling" command for physical replication, > > but I checked the behavior about what happens for promoting a > > secondary during the delay of recovery_min_apply_delay for physical > replication as one example. > > The transaction has become visible even in the promoting in the middle of > delay. > > > > What causes such a transaction to be visible after promotion? Ideally, if the > commit doesn't succeed, the transaction shouldn't be visible. > Do, we allow the transaction waiting due to delay to get committed on > promotion? The commit succeeded on the primary and then I promoted the secondary during the "recovery_min_apply_delay" wait of the transaction. Then, the result is the transaction turned out to be available on the promoted secondary. > > I'm not sure if I should make the time-delayed LR aligned with this behavior. > > Does someone has an opinion for this ? > > > > Can you please explain a bit more as asked above to understand the > difference? So, the current difference is that the time-delayed apply worker of logical replication doesn't apply the delayed transaction on the subscriber when the subscription has been disabled during the delay, while (in one example of a promotion) the physical replication does the apply of the delayed transaction. Best Regards, Takamichi Osumi
pgsql-hackers by date: