pg_standby_progress.patch
application/octet-stream
Filename: pg_standby_progress.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| contrib/pg_standby/pg_standby.c | 35 | 23 |
diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c
index 97b6482..d9cb118 100644
--- a/contrib/pg_standby/pg_standby.c
+++ b/contrib/pg_standby/pg_standby.c
@@ -53,6 +53,7 @@ int maxwaittime = 0; /* how long are we prepared to wait for? */
int keepfiles = 0; /* number of WAL files to keep, 0 keep all */
int maxretries = 3; /* number of retries on restore command */
bool debug = false; /* are we debugging? */
+bool progress = true; /* are we reporting progress? */
bool need_cleanup = false; /* do we need to remove files from
* archive? */
@@ -480,21 +481,18 @@ RestoreWALFileForRecovery(void)
int rc = 0;
int numretries = 0;
- if (debug)
- {
- fprintf(stderr, "running restore :");
- fflush(stderr);
- }
+ if (progress)
+ fprintf(stdout, "Running restore :");
while (numretries <= maxretries)
{
rc = system(restoreCommand);
if (rc == 0)
{
- if (debug)
+ if (progress)
{
- fprintf(stderr, " OK\n");
- fflush(stderr);
+ fprintf(stdout, " OK\n");
+ fflush(stdout);
}
return true;
}
@@ -504,8 +502,8 @@ RestoreWALFileForRecovery(void)
/*
* Allow caller to add additional info
*/
- if (debug)
- fprintf(stderr, "not restored\n");
+ if (progress)
+ fprintf(stdout, " not restored\n");
return false;
}
@@ -522,10 +520,11 @@ usage(void)
" restore_command = 'pg_standby -l /mnt/server/archiverdir %%f %%p %%r'\n");
printf("\nOptions:\n");
printf(" -c copies file from archive (default)\n");
- printf(" -d generate lots of debugging output (testing only)\n");
+ printf(" -d generate lots of debugging output (testing only, to STDERR)\n");
printf(" -k NUMFILESTOKEEP if RESTARTWALFILE not used, removes files prior to limit\n"
" (0 keeps all)\n");
printf(" -l does nothing; use of link is now deprecated\n");
+ printf(" -p report progress of replay activity (to STDOUT)\n");
printf(" -r MAXRETRIES max number of times to retry, with progressive wait\n"
" (default=3)\n");
printf(" -s SLEEPTIME seconds to wait between file checks (min=1, max=60,\n"
@@ -623,6 +622,9 @@ main(int argc, char **argv)
restoreCommandType = RESTORE_COMMAND_LINK;
#endif
break;
+ case 'p': /* Report Progress mode */
+ progress = true;
+ break;
case 'r': /* Retries */
maxretries = atoi(optarg);
if (maxretries < 0)
@@ -718,23 +720,23 @@ main(int argc, char **argv)
need_cleanup = SetWALFileNameForCleanup();
- if (debug)
+ if (progress)
{
- fprintf(stderr, "Trigger file : %s\n", triggerPath ? triggerPath : "<not set>");
- fprintf(stderr, "Waiting for WAL file : %s\n", nextWALFileName);
- fprintf(stderr, "WAL file path : %s\n", WALFilePath);
- fprintf(stderr, "Restoring to : %s\n", xlogFilePath);
- fprintf(stderr, "Sleep interval : %d second%s\n",
+ fprintf(stdout, "Trigger file : %s\n", triggerPath ? triggerPath : "<not set>");
+ fprintf(stdout, "Waiting for WAL file : %s\n", nextWALFileName);
+ fprintf(stdout, "WAL file path : %s\n", WALFilePath);
+ fprintf(stdout, "Restoring to : %s\n", xlogFilePath);
+ fprintf(stdout, "Sleep interval : %d second%s\n",
sleeptime, (sleeptime > 1 ? "s" : " "));
- fprintf(stderr, "Max wait interval : %d %s\n",
+ fprintf(stdout, "Max wait interval : %d %s\n",
maxwaittime, (maxwaittime > 0 ? "seconds" : "forever"));
- fprintf(stderr, "Command for restore : %s\n", restoreCommand);
- fprintf(stderr, "Keep archive history : ");
+ fprintf(stdout, "Command for restore : %s\n", restoreCommand);
+ fprintf(stdout, "Keep archive history : ");
if (need_cleanup)
- fprintf(stderr, "%s and later\n", exclusiveCleanupFileName);
+ fprintf(stdout, "%s and later\n", exclusiveCleanupFileName);
else
- fprintf(stderr, "No cleanup required\n");
- fflush(stderr);
+ fprintf(stdout, "No cleanup required\n");
+ fflush(stdout);
}
/*
@@ -747,6 +749,16 @@ main(int argc, char **argv)
".history") == 0)
{
nextWALFileType = XLOG_HISTORY;
+ /* error is ENOENT */
+ if (stat(nextWALFileName, &stat_buf) != 0) {
+ if (debug)
+ {
+ fprintf(stderr, "stat for history file failed (probably ok)\n");
+ fflush(stderr);
+ }
+ exit(1);
+ }
+
if (RestoreWALFileForRecovery())
exit(0);
else