On Tue, Sep 29, 2020 at 8:04 PM Dilip Kumar <dilipbal...@gmail.com> wrote: > > I have started looking into you latest patches, as of now I have a > few comments. > > v6-0001 > > @@ -1987,7 +2072,7 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, > ReorderBufferTXN *txn, > prev_lsn = change->lsn; > > /* Set the current xid to detect concurrent aborts. */ > - if (streaming) > + if (streaming || rbtxn_prepared(change->txn)) > { > curtxn = change->txn; > SetupCheckXidLive(curtxn->xid); > @@ -2249,7 +2334,6 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, > ReorderBufferTXN *txn, > break; > } > } > - > > For streaming transaction we need to check the xid everytime because > there could concurrent a subtransaction abort, but > for two-phase we don't need to call SetupCheckXidLive everytime, > because we are sure that transaction is going to be > the same throughout the processing. >
While decoding transactions at 'prepare' time there could be multiple sub-transactions like in the case below. Won't that be impacted if we follow your suggestion here? postgres=# Begin; BEGIN postgres=*# insert into t1 values(1,'aaa'); INSERT 0 1 postgres=*# savepoint s1; SAVEPOINT postgres=*# insert into t1 values(2,'aaa'); INSERT 0 1 postgres=*# savepoint s2; SAVEPOINT postgres=*# insert into t1 values(3,'aaa'); INSERT 0 1 postgres=*# Prepare Transaction 'foo'; PREPARE TRANSACTION -- With Regards, Amit Kapila.