From d04e9137c9fe440a0149738dd717b4fb8c63a60a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 17 Aug 2002 15:12:07 +0000 Subject: [PATCH] Reverse out XLogDir/-X write-ahead log handling, per discussion. Original patch from Thomas. --- src/backend/access/transam/xlog.c | 25 +----- src/backend/bootstrap/bootstrap.c | 15 +--- src/backend/postmaster/postmaster.c | 10 +-- src/backend/tcop/postgres.c | 14 +--- src/bin/initdb/initdb.sh | 124 +++++++++------------------- src/bin/pg_ctl/pg_ctl.sh | 15 +--- src/bin/pg_resetxlog/pg_resetxlog.c | 5 +- src/include/access/xlog.h | 6 +- 8 files changed, 57 insertions(+), 157 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index fbe61e5691..de963ccbd4 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2002, 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.101 2002/08/06 02:36:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.102 2002/08/17 15:12:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -398,8 +398,7 @@ static ControlFileData *ControlFile = NULL; /* File path names */ -char *XLogDir = NULL; - +static char XLogDir[MAXPGPATH]; static char ControlFilePath[MAXPGPATH]; /* @@ -2075,29 +2074,11 @@ ValidXLOGHeader(XLogPageHeader hdr, int emode, bool checkSUI) * I/O and compatibility-check functions, but there seems no need currently. */ -void -SetXLogDir(char *path) -{ - char *xsubdir = "/pg_xlog"; - - if (path != NULL) - { - XLogDir = malloc(strlen(path)+1); - strcpy(XLogDir, path); - } - else - { - XLogDir = malloc(strlen(DataDir)+strlen(xsubdir)+1); - snprintf(XLogDir, MAXPGPATH, "%s%s", DataDir, xsubdir); - } -} - void XLOGPathInit(void) { /* Init XLOG file paths */ - if (XLogDir == NULL) - SetXLogDir(NULL); + snprintf(XLogDir, MAXPGPATH, "%s/pg_xlog", DataDir); snprintf(ControlFilePath, MAXPGPATH, "%s/global/pg_control", DataDir); } diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index d2afa64768..ae4a86d1d4 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.137 2002/08/10 20:29:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.138 2002/08/17 15:12:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -222,7 +222,6 @@ BootstrapMain(int argc, char *argv[]) int flag; int xlogop = BS_XLOG_NOP; char *potential_DataDir = NULL; - char *potential_XLogDir = NULL; /* * initialize globals @@ -249,22 +248,17 @@ BootstrapMain(int argc, char *argv[]) if (!IsUnderPostmaster) { InitializeGUCOptions(); - /* Null if no PGDATA variable */ - potential_DataDir = getenv("PGDATA"); - /* Null if no PGXLOG variable */ - potential_XLogDir = getenv("PGXLOG"); + potential_DataDir = getenv("PGDATA"); /* Null if no PGDATA + * variable */ } - while ((flag = getopt(argc, argv, "B:d:D:X:Fo:px:")) != -1) + while ((flag = getopt(argc, argv, "B:d:D:Fo:px:")) != -1) { switch (flag) { case 'D': potential_DataDir = optarg; break; - case 'X': - potential_XLogDir = optarg; - break; case 'd': { /* Turn on debugging for the bootstrap process. */ @@ -319,7 +313,6 @@ BootstrapMain(int argc, char *argv[]) proc_exit(1); } SetDataDir(potential_DataDir); - SetXLogDir(potential_XLogDir); } /* Validate we have been given a reasonable-looking DataDir */ diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 1c70c4f0ec..f67a8b64a3 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.283 2002/08/10 20:29:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.284 2002/08/17 15:12:06 momjian Exp $ * * NOTES * @@ -346,7 +346,6 @@ PostmasterMain(int argc, char *argv[]) int status; char original_extraoptions[MAXPGPATH]; char *potential_DataDir = NULL; - char *potential_XLogDir = NULL; *original_extraoptions = '\0'; @@ -404,11 +403,10 @@ PostmasterMain(int argc, char *argv[]) InitializeGUCOptions(); potential_DataDir = getenv("PGDATA"); /* default value */ - potential_XLogDir = getenv("PGXLOG"); /* default value */ opterr = 1; - while ((opt = getopt(argc, argv, "A:a:B:b:c:D:X:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1) + while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != -1) { switch (opt) { @@ -431,9 +429,6 @@ PostmasterMain(int argc, char *argv[]) case 'D': potential_DataDir = optarg; break; - case 'X': - potential_XLogDir = optarg; - break; case 'd': { /* Turn on debugging for the postmaster. */ @@ -568,7 +563,6 @@ PostmasterMain(int argc, char *argv[]) checkDataDir(potential_DataDir); /* issues error messages */ SetDataDir(potential_DataDir); - SetXLogDir(potential_XLogDir); ProcessConfigFile(PGC_POSTMASTER); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 5c0a07bfaa..605f44ba70 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.282 2002/08/15 16:36:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.283 2002/08/17 15:12:07 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1120,7 +1120,6 @@ PostgresMain(int argc, char *argv[], const char *username) StringInfo parser_input; char *potential_DataDir = NULL; - char *potential_XLogDir = NULL; /* * Catch standard options before doing much else. This even works on @@ -1164,7 +1163,6 @@ PostgresMain(int argc, char *argv[], const char *username) { InitializeGUCOptions(); potential_DataDir = getenv("PGDATA"); - potential_XLogDir = getenv("PGXLOG"); } /* ---------------- @@ -1189,7 +1187,7 @@ PostgresMain(int argc, char *argv[], const char *username) ctx = PGC_POSTMASTER; gucsource = PGC_S_ARGV; /* initial switches came from command line */ - while ((flag = getopt(argc, argv, "A:B:c:CD:X:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != -1) + while ((flag = getopt(argc, argv, "A:B:c:CD:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != -1) switch (flag) { case 'A': @@ -1221,11 +1219,6 @@ PostgresMain(int argc, char *argv[], const char *username) potential_DataDir = optarg; break; - case 'X': /* PGXLOG directory */ - if (secure) - potential_XLogDir = optarg; - break; - case 'd': /* debug level */ { /* Set server debugging level. */ @@ -1517,7 +1510,6 @@ PostgresMain(int argc, char *argv[], const char *username) proc_exit(1); } SetDataDir(potential_DataDir); - SetXLogDir(potential_XLogDir); } Assert(DataDir); @@ -1674,7 +1666,7 @@ PostgresMain(int argc, char *argv[], const char *username) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.282 $ $Date: 2002/08/15 16:36:05 $\n"); + puts("$Revision: 1.283 $ $Date: 2002/08/17 15:12:07 $\n"); } /* diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 37249c1f79..f361d0ace7 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -27,7 +27,7 @@ # Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.167 2002/08/17 13:04:15 momjian Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.168 2002/08/17 15:12:07 momjian Exp $ # #------------------------------------------------------------------------- @@ -252,19 +252,6 @@ do -D*) PGDATA=`echo $1 | sed 's/^-D//'` ;; -# Directory to hold WAL log files. - --pgxlog|-X) - PGXLOG="$2" - defined_pgxlog=yes - shift;; - --pgxlog=*) - PGXLOG=`echo $1 | sed 's/^--pgxlog=//'` - defined_pgxlog=yes - ;; - -X*) - PGXLOG=`echo $1 | sed 's/^-X//'` - defined_pgxlog=yes - ;; # The directory where the .bki input files are stored. Normally # they are in PREFIX/share and this option should be unnecessary. -L) @@ -354,7 +341,6 @@ if [ "$usage" ]; then echo echo "Options:" echo " [-D, --pgdata] DATADIR Location for this database cluster" - echo " [-X, --pgxlog] XLOGDIR Location for the cluster transaction logs" echo " -W, --pwprompt Prompt for a password for the new superuser" if [ -n "$MULTIBYTE" ] ; then echo " -E, --encoding ENCODING Set default encoding for new databases" @@ -415,11 +401,6 @@ then exit 1 fi -if [ -z "$PGXLOG" ] -then - PGXLOG="$PGDATA"/pg_xlog -fi - #------------------------------------------------------------------------- # Find the input files @@ -437,7 +418,7 @@ then ( echo echo "initdb variables:" - for var in PGDATA PGXLOG datadir PGPATH MULTIBYTE MULTIBYTEID \ + for var in PGDATA datadir PGPATH MULTIBYTE MULTIBYTEID \ POSTGRES_SUPERUSERNAME POSTGRES_BKI \ POSTGRES_DESCR POSTGRESQL_CONF_SAMPLE \ PG_HBA_SAMPLE PG_IDENT_SAMPLE ; do @@ -522,61 +503,44 @@ then echo "$CMDNAME: The directory $PGDATA exists but is not empty." echo "If you want to create a new database system, either remove or empty" echo "the directory $PGDATA or run initdb with" - echo "an argument for -D other than $PGDATA." + echo "an argument other than $PGDATA." ) 1>&2 exit 1 -fi - -# find out if transaction log directory is empty -pgxlog_contents=`ls -A "$PGXLOG" 2>/dev/null` -if [ x"$pgxlog_contents" != x ] -then - ( - echo "$CMDNAME: The directory $PGXLOG exists but is not empty." - echo "If you want to create a new transaction log, either remove or empty" - echo "the directory $PGXLOG or run initdb with" - echo "an argument for -X other than $PGXLOG." - ) 1>&2 - exit 1 -fi - -if [ ! -d "$PGDATA" ]; then - $ECHO_N "creating directory $PGDATA... "$ECHO_C - mkdir -p "$PGDATA" >/dev/null 2>&1 || mkdir "$PGDATA" || exit_nicely - made_new_pgdata=yes else - $ECHO_N "Fixing permissions on existing directory $PGDATA... "$ECHO_C -chmod go-rwx "$PGDATA" || exit_nicely -fi -echo "ok" + if [ ! -d "$PGDATA" ]; then + $ECHO_N "creating directory $PGDATA... "$ECHO_C + mkdir -p "$PGDATA" >/dev/null 2>&1 || mkdir "$PGDATA" || exit_nicely + made_new_pgdata=yes + else + $ECHO_N "Fixing permissions on existing directory $PGDATA... "$ECHO_C + chmod go-rwx "$PGDATA" || exit_nicely + fi + echo "ok" -if [ ! -d "$PGXLOG" ]; then - $ECHO_N "creating directory $PGXLOG... "$ECHO_C - mkdir -p "$PGXLOG" >/dev/null 2>&1 || mkdir "$PGXLOG" || exit_nicely - made_new_pgxlog=yes -else - $ECHO_N "Fixing permissions on existing directory $PGXLOG... "$ECHO_C -chmod go-rwx "$PGXLOG" || exit_nicely -fi -echo "ok" - -if [ ! -d "$PGDATA"/base ] -then - $ECHO_N "creating directory $PGDATA/base... "$ECHO_C - mkdir "$PGDATA"/base || exit_nicely -echo "ok" -fi -if [ ! -d "$PGDATA"/global ] -then - $ECHO_N "creating directory $PGDATA/global... "$ECHO_C - mkdir "$PGDATA"/global || exit_nicely -echo "ok" -fi -if [ ! -d "$PGDATA"/pg_clog ] -then - $ECHO_N "creating directory $PGDATA/pg_clog... "$ECHO_C - mkdir "$PGDATA"/pg_clog || exit_nicely -echo "ok" + if [ ! -d "$PGDATA"/base ] + then + $ECHO_N "creating directory $PGDATA/base... "$ECHO_C + mkdir "$PGDATA"/base || exit_nicely + echo "ok" + fi + if [ ! -d "$PGDATA"/global ] + then + $ECHO_N "creating directory $PGDATA/global... "$ECHO_C + mkdir "$PGDATA"/global || exit_nicely + echo "ok" + fi + if [ ! -d "$PGDATA"/pg_xlog ] + then + $ECHO_N "creating directory $PGDATA/pg_xlog... "$ECHO_C + mkdir "$PGDATA"/pg_xlog || exit_nicely + echo "ok" + fi + if [ ! -d "$PGDATA"/pg_clog ] + then + $ECHO_N "creating directory $PGDATA/pg_clog... "$ECHO_C + mkdir "$PGDATA"/pg_clog || exit_nicely + echo "ok" + fi fi @@ -585,7 +549,7 @@ fi # RUN BKI SCRIPT IN BOOTSTRAP MODE TO CREATE TEMPLATE1 # common backend options -PGSQL_OPT="-F -D$PGDATA -X$PGXLOG" +PGSQL_OPT="-F -D$PGDATA" if [ "$debug" = yes ] then @@ -1130,24 +1094,14 @@ echo "ok" # # FINISHED -postmaster_startup="$PGPATH/postmaster -D $PGDATA" -if [ x"$defined_pgxlog" != x ]; then - postmaster_startup="$postmaster_startup -X $PGXLOG" -fi -pg_ctl_startup="$PGPATH/pg_ctl -D $PGDATA" -if [ x"$defined_pgxlog" != x ]; then - pg_ctl_startup="$pg_ctl_startup -X $PGXLOG" -fi -pg_ctl_startup="$pg_ctl_startup -l logfile start" - echo echo "Success. You can now start the database server using:" echo "" -echo " $postmaster_startup" +echo " $PGPATH/postmaster -D $PGDATA" echo "or" # (Advertise -l option here, otherwise we have a background # process writing to the terminal.) -echo " $pg_ctl_startup" +echo " $PGPATH/pg_ctl -D $PGDATA -l logfile start" echo exit 0 diff --git a/src/bin/pg_ctl/pg_ctl.sh b/src/bin/pg_ctl/pg_ctl.sh index 28459274d6..467c56774f 100755 --- a/src/bin/pg_ctl/pg_ctl.sh +++ b/src/bin/pg_ctl/pg_ctl.sh @@ -8,7 +8,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.28 2002/08/04 06:26:38 thomas Exp $ +# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.29 2002/08/17 15:12:07 momjian Exp $ # #------------------------------------------------------------------------- @@ -19,23 +19,20 @@ $CMDNAME is a utility to start, stop, restart, reload configuration files, or report the status of a PostgreSQL server. Usage: - $CMDNAME start [-w] [-D DATADIR] [-s] [-X PGXLOG] [-l FILENAME] [-o \"OPTIONS\"] + $CMDNAME start [-w] [-D DATADIR] [-s] [-l FILENAME] [-o \"OPTIONS\"] $CMDNAME stop [-W] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] - $CMDNAME restart [-w] [-D DATADIR] [-s] [-X PGXLOG] [-m SHUTDOWN-MODE] [-o \"OPTIONS\"] + $CMDNAME restart [-w] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o \"OPTIONS\"] $CMDNAME reload [-D DATADIR] [-s] $CMDNAME status [-D DATADIR] Common options: -D DATADIR Location of the database storage area - -X XLOGDIR Location of the WAL log file storage area -s Only print errors, no informational messages -w Wait until operation completes -W Do not wait until operation completes (The default is to wait for shutdown, but not for start or restart.) If the -D option is omitted, the environment variable PGDATA is used. -If the -X option is omitted, the environment variable PGXLOG is used -or the postmaster defaults to looking in $PGDATA/pg_xlog. Options for start or restart: -l FILENAME Write (or append) server log to FILENAME. The @@ -135,12 +132,6 @@ do PGDATA="$1" export PGDATA ;; - -X) - shift - # pass environment into new postmaster - PGXLOG="$1" - export PGXLOG - ;; -l) logfile="$2" shift;; diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c index 72488f87dd..adf5650798 100644 --- a/src/bin/pg_resetxlog/pg_resetxlog.c +++ b/src/bin/pg_resetxlog/pg_resetxlog.c @@ -23,7 +23,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/bin/pg_resetxlog/pg_resetxlog.c,v 1.1 2002/08/17 02:44:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_resetxlog/pg_resetxlog.c,v 1.2 2002/08/17 15:12:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -67,7 +67,7 @@ static char *DataDir; /* locations of important stuff */ -static char *XLogDir; +static char XLogDir[MAXPGPATH]; static char ControlFilePath[MAXPGPATH]; static ControlFileData ControlFile; /* pg_control values */ @@ -527,7 +527,6 @@ main(int argc, char **argv) DataDir = argv[argn++]; - XLogDir=malloc(MAXPGPATH); snprintf(XLogDir, MAXPGPATH, "%s/pg_xlog", DataDir); snprintf(ControlFilePath, MAXPGPATH, "%s/global/pg_control", DataDir); diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 132fef26c8..d249df47b6 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: xlog.h,v 1.34 2002/08/06 02:36:35 tgl Exp $ + * $Id: xlog.h,v 1.35 2002/08/17 15:12:07 momjian Exp $ */ #ifndef XLOG_H #define XLOG_H @@ -175,9 +175,6 @@ typedef struct XLogRecData struct XLogRecData *next; } XLogRecData; -/* XLOG directory name */ -extern char *XLogDir; - extern StartUpID ThisStartUpID; /* current SUI */ extern bool InRecovery; extern XLogRecPtr MyLastRecPtr; @@ -193,7 +190,6 @@ extern int XLOG_DEBUG; extern char *XLOG_sync_method; extern const char XLOG_sync_method_default[]; -extern void SetXLogDir(char *path); extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata); extern void XLogFlush(XLogRecPtr RecPtr);