Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdd23a88

Browse files
committed
>> If a transaction marks a tuple for update and later commits without
>> actually having updated the tuple, [...] can we simply>> set the HEAP_XMAX_INVALID hint bit of the tuple?>>AFAICS this is a reasonable thing to do.Thanks for the confirmation. Here's a patch which also contains somemore noncritical changes to tqual.c: . make code more readable by introducing local variables for xvac . no longer two separate branches for aborted and crashed. The actions were the same in all cases.Manfred Koizar
1 parentfce529e commitdd23a88

File tree

2 files changed

+84
-69
lines changed

2 files changed

+84
-69
lines changed

‎src/backend/utils/adt/inet_net_ntop.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717

1818
#if defined(LIBC_SCCS)&& !defined(lint)
19-
staticconstcharrcsid[]="$Id: inet_net_ntop.c,v 1.14 2003/06/24 22:42:42 momjian Exp $";
19+
staticconstcharrcsid[]="$Id: inet_net_ntop.c,v 1.15 2003/06/25 01:08:13 momjian Exp $";
2020
#endif
2121

2222
#include"postgres.h"
@@ -270,9 +270,9 @@ inet_cidr_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size)
270270

271271
if (!double_colon) {
272272
if (bits<128-32)
273-
cp+=SPRINTF((cp,"::%d",bits));
273+
cp+=SPRINTF((cp,"::"));
274274
elseif (bits<128-16)
275-
cp+=SPRINTF((cp,":0%d",bits));
275+
cp+=SPRINTF((cp,":0"));
276276
}
277277

278278
/* Format CIDR /width. */

‎src/backend/utils/time/tqual.c

Lines changed: 81 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* Portions Copyright (c) 1994, Regents of the University of California
1717
*
1818
* IDENTIFICATION
19-
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.63 2003/06/12 01:42:20 momjian Exp $
19+
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.64 2003/06/25 01:08:13 momjian Exp $
2020
*
2121
*-------------------------------------------------------------------------
2222
*/
@@ -76,11 +76,12 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
7676

