mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Fix logical replication slot initialization
This was broken in commit 9c7d06d606
, which inadvertently gave the
wrong value to fast_forward in one StartupDecodingContext call. Fix by
flipping the value. Add a test for the obvious error, namely trying to
initialize a replication slot with an nonexistent output plugin.
While at it, move the CreateDecodingContext call earlier, so that any
errors are reported before sending the CopyBoth message.
Author: Dave Cramer <davecramer@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CADK3HHLVkeRe1v4P02-5hj55H3_yJg3AEtpXyEY5T3wuzO2jSg@mail.gmail.com
This commit is contained in:
@ -312,7 +312,7 @@ CreateInitDecodingContext(char *plugin,
|
||||
ReplicationSlotSave();
|
||||
|
||||
ctx = StartupDecodingContext(NIL, InvalidXLogRecPtr, xmin_horizon,
|
||||
need_full_snapshot, true,
|
||||
need_full_snapshot, false,
|
||||
read_page, prepare_write, do_write,
|
||||
update_progress);
|
||||
|
||||
|
@ -1068,6 +1068,19 @@ StartLogicalReplication(StartReplicationCmd *cmd)
|
||||
got_STOPPING = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create our decoding context, making it start at the previously ack'ed
|
||||
* position.
|
||||
*
|
||||
* Do this before sending CopyBoth, so that any errors are reported early.
|
||||
*/
|
||||
logical_decoding_ctx =
|
||||
CreateDecodingContext(cmd->startpoint, cmd->options, false,
|
||||
logical_read_xlog_page,
|
||||
WalSndPrepareWrite, WalSndWriteData,
|
||||
WalSndUpdateProgress);
|
||||
|
||||
|
||||
WalSndSetState(WALSNDSTATE_CATCHUP);
|
||||
|
||||
/* Send a CopyBothResponse message, and start streaming */
|
||||
@ -1077,16 +1090,6 @@ StartLogicalReplication(StartReplicationCmd *cmd)
|
||||
pq_endmessage(&buf);
|
||||
pq_flush();
|
||||
|
||||
/*
|
||||
* Initialize position to the last ack'ed one, then the xlog records begin
|
||||
* to be shipped from that position.
|
||||
*/
|
||||
logical_decoding_ctx = CreateDecodingContext(cmd->startpoint, cmd->options,
|
||||
false,
|
||||
logical_read_xlog_page,
|
||||
WalSndPrepareWrite,
|
||||
WalSndWriteData,
|
||||
WalSndUpdateProgress);
|
||||
|
||||
/* Start reading WAL from the oldest required WAL. */
|
||||
logical_startptr = MyReplicationSlot->data.restart_lsn;
|
||||
|
Reference in New Issue
Block a user