Make the 'wal_debug' GUC variable a boolean (rather than an integer), and
authorNeil Conway <neilc@samurai.com>
Tue, 6 Jan 2004 17:26:23 +0000 (17:26 +0000)
committerNeil Conway <neilc@samurai.com>
Tue, 6 Jan 2004 17:26:23 +0000 (17:26 +0000)
hide it behind #ifdef WAL_DEBUG blocks.

doc/src/sgml/ref/show.sgml
doc/src/sgml/runtime.sgml
doc/src/sgml/wal.sgml
src/backend/access/transam/xlog.c
src/backend/utils/misc/guc.c
src/include/access/xlog.h
src/include/pg_config_manual.h

index 3087c92d9e66d662e481b2cb7d8e9075bd3506a2..85dbfdcedcc911b65b408abdd9861a19f024abcd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.34 2003/11/29 19:51:39 pgsql Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.35 2004/01/06 17:26:23 neilc Exp $
 PostgreSQL documentation
 -->
 
@@ -172,7 +172,7 @@ SHOW ALL;
     .
     .
     .
- wal_debug                     | 0
+ wal_debug                     | off
  wal_sync_method               | fdatasync
 (94 rows)
 </programlisting>
index 6caf5dd93acd74cdc2d6e49a69d9937612cda748..5ec155d24d9f886740c7a081102f51f1497a8ac8 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.228 2004/01/05 20:37:51 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.229 2004/01/06 17:26:22 neilc Exp $
 -->
 
 <Chapter Id="runtime">
@@ -2667,10 +2667,13 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
      </varlistentry>
 
      <varlistentry>
-      <term><varname>wal_debug</varname> (<type>integer</type>)</term>
+      <term><varname>wal_debug</varname> (<type>boolean</type>)</term>
       <listitem>
        <para>
-        If nonzero, turn on WAL-related debugging output.
+        If true, emit WAL-related debugging output. This option is
+        only available if the <symbol>WAL_DEBUG</symbol> macro was
+        defined when <productname>PostgreSQL</productname> was
+        compiled.
        </para>
       </listitem>
      </varlistentry>
index 0883f2024225b13c0031a5738ddf008383645ccb..8d0127b9f94a614e9999f91ac265dde21fc61aee 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/wal.sgml,v 1.26 2003/11/29 19:51:38 pgsql Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/wal.sgml,v 1.27 2004/01/06 17:26:23 neilc Exp $ -->
 
 <chapter id="wal">
  <title>Write-Ahead Logging (<acronym>WAL</acronym>)</title>
    transaction processing. Briefly, <acronym>WAL</acronym>'s central
    concept is that changes to data files (where tables and indexes
    reside) must be written only after those changes have been logged,
-   that is, when log records have been flushed to permanent
-   storage. If we follow this procedure, we do not need to flush
-   data pages to disk on every transaction commit, because we know
-   that in the event of a crash we will be able to recover the
+   that is, when log records describing the changes have been flushed
+   to permanent storage. If we follow this procedure, we do not need
+   to flush data pages to disk on every transaction commit, because we
+   know that in the event of a crash we will be able to recover the
    database using the log: any changes that have not been applied to
    the data pages will first be redone from the log records (this is
    roll-forward recovery, also known as REDO) and then changes made by
   <para>
    There will be at least one 16 MB segment file, and will normally
    not be more than 2 * <varname>checkpoint_segments</varname> + 1
-   files.  You can use this to estimate space requirements for WAL.
+   files.  You can use this to estimate space requirements for <acronym>WAL</acronym>.
    Ordinarily, when old log segment files are no longer needed, they
    are recycled (renamed to become the next segments in the numbered
    sequence). If, due to a short-term peak of log output rate, there
   <para>
    The <varname>wal_sync_method</varname> parameter determines how
    <productname>PostgreSQL</productname> will ask the kernel to force
