mirror of
https://github.com/postgres/postgres.git
synced 2025-10-16 17:07:43 +03:00
Add option to enable two_phase commits via pg_create_logical_replication_slot.
Commit 0aa8a01d04
extends the output plugin API to allow decoding of
prepared xacts and allowed the user to enable/disable the two-phase option
via pg_logical_slot_get_changes(). This can lead to a problem such that
the first time when it gets changes via pg_logical_slot_get_changes()
without two_phase option enabled it will not get the prepared even though
prepare is after consistent snapshot. Now next time during getting changes,
if the two_phase option is enabled it can skip prepare because by that
time start decoding point has been moved. So the user will only get commit
prepared.
Allow to enable/disable this option at the create slot time and default
will be false. It will break the existing slots which is fine in a major
release.
Author: Ajin Cherian
Reviewed-by: Amit Kapila and Vignesh C
Discussion: https://postgr.es/m/d0f60d60-133d-bf8d-bd70-47784d8fabf3@enterprisedb.com
This commit is contained in:
@@ -431,6 +431,12 @@ CreateInitDecodingContext(const char *plugin,
|
||||
startup_cb_wrapper(ctx, &ctx->options, true);
|
||||
MemoryContextSwitchTo(old_context);
|
||||
|
||||
/*
|
||||
* We allow decoding of prepared transactions iff the two_phase option is
|
||||
* enabled at the time of slot creation.
|
||||
*/
|
||||
ctx->twophase &= MyReplicationSlot->data.two_phase;
|
||||
|
||||
ctx->reorder->output_rewrites = ctx->options.receive_rewrites;
|
||||
|
||||
return ctx;
|
||||
@@ -531,6 +537,12 @@ CreateDecodingContext(XLogRecPtr start_lsn,
|
||||
startup_cb_wrapper(ctx, &ctx->options, false);
|
||||
MemoryContextSwitchTo(old_context);
|
||||
|
||||
/*
|
||||
* We allow decoding of prepared transactions iff the two_phase option is
|
||||
* enabled at the time of slot creation.
|
||||
*/
|
||||
ctx->twophase &= MyReplicationSlot->data.two_phase;
|
||||
|
||||
ctx->reorder->output_rewrites = ctx->options.receive_rewrites;
|
||||
|
||||
ereport(LOG,
|
||||
|
Reference in New Issue
Block a user