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? -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com