Hi,
4, 5 === > if (SnapBuildCurrentState(builder) < SNAPBUILD_BUILDING_SNAPSHOT || > (SnapBuildCurrentState(builder) == SNAPBUILD_BUILDING_SNAPSHOT && info != XLOG_HEAP_INPLACE) || > ctx->fast_forward) > return; I think during fast forward, we also need handle the xlog that marks a transaction as catalog modifying, or the snapshot might lose some transactions? > That way we'd still rely on what's being done in the XLOG_HEAP_INPLACE case + if (SnapBuildCurrentState(builder) >= SNAPBUILD_BUILDING_SNAPSHOT) + { + /* Currently only XLOG_HEAP_INPLACE means a catalog modifying */ + if (info == XLOG_HEAP_INPLACE && TransactionIdIsValid(xid)) + ReorderBufferXidSetCatalogChanges(ctx->reorder, xid, buf->origptr); + } We only call ReorderBufferXidSetCatalogChanges() for the xlog that marks a transaction as catalog modifying, and we don't care about the other steps being done in the xlog, so I think the current approach is ok. -- Regards, ChangAo Chen