Make pg_stop_backup's reporting a bit more verbose in hopes of making
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Feb 2010 02:17:50 +0000 (02:17 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Feb 2010 02:17:50 +0000 (02:17 +0000)
error cases less intimidating for novices.  Per discussion.

Greg Smith

src/backend/access/transam/xlog.c

index 046d80fa95dc62ae71f1852ee08e3106ce2cb417..40916571ac0335483fd8d3f3d11d86cc5e8c7488 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.377 2010/02/19 10:51:03 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.378 2010/02/25 02:17:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -8132,7 +8132,8 @@ pg_stop_backup(PG_FUNCTION_ARGS)
         *
         * We wait forever, since archive_command is supposed to work and we
         * assume the admin wanted his backup to work completely. If you don't
-        * wish to wait, you can set statement_timeout.
+        * wish to wait, you can set statement_timeout.  Also, some notices
+        * are issued to clue in anyone who might be doing this interactively.
         */
        XLByteToPrevSeg(stoppoint, _logId, _logSeg);
        XLogFileName(lastxlogfilename, ThisTimeLineID, _logId, _logSeg);
@@ -8141,6 +8142,9 @@ pg_stop_backup(PG_FUNCTION_ARGS)
        BackupHistoryFileName(histfilename, ThisTimeLineID, _logId, _logSeg,
                                                  startpoint.xrecoff % XLogSegSize);
 
+       ereport(NOTICE,
+                       (errmsg("pg_stop_backup cleanup done, waiting for required WAL segments to be archived")));
+
        seconds_before_warning = 60;
        waits = 0;
 
@@ -8155,8 +8159,11 @@ pg_stop_backup(PG_FUNCTION_ARGS)
                {
                        seconds_before_warning *= 2;            /* This wraps in >10 years... */
                        ereport(WARNING,
-                                       (errmsg("pg_stop_backup still waiting for archive to complete (%d seconds elapsed)",
-                                                       waits)));
+                                       (errmsg("pg_stop_backup still waiting for all required WAL segments to be archived (%d seconds elapsed)",
+                                                       waits),
+                                        errhint("Check that your archive_command is executing properly. "
+                                                        "pg_stop_backup can be cancelled safely, "
+                                                        "but the database backup will not be usable without all the WAL segments.")));
                }
        }