Thread: Removing redundant check for transaction in progress in check_safe_enum_use
Hi,
I was looking at :
Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux).In check_safe_enum_use():
+ if (!TransactionIdIsInProgress(xmin) &&
+ TransactionIdDidCommit(xmin))
+ return;
+ TransactionIdDidCommit(xmin))
+ return;
Since the condition would be true only when TransactionIdDidCommit() returns true, I think the call to TransactionIdIsInProgress is not needed.
If transaction for xmin is committed, the transaction cannot be in progress at the same time.
Please see the simple patch for removing the redundant check.
Thanks
Attachment
Re: Removing redundant check for transaction in progress in check_safe_enum_use
From
Matthias van de Meent
Date:
On Sun, 4 Jul 2021, 03:40 Zhihong Yu, <zyu@yugabyte.com> wrote: > > Hi, > I was looking at : > Relax transactional restrictions on ALTER TYPE ... ADD VALUE (redux). > > In check_safe_enum_use(): > > + if (!TransactionIdIsInProgress(xmin) && > + TransactionIdDidCommit(xmin)) > + return; > > Since the condition would be true only when TransactionIdDidCommit() returns true, I think the call to TransactionIdIsInProgressis not needed. > If transaction for xmin is committed, the transaction cannot be in progress at the same time. I'm not sure that removing the !TransactionIdIsInProgress-check is correct. The comment in heapam_visibility.c:13 explains that we need to check TransactionIdIsInProgress before TransactionIdDidCommit in non-MVCC snapshots, and I'm fairly certain that check_safe_enum_use() is not guaranteed to run only in MVCC snapshots (at least its documentation does not warn against non-MVCC snapshots). Kind regards, Matthias van de Meent