Re: Add macros for ReorderBufferTXN toptxn - Mailing list pgsql-hackers
From | vignesh C |
---|---|
Subject | Re: Add macros for ReorderBufferTXN toptxn |
Date | |
Msg-id | CALDaNm0_i1Bh5qfnCAsuz-XXEqWe71q0g2rfv0Lh1DkYv6mqPA@mail.gmail.com Whole thread Raw |
In response to | Re: Add macros for ReorderBufferTXN toptxn (Peter Smith <smithpb2250@gmail.com>) |
Responses |
Re: Add macros for ReorderBufferTXN toptxn
Re: Add macros for ReorderBufferTXN toptxn |
List | pgsql-hackers |
On Tue, 14 Mar 2023 at 12:37, Peter Smith <smithpb2250@gmail.com> wrote: > > Thanks for the review! > > On Mon, Mar 13, 2023 at 6:19 PM vignesh C <vignesh21@gmail.com> wrote: > ... > > Few comments: > > 1) Can we move the macros along with the other macros present in this > > file, just above this structure, similar to the macros added for > > txn_flags: > > /* Toplevel transaction for this subxact (NULL for top-level). */ > > +#define isa_toptxn(rbtxn) (rbtxn->toptxn == NULL) > > +#define isa_subtxn(rbtxn) (rbtxn->toptxn != NULL) > > +#define get_toptxn(rbtxn) (isa_subtxn(rbtxn) ? rbtxn->toptxn : rbtxn) > > > > 2) The macro name can be changed to rbtxn_is_toptxn, rbtxn_is_subtxn > > and rbtxn_get_toptxn to keep it consistent with others: > > /* Toplevel transaction for this subxact (NULL for top-level). */ > > +#define isa_toptxn(rbtxn) (rbtxn->toptxn == NULL) > > +#define isa_subtxn(rbtxn) (rbtxn->toptxn != NULL) > > +#define get_toptxn(rbtxn) (isa_subtxn(rbtxn) ? rbtxn->toptxn : rbtxn) > > > > 3) We could add separate comments for each of the macros: > > /* Toplevel transaction for this subxact (NULL for top-level). */ > > +#define isa_toptxn(rbtxn) (rbtxn->toptxn == NULL) > > +#define isa_subtxn(rbtxn) (rbtxn->toptxn != NULL) > > +#define get_toptxn(rbtxn) (isa_subtxn(rbtxn) ? rbtxn->toptxn : rbtxn) > > > > All the above are fixed as suggested. > > > 4) We check if txn->toptxn is not null twice here both in if condition > > and in the assignment, we could retain the assignment operation as > > earlier to remove the 2nd check: > > - if (txn->toptxn) > > - txn = txn->toptxn; > > + if (isa_subtxn(txn)) > > + txn = get_toptxn(txn); > > > > We could avoid one check again by: > > + if (isa_subtxn(txn)) > > + txn = txn->toptxn; > > > > Yeah, that is true, but I chose not to keep the original assignment in > this case mainly because then it is consistent with the other changed > code --- e.g. Every other direct member assignment/access of the > 'toptxn' member now hides behind the macros so I did not want this > single place to be the odd one out. TBH, I don't think 1 extra check > is of any significance, but it is not a problem to change like you > suggested if other people also want it done that way. The same issue exists here too: 1) - if (toptxn != NULL && !rbtxn_has_catalog_changes(toptxn)) + if (rbtxn_is_subtxn(txn)) { - toptxn->txn_flags |= RBTXN_HAS_CATALOG_CHANGES; - dclist_push_tail(&rb->catchange_txns, &toptxn->catchange_node); + ReorderBufferTXN *toptxn = rbtxn_get_toptxn(txn); 2) - if (change->txn->toptxn) - topxid = change->txn->toptxn->xid; + if (rbtxn_is_subtxn(change->txn)) + topxid = rbtxn_get_toptxn(change->txn)->xid; If you plan to fix, bothe the above also should be handled. 3) The comment on top of rbtxn_get_toptxn could be kept similar in both the below places. I know it is not because of your change, but since it is a very small change probably we could include it along with this patch: @@ -717,10 +717,7 @@ ReorderBufferProcessPartialChange(ReorderBuffer *rb, ReorderBufferTXN *txn, return; /* Get the top transaction. */ - if (txn->toptxn != NULL) - toptxn = txn->toptxn; - else - toptxn = txn; + toptxn = rbtxn_get_toptxn(txn); /* * Indicate a partial change for toast inserts. The change will be @@ -812,10 +809,7 @@ ReorderBufferQueueChange(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, ReorderBufferTXN *toptxn; /* get the top transaction */ - if (txn->toptxn != NULL) - toptxn = txn->toptxn; - else - toptxn = txn; + toptxn = rbtxn_get_toptxn(txn); Regards, Vignesh
pgsql-hackers by date: