Re: BUG #18280: logical decoding build wrong snapshot for subtransactions

feichanghong <feichanghong@qq.com>

From: feichanghong <feichanghong@qq.com>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: pgsql-bugs <pgsql-bugs@lists.postgresql.org>
Date: 2024-01-23T12:27:59Z
Lists: pgsql-bugs

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix catalog lookup due to wrong snapshot for subtransactions during decoding.

  2. Fix catalog lookup with the wrong snapshot during logical decoding.

Thank you for your attention.

> On Jan 23, 2024, at 19:42, Amit Kapila <amit.kapila16@gmail.com> wrote:
> 
> On Wed, Jan 10, 2024 at 7:56 PM feichanghong <feichanghong@qq.com> wrote:
>> 
>>> SnapBuildXidSetCatalogChanges (introduced in 272248a) skipping the check for
>>> the sub-transactions when the parent transaction has been marked as
>>> containing catalog changes should be the root cause of the problem.
>> 
>> My fix is to remove the ReorderBufferXidHasCatalogChanges condition from the SnapBuildXidSetCatalogChanges function. This approach has a false positive; the subtransactions that didn't change catalog to the snapshot are also added to the commit list. But that won't be a problem since we use snapshot built during decoding only to read system catalogs, as 272248a's commit message says.
>> 
> 
> Thanks, your analysis sounds correct to me. BTW, I think this should
> occur only in 15 and 14 because in prior branches we didn't check if
> the xact has catalog changes before marking its subxacts. From 16
> onwards, we already accurately serialize the xacts and subxacts that
> have made any catalog changes, so this problem shouldn't be there. Can
> you please once verify the same?
> 
Yes, I verified versions 11 to 16 one by one, and this problem only occurs
in 14 and 15.

Best Regards,
Fei Changhong
Alibaba Cloud Computing Ltd.