On Mon, Jun 18, 2018 at 09:42:36PM +0900, Michael Paquier wrote: > On Fri, Jun 15, 2018 at 06:27:56PM +0300, Arseny Sher wrote: > It seems to me that we still want to have the slot forwarding finish in > this case even if this is interrupted. Petr, isn't that the intention > here?
I have been chewing a bit more on the proposed patch, finishing with the attached to close the loop. Thoughts? -- Michael
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 61588d626f..6068aefd02 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -340,6 +340,9 @@ CreateInitDecodingContext(char *plugin, * output_plugin_options * contains options passed to the output plugin. * + * fast_forward + * bypasses the generation of logical changes. + * * read_page, prepare_write, do_write, update_progress * callbacks that have to be filled to perform the use-case dependent, * actual work. diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c index 2806e1076c..7c03bf69d3 100644 --- a/src/backend/replication/slotfuncs.c +++ b/src/backend/replication/slotfuncs.c @@ -346,7 +346,8 @@ pg_physical_replication_slot_advance(XLogRecPtr moveto) * The LSN position to move to is checked by doing a per-record scan and * logical decoding which makes sure that confirmed_lsn is updated to a * LSN which allows the future slot consumer to get consistent logical - * changes. + * changes. As decoding is done with fast_forward mode, no changes are + * actually generated. */ static XLogRecPtr pg_logical_replication_slot_advance(XLogRecPtr moveto) @@ -389,8 +390,8 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto) startlsn = InvalidXLogRecPtr; /* - * The {begin_txn,change,commit_txn}_wrapper callbacks above will - * store the description into our tuplestore. + * Note that changes are not generated in fast_forward mode, but + * that the slot's data still needs to be updated. */ if (record != NULL) LogicalDecodingProcessRecord(ctx, ctx->reader);
signature.asc
Description: PGP signature