7777
if (tuple->t_infomask&HEAP_MOVED_OFF)
7878
{
79-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
79+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
80+
if (TransactionIdIsCurrentTransactionId(xvac))
8081
return false;
81-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
82+
if (!TransactionIdIsInProgress(xvac))
8283
{
83-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
84+
if (TransactionIdDidCommit(xvac))
8485
{
8586
tuple->t_infomask |=HEAP_XMIN_INVALID;
8687
return false;
@@ -90,11 +91,12 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
9091
}
9192
elseif (tuple->t_infomask&HEAP_MOVED_IN)
9293
{
93-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
94+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
95+
if (!TransactionIdIsCurrentTransactionId(xvac))
9496
{
95-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
97+
if (TransactionIdIsInProgress(xvac))
9698
return false;
97-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
99+
if (TransactionIdDidCommit(xvac))
98100
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
99101
else
100102
{
@@ -152,11 +154,14 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
152154
}
153155

154156
/* xmax transaction committed */
155-
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
156157

157158
if (tuple->t_infomask&HEAP_MARKED_FOR_UPDATE)
159+
{
160+
tuple->t_infomask |=HEAP_XMAX_INVALID;
158161
return true;
162+
}
159163

164+
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
160165
return false;
161166
}
162167

@@ -212,11 +217,12 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
212217

213218
if (tuple->t_infomask&HEAP_MOVED_OFF)
214219
{
215-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
220+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
221+
if (TransactionIdIsCurrentTransactionId(xvac))
216222
return false;
217-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
223+
if (!TransactionIdIsInProgress(xvac))
218224
{
219-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
225+
if (TransactionIdDidCommit(xvac))
220226
{
221227
tuple->t_infomask |=HEAP_XMIN_INVALID;
222228
return false;
@@ -226,11 +232,12 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
226232
}
227233
elseif (tuple->t_infomask&HEAP_MOVED_IN)
228234
{
229-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
235+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
236+
if (!TransactionIdIsCurrentTransactionId(xvac))
230237
{
231-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
238+
if (TransactionIdIsInProgress(xvac))
232239
return false;
233-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
240+
if (TransactionIdDidCommit(xvac))
234241
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
235242
else
236243
{
@@ -297,11 +304,14 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
297304
}
298305

299306
/* xmax transaction committed */
300-
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
301307

302308
if (tuple->t_infomask&HEAP_MARKED_FOR_UPDATE)
309+
{
310+
tuple->t_infomask |=HEAP_XMAX_INVALID;
303311
return true;
312+
}
304313

314+
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
305315
return false;
306316
}
307317

@@ -329,11 +339,12 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
329339

330340
if (tuple->t_infomask&HEAP_MOVED_OFF)
331341
{
332-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
342+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
343+
if (TransactionIdIsCurrentTransactionId(xvac))
333344
return false;
334-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
345+
if (!TransactionIdIsInProgress(xvac))
335346
{
336-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
347+
if (TransactionIdDidCommit(xvac))
337348
{
338349
tuple->t_infomask |=HEAP_XMIN_INVALID;
339350
return false;
@@ -343,11 +354,12 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
343354
}
344355
elseif (tuple->t_infomask&HEAP_MOVED_IN)
345356
{
346-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
357+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
358+
if (!TransactionIdIsCurrentTransactionId(xvac))
347359
{
348-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
360+
if (TransactionIdIsInProgress(xvac))
349361
return false;
350-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
362+
if (TransactionIdDidCommit(xvac))
351363
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
352364
else
353365
{
@@ -382,11 +394,12 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
382394

383395
if (tuple->t_infomask&HEAP_MOVED_OFF)
384396
{
385-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
397+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
398+
if (TransactionIdIsCurrentTransactionId(xvac))
386399
returnHeapTupleInvisible;
387-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
400+
if (!TransactionIdIsInProgress(xvac))
388401
{
389-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
402+
if (TransactionIdDidCommit(xvac))
390403
{
391404
tuple->t_infomask |=HEAP_XMIN_INVALID;
392405
returnHeapTupleInvisible;
@@ -396,11 +409,12 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
396409
}
397410
elseif (tuple->t_infomask&HEAP_MOVED_IN)
398411
{
399-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
412+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
413+
if (!TransactionIdIsCurrentTransactionId(xvac))
400414
{
401-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
415+
if (TransactionIdIsInProgress(xvac))
402416
returnHeapTupleInvisible;
403-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
417+
if (TransactionIdDidCommit(xvac))
404418
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
405419
else
406420
{
@@ -475,11 +489,14 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
475489
}
476490

477491
/* xmax transaction committed */
478-
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
479492

480493
if (tuple->t_infomask&HEAP_MARKED_FOR_UPDATE)
494+
{
495+
tuple->t_infomask |=HEAP_XMAX_INVALID;
481496
returnHeapTupleMayBeUpdated;
497+
}
482498

499+
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
483500
returnHeapTupleUpdated;/* updated by other */
484501
}
485502

@@ -513,11 +530,12 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
513530

514531
if (tuple->t_infomask&HEAP_MOVED_OFF)
515532
{
516-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
533+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
534+
if (TransactionIdIsCurrentTransactionId(xvac))
517535
return false;
518-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
536+
if (!TransactionIdIsInProgress(xvac))
519537
{
520-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
538+
if (TransactionIdDidCommit(xvac))
521539
{
522540
tuple->t_infomask |=HEAP_XMIN_INVALID;
523541
return false;
@@ -527,11 +545,12 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
527545
}
528546
elseif (tuple->t_infomask&HEAP_MOVED_IN)
529547
{
530-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
548+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
549+
if (!TransactionIdIsCurrentTransactionId(xvac))
531550
{
532-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
551+
if (TransactionIdIsInProgress(xvac))
533552
return false;
534-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
553+
if (TransactionIdDidCommit(xvac))
535554
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
536555
else
537556
{
@@ -600,11 +619,14 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
600619
}
601620

602621
/* xmax transaction committed */
603-
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
604622

605623
if (tuple->t_infomask&HEAP_MARKED_FOR_UPDATE)
624+
{
625+
tuple->t_infomask |=HEAP_XMAX_INVALID;
606626
return true;
627+
}
607628

629+
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
608630
SnapshotDirty->tid=tuple->t_ctid;
609631
return false;/* updated by other */
610632
}
@@ -644,11 +666,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
644666

645667
if (tuple->t_infomask&HEAP_MOVED_OFF)
646668
{
647-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
669+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
670+
if (TransactionIdIsCurrentTransactionId(xvac))
648671
return false;
649-
if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
672+
if (!TransactionIdIsInProgress(xvac))
650673
{
651-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
674+
if (TransactionIdDidCommit(xvac))
652675
{
653676
tuple->t_infomask |=HEAP_XMIN_INVALID;
654677
return false;
@@ -658,11 +681,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
658681
}
659682
elseif (tuple->t_infomask&HEAP_MOVED_IN)
660683
{
661-
if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
684+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
685+
if (!TransactionIdIsCurrentTransactionId(xvac))
662686
{
663-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
687+
if (TransactionIdIsInProgress(xvac))
664688
return false;
665-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
689+
if (TransactionIdDidCommit(xvac))
666690
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
667691
else
668692
{
@@ -802,11 +826,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
802826
returnHEAPTUPLE_DEAD;
803827
elseif (tuple->t_infomask&HEAP_MOVED_OFF)
804828
{
805-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
829+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
830+
if (TransactionIdIsCurrentTransactionId(xvac))
806831
returnHEAPTUPLE_DELETE_IN_PROGRESS;
807-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
832+
if (TransactionIdIsInProgress(xvac))
808833
returnHEAPTUPLE_DELETE_IN_PROGRESS;
809-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
834+
if (TransactionIdDidCommit(xvac))
810835
{
811836
tuple->t_infomask |=HEAP_XMIN_INVALID;
812837
returnHEAPTUPLE_DEAD;
@@ -815,11 +840,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
815840
}
816841
elseif (tuple->t_infomask&HEAP_MOVED_IN)
817842
{
818-
if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
843+
TransactionIdxvac=HeapTupleHeaderGetXvac(tuple);
844+
if (TransactionIdIsCurrentTransactionId(xvac))
819845
returnHEAPTUPLE_INSERT_IN_PROGRESS;
820-
if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
846+
if (TransactionIdIsInProgress(xvac))
821847
returnHEAPTUPLE_INSERT_IN_PROGRESS;
822-
if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
848+
if (TransactionIdDidCommit(xvac))
823849
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
824850
else
825851
{
@@ -831,16 +857,10 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
831857
returnHEAPTUPLE_INSERT_IN_PROGRESS;
832858
elseif (TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
833859
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
834-
elseif (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
835-
{
836-
tuple->t_infomask |=HEAP_XMIN_INVALID;
837-
returnHEAPTUPLE_DEAD;
838-
}
839860
else
840861
{
841862
/*
842-
* Not in Progress, Not Committed, Not Aborted - so it's from
843-
* crashed process. - vadim 11/26/96
863+
* Not in Progress, Not Committed, so either Aborted or crashed
844864
*/
845865
tuple->t_infomask |=HEAP_XMIN_INVALID;
846866
returnHEAPTUPLE_DEAD;
@@ -868,11 +888,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
868888
{
869889
if (TransactionIdIsInProgress(HeapTupleHeaderGetXmax(tuple)))
870890
returnHEAPTUPLE_LIVE;
871-
if (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
872-
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
873-
else
874-
/* it's either aborted or crashed */
875-
tuple->t_infomask |=HEAP_XMAX_INVALID;
891+
/*
892+
* We don't really care whether xmax did commit, abort or crash.
893+
* We know that xmax did mark the tuple for update, but it did not
894+
* and will never actually update it.
895+
*/
896+
tuple->t_infomask |=HEAP_XMAX_INVALID;
876897
}
877898
returnHEAPTUPLE_LIVE;
878899
}
@@ -883,16 +904,10 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
883904
returnHEAPTUPLE_DELETE_IN_PROGRESS;
884905
elseif (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
885906
tuple->t_infomask |=HEAP_XMAX_COMMITTED;
886-
elseif (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
887-
{
888-
tuple->t_infomask |=HEAP_XMAX_INVALID;
889-
returnHEAPTUPLE_LIVE;
890-
}
891907
else
892908
{
893909
/*
894-
* Not in Progress, Not Committed, Not Aborted - so it's from
895-
* crashed process. - vadim 06/02/97
910+
* Not in Progress, Not Committed, so either Aborted or crashed
896911
*/
897912
tuple->t_infomask |=HEAP_XMAX_INVALID;
898913
returnHEAPTUPLE_LIVE;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp