On Mon, Jan 6, 2020 at 4:36 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Mon, Jan 6, 2020 at 3:56 PM Dilip Kumar <dilipbal...@gmail.com> wrote: > > > > On Mon, Jan 6, 2020 at 2:11 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > > > > > 3. > > > +static void > > > +ReorderBufferStreamTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) > > > { > > > .. > > > + /* > > > + * If this is a subxact, we need to stream the top-level transaction > > > + * instead. > > > + */ > > > + if (txn->toptxn) > > > + { > > > + > > > ReorderBufferStreamTXN(rb, txn->toptxn); > > > + return; > > > + } > > > > > > Is it ever possible that we reach here for subtransaction, if not, > > > then it should be Assert rather than if condition? > > > > ReorderBufferCheckMemoryLimit, can call it either for the > > subtransaction or for the main transaction, depends upon in which > > ReorderBufferTXN you are adding the current change. > > > > That function has code like below: > > ReorderBufferCheckMemoryLimit() > { > .. > if (ReorderBufferCanStream(rb)) > { > /* > * Pick the largest toplevel transaction and evict it from memory by > * streaming the already decoded part. > */ > txn = ReorderBufferLargestTopTXN(rb); > /* we know there has to be one, because the size is not zero */ > Assert(txn && !txn->toptxn); > .. > ReorderBufferStreamTXN(rb, txn); > .. > } > > How can it ReorderBufferTXN pass for subtransaction? > Hmm, I missed it. You are right, will fix it.
-- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com