Implement dry-run mode for pg_archivecleanup

In dry-run mode, just the name of the file to be removed is printed to
stdout; this is so the user can easily plug it into another program
through a pipe.  If debug mode is also specified, a more verbose message
is printed to stderr.

Author: Gabriele Bartolini
Reviewer: Josh Kupershmidt
This commit is contained in:
Alvaro Herrera 2012-02-01 13:56:59 -03:00
parent 21238deea5
commit b2e431a4db
2 changed files with 31 additions and 1 deletions

View File

@ -36,6 +36,7 @@ const char *progname;
/* Options and defaults */
bool debug = false; /* are we debugging? */
bool dryrun = false; /* are we performing a dry-run operation? */
char *archiveLocation; /* where to find the archive? */
char *restartWALFileName; /* the file from which we can restart restore */
@ -119,6 +120,22 @@ CleanupPriorWALFiles(void)
{
snprintf(WALFilePath, MAXPGPATH, "%s/%s",
archiveLocation, xlde->d_name);
if (dryrun)
{
/*
* Prints the name of the file to be removed and skips the
* actual removal. The regular printout is so that the
* user can pipe the output into some other program.
*/
printf("%s\n", WALFilePath);
if (debug)
fprintf(stderr,
"%s: file \"%s\" would be removed\n",
progname, WALFilePath);
continue;
}
if (debug)
fprintf(stderr, "%s: removing file \"%s\"\n",
progname, WALFilePath);
@ -205,6 +222,7 @@ usage(void)
printf(" %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n", progname);
printf("\nOptions:\n");
printf(" -d generates debug output (verbose mode)\n");
printf(" -n shows the names of the files that would have been removed (dry-run)\n");
printf(" --help show this help, then exit\n");
printf(" --version output version information, then exit\n");
printf("\n"
@ -241,13 +259,16 @@ main(int argc, char **argv)
}
}
while ((c = getopt(argc, argv, "d")) != -1)
while ((c = getopt(argc, argv, "dn")) != -1)
{
switch (c)
{
case 'd': /* Debug mode */
debug = true;
break;
case 'n': /* Dry-Run mode */
dryrun = true;
break;
default:
fprintf(stderr, "Try \"%s --help\" for more information.\n", progname);
exit(2);

View File

@ -98,6 +98,15 @@ pg_archivecleanup: removing file "archive/00000001000000370000000E"
</listitem>
</varlistentry>
<varlistentry>
<term><option>-n</option></term>
<listitem>
<para>
Print the names of the files that would have been removed on <filename>stdout</> (performs a dry run).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>