Re: Fix logical decoding not track transaction during SNAPBUILD_BUILDING_SNAPSHOT
| От | Ajin Cherian |
|---|---|
| Тема | Re: Fix logical decoding not track transaction during SNAPBUILD_BUILDING_SNAPSHOT |
| Дата | |
| Msg-id | CAFPTHDZQJeiyNGCp51Vq3rnZt3FZ1spd+kjJgqkHDm2jCH8=mw@mail.gmail.com обсуждение исходный текст |
| Ответ на | Re: Fix logical decoding not track transaction during SNAPBUILD_BUILDING_SNAPSHOT ("cca5507" <cca5507@qq.com>) |
| Список | pgsql-hackers |
On Thu, Jan 29, 2026 at 5:29 PM cca5507 <cca5507@qq.com> wrote:
>
> > Looks like the assert in ReorderBufferForget failed because
> > ninvalidations is not 0.
>
> I think it can be fixed by this:
>
> ```
> @@ -282,18 +286,24 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
> {
> TransactionId xid;
> xl_xact_invals *invals;
> + bool has_snapshot;
>
> xid = XLogRecGetXid(r);
> invals = (xl_xact_invals *) XLogRecGetData(r);
> + has_snapshot =
> + SnapBuildCurrentState(builder) >= SNAPBUILD_FULL_SNAPSHOT;
>
> /*
> * Execute the invalidations for xid-less transactions,
> * otherwise, accumulate them so that they can be processed at
> * the commit time.
> + *
> + * Note that we only need to do this when we are not fast-forwarding
> + * and there is a snapshot.
> */
> if (TransactionIdIsValid(xid))
> {
> - if (!ctx->fast_forward)
> + if (!ctx->fast_forward && has_snapshot)
> ReorderBufferAddInvalidations(reorder, xid,
>
buf->origptr,
>
invals->nmsgs,
> @@ -301,7 +311,7 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
> ReorderBufferXidSetCatalogChanges(ctx->reorder, xid,
>
buf->origptr);
> }
> - else if (!ctx->fast_forward)
> + else if (!ctx->fast_forward && has_snapshot)
> ReorderBufferImmediateInvalidation(ctx->reorder,
>
invals->nmsgs,
>
invals->msgs);
> ```
>
> --
Yes, this works.
regards,
Ajin Cherian
Fujitsu Australia
В списке pgsql-hackers по дате отправления: