On Sun, Sep 20, 2020 at 11:01 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > On Fri, Sep 18, 2020 at 6:02 PM Ajin Cherian <itsa...@gmail.com> wrote: > > > > 3. > > + /* > + * If it's ROLLBACK PREPARED then handle it via callbacks. > + */ > + if (TransactionIdIsValid(xid) && > + !SnapBuildXactNeedsSkip(ctx->snapshot_builder, buf->origptr) && > + parsed->dbId == ctx->slot->data.database && > + !FilterByOrigin(ctx, origin_id) && > + ReorderBufferTxnIsPrepared(ctx->reorder, xid, parsed->twophase_gid)) > + { > + ReorderBufferFinishPrepared(ctx->reorder, xid, buf->origptr, buf->endptr, > + commit_time, origin_id, origin_lsn, > + parsed->twophase_gid, false); > + return; > + } > > > I think we have already checked !SnapBuildXactNeedsSkip, parsed->dbId > == ctx->slot->data.database and !FilterByOrigin in DecodePrepare > so if those are not true then we wouldn't have prepared this > transaction i.e. ReorderBufferTxnIsPrepared will be false so why do we > need > to recheck this conditions. >
Yeah, probably we should have Assert for below three conditions: + !SnapBuildXactNeedsSkip(ctx->snapshot_builder, buf->origptr) && + parsed->dbId == ctx->slot->data.database && + !FilterByOrigin(ctx, origin_id) && Your other comments make sense to me. -- With Regards, Amit Kapila.