Re: Add macros for ReorderBufferTXN toptxn

From: vignesh C <vignesh21(at)gmail(dot)com>
To: Peter Smith <smithpb2250(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Add macros for ReorderBufferTXN toptxn
Date: 2023-03-14 11:32:39
Message-ID: CALDaNm0_i1Bh5qfnCAsuz-XXEqWe71q0g2rfv0Lh1DkYv6mqPA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, 14 Mar 2023 at 12:37, Peter Smith <smithpb2250(at)gmail(dot)com> wrote:
>
> Thanks for the review!
>
> On Mon, Mar 13, 2023 at 6:19 PM vignesh C <vignesh21(at)gmail(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2023-03-14 11:43:18 Re: Add macros for ReorderBufferTXN toptxn
Previous Message Daniel Watzinger 2023-03-14 11:30:18 Re: pg_dump/pg_restore: Fix stdin/stdout handling of custom format on Win32