Remove some no-longer-needed kluges for bootstrapping, in particular
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 20 Feb 2005 21:46:50 +0000 (21:46 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 20 Feb 2005 21:46:50 +0000 (21:46 +0000)
the AMI_OVERRIDE flag.  The fact that TransactionLogFetch treats
BootstrapTransactionId as always committed is sufficient to make
bootstrap work, and getting rid of extra tests in heavily used code
paths seems like a win.  The files produced by initdb are demonstrably
the same after this change.

src/backend/access/heap/heapam.c
src/backend/access/transam/transam.c
src/backend/access/transam/varsup.c
src/backend/access/transam/xact.c
src/backend/utils/init/postinit.c
src/include/access/transam.h

index b657679fdded63028da1a451debde26ff66285a2..a0cb93924ea35dc55f8629440c8f41ec20fda268 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.182 2004/12/31 21:59:16 pgsql Exp $
+ *   $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.183 2005/02/20 21:46:47 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -715,10 +715,6 @@ heap_beginscan(Relation relation, Snapshot snapshot,
     */
    RelationIncrementReferenceCount(relation);
 
-   /* XXX someday assert SelfTimeQual if relkind == RELKIND_UNCATALOGED */
-   if (relation->rd_rel->relkind == RELKIND_UNCATALOGED)
-       snapshot = SnapshotSelf;
-
    /*
     * allocate and initialize scan descriptor
     */
index 8582a3c1be89eaf6fc8b64d57be95c9e267b7af3..f88c25a37db72868234506017e1af3fe89f79ac2 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/access/transam/transam.c,v 1.63 2004/12/31 21:59:29 pgsql Exp $
+ *   $PostgreSQL: pgsql/src/backend/access/transam/transam.c,v 1.64 2005/02/20 21:46:48 tgl Exp $
  *
  * NOTES
  *   This file contains the high level access-method interface to the
 #include "utils/tqual.h"
 
 
-/* ----------------
- *     Flag indicating that we are bootstrapping.
- *
- * Transaction ID generation is disabled during bootstrap; we just use
- * BootstrapTransactionId. Also, the transaction ID status-check routines
- * are short-circuited; they claim that BootstrapTransactionId has already
- * committed, allowing tuples already inserted to be seen immediately.
- * ----------------
- */
-bool       AMI_OVERRIDE = false;
-
-
 static XidStatus TransactionLogFetch(TransactionId transactionId);
 static void TransactionLogUpdate(TransactionId transactionId,
                     XidStatus status);
@@ -134,18 +122,6 @@ TransactionLogMultiUpdate(int nxids, TransactionId *xids, XidStatus status)
        TransactionIdSetStatus(xids[i], status);
 }
 
-/* --------------------------------
- *     AmiTransactionOverride
- *
- *     This function is used to manipulate the bootstrap flag.
- * --------------------------------
- */
-void
-AmiTransactionOverride(bool flag)
-{
-   AMI_OVERRIDE = flag;
-}
-
 /* ----------------------------------------------------------------
  *                     Interface functions
  *
@@ -184,12 +160,6 @@ TransactionIdDidCommit(TransactionId transactionId)
 {
    XidStatus   xidstatus;
 
-   if (AMI_OVERRIDE)
-   {
-       Assert(transactionId == BootstrapTransactionId);
-       return true;
-   }
-
    xidstatus = TransactionLogFetch(transactionId);
 
    /*
@@ -233,12 +203,6 @@ TransactionIdDidAbort(TransactionId transactionId)
 {
    XidStatus   xidstatus;
 
-   if (AMI_OVERRIDE)
-   {
-       Assert(transactionId == BootstrapTransactionId);
-       return false;
-   }
-
    xidstatus = TransactionLogFetch(transactionId);
 
    /*
index eb7aeba38184793a8cc5684f76b64c4fbdf176a9..8caa763833588636866a276e043f24110180f03b 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2000-2005, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/access/transam/varsup.c,v 1.61 2005/02/20 02:21:28 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/access/transam/varsup.c,v 1.62 2005/02/20 21:46:48 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,7 +41,7 @@ GetNewTransactionId(bool isSubXact)
     * During bootstrap initialization, we return the special bootstrap
     * transaction id.
     */
-   if (AMI_OVERRIDE)
+   if (IsBootstrapProcessingMode())
        return BootstrapTransactionId;
 
    LWLockAcquire(XidGenLock, LW_EXCLUSIVE);
index 5813faeea75646c8ae22290a14275b1186c1502c..5c84bb995542bee0802182caaa6d823686871db4 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.196 2005/02/20 02:21:28 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.197 2005/02/20 21:46:48 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -450,22 +450,23 @@ GetCurrentTransactionNestLevel(void)
 
 /*
  * TransactionIdIsCurrentTransactionId
- *
- * During bootstrap, we cheat and say "it's not my transaction ID" even though
- * it is.  Along with transam.c's cheat to say that the bootstrap XID is
- * already committed, this causes the tqual.c routines to see previously
- * inserted tuples as committed, which is what we need during bootstrap.
  */
 bool
 TransactionIdIsCurrentTransactionId(TransactionId xid)
 {
    TransactionState s;
 
-   if (AMI_OVERRIDE)
-   {
-       Assert(xid == BootstrapTransactionId);
+   /*
+    * We always say that BootstrapTransactionId is "not my transaction ID"
+    * even when it is (ie, during bootstrap).  Along with the fact that
+    * transam.c always treats BootstrapTransactionId as already committed,
+    * this causes the tqual.c routines to see all tuples as committed,
+    * which is what we need during bootstrap.  (Bootstrap mode only inserts
+    * tuples, it never updates or deletes them, so all tuples can be presumed
+    * good immediately.)
+    */
+   if (xid == BootstrapTransactionId)
        return false;
-   }
 
    /*
     * We will return true for the Xid of the current subtransaction, any
index 453bd9379910e2de06cb146531cc90cfac0b7942..53eb47a97ecfa6e90db598dc33f7423970fc07d7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.139 2004/12/31 22:01:40 pgsql Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.140 2005/02/20 21:46:49 tgl Exp $
  *
  *
  *-------------------------------------------------------------------------
@@ -328,11 +328,6 @@ InitPostgres(const char *dbname, const char *username)
    if (MyBackendId > MaxBackends || MyBackendId <= 0)
        elog(FATAL, "bad backend id: %d", MyBackendId);
 
-   /*
-    * Initialize the transaction system override state.
-    */
-   AmiTransactionOverride(bootstrap);
-
    /*
     * Initialize local process's access to XLOG.  In bootstrap case we
     * may skip this since StartupXLOG() was run instead.
index e623c5d00066a8660371bb2ebccae02ec5a01f6b..c169d8f3219380a12dcd709bba6adeffdee07aa3 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/access/transam.h,v 1.52 2005/02/20 02:22:03 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/access/transam.h,v 1.53 2005/02/20 21:46:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -100,9 +100,6 @@ typedef VariableCacheData *VariableCache;
  * ----------------
  */
 
-/* in transam/transam.c */
-extern bool AMI_OVERRIDE;
-
 /* in transam/varsup.c */
 extern VariableCache ShmemVariableCache;
 
@@ -110,7 +107,6 @@ extern VariableCache ShmemVariableCache;
 /*
  * prototypes for functions in transam/transam.c
  */
-extern void AmiTransactionOverride(bool flag);
 extern bool TransactionIdDidCommit(TransactionId transactionId);
 extern bool TransactionIdDidAbort(TransactionId transactionId);
 extern void TransactionIdCommit(TransactionId transactionId);