Remove NEXTXID xlog record type to avoid three-way deadlock risk.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 18 Mar 2001 20:18:59 +0000 (20:18 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 18 Mar 2001 20:18:59 +0000 (20:18 +0000)
NEXTXID isn't really necessary, per previous discussion in pghackers,
but I mulishy insisted we should put it in anyway.  Mea culpa.

src/backend/access/transam/transam.c
src/backend/access/transam/varsup.c
src/backend/access/transam/xlog.c
src/backend/storage/ipc/sinval.c
src/include/access/transam.h
src/include/access/xlog.h
src/include/catalog/pg_control.h

index ec429c194b26b10505babebc6eddb867caa046cf..642890579261bab492869afa82b2eeab73c26808 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.40 2001/03/13 01:17:05 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.41 2001/03/18 20:18:59 tgl Exp $
  *
  * NOTES
  *   This file contains the high level access-method interface to the
@@ -430,7 +430,6 @@ InitializeTransactionLog(void)
        Assert(!IsUnderPostmaster && 
                ShmemVariableCache->nextXid <= FirstTransactionId);
        ShmemVariableCache->nextXid = FirstTransactionId;
-       ShmemVariableCache->xidCount = 0; /* force an XLOG rec right away */
    }
    else if (RecoveryCheckingEnabled())
    {
index e4271f5fa86349f405d6b1f870ace0adecacab20..d6097b2567c2e8061528e72534ee3a026ce99f69 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2000, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.36 2001/03/13 01:17:05 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.37 2001/03/18 20:18:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,17 +44,9 @@ GetNewTransactionId(TransactionId *xid)
 
    SpinAcquire(XidGenLockId);
 
-   /* If we run out of logged for use xids then we must log more */
-   if (ShmemVariableCache->xidCount == 0)
-   {
-       XLogPutNextXid(ShmemVariableCache->nextXid + VAR_XID_PREFETCH);
-       ShmemVariableCache->xidCount = VAR_XID_PREFETCH;
-   }
-
    *xid = ShmemVariableCache->nextXid;
 
    (ShmemVariableCache->nextXid)++;
-   (ShmemVariableCache->xidCount)--;
 
    SpinRelease(XidGenLockId);
 
index 9a841a4e3a0127a41ea75e17b0ec7fe7305de050..9994025dd69dd45b215e93200ab0bf2a487f61d3 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.61 2001/03/18 00:30:27 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.62 2001/03/18 20:18:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2161,7 +2161,6 @@ BootStrapXLOG(void)
    checkPoint.time = time(NULL);
 
    ShmemVariableCache->nextXid = checkPoint.nextXid;
-   ShmemVariableCache->xidCount = 0;
    ShmemVariableCache->nextOid = checkPoint.nextOid;
    ShmemVariableCache->oidCount = 0;
 
@@ -2317,7 +2316,6 @@ StartupXLOG(void)
        elog(STOP, "Invalid NextTransactionId/NextOid");
 
    ShmemVariableCache->nextXid = checkPoint.nextXid;
-   ShmemVariableCache->xidCount = 0;
    ShmemVariableCache->nextOid = checkPoint.nextOid;
    ShmemVariableCache->oidCount = 0;
 
@@ -2368,11 +2366,7 @@ StartupXLOG(void)
            do
            {
                if (record->xl_xid >= ShmemVariableCache->nextXid)
-               {
-                   /* This probably shouldn't happen... */
                    ShmemVariableCache->nextXid = record->xl_xid + 1;
-                   ShmemVariableCache->xidCount = 0;
-               }
                if (XLOG_DEBUG)
                {
                    char    buf[8192];
@@ -2717,8 +2711,6 @@ CreateCheckPoint(bool shutdown)
 
    SpinAcquire(XidGenLockId);
    checkPoint.nextXid = ShmemVariableCache->nextXid;
-   if (!shutdown)
-       checkPoint.nextXid += ShmemVariableCache->xidCount;
    SpinRelease(XidGenLockId);
 
    SpinAcquire(OidGenLockId);
@@ -2803,21 +2795,6 @@ CreateCheckPoint(bool shutdown)
    END_CRIT_SECTION();
 }
 
-/*
- * Write a NEXTXID log record
- */
-void
-XLogPutNextXid(TransactionId nextXid)
-{
-   XLogRecData     rdata;
-
-   rdata.buffer = InvalidBuffer;
-   rdata.data = (char *)(&nextXid);
-   rdata.len = sizeof(TransactionId);
-   rdata.next = NULL;
-   (void) XLogInsert(RM_XLOG_ID, XLOG_NEXTXID, &rdata);
-}
-
 /*
  * Write a NEXTOID log record
  */
@@ -2841,18 +2818,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
 {
    uint8   info = record->xl_info & ~XLR_INFO_MASK;
 
-   if (info == XLOG_NEXTXID)
-   {
-       TransactionId       nextXid;
-
-       memcpy(&nextXid, XLogRecGetData(record), sizeof(TransactionId));
-       if (ShmemVariableCache->nextXid < nextXid)
-       {
-           ShmemVariableCache->nextXid = nextXid;
-           ShmemVariableCache->xidCount = 0;
-       }
-   }
-   else if (info == XLOG_NEXTOID)
+   if (info == XLOG_NEXTOID)
    {
        Oid     nextOid;
 
@@ -2870,7 +2836,6 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
        memcpy(&checkPoint, XLogRecGetData(record), sizeof(CheckPoint));
        /* In a SHUTDOWN checkpoint, believe the counters exactly */
        ShmemVariableCache->nextXid = checkPoint.nextXid;
-       ShmemVariableCache->xidCount = 0;
        ShmemVariableCache->nextOid = checkPoint.nextOid;
        ShmemVariableCache->oidCount = 0;
    }
@@ -2879,11 +2844,10 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
        CheckPoint  checkPoint;
 
        memcpy(&checkPoint, XLogRecGetData(record), sizeof(CheckPoint));
-       /* In an ONLINE checkpoint, treat the counters like NEXTXID/NEXTOID */
+       /* In an ONLINE checkpoint, treat the counters like NEXTOID */
        if (ShmemVariableCache->nextXid < checkPoint.nextXid)
        {
            ShmemVariableCache->nextXid = checkPoint.nextXid;
-           ShmemVariableCache->xidCount = 0;
        }
        if (ShmemVariableCache->nextOid < checkPoint.nextOid)
        {
@@ -2915,13 +2879,6 @@ xlog_desc(char *buf, uint8 xl_info, char* rec)
            checkpoint->nextOid,
            (info == XLOG_CHECKPOINT_SHUTDOWN) ? "shutdown" : "online");
    }
-   else if (info == XLOG_NEXTXID)
-   {
-       TransactionId       nextXid;
-
-       memcpy(&nextXid, rec, sizeof(TransactionId));
-       sprintf(buf + strlen(buf), "nextXid: %u", nextXid);
-   }
    else if (info == XLOG_NEXTOID)
    {
        Oid     nextOid;
index 44b8d1162556511d692c3a5906ebf8497d2ad327..fb37e428cb7f3392bd73fd1dc8415743dc0f6600 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.26 2001/02/26 00:50:07 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.27 2001/03/18 20:18:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -296,7 +296,7 @@ GetSnapshotData(bool serializable)
    /*
     * Unfortunately, we have to call ReadNewTransactionId() after
     * acquiring SInvalLock above. It's not good because
-    * ReadNewTransactionId() does SpinAcquire(OidGenLockId) but
+    * ReadNewTransactionId() does SpinAcquire(XidGenLockId) but
     * _necessary_.
     */
    ReadNewTransactionId(&(snapshot->xmax));
index 460de699886281e4580445a611d47d9ad4eb787a..9007c24e8995bd51b76737434372ac8299dfa4a1 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: transam.h,v 1.30 2001/03/13 01:17:06 tgl Exp $
+ * $Id: transam.h,v 1.31 2001/03/18 20:18:59 tgl Exp $
  *
  *  NOTES
  *     Transaction System Version 101 now support proper oid
@@ -129,9 +129,8 @@ typedef VariableRelationContentsData *VariableRelationContents;
 typedef struct VariableCacheData
 {
    TransactionId   nextXid;    /* next XID to assign */
-   uint32          xidCount;   /* XIDs available before must do XLOG work */
-   Oid             nextOid;    /* and similarly for OIDs */
-   uint32          oidCount;
+   Oid             nextOid;    /* next OID to assign */
+   uint32          oidCount;   /* OIDs available before must do XLOG work */
 } VariableCacheData;
 
 typedef VariableCacheData *VariableCache;
index d2dfb2e31c6cd25763a5efdf2dac272883961df8..b1808dfc26fb712c8cf3d92b583675af515b7c17 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xlog.h,v 1.21 2001/03/16 05:44:33 tgl Exp $
+ * $Id: xlog.h,v 1.22 2001/03/18 20:18:59 tgl Exp $
  */
 #ifndef XLOG_H
 #define XLOG_H
@@ -201,7 +201,6 @@ extern void StartupXLOG(void);
 extern void ShutdownXLOG(void);
 extern void CreateCheckPoint(bool shutdown);
 extern void SetThisStartUpID(void);
-extern void XLogPutNextXid(TransactionId nextXid);
 extern void XLogPutNextOid(Oid nextOid);
 extern void SetRedoRecPtr(void);
 extern void GetRedoRecPtr(void);
index 97d0e13e78343330a7af05457ddb01705ec391bb..4dcb120469bcb14ecb31eab88d25f10e26f77913 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_control.h,v 1.1 2001/03/13 01:17:06 tgl Exp $
+ * $Id: pg_control.h,v 1.2 2001/03/18 20:18:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -45,7 +45,6 @@ typedef struct CheckPoint
 /* XLOG info values for XLOG rmgr */
 #define XLOG_CHECKPOINT_SHUTDOWN       0x00
 #define XLOG_CHECKPOINT_ONLINE         0x10
-#define XLOG_NEXTXID                   0x20
 #define XLOG_NEXTOID                   0x30