From: | "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com> |
---|---|
To: | 'Amit Kapila' <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Ajin Cherian <itsajin(at)gmail(dot)com>, Давыдов Виталий <v(dot)davydov(at)postgrespro(dot)ru>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | RE: Slow catchup of 2PC (twophase) transactions on replica in LR |
Date: | 2024-07-04 08:04:47 |
Message-ID: | OSBPR01MB2552A7C652D452185785A3C2F5DE2@OSBPR01MB2552.jpnprd01.prod.outlook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Dear Amit,
> >
> > It succeeds if force_alter is also expressly set. Prepared transactions will be
> > aborted at that time.
> >
> > ```
> > subscriber=# ALTER SUBSCRIPTION sub SET (two_phase = off, force_alter =
> on);
> > ALTER SUBSCRIPTION
> >
>
> Isn't it better to give a Notice when force_alter option leads to the
> rollback of already prepared transactions?
Indeed. I think this can be added for 0003. For now, it says like:
```
postgres=# ALTER SUBSCRIPTION sub SET (TWO_PHASE = off, FORCE_ALTER = on);
WARNING: requested altering to two_phase = false but there are prepared transactions done by the subscription
DETAIL: Such transactions are being rollbacked.
ALTER SUBSCRIPTION
```
> I have another question on the latest 0001 patch:
> + /*
> + * Stop all the subscription workers, just in case.
> + * Workers may still survive even if the subscription is
> + * disabled.
> + */
> + logicalrep_workers_stop(subid);
>
> In which case the workers will survive when the subscription is disabled?
I think both normal and tablesync worker can survive, because ALTER SUBSCRIPTION
DISABLE command does not send signal to workers. It just change the system catalog.
logicalrep_workers_stop() is added to ensure all workers are stopped.
Actually, earlier version (-v3) did not have a mechanism but they sometimes got
assertion failures in maybe_reread_subscription(). This was because the survived
workers read pg_subscription catalog and failed below assertion:
```
/* two-phase cannot be altered while the worker exists */
Assert(newsub->twophasestate == MySubscription->twophasestate);
```
Best Regards,
Hayato Kuroda
FUJITSU LIMITED
https://www.fujitsu.com/
Attachment | Content-Type | Size |
---|---|---|
v14-0001-Allow-altering-of-two_phase-option-of-a-SUBSCRIP.patch | application/octet-stream | 25.5 KB |
v14-0002-Alter-slot-option-two_phase-only-when-altering-t.patch | application/octet-stream | 12.3 KB |
v14-0003-Abort-prepared-transactions-while-altering-two_p.patch | application/octet-stream | 10.0 KB |
v14-0004-Add-force_alter-option-for-ALTER-SUBSCRIPTION-.-.patch | application/octet-stream | 57.2 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2024-07-04 08:09:25 | pgsql: Add pg_get_acl() to get the ACL for a database object |
Previous Message | Alexander Lakhin | 2024-07-04 08:00:01 | Re: Internal error codes triggered by tests |