-    WAL updates out to disk. 
+    <acronym>WAL</acronym> updates out to disk. 
    All the options should be the same as far as reliability goes,
    but it's quite platform-specific which one will be the fastest.
    Note that this parameter is irrelevant if <varname>fsync</varname>
   </para>
 
   <para>
-   Setting the <varname>wal_debug</varname> parameter to any nonzero
-   value will result in each <function>LogInsert</function> and
+   Enabling the <varname>wal_debug</varname> configuration parameter
+   will result in each <function>LogInsert</function> and
    <function>LogFlush</function> <acronym>WAL</acronym> call being
-   logged to the server log.  At present, it makes no difference what
-   the nonzero value is.  This option may be replaced by a more
+   logged to the server log. This option may be replaced by a more
    general mechanism in the future.
   </para>
  </sect1>
index 1f8eb50795a57e688db7f9b1c07c881ac5286cd0..f630fca7d7eb1283e9183041bf22a073cb2bc6a8 100644 (file)
@@ -7,7 +7,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/xlog.c,v 1.129 2003/12/20 17:31:20 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.130 2004/01/06 17:26:23 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
 /* User-settable parameters */
 int            CheckPointSegments = 3;
 int            XLOGbuffers = 8;
-int            XLOG_DEBUG = 0;
 char      *XLOG_sync_method = NULL;
 const char XLOG_sync_method_default[] = DEFAULT_SYNC_METHOD_STR;
 char       XLOG_archive_dir[MAXPGPATH];        /* null string means
                                                 * delete 'em */
 
+#ifdef WAL_DEBUG
+bool       XLOG_DEBUG = false;
+#endif
+
 /*
  * XLOGfileslop is used in the code as the allowed "fuzz" in the number of
  * preallocated XLOG segments --- we try to have at least XLOGfiles advance
@@ -766,6 +769,7 @@ begin:;
        MyProc->logRec = RecPtr;
    }
 
+#ifdef WAL_DEBUG
    if (XLOG_DEBUG)
    {
        char        buf[8192];
@@ -779,6 +783,7 @@ begin:;
        }
        elog(LOG, "%s", buf);
    }
+#endif
 
    /* Record begin of record in appropriate places */
    if (!no_tran)
@@ -1074,8 +1079,10 @@ XLogWrite(XLogwrtRqst WriteRqst)
                     openLogSeg >= (RedoRecPtr.xrecoff / XLogSegSize) +
                     (uint32) CheckPointSegments))
                {
+#ifdef WAL_DEBUG
                    if (XLOG_DEBUG)
                        elog(LOG, "time for a checkpoint, signaling postmaster");
+#endif
                    SendPostmasterSignal(PMSIGNAL_DO_CHECKPOINT);
                }
            }
@@ -1214,11 +1221,13 @@ XLogFlush(XLogRecPtr record)
    if (XLByteLE(record, LogwrtResult.Flush))
        return;
 
+#ifdef WAL_DEBUG
    if (XLOG_DEBUG)
        elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
             record.xlogid, record.xrecoff,
             LogwrtResult.Write.xlogid, LogwrtResult.Write.xrecoff,
             LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
+#endif
 
    START_CRIT_SECTION();
 
@@ -2613,8 +2622,10 @@ StartupXLOG(void)
 
    /* This is just to allow attaching to startup process with a debugger */
 #ifdef XLOG_REPLAY_DELAY
+#ifdef WAL_DEBUG
    if (XLOG_DEBUG && ControlFile->state != DB_SHUTDOWNED)
        sleep(60);
+#endif
 #endif
 
    /*
@@ -2742,6 +2753,8 @@ StartupXLOG(void)
                    ShmemVariableCache->nextXid = record->xl_xid;
                    TransactionIdAdvance(ShmemVariableCache->nextXid);
                }
+
+#ifdef WAL_DEBUG
                if (XLOG_DEBUG)
                {
                    char        buf[8192];
@@ -2755,6 +2768,7 @@ StartupXLOG(void)
                                record->xl_info, XLogRecGetData(record));
                    elog(LOG, "%s", buf);
                }
+#endif
 
                if (record->xl_info & XLR_BKP_BLOCK_MASK)
                    RestoreBkpBlocks(record, EndRecPtr);
index 705dd166e4a0ceb830e4d76a73fec7c228beaf24..f0a0a88dd60c3062da2dbcc28c25598054254240 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.175 2003/12/03 18:52:00 joe Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.176 2004/01/06 17:26:23 neilc Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -336,17 +336,18 @@ const char *const config_type_names[] =
  * TO ADD AN OPTION:
  *
  * 1. Declare a global variable of type bool, int, double, or char*
- * and make use of it.
+ *    and make use of it.
  *
  * 2. Decide at what times it's safe to set the option. See guc.h for
- * details.
+ *    details.
  *
  * 3. Decide on a name, a default value, upper and lower bounds (if
- * applicable), etc.
+ *    applicable), etc.
  *
  * 4. Add a record below.
  *
- * 5. Add it to src/backend/utils/misc/postgresql.conf.sample.
+ * 5. Add it to src/backend/utils/misc/postgresql.conf.sample, if
+ *    appropriate
  *
  * 6. Add it to src/bin/psql/tab-complete.c, if it's a USERSET option.
  *
@@ -862,6 +863,18 @@ static struct config_bool ConfigureNamesBool[] =
 #endif
    },
 
+#ifdef WAL_DEBUG
+   {
+       {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS,
+           gettext_noop("Emit WAL-related debugging output."),
+           NULL,
+           GUC_NOT_IN_SAMPLE
+       },
+       &XLOG_DEBUG,
+       false, NULL, NULL
+   },
+#endif
+
    /* End-of-list marker */
    {
        {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
@@ -1171,16 +1184,6 @@ static struct config_int ConfigureNamesInt[] =
        8, 4, INT_MAX, NULL, NULL
    },
 
-   {
-       {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS,
-           gettext_noop("If nonzero, WAL-related debugging output is logged."),
-           NULL,
-           GUC_NOT_IN_SAMPLE
-       },
-       &XLOG_DEBUG,
-       0, 0, 16, NULL, NULL
-   },
-
    {
        {"commit_delay", PGC_USERSET, WAL_CHECKPOINTS,
            gettext_noop("Sets the delay in microseconds between transaction commit and "
index 751e880320288f781b0f515c3aaeeb4237231274..e4f5b7182c24b30444713d164ab3c3ef89c46b01 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/include/access/xlog.h,v 1.46 2003/12/12 18:45:10 petere Exp $
+ * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.47 2004/01/06 17:26:23 neilc Exp $
  */
 #ifndef XLOG_H
 #define XLOG_H
@@ -189,10 +189,12 @@ extern XLogRecPtr ProcLastRecEnd;
 extern int CheckPointSegments;
 extern int CheckPointWarning;
 extern int XLOGbuffers;
-extern int XLOG_DEBUG;
 extern char *XLOG_sync_method;
 extern const char XLOG_sync_method_default[];
 
+#ifdef WAL_DEBUG
+extern bool    XLOG_DEBUG;
+#endif
 
 extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata);
 extern void XLogFlush(XLogRecPtr RecPtr);
index be80abfdc4add999991585225a42ef9c763256d2..3722798ccee7a23c887b37e4ea876b76620842cf 100644 (file)
@@ -6,7 +6,7 @@
  * for developers. If you edit any of these, be sure to do a *full*
  * rebuild (and an initdb if noted).
  *
- * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.8 2003/11/29 22:40:53 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.9 2004/01/06 17:26:23 neilc Exp $
  *------------------------------------------------------------------------
  */
 
  */
 /* #define LOCK_DEBUG */
 
+/*
+ * Enable debugging print statements for WAL-related operations; see
+ * also the wal_debug GUC var.
+ */
+/* #define WAL_DEBUG */
+
 /*
  * Other debug #defines (documentation, anyone?)
  */