Review uses of IsUnderPostmaster, change some tests to look at
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jan 2004 21:02:40 +0000 (21:02 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jan 2004 21:02:40 +0000 (21:02 +0000)
whereToSendOutput instead because they are really inquiring about
the correct client communication protocol.  Update some comments.
This is pointing towards supporting regular FE/BE client protocol
in a standalone backend, per discussion a month or so back.

src/backend/access/transam/slru.c
src/backend/catalog/index.c
src/backend/commands/copy.c
src/backend/commands/tablecmds.c
src/backend/postmaster/pgstat.c
src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/backend/utils/init/globals.c

index 73c481c46b7d6b4a9e5275d3ccc2d750c8c9addc..ba3054f14bbbbe52e94c2dd5c5f9541702552beb 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/slru.c,v 1.9 2004/01/26 22:35:31 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/slru.c,v 1.10 2004/01/28 21:02:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -184,14 +184,12 @@ SimpleLruInit(SlruCtl ctl, const char *name, const char *subdir)
        shared = (SlruShared) ptr;
 
 #ifdef EXEC_BACKEND
-
        /*
         * Locks are in shared memory
         */
        locks = (SlruLock) (ptr + MAXALIGN(sizeof(SlruSharedData)) +
                                                BLCKSZ * NUM_CLOG_BUFFERS);
 #else
-
        /*
         * Locks are in private memory
         */
@@ -200,10 +198,9 @@ SimpleLruInit(SlruCtl ctl, const char *name, const char *subdir)
        Assert(locks);
 #endif
 
-
        if (!IsUnderPostmaster)
-               /* Initialize locks and shared memory area */
        {
+               /* Initialize locks and shared memory area */
                char       *bufptr;
                int                     slotno;
 
@@ -229,11 +226,9 @@ SimpleLruInit(SlruCtl ctl, const char *name, const char *subdir)
        else
                Assert(found);
 
-
        ctl->locks = locks;
        ctl->shared = shared;
 
-
        /* Init directory path */
        snprintf(ctl->Dir, MAXPGPATH, "%s/%s", DataDir, subdir);
 }
index 91c951362157144d093087d6373dde2d180ac822..4180526301ac50cd73180e22b62777729afef95e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.225 2004/01/07 18:56:25 neilc Exp $
+ *       $PostgreSQL: pgsql/src/backend/catalog/index.c,v 1.226 2004/01/28 21:02:39 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -508,8 +508,9 @@ index_create(Oid heapRelationId,
         * We cannot allow indexing a shared relation after initdb (because
         * there's no way to make the entry in other databases' pg_class).
         * Unfortunately we can't distinguish initdb from a manually started
-        * standalone backend.  However, we can at least prevent this mistake
-        * under normal multi-user operation.
+        * standalone backend (toasting of shared rels happens after the bootstrap
+        * phase, so checking IsBootstrapProcessingMode() won't work).  However,
+        * we can at least prevent this mistake under normal multi-user operation.
         */
        if (shared_relation && IsUnderPostmaster)
                ereport(ERROR,
index b5b3cfeefac0b67ac0e942023f744695cae67a15..66850d32d56229523972129e428d14b6b9b3d96f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.216 2004/01/26 22:35:31 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/copy.c,v 1.217 2004/01/28 21:02:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -829,7 +829,7 @@ DoCopy(const CopyStmt *stmt)
                }
                if (pipe)
                {
-                       if (IsUnderPostmaster)
+                       if (whereToSendOutput == Remote)
                                ReceiveCopyBegin(binary, length(attnumlist));
                        else
                                copy_file = stdin;
@@ -879,7 +879,7 @@ DoCopy(const CopyStmt *stmt)
                }
                if (pipe)
                {
-                       if (IsUnderPostmaster)
+                       if (whereToSendOutput == Remote)
                                SendCopyBegin(binary, length(attnumlist));
                        else
                                copy_file = stdout;
@@ -929,7 +929,7 @@ DoCopy(const CopyStmt *stmt)
                                         errmsg("could not write to file \"%s\": %m",
                                                        filename)));
        }
-       else if (IsUnderPostmaster && !is_from)
+       else if (whereToSendOutput == Remote && !is_from)
                SendCopyEnd(binary);
        pfree(attribute_buf.data);
        pfree(line_buf.data);
index 7b6888918bd47a202ef3bdace0a022689f17441b..809f425bc656a72b71a67ee52e283a6efb598aea 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.96 2004/01/23 02:13:11 neilc Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.97 2004/01/28 21:02:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4027,8 +4027,9 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
         * We cannot allow toasting a shared relation after initdb (because
         * there's no way to mark it toasted in other databases' pg_class).
         * Unfortunately we can't distinguish initdb from a manually started
-        * standalone backend.  However, we can at least prevent this mistake
-        * under normal multi-user operation.
+        * standalone backend (toasting happens after the bootstrap phase,
+        * so checking IsBootstrapProcessingMode() won't work).  However, we can
+        * at least prevent this mistake under normal multi-user operation.
         */
        shared_relation = rel->rd_rel->relisshared;
        if (shared_relation && IsUnderPostmaster)
index b684f01c1199d1fd92f75cab154f480a65b839c3..606240c86eb20ae5c14e631315084c5e9067b3bd 100644 (file)
@@ -13,7 +13,7 @@
  *
  *     Copyright (c) 2001-2003, PostgreSQL Global Development Group
  *
- *     $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.56 2004/01/26 22:59:53 momjian Exp $
+ *     $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.57 2004/01/28 21:02:40 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -1339,6 +1339,12 @@ pgstat_mainInit(void)
 {
        IsUnderPostmaster = true;       /* we are a postmaster subprocess now */
 
+#ifdef EXEC_BACKEND
+       /* In EXEC case we will not have inherited these settings */
+       IsPostmasterEnvironment = true;
+       whereToSendOutput = None;
+#endif
+
        MyProcPid = getpid();           /* reset MyProcPid */
 
        /* Lose the postmaster's on-exit routines */
index ada86268e38dc3d85e493f32c28863cf2ae460f9..b10d4fd351af5f7ed241831bd281d454bf7a2c19 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.363 2004/01/27 00:45:26 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.364 2004/01/28 21:02:40 tgl Exp $
  *
  * NOTES
  *
@@ -2697,6 +2697,10 @@ SubPostmasterMain(int argc, char* argv[])
        /* Do this sooner rather than later... */
        IsUnderPostmaster = true;       /* we are a postmaster subprocess now */
 
+       /* In EXEC case we will not have inherited these settings */
+       IsPostmasterEnvironment = true;
+       whereToSendOutput = None;
+
        /* Setup global context */
        MemoryContextInit();
        InitializeGUCOptions();
@@ -2994,6 +2998,14 @@ SSDataBaseInit(int xlop)
        IsUnderPostmaster = true;               /* we are a postmaster subprocess
                                                                         * now */
 
+#ifdef EXEC_BACKEND
+       /* In EXEC case we will not have inherited these settings */
+       IsPostmasterEnvironment = true;
+       whereToSendOutput = None;
+#endif
+
+       MyProcPid = getpid();           /* reset MyProcPid */
+
        /* Lose the postmaster's on-exit routines and port connections */
        on_exit_reset();
 
index 2a40b34261ec0922eb3c5a8ae0da0724fe884cf0..4f62112714bdb085cfa3c6fa0247d525f51b659b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.386 2004/01/26 22:59:53 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.387 2004/01/28 21:02:40 tgl Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -392,7 +392,7 @@ ReadCommand(StringInfo inBuf)
 {
        int                     result;
 
-       if (IsUnderPostmaster)
+       if (whereToSendOutput == Remote)
                result = SocketBackend(inBuf);
        else
                result = InteractiveBackend(inBuf);
@@ -2627,8 +2627,8 @@ PostgresMain(int argc, char *argv[], const char *username)
                /* Need not flush since ReadyForQuery will do it. */
        }
 
-       /* Welcome banner for non-frontend case */
-       if (!IsUnderPostmaster)
+       /* Welcome banner for standalone case */
+       if (whereToSendOutput == Debug)
                printf("\nPostgreSQL stand-alone backend %s\n", PG_VERSION);
 
        /*
index 56058fa05cc687026415a7feb4faa9558a96bc3f..3bddad4685a510e4e6cf6b870c6068c5b779f472 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.80 2004/01/26 22:59:53 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/init/globals.c,v 1.81 2004/01/28 21:02:40 tgl Exp $
  *
  * NOTES
  *       Globals used all over the place should be declared here and not
@@ -53,9 +53,19 @@ BackendId    MyBackendId;
 char      *DatabasePath = NULL;
 Oid                    MyDatabaseId = InvalidOid;
 
-pid_t PostmasterPid = 0;
+pid_t          PostmasterPid = 0;
 
-/* these are initialized for the bootstrap/standalone case: */
+/*
+ * IsPostmasterEnvironment is true in a postmaster process and any postmaster
+ * child process; it is false in a standalone process (bootstrap or
+ * standalone backend).  IsUnderPostmaster is true in postmaster child
+ * processes.  Note that "child process" includes all children, not only
+ * regular backends.  These should be set correctly as early as possible
+ * in the execution of a process, so that error handling will do the right
+ * things if an error should occur during process initialization.
+ *
+ * These are initialized for the bootstrap/standalone case.
+ */
 bool           IsPostmasterEnvironment = false;
 bool           IsUnderPostmaster = false;