Re: [PoC] pg_upgrade: allow to upgrade publisher node
От | Amit Kapila |
---|---|
Тема | Re: [PoC] pg_upgrade: allow to upgrade publisher node |
Дата | |
Msg-id | CAA4eK1K513yjdH8D-wXKe1xMLQs3iEvBWMwsuBndRcTBoGCQfQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [PoC] pg_upgrade: allow to upgrade publisher node (Amit Kapila <amit.kapila16@gmail.com>) |
Ответы |
RE: [PoC] pg_upgrade: allow to upgrade publisher node
|
Список | pgsql-hackers |
On Tue, Oct 10, 2023 at 6:17 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > DecodeTXNNeedSkip(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, > Oid txn_dbid, RepOriginId origin_id) > { > - return (SnapBuildXactNeedsSkip(ctx->snapshot_builder, buf->origptr) || > - (txn_dbid != InvalidOid && txn_dbid != ctx->slot->data.database) || > - ctx->fast_forward || FilterByOrigin(ctx, origin_id)); > + bool need_skip; > + > + need_skip = (SnapBuildXactNeedsSkip(ctx->snapshot_builder, buf->origptr) || > + (txn_dbid != InvalidOid && txn_dbid != ctx->slot->data.database) || > + ctx->decoding_mode != DECODING_MODE_NORMAL || > + FilterByOrigin(ctx, origin_id)); > + > + /* Set a flag if we are in the slient mode */ > + if (ctx->decoding_mode == DECODING_MODE_SILENT) > + ctx->output_skipped = true; > + > + return need_skip; > > I think you need to set the new flag only when we are not skipping the > transaction or in other words when we decide to process the > transaction. Otherwise, how will you distinguish the case where the > xact is already decoded and sent to client? > In the attached patch atop your v47*, I have changed it to show you what I have in mind. A few more comments: ================= 1. + + /* + * Did the logical decoding context skip outputting any changes? + * + * This flag is used only when the context is in the silent mode. + */ + bool output_skipped; } LogicalDecodingContext; This doesn't seem to convey the meaning to the caller. How about processing_required? BTW, I have made this change as well in the patch. 2. @@ -295,7 +295,7 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) */ if (TransactionIdIsValid(xid)) { - if (!ctx->fast_forward) + if (ctx->decoding_mode != DECODING_MODE_FAST_FORWARD) ReorderBufferAddInvalidations(reorder, xid, buf->origptr, invals->nmsgs, @@ -303,7 +303,7 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf) ReorderBufferXidSetCatalogChanges(ctx->reorder, xid, buf->origptr); } - else if ((!ctx->fast_forward)) + else if (ctx->decoding_mode != DECODING_MODE_FAST_FORWARD) ReorderBufferImmediateInvalidation(ctx->reorder, invals->nmsgs, invals->msgs); We don't to execute the invalidations even in silent mode. Looking at this and other changes in the patch related to silent mode, I wonder whether we really need to introduce 'silent_mode'. Can't we simply set processing_required when 'fast_forward' mode is true and then let the caller decide whether it needs to further process the WAL? -- With Regards, Amit Kapila.
Вложения
В списке pgsql-hackers по дате отправления: