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

Appearance settings

Commit 48efb23

Browse filesBrowse files
Fix assertion failure in snapshot building
Clear any potential stale next_phase_at value from the snapshot builder which otherwise may trip an assertion check ensuring that there is no next_phase_at value. This can be reproduced by running 80 concurrent sessions like the below where $c is a loop counter (assumes there has been 1..$c databases created) : echo " CREATE TABLE replication_example(id SERIAL PRIMARY KEY, somedata int, text varchar(120)); SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot_$c', 'test_decoding'); SELECT data FROM pg_logical_slot_get_changes('regression_slot_$c', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); " | psql -d regress_$c >>psql.log & Backpatch down to v16. Bug: #17695 Author: Masahiko Sawada <sawada.mshk@gmail.com> Reviewed-by: Alexander Lakhin <exclusion@gmail.com> Reported-by: bowenshi <zxwsbg@qq.com> Discussion: https://postgr.es/m/17695-6be9277c9295985f@postgresql.org Backpatch-through: v16
1 parent 4b4798e commit 48efb23
Copy full SHA for 48efb23

File tree

1 file changed

+5
-1
lines changed
Filter options

1 file changed

+5
-1
lines changed

‎src/backend/replication/logical/snapbuild.c

Copy file name to clipboardExpand all lines: src/backend/replication/logical/snapbuild.c
+5-1Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1955,8 +1955,12 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
19551955
if (TransactionIdPrecedes(ondisk.builder.xmin, builder->initial_xmin_horizon))
19561956
goto snapshot_not_interesting;
19571957

1958-
/* consistent snapshots have no next phase */
1958+
/*
1959+
* Consistent snapshots have no next phase. Reset next_phase_at as it is
1960+
* possible that an old value may remain.
1961+
*/
19591962
Assert(ondisk.builder.next_phase_at == InvalidTransactionId);
1963+
builder->next_phase_at = InvalidTransactionId;
19601964

19611965
/* ok, we think the snapshot is sensible, copy over everything important */
19621966
builder->xmin = ondisk.builder.xmin;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.