| From: | Paul Guo <pguo(at)pivotal(dot)io> |
|---|---|
| To: | PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Questions about SyncRepWaitForLSN() |
| Date: | 2019-12-16 07:37:41 |
| Message-ID: | CAEET0ZHG5oFF7iEcbY6TZadh1mosLmfz1HLm311P9VOt7Z+jeg@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hello pg hackers,
This is the definition of the function:
SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
1. In the code, it emits ereport(WARNING) for the
ProcDiePending/QueryCancelPending case like this:
ereport(WARNING,
(errcode(ERRCODE_ADMIN_SHUTDOWN),
errmsg("canceling the wait for synchronous
replication and terminating connection due to administrator command"),
errdetail("The transaction has already committed
locally, but might not have been replicated to the standby.")));
The message "The transaction has already committed locally" is wrong
for non-commit waiting e.g. 2PC Prepare or AbortPrepare, right? so maybe we
just give the errdtail for the commit==true case.
2. I'm curious how the client should proceed for the ProcDiePending corner
case in the function (assuming synchronous_commit as remote_write or
above). In this scenario, a transaction has been committed locally on
master but we are not sure if the commit is replicated to standby or not if
ProcDiePending happens. The commit is not in a safe status from the
perspective of HA, for example if further when auto-failover happens, we
may or may not lose the transaction commit on the standby and client just
gets (and even can not get) a warning of unknown commit replication status.
Thanks.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Etsuro Fujita | 2019-12-16 08:19:36 | Re: Unmatched test and comment in partition_join.sql regression test |
| Previous Message | Thomas Munro | 2019-12-16 06:42:33 | Re: What's the best way to get flex and bison on Windows? |