From e8ff221d8b137c0e9a4242a24a19599f02b56ff7 Mon Sep 17 00:00:00 2001
From: "Vadim B. Mikheev" <vadim4o@yahoo.com>
Date: Tue, 21 Nov 2000 09:39:57 +0000
Subject: [PATCH] Fix OID bootstraping.

---
 src/backend/access/transam/xlog.c | 11 +++----
 src/backend/bootstrap/bootstrap.c | 53 ++++++++++++++++---------------
 2 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 22f93190f70..6d6d8edbda5 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.29 2000/11/21 02:11:06 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.30 2000/11/21 09:39:56 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -251,7 +251,7 @@ XLogInsert(RmgrId rmid, uint8 info, char *hdr, uint32 hdrlen, char *buf, uint32
 	if (len == 0 || len > MAXLOGRECSZ)
 		elog(STOP, "XLogInsert: invalid record len %u", len);
 
-	if (IsBootstrapProcessingMode())
+	if (IsBootstrapProcessingMode() && rmid != RM_XLOG_ID)
 	{
 		RecPtr.xlogid = 0;
 		RecPtr.xrecoff = SizeOfXLogPHD;	/* start of 1st checkpoint record */
@@ -506,7 +506,7 @@ XLogFlush(XLogRecPtr record)
 		fflush(stderr);
 	}
 
-	if (IsBootstrapProcessingMode() || InRedo)
+	if (InRedo)
 		return;
 	if (XLByteLE(record, LgwrResult.Flush))
 		return;
@@ -1326,8 +1326,7 @@ BootStrapXLOG()
 
 #endif
 
-	memset(buffer, 0, BLCKSZ);
-	ControlFile = (ControlFileData *) buffer;
+	memset(ControlFile, 0, BLCKSZ);
 	ControlFile->logId = 0;
 	ControlFile->logSeg = 1;
 	ControlFile->checkPoint = checkPoint.redo;
@@ -1337,7 +1336,7 @@ BootStrapXLOG()
 	ControlFile->relseg_size = RELSEG_SIZE;
 	ControlFile->catalog_version_no = CATALOG_VERSION_NO;
 
-	if (write(fd, buffer, BLCKSZ) != BLCKSZ)
+	if (write(fd, ControlFile, BLCKSZ) != BLCKSZ)
 		elog(STOP, "BootStrapXLOG failed to write control file: %d", errno);
 
 	if (fsync(fd) != 0)
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index e40dc7d7ca7..fe3ca265e9f 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.98 2000/11/09 11:25:58 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.99 2000/11/21 09:39:57 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -341,32 +341,33 @@ BootstrapMain(int argc, char *argv[])
 	/*
 	 * XLOG operations
 	 */
-	if (xlogop != BS_XLOG_NOP)
+	snprintf(XLogDir, MAXPGPATH, "%s/pg_xlog", DataDir);
+	snprintf(ControlFilePath, MAXPGPATH, "%s/global/pg_control", DataDir);
+	SetProcessingMode(NormalProcessing);
+	if (xlogop == BS_XLOG_NOP)
+		StartupXLOG();
+	else if (xlogop == BS_XLOG_BOOTSTRAP)
 	{
-		snprintf(XLogDir, MAXPGPATH, "%s/pg_xlog", DataDir);
-		snprintf(ControlFilePath, MAXPGPATH, "%s/global/pg_control", DataDir);
-		if (xlogop == BS_XLOG_BOOTSTRAP)
-			BootStrapXLOG();
-		else
+		BootStrapXLOG();
+		StartupXLOG();
+	}
+	else
+	{
+		if (xlogop == BS_XLOG_CHECKPOINT)
 		{
-			SetProcessingMode(NormalProcessing);
-			if (xlogop == BS_XLOG_STARTUP)
-				StartupXLOG();
-			else if (xlogop == BS_XLOG_CHECKPOINT)
-			{
-#ifdef XLOG
-				extern void CreateDummyCaches(void);
-				CreateDummyCaches();
-#endif
-				CreateCheckPoint(false);
-			}
-			else if (xlogop == BS_XLOG_SHUTDOWN)
-				ShutdownXLOG();
-			else
-				elog(STOP, "Unsupported XLOG op %d", xlogop);
-			proc_exit(0);
+			extern void CreateDummyCaches(void);
+			CreateDummyCaches();
+			CreateCheckPoint(false);
 		}
+		else if (xlogop == BS_XLOG_STARTUP)
+			StartupXLOG();
+		else if (xlogop == BS_XLOG_SHUTDOWN)
+			ShutdownXLOG();
+		else
+			elog(STOP, "Unsupported XLOG op %d", xlogop);
+		proc_exit(0);
 	}
+	SetProcessingMode(BootstrapProcessing);
 
 	/*
 	 * backend initialization
@@ -407,9 +408,9 @@ BootstrapMain(int argc, char *argv[])
 	 */
 	Int_yyparse();
 
-#ifdef XLOG
-	FlushBufferPool();
-#endif
+	SetProcessingMode(NormalProcessing);
+	CreateCheckPoint(true);
+	SetProcessingMode(BootstrapProcessing);
 
 	/* clean up processing */
 	StartTransactionCommand();
-- 
GitLab