aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/lmgr/predicate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/lmgr/predicate.c')
-rw-r--r--src/backend/storage/lmgr/predicate.c214
1 files changed, 107 insertions, 107 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 654584b77af..02415ff01e3 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -211,7 +211,7 @@
#include "utils/snapmgr.h"
/* Uncomment the next line to test the graceful degradation code. */
-/* #define TEST_OLDSERXID */
+/* #define TEST_SUMMARIZE_SERIAL */
/*
* Test the most selective fields first, for performance.
@@ -316,37 +316,37 @@
/*
* The SLRU buffer area through which we access the old xids.
*/
-static SlruCtlData OldSerXidSlruCtlData;
+static SlruCtlData SerialSlruCtlData;
-#define OldSerXidSlruCtl (&OldSerXidSlruCtlData)
+#define SerialSlruCtl (&SerialSlruCtlData)
-#define OLDSERXID_PAGESIZE BLCKSZ
-#define OLDSERXID_ENTRYSIZE sizeof(SerCommitSeqNo)
-#define OLDSERXID_ENTRIESPERPAGE (OLDSERXID_PAGESIZE / OLDSERXID_ENTRYSIZE)
+#define SERIAL_PAGESIZE BLCKSZ
+#define SERIAL_ENTRYSIZE sizeof(SerCommitSeqNo)
+#define SERIAL_ENTRIESPERPAGE (SERIAL_PAGESIZE / SERIAL_ENTRYSIZE)
/*
* Set maximum pages based on the number needed to track all transactions.
*/
-#define OLDSERXID_MAX_PAGE (MaxTransactionId / OLDSERXID_ENTRIESPERPAGE)
+#define SERIAL_MAX_PAGE (MaxTransactionId / SERIAL_ENTRIESPERPAGE)
-#define OldSerXidNextPage(page) (((page) >= OLDSERXID_MAX_PAGE) ? 0 : (page) + 1)
+#define SerialNextPage(page) (((page) >= SERIAL_MAX_PAGE) ? 0 : (page) + 1)
-#define OldSerXidValue(slotno, xid) (*((SerCommitSeqNo *) \
- (OldSerXidSlruCtl->shared->page_buffer[slotno] + \
- ((((uint32) (xid)) % OLDSERXID_ENTRIESPERPAGE) * OLDSERXID_ENTRYSIZE))))
+#define SerialValue(slotno, xid) (*((SerCommitSeqNo *) \
+ (SerialSlruCtl->shared->page_buffer[slotno] + \
+ ((((uint32) (xid)) % SERIAL_ENTRIESPERPAGE) * SERIAL_ENTRYSIZE))))
-#define OldSerXidPage(xid) (((uint32) (xid)) / OLDSERXID_ENTRIESPERPAGE)
+#define SerialPage(xid) (((uint32) (xid)) / SERIAL_ENTRIESPERPAGE)
-typedef struct OldSerXidControlData
+typedef struct SerialControlData
{
int headPage; /* newest initialized page */
TransactionId headXid; /* newest valid Xid in the SLRU */
TransactionId tailXid; /* oldest xmin we might be interested in */
-} OldSerXidControlData;
+} SerialControlData;
-typedef struct OldSerXidControlData *OldSerXidControl;
+typedef struct SerialControlData *SerialControl;
-static OldSerXidControl oldSerXidControl;
+static SerialControl serialControl;
/*
* When the oldest committed transaction on the "finished" list is moved to
@@ -438,11 +438,11 @@ static void SetPossibleUnsafeConflict(SERIALIZABLEXACT *roXact, SERIALIZABLEXACT
static void ReleaseRWConflict(RWConflict conflict);
static void FlagSxactUnsafe(SERIALIZABLEXACT *sxact);
-static bool OldSerXidPagePrecedesLogically(int p, int q);
-static void OldSerXidInit(void);
-static void OldSerXidAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo);
-static SerCommitSeqNo OldSerXidGetMinConflictCommitSeqNo(TransactionId xid);
-static void OldSerXidSetActiveSerXmin(TransactionId xid);
+static bool SerialPagePrecedesLogically(int p, int q);
+static void SerialInit(void);
+static void SerialAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo);
+static SerCommitSeqNo SerialGetMinConflictCommitSeqNo(TransactionId xid);
+static void SerialSetActiveSerXmin(TransactionId xid);
static uint32 predicatelock_hash(const void *key, Size keysize);
static void SummarizeOldestCommittedSxact(void);
@@ -784,26 +784,26 @@ FlagSxactUnsafe(SERIALIZABLEXACT *sxact)
/*------------------------------------------------------------------------*/
/*
- * We will work on the page range of 0..OLDSERXID_MAX_PAGE.
+ * We will work on the page range of 0..SERIAL_MAX_PAGE.
* Compares using wraparound logic, as is required by slru.c.
*/
static bool
-OldSerXidPagePrecedesLogically(int p, int q)
+SerialPagePrecedesLogically(int p, int q)
{
int diff;
/*
- * We have to compare modulo (OLDSERXID_MAX_PAGE+1)/2. Both inputs should
- * be in the range 0..OLDSERXID_MAX_PAGE.
+ * We have to compare modulo (SERIAL_MAX_PAGE+1)/2. Both inputs should be
+ * in the range 0..SERIAL_MAX_PAGE.
*/
- Assert(p >= 0 && p <= OLDSERXID_MAX_PAGE);
- Assert(q >= 0 && q <= OLDSERXID_MAX_PAGE);
+ Assert(p >= 0 && p <= SERIAL_MAX_PAGE);
+ Assert(q >= 0 && q <= SERIAL_MAX_PAGE);
diff = p - q;
- if (diff >= ((OLDSERXID_MAX_PAGE + 1) / 2))
- diff -= OLDSERXID_MAX_PAGE + 1;
- else if (diff < -((int) (OLDSERXID_MAX_PAGE + 1) / 2))
- diff += OLDSERXID_MAX_PAGE + 1;
+ if (diff >= ((SERIAL_MAX_PAGE + 1) / 2))
+ diff -= SERIAL_MAX_PAGE + 1;
+ else if (diff < -((int) (SERIAL_MAX_PAGE + 1) / 2))
+ diff += SERIAL_MAX_PAGE + 1;
return diff < 0;
}
@@ -811,25 +811,25 @@ OldSerXidPagePrecedesLogically(int p, int q)
* Initialize for the tracking of old serializable committed xids.
*/
static void
-OldSerXidInit(void)
+SerialInit(void)
{
bool found;
/*
* Set up SLRU management of the pg_serial data.
*/
- OldSerXidSlruCtl->PagePrecedes = OldSerXidPagePrecedesLogically;
- SimpleLruInit(OldSerXidSlruCtl, "oldserxid",
- NUM_OLDSERXID_BUFFERS, 0, OldSerXidLock, "pg_serial",
- LWTRANCHE_OLDSERXID_BUFFERS);
+ SerialSlruCtl->PagePrecedes = SerialPagePrecedesLogically;
+ SimpleLruInit(SerialSlruCtl, "Serial",
+ NUM_SERIAL_BUFFERS, 0, SerialSLRULock, "pg_serial",
+ LWTRANCHE_SERIAL_BUFFER);
/* Override default assumption that writes should be fsync'd */
- OldSerXidSlruCtl->do_fsync = false;
+ SerialSlruCtl->do_fsync = false;
/*
- * Create or attach to the OldSerXidControl structure.
+ * Create or attach to the SerialControl structure.
*/
- oldSerXidControl = (OldSerXidControl)
- ShmemInitStruct("OldSerXidControlData", sizeof(OldSerXidControlData), &found);
+ serialControl = (SerialControl)
+ ShmemInitStruct("SerialControlData", sizeof(SerialControlData), &found);
Assert(found == IsUnderPostmaster);
if (!found)
@@ -837,9 +837,9 @@ OldSerXidInit(void)
/*
* Set control information to reflect empty SLRU.
*/
- oldSerXidControl->headPage = -1;
- oldSerXidControl->headXid = InvalidTransactionId;
- oldSerXidControl->tailXid = InvalidTransactionId;
+ serialControl->headPage = -1;
+ serialControl->headXid = InvalidTransactionId;
+ serialControl->tailXid = InvalidTransactionId;
}
}
@@ -849,7 +849,7 @@ OldSerXidInit(void)
* An invalid commitSeqNo means that there were no conflicts out from xid.
*/
static void
-OldSerXidAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
+SerialAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
{
TransactionId tailXid;
int targetPage;
@@ -859,16 +859,16 @@ OldSerXidAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
Assert(TransactionIdIsValid(xid));
- targetPage = OldSerXidPage(xid);
+ targetPage = SerialPage(xid);
- LWLockAcquire(OldSerXidLock, LW_EXCLUSIVE);
+ LWLockAcquire(SerialSLRULock, LW_EXCLUSIVE);
/*
* If no serializable transactions are active, there shouldn't be anything
* to push out to the SLRU. Hitting this assert would mean there's
* something wrong with the earlier cleanup logic.
*/
- tailXid = oldSerXidControl->tailXid;
+ tailXid = serialControl->tailXid;
Assert(TransactionIdIsValid(tailXid));
/*
@@ -877,41 +877,41 @@ OldSerXidAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
* any new pages that enter the tailXid-headXid range as we advance
* headXid.
*/
- if (oldSerXidControl->headPage < 0)
+ if (serialControl->headPage < 0)
{
- firstZeroPage = OldSerXidPage(tailXid);
+ firstZeroPage = SerialPage(tailXid);
isNewPage = true;
}
else
{
- firstZeroPage = OldSerXidNextPage(oldSerXidControl->headPage);
- isNewPage = OldSerXidPagePrecedesLogically(oldSerXidControl->headPage,
- targetPage);
+ firstZeroPage = SerialNextPage(serialControl->headPage);
+ isNewPage = SerialPagePrecedesLogically(serialControl->headPage,
+ targetPage);
}
- if (!TransactionIdIsValid(oldSerXidControl->headXid)
- || TransactionIdFollows(xid, oldSerXidControl->headXid))
- oldSerXidControl->headXid = xid;
+ if (!TransactionIdIsValid(serialControl->headXid)
+ || TransactionIdFollows(xid, serialControl->headXid))
+ serialControl->headXid = xid;
if (isNewPage)
- oldSerXidControl->headPage = targetPage;
+ serialControl->headPage = targetPage;
if (isNewPage)
{
/* Initialize intervening pages. */
while (firstZeroPage != targetPage)
{
- (void) SimpleLruZeroPage(OldSerXidSlruCtl, firstZeroPage);
- firstZeroPage = OldSerXidNextPage(firstZeroPage);
+ (void) SimpleLruZeroPage(SerialSlruCtl, firstZeroPage);
+ firstZeroPage = SerialNextPage(firstZeroPage);
}
- slotno = SimpleLruZeroPage(OldSerXidSlruCtl, targetPage);
+ slotno = SimpleLruZeroPage(SerialSlruCtl, targetPage);
}
else
- slotno = SimpleLruReadPage(OldSerXidSlruCtl, targetPage, true, xid);
+ slotno = SimpleLruReadPage(SerialSlruCtl, targetPage, true, xid);
- OldSerXidValue(slotno, xid) = minConflictCommitSeqNo;
- OldSerXidSlruCtl->shared->page_dirty[slotno] = true;
+ SerialValue(slotno, xid) = minConflictCommitSeqNo;
+ SerialSlruCtl->shared->page_dirty[slotno] = true;
- LWLockRelease(OldSerXidLock);
+ LWLockRelease(SerialSLRULock);
}
/*
@@ -920,7 +920,7 @@ OldSerXidAdd(TransactionId xid, SerCommitSeqNo minConflictCommitSeqNo)
* will be returned.
*/
static SerCommitSeqNo
-OldSerXidGetMinConflictCommitSeqNo(TransactionId xid)
+SerialGetMinConflictCommitSeqNo(TransactionId xid)
{
TransactionId headXid;
TransactionId tailXid;
@@ -929,10 +929,10 @@ OldSerXidGetMinConflictCommitSeqNo(TransactionId xid)
Assert(TransactionIdIsValid(xid));
- LWLockAcquire(OldSerXidLock, LW_SHARED);
- headXid = oldSerXidControl->headXid;
- tailXid = oldSerXidControl->tailXid;
- LWLockRelease(OldSerXidLock);
+ LWLockAcquire(SerialSLRULock, LW_SHARED);
+ headXid = serialControl->headXid;
+ tailXid = serialControl->tailXid;
+ LWLockRelease(SerialSLRULock);
if (!TransactionIdIsValid(headXid))
return 0;
@@ -944,13 +944,13 @@ OldSerXidGetMinConflictCommitSeqNo(TransactionId xid)
return 0;
/*
- * The following function must be called without holding OldSerXidLock,
+ * The following function must be called without holding SerialSLRULock,
* but will return with that lock held, which must then be released.
*/
- slotno = SimpleLruReadPage_ReadOnly(OldSerXidSlruCtl,
- OldSerXidPage(xid), xid);
- val = OldSerXidValue(slotno, xid);
- LWLockRelease(OldSerXidLock);
+ slotno = SimpleLruReadPage_ReadOnly(SerialSlruCtl,
+ SerialPage(xid), xid);
+ val = SerialValue(slotno, xid);
+ LWLockRelease(SerialSLRULock);
return val;
}
@@ -961,9 +961,9 @@ OldSerXidGetMinConflictCommitSeqNo(TransactionId xid)
* the SLRU can be discarded.
*/
static void
-OldSerXidSetActiveSerXmin(TransactionId xid)
+SerialSetActiveSerXmin(TransactionId xid)
{
- LWLockAcquire(OldSerXidLock, LW_EXCLUSIVE);
+ LWLockAcquire(SerialSLRULock, LW_EXCLUSIVE);
/*
* When no sxacts are active, nothing overlaps, set the xid values to
@@ -973,9 +973,9 @@ OldSerXidSetActiveSerXmin(TransactionId xid)
*/
if (!TransactionIdIsValid(xid))
{
- oldSerXidControl->tailXid = InvalidTransactionId;
- oldSerXidControl->headXid = InvalidTransactionId;
- LWLockRelease(OldSerXidLock);
+ serialControl->tailXid = InvalidTransactionId;
+ serialControl->headXid = InvalidTransactionId;
+ LWLockRelease(SerialSLRULock);
return;
}
@@ -987,22 +987,22 @@ OldSerXidSetActiveSerXmin(TransactionId xid)
*/
if (RecoveryInProgress())
{
- Assert(oldSerXidControl->headPage < 0);
- if (!TransactionIdIsValid(oldSerXidControl->tailXid)
- || TransactionIdPrecedes(xid, oldSerXidControl->tailXid))
+ Assert(serialControl->headPage < 0);
+ if (!TransactionIdIsValid(serialControl->tailXid)
+ || TransactionIdPrecedes(xid, serialControl->tailXid))
{
- oldSerXidControl->tailXid = xid;
+ serialControl->tailXid = xid;
}
- LWLockRelease(OldSerXidLock);
+ LWLockRelease(SerialSLRULock);
return;
}
- Assert(!TransactionIdIsValid(oldSerXidControl->tailXid)
- || TransactionIdFollows(xid, oldSerXidControl->tailXid));
+ Assert(!TransactionIdIsValid(serialControl->tailXid)
+ || TransactionIdFollows(xid, serialControl->tailXid));
- oldSerXidControl->tailXid = xid;
+ serialControl->tailXid = xid;
- LWLockRelease(OldSerXidLock);
+ LWLockRelease(SerialSLRULock);
}
/*
@@ -1016,19 +1016,19 @@ CheckPointPredicate(void)
{
int tailPage;
- LWLockAcquire(OldSerXidLock, LW_EXCLUSIVE);
+ LWLockAcquire(SerialSLRULock, LW_EXCLUSIVE);
/* Exit quickly if the SLRU is currently not in use. */
- if (oldSerXidControl->headPage < 0)
+ if (serialControl->headPage < 0)
{
- LWLockRelease(OldSerXidLock);
+ LWLockRelease(SerialSLRULock);
return;
}
- if (TransactionIdIsValid(oldSerXidControl->tailXid))
+ if (TransactionIdIsValid(serialControl->tailXid))
{
/* We can truncate the SLRU up to the page containing tailXid */
- tailPage = OldSerXidPage(oldSerXidControl->tailXid);
+ tailPage = SerialPage(serialControl->tailXid);
}
else
{
@@ -1042,14 +1042,14 @@ CheckPointPredicate(void)
* won't be removed until XID horizon advances enough to make it
* current again.
*/
- tailPage = oldSerXidControl->headPage;
- oldSerXidControl->headPage = -1;
+ tailPage = serialControl->headPage;
+ serialControl->headPage = -1;
}
- LWLockRelease(OldSerXidLock);
+ LWLockRelease(SerialSLRULock);
/* Truncate away pages that are no longer required */
- SimpleLruTruncate(OldSerXidSlruCtl, tailPage);
+ SimpleLruTruncate(SerialSlruCtl, tailPage);
/*
* Flush dirty SLRU pages to disk
@@ -1061,7 +1061,7 @@ CheckPointPredicate(void)
* before deleting the file in which they sit, which would be completely
* pointless.
*/
- SimpleLruFlush(OldSerXidSlruCtl, true);
+ SimpleLruFlush(SerialSlruCtl, true);
}
/*------------------------------------------------------------------------*/
@@ -1275,7 +1275,7 @@ InitPredicateLocks(void)
* Initialize the SLRU storage for old committed serializable
* transactions.
*/
- OldSerXidInit();
+ SerialInit();
}
/*
@@ -1324,8 +1324,8 @@ PredicateLockShmemSize(void)
size = add_size(size, sizeof(SHM_QUEUE));
/* Shared memory structures for SLRU tracking of old committed xids. */
- size = add_size(size, sizeof(OldSerXidControlData));
- size = add_size(size, SimpleLruShmemSize(NUM_OLDSERXID_BUFFERS, 0));
+ size = add_size(size, sizeof(SerialControlData));
+ size = add_size(size, SimpleLruShmemSize(NUM_SERIAL_BUFFERS, 0));
return size;
}
@@ -1462,8 +1462,8 @@ SummarizeOldestCommittedSxact(void)
/* Add to SLRU summary information. */
if (TransactionIdIsValid(sxact->topXid) && !SxactIsReadOnly(sxact))
- OldSerXidAdd(sxact->topXid, SxactHasConflictOut(sxact)
- ? sxact->SeqNo.earliestOutConflictCommit : InvalidSerCommitSeqNo);
+ SerialAdd(sxact->topXid, SxactHasConflictOut(sxact)
+ ? sxact->SeqNo.earliestOutConflictCommit : InvalidSerCommitSeqNo);
/* Summarize and release the detail. */
ReleaseOneSerializableXact(sxact, false, true);
@@ -1727,7 +1727,7 @@ GetSerializableTransactionSnapshotInt(Snapshot snapshot,
* (in particular, an elog(ERROR) in procarray.c would cause us to leak
* the sxact). Consider refactoring to avoid this.
*/
-#ifdef TEST_OLDSERXID
+#ifdef TEST_SUMMARIZE_SERIAL
SummarizeOldestCommittedSxact();
#endif
LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE);
@@ -1782,7 +1782,7 @@ GetSerializableTransactionSnapshotInt(Snapshot snapshot,
Assert(PredXact->SxactGlobalXminCount == 0);
PredXact->SxactGlobalXmin = snapshot->xmin;
PredXact->SxactGlobalXminCount = 1;
- OldSerXidSetActiveSerXmin(snapshot->xmin);
+ SerialSetActiveSerXmin(snapshot->xmin);
}
else if (TransactionIdEquals(snapshot->xmin, PredXact->SxactGlobalXmin))
{
@@ -3231,7 +3231,7 @@ SetNewSxactGlobalXmin(void)
}
}
- OldSerXidSetActiveSerXmin(PredXact->SxactGlobalXmin);
+ SerialSetActiveSerXmin(PredXact->SxactGlobalXmin);
}
/*
@@ -4084,7 +4084,7 @@ CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot s
*/
SerCommitSeqNo conflictCommitSeqNo;
- conflictCommitSeqNo = OldSerXidGetMinConflictCommitSeqNo(xid);
+ conflictCommitSeqNo = SerialGetMinConflictCommitSeqNo(xid);
if (conflictCommitSeqNo != 0)
{
if (conflictCommitSeqNo != InvalidSerCommitSeqNo
@@ -5069,7 +5069,7 @@ predicatelock_twophase_recover(TransactionId xid, uint16 info,
{
PredXact->SxactGlobalXmin = sxact->xmin;
PredXact->SxactGlobalXminCount = 1;
- OldSerXidSetActiveSerXmin(sxact->xmin);
+ SerialSetActiveSerXmin(sxact->xmin);
}
else if (TransactionIdEquals(sxact->xmin, PredXact->SxactGlobalXmin))
{