diff options
-rw-r--r-- | src/bin/pg_ctl/pg_ctl.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 810f6fef6e3..166a1143342 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -4,7 +4,7 @@ * * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.122 2010/04/07 03:48:51 itagaki Exp $ + * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.123 2010/09/14 08:05:33 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -142,6 +142,7 @@ static char postopts_file[MAXPGPATH]; static char pid_file[MAXPGPATH]; static char conf_file[MAXPGPATH]; static char backup_file[MAXPGPATH]; +static char recovery_file[MAXPGPATH]; #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_CORE) static void unlimit_core_size(void); @@ -802,7 +803,15 @@ do_stop(void) } else { - if ((shutdown_mode == SMART_MODE) && (stat(backup_file, &statbuf) == 0)) + /* + * If backup_label exists, an online backup is running. Warn the + * user that smart shutdown will wait for it to finish. However, if + * recovery.conf is also present, we're recovering from an online + * backup instead of performing one. + */ + if (shutdown_mode == SMART_MODE && + stat(backup_file, &statbuf) == 0 && + stat(recovery_file, &statbuf) != 0) { print_msg(_("WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n\n")); @@ -879,7 +888,15 @@ do_restart(void) exit(1); } - if ((shutdown_mode == SMART_MODE) && (stat(backup_file, &statbuf) == 0)) + /* + * If backup_label exists, an online backup is running. Warn the + * user that smart shutdown will wait for it to finish. However, if + * recovery.conf is also present, we're recovering from an online + * backup instead of performing one. + */ + if (shutdown_mode == SMART_MODE && + stat(backup_file, &statbuf) == 0 && + stat(recovery_file, &statbuf) != 0) { print_msg(_("WARNING: online backup mode is active\n" "Shutdown will not complete until pg_stop_backup() is called.\n\n")); @@ -1962,6 +1979,7 @@ main(int argc, char **argv) snprintf(pid_file, MAXPGPATH, "%s/postmaster.pid", pg_data); snprintf(conf_file, MAXPGPATH, "%s/postgresql.conf", pg_data); snprintf(backup_file, MAXPGPATH, "%s/backup_label", pg_data); + snprintf(recovery_file, MAXPGPATH, "%s/recovery.conf", pg_data); } switch (ctl_command) |