mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Remove the unnecessary PrepareWrite in pgoutput.
This issue exists from the inception of this code (PG-10) but got exposed by the recent commitce0fdbfe97
where we are using origins in tablesync workers. The problem was that we were sometimes sending the prepare_write ('w') message but then the actual message was not being sent and on the subscriber side, we always expect a message after prepare_write message which led to this bug. I refrained from backpatching this because there is no way in the core code to hit this prior to commitce0fdbfe97
and we haven't received any complaints so far. Reported-by: Erik Rijkers Author: Amit Kapila and Vignesh C Tested-by: Erik Rijkers Discussion: https://postgr.es/m/1295168140.139428.1613133237154@webmailclassic.xs4all.nl
This commit is contained in:
@ -342,10 +342,6 @@ pgoutput_begin_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn)
|
||||
{
|
||||
char *origin;
|
||||
|
||||
/* Message boundary */
|
||||
OutputPluginWrite(ctx, false);
|
||||
OutputPluginPrepareWrite(ctx, true);
|
||||
|
||||
/*----------
|
||||
* XXX: which behaviour do we want here?
|
||||
*
|
||||
@ -357,7 +353,13 @@ pgoutput_begin_txn(LogicalDecodingContext *ctx, ReorderBufferTXN *txn)
|
||||
*----------
|
||||
*/
|
||||
if (replorigin_by_oid(txn->origin_id, true, &origin))
|
||||
{
|
||||
/* Message boundary */
|
||||
OutputPluginWrite(ctx, false);
|
||||
OutputPluginPrepareWrite(ctx, true);
|
||||
logicalrep_write_origin(ctx->out, origin, txn->origin_lsn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
OutputPluginWrite(ctx, true);
|
||||
@ -780,12 +782,13 @@ pgoutput_stream_start(struct LogicalDecodingContext *ctx,
|
||||
{
|
||||
char *origin;
|
||||
|
||||
/* Message boundary */
|
||||
OutputPluginWrite(ctx, false);
|
||||
OutputPluginPrepareWrite(ctx, true);
|
||||
|
||||
if (replorigin_by_oid(txn->origin_id, true, &origin))
|
||||
{
|
||||
/* Message boundary */
|
||||
OutputPluginWrite(ctx, false);
|
||||
OutputPluginPrepareWrite(ctx, true);
|
||||
logicalrep_write_origin(ctx->out, origin, InvalidXLogRecPtr);
|
||||
}
|
||||
}
|
||||
|
||||
OutputPluginWrite(ctx, true);
|
||||
|
Reference in New Issue
Block a user