Bug report and fix about building historic snapshot

From: cca5507 <cca5507(at)qq(dot)com>
To: pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Bug report and fix about building historic snapshot
Date: 2024-01-21 09:25:14
Message-ID: tencent_0C36ED9C43750AA16BD753F26492F0580F09@qq.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello, I find a bug in building historic snapshot and the steps to reproduce are as follows:

Prepare:

(pub)create table t1 (id int primary key);

(pub)insert into t1 values (1);

(pub)create publication pub for table t1;

(sub)create table t1 (id int primary key);

Reproduce:

(pub)begin; insert into t1 values (2); (txn1 in session1)

(sub)create subscription sub connection 'hostaddr=127.0.0.1 port=5432 user=xxx dbname=postgres' publication pub; (pub will switch to BUILDING_SNAPSHOT state soon)

(pub)begin; insert into t1 values (3); (txn2 in session2)

(pub)create table t2 (id int primary key); (session3)

(pub)commit; (commit txn1, and pub will switch to FULL_SNAPSHOT state soon)

(pub)begin; insert into t2 values (1); (txn3 in session3)

(pub)commit; (commit txn2, and pub will switch to CONSISTENT state soon)

(pub)commit; (commit txn3, and replay txn3 will failed because its snapshot cannot see t2)

Reasons:
We currently don't track the transaction that begin after BUILDING_SNAPSHOT
and commit before FULL_SNAPSHOT when building historic snapshot in logical
decoding. This can cause a transaction which begin after FULL_SNAPSHOT to take
an incorrect historic snapshot because transactions committed in BUILDING_SNAPSHOT
state will not be processed by SnapBuildCommitTxn().

To fix it, we can track the transaction that begin after BUILDING_SNAPSHOT and
commit before FULL_SNAPSHOT forcely by using SnapBuildCommitTxn().

--
Regards,
ChangAo Chen

Attachment Content-Type Size
0001-Track-transactions-committed-in-BUILDING_SNAPSHOT.patch application/octet-stream 4.3 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Yongtao Huang 2024-01-21 12:22:01 Fix some typos
Previous Message vignesh C 2024-01-21 02:26:02 Re: Allow parallel plan for referential integrity checks?