On Thu, Jan 29, 2026 at 5:29 PM cca5507 <[email protected]> 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


Reply via email to