Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3f710fc

Browse files
committed
Remove assertion for replication origins in PREPARE TRANSACTION
When using replication origins, pg_replication_origin_xact_setup() is anoptional choice to be able to set a LSN and a timestamp to mark theorigin, which would be additionally added to WAL for transaction commitsor aborts (including 2PC transactions). An assertion in the code pathof PREPARE TRANSACTION assumed that this data should always be set, soit would trigger when using replication origins without setting up anorigin LSN. Some tests are added to cover more this kind of scenario.Oversight in commit1eb6d65.Per discussion with Amit Kapila and Masahiko Sawada.Discussion:https://postgr.es/m/YbbBfNSvMm5nIINV@paquier.xyzBackpatch-through: 11
1 parente459dcf commit3f710fc

File tree

3 files changed

+108
-1
lines changed

3 files changed

+108
-1
lines changed

‎contrib/test_decoding/expected/replorigin.out

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,79 @@ SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot');
152152

153153
(1 row)
154154

155+
-- Set of transactions with no origin LSNs and commit timestamps set for
156+
-- this session.
157+
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_no_lsn', 'test_decoding');
158+
?column?
159+
----------
160+
init
161+
(1 row)
162+
163+
SELECT pg_replication_origin_create('regress_test_decoding: regression_slot_no_lsn');
164+
pg_replication_origin_create
165+
------------------------------
166+
1
167+
(1 row)
168+
169+
-- mark session as replaying
170+
SELECT pg_replication_origin_session_setup('regress_test_decoding: regression_slot_no_lsn');
171+
pg_replication_origin_session_setup
172+
-------------------------------------
173+
174+
(1 row)
175+
176+
-- Simple transactions
177+
BEGIN;
178+
INSERT INTO origin_tbl(data) VALUES ('no_lsn, commit');
179+
COMMIT;
180+
BEGIN;
181+
INSERT INTO origin_tbl(data) VALUES ('no_lsn, rollback');
182+
ROLLBACK;
183+
-- 2PC transactions
184+
BEGIN;
185+
INSERT INTO origin_tbl(data) VALUES ('no_lsn, commit prepared');
186+
PREPARE TRANSACTION 'replorigin_prepared';
187+
COMMIT PREPARED 'replorigin_prepared';
188+
BEGIN;
189+
INSERT INTO origin_tbl(data) VALUES ('no_lsn, rollback prepared');
190+
PREPARE TRANSACTION 'replorigin_prepared';
191+
ROLLBACK PREPARED 'replorigin_prepared';
192+
SELECT local_id, external_id,
193+
remote_lsn <> '0/0' AS valid_remote_lsn,
194+
local_lsn <> '0/0' AS valid_local_lsn
195+
FROM pg_replication_origin_status;
196+
local_id | external_id | valid_remote_lsn | valid_local_lsn
197+
----------+-----------------------------------------------+------------------+-----------------
198+
1 | regress_test_decoding: regression_slot_no_lsn | f | t
199+
(1 row)
200+
201+
SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NULL, 'skip-empty-xacts', '1', 'include-xids', '0');
202+
data
203+
-------------------------------------------------------------------------------------
204+
BEGIN
205+
table public.origin_tbl: INSERT: id[integer]:4 data[text]:'no_lsn, commit'
206+
COMMIT
207+
BEGIN
208+
table public.origin_tbl: INSERT: id[integer]:6 data[text]:'no_lsn, commit prepared'
209+
COMMIT
210+
(6 rows)
211+
212+
-- Clean up
213+
SELECT pg_replication_origin_session_reset();
214+
pg_replication_origin_session_reset
215+
-------------------------------------
216+
217+
(1 row)
218+
219+
SELECT pg_drop_replication_slot('regression_slot_no_lsn');
220+
pg_drop_replication_slot
221+
--------------------------
222+
223+
(1 row)
224+
225+
SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot_no_lsn');
226+
pg_replication_origin_drop
227+
----------------------------
228+
229+
(1 row)
230+

‎contrib/test_decoding/sql/replorigin.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,35 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'inc
6969

7070
SELECT pg_drop_replication_slot('regression_slot');
7171
SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot');
72+
73+
-- Set of transactions with no origin LSNs and commit timestamps set for
74+
-- this session.
75+
SELECT'init'FROM pg_create_logical_replication_slot('regression_slot_no_lsn','test_decoding');
76+
SELECT pg_replication_origin_create('regress_test_decoding: regression_slot_no_lsn');
77+
-- mark session as replaying
78+
SELECT pg_replication_origin_session_setup('regress_test_decoding: regression_slot_no_lsn');
79+
-- Simple transactions
80+
BEGIN;
81+
INSERT INTO origin_tbl(data)VALUES ('no_lsn, commit');
82+
COMMIT;
83+
BEGIN;
84+
INSERT INTO origin_tbl(data)VALUES ('no_lsn, rollback');
85+
ROLLBACK;
86+
-- 2PC transactions
87+
BEGIN;
88+
INSERT INTO origin_tbl(data)VALUES ('no_lsn, commit prepared');
89+
PREPARE TRANSACTION'replorigin_prepared';
90+
COMMIT PREPARED'replorigin_prepared';
91+
BEGIN;
92+
INSERT INTO origin_tbl(data)VALUES ('no_lsn, rollback prepared');
93+
PREPARE TRANSACTION'replorigin_prepared';
94+
ROLLBACK PREPARED'replorigin_prepared';
95+
SELECT local_id, external_id,
96+
remote_lsn<>'0/0'AS valid_remote_lsn,
97+
local_lsn<>'0/0'AS valid_local_lsn
98+
FROM pg_replication_origin_status;
99+
SELECT dataFROM pg_logical_slot_get_changes('regression_slot_no_lsn',NULL,NULL,'skip-empty-xacts','1','include-xids','0');
100+
-- Clean up
101+
SELECT pg_replication_origin_session_reset();
102+
SELECT pg_drop_replication_slot('regression_slot_no_lsn');
103+
SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot_no_lsn');

‎src/backend/access/transam/twophase.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,6 @@ EndPrepare(GlobalTransaction gxact)
11341134

11351135
if (replorigin)
11361136
{
1137-
Assert(replorigin_session_origin_lsn!=InvalidXLogRecPtr);
11381137
hdr->origin_lsn=replorigin_session_origin_lsn;
11391138
hdr->origin_timestamp=replorigin_session_origin_timestamp;
11401139
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp