Incorrect CONTEXT reported for errors from parallel apply worker in logical replication

From: vignesh C <vignesh21(at)gmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Incorrect CONTEXT reported for errors from parallel apply worker in logical replication
Date: 2026-10-08 06:00:16
Message-ID: CALDaNm0SSCS5EJ_KNXau_3iCr_KrpKth=ZrTeOf1DCFbE=3=9w@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

While reviewing another thread at [1], I found an issue where an error
relayed from a parallel apply worker can get an unrelated CONTEXT line
from the leader process.
ProcessParallelApplyMessage() in applyparallelworker.c sets
error_context_stack to the leader's apply_error_context_stack before
calling ereport(ERROR). As a result, when errfinish() processes the
error, the leader's error context callback runs again and adds the
leader's current replication context. This can be incorrect if the
leader is processing a different transaction when it receives the
error from the parallel worker. For example, in my test:
tab_a is processed by a parallel worker and fails due to a trigger.

The leader is processing an unrelated insert into tab_b. The parallel
worker's error is received while the leader is processing tab_b. The
final error incorrectly contains context for both tab_a and tab_b. The
resulting error looks like:
ERROR: logical replication parallel apply worker exited due to error
CONTEXT: PL/pgSQL function public.tab_a_boom_fn() line 3 at RAISE
processing remote data ... relation "public.tab_a" ...
logical replication parallel apply worker
processing remote data ... relation "public.tab_b" ...

The tab_b context is unrelated to the actual failure and comes from
the leader's current activity.
I have attached a test that reproduces the issue. The test verifies
that the relayed error contains the context for tab_a but does not
include the leader's unrelated tab_b context. It currently fails on
the second assertion. I think the error handling in
ProcessParallelApplyMessage() should avoid running the leader's
current error-context callbacks when re-throwing the worker's error.

Regards,
Vignesh

Attachment Content-Type Size
0001-Test-to-reproduce-parallel-apply-error-context-issue.patch application/octet-stream 8.4 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Richard Guo 2026-10-08 06:12:12 "failed to build any N-way joins" from a five-relation query
Previous Message Manu 2026-10-08 06:00:10 Re: [PG19] Wrong results from Memoize with a nondeterministic collation