| From: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
|---|---|
| To: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> |
| Cc: | shihao zhong <zhong950419(at)gmail(dot)com>, Manu <manuelreyesbravo(at)gmail(dot)com>, Fujii Masao <masao(dot)fujii(at)gmail(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Noah Misch <noah(at)leadboat(dot)com> |
| Subject: | Re: [PG19] Promotion hangs behind a backend blocked on a stuck client |
| Date: | 2026-10-20 07:19:56 |
| Message-ID: | CAA4eK1+weHL7Nnjj1JE3QAjcyJSajhj7wF+JZraL0aWEH+KN+g@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, Oct 20, 2026 at 2:47 AM Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> wrote:
>
> On Sun, Oct 18, 2026 at 5:14 PM shihao zhong <zhong950419(at)gmail(dot)com> wrote:
>
> TBH I'm still unsure that the 0001 patch is the correct approach.
> ProcessProcSignalBarrier() is written on the assumption that a handler
> can raise an error. That's why it has a PG_TRY block for a later
> retry. In v19 we have only two handlers, ProcessBarrierSmgrRelease()
> and ProcessBarrierUpdateXLogLogicalInfo(), and neither raises an
> error. But on master, AbsorbDataChecksumsBarrier() raises an error on
> purpose, with a comment saying it "will be caught by the procsignal
> machinery for a later retry". With 0001 that error would terminate the
> session instead of being retried. So the assumption that 0001 adds is
> already false on master.
>
> Other possible solutions are: (1) send the signal barrier at promotion
> only when we really need to send it. In other words, if we know that
> logical decoding has been enabled from the startup and no change
> happened during the recovery, we can skip it even if wal_level =
> replica. (2) the startup process terminates the backend who doesn't
> absorb the barrier, like as we resolve the recovery conflicts.
>
> (1) would narrow further the case where we need the wait, but doesn't
> eliminate the case completely.
>
Right, for example, If the first logical slot appeared on the primary
shortly before promotion, replay toggled the status (false→true), the
case counts as "changed," and the wait remains. So, the same problem
still exists.
> (2) sounds more promising to me, and we
> already have similar machinery such as
> ResolveRecoveryConflictWithVirtualXIDs().
>
Like ResolveRecoveryConflictWithVirtualXIDs(), we may want to wait for
sometime (which needs GUC or a fixed time wait) before terminating the
backend. I think this is a direction worth pursuing but I feel it is
too late for v19 considering the amount/complexity of changes
required. I feel for v19, we can add a Note in the docs with a
workaround and then discuss the more robust solution for HEAD.
--
With Regards,
Amit Kapila.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Geier | 2026-10-20 07:27:57 | Re: Improving scalability of Parallel Bitmap Heap/Index Scan |
| Previous Message | Chao Li | 2026-10-20 07:01:29 | Re: tablecmds: Deadlock caused by Attach Partition |