Remove pointless HeapTupleHeaderIndicatesMovedPartitions calls
authorAlvaro Herrera <[email protected]>
Thu, 15 Oct 2020 17:32:34 +0000 (14:32 -0300)
committerAlvaro Herrera <[email protected]>
Thu, 15 Oct 2020 17:32:34 +0000 (14:32 -0300)
Pavan Deolasee recently noted that a few of the
HeapTupleHeaderIndicatesMovedPartitions calls added by commit
5db6df0c0117 are useless, since they are done after comparing t_self
with t_ctid.  But because t_self can never be set to the magical values
that indicate that the tuple moved partition, this can never succeed: if
the first test fails (so we know t_self equals t_ctid), necessarily the
second test will also fail.

So these checks can be removed and no harm is done.

Discussion: https://postgr.es/m/20200929164411[email protected]

src/backend/access/heap/heapam.c
src/backend/access/heap/heapam_visibility.c

index 1585861a021ddaa8aacd3123f36c19759d6cf39e..868ff134539eaa29dc568c61cc82de912798ffad 100644 (file)
@@ -2618,8 +2618,7 @@ l1:
            HEAP_XMAX_IS_LOCKED_ONLY(tp.t_data->t_infomask) ||
            HeapTupleHeaderIsOnlyLocked(tp.t_data))
            result = TM_Ok;
-       else if (!ItemPointerEquals(&tp.t_self, &tp.t_data->t_ctid) ||
-                HeapTupleHeaderIndicatesMovedPartitions(tp.t_data))
+       else if (!ItemPointerEquals(&tp.t_self, &tp.t_data->t_ctid))
            result = TM_Updated;
        else
            result = TM_Deleted;
@@ -3248,8 +3247,7 @@ l2:
 
        if (can_continue)
            result = TM_Ok;
-       else if (!ItemPointerEquals(&oldtup.t_self, &oldtup.t_data->t_ctid) ||
-                HeapTupleHeaderIndicatesMovedPartitions(oldtup.t_data))
+       else if (!ItemPointerEquals(&oldtup.t_self, &oldtup.t_data->t_ctid))
            result = TM_Updated;
        else
            result = TM_Deleted;
@@ -4485,8 +4483,7 @@ l3:
            HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_data->t_infomask) ||
            HeapTupleHeaderIsOnlyLocked(tuple->t_data))
            result = TM_Ok;
-       else if (!ItemPointerEquals(&tuple->t_self, &tuple->t_data->t_ctid) ||
-                HeapTupleHeaderIndicatesMovedPartitions(tuple->t_data))
+       else if (!ItemPointerEquals(&tuple->t_self, &tuple->t_data->t_ctid))
            result = TM_Updated;
        else
            result = TM_Deleted;
@@ -5059,8 +5056,7 @@ test_lockmode_for_conflict(MultiXactStatus status, TransactionId xid,
                                LOCKMODE_from_mxstatus(wantedstatus)))
        {
            /* bummer */
-           if (!ItemPointerEquals(&tup->t_self, &tup->t_data->t_ctid) ||
-               HeapTupleHeaderIndicatesMovedPartitions(tup->t_data))
+           if (!ItemPointerEquals(&tup->t_self, &tup->t_data->t_ctid))
                return TM_Updated;
            else
                return TM_Deleted;
index 80bd4940769c18f6f3171b290c0960140dba69a6..cab6a48a5daed987b28ed3323df346bab32e25f3 100644 (file)
@@ -607,8 +607,7 @@ HeapTupleSatisfiesUpdate(HeapTuple htup, CommandId curcid,
    {
        if (HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask))
            return TM_Ok;
-       if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid) ||
-           HeapTupleHeaderIndicatesMovedPartitions(tuple))
+       if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid))
            return TM_Updated;  /* updated by other */
        else
            return TM_Deleted;  /* deleted by other */
@@ -653,8 +652,7 @@ HeapTupleSatisfiesUpdate(HeapTuple htup, CommandId curcid,
 
        if (TransactionIdDidCommit(xmax))
        {
-           if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid) ||
-               HeapTupleHeaderIndicatesMovedPartitions(tuple))
+           if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid))
                return TM_Updated;
            else
                return TM_Deleted;
@@ -714,8 +712,7 @@ HeapTupleSatisfiesUpdate(HeapTuple htup, CommandId curcid,
 
    SetHintBits(tuple, buffer, HEAP_XMAX_COMMITTED,
                HeapTupleHeaderGetRawXmax(tuple));
-   if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid) ||
-       HeapTupleHeaderIndicatesMovedPartitions(tuple))
+   if (!ItemPointerEquals(&htup->t_self, &tuple->t_ctid))
        return TM_Updated;      /* updated by other */
    else
        return TM_Deleted;      /* deleted by other */