Fix issues in pg_rewind with --no-ensure-shutdown/--write-recovery-conf
authorMichael Paquier <[email protected]>
Fri, 4 Oct 2019 07:18:29 +0000 (16:18 +0900)
committerMichael Paquier <[email protected]>
Fri, 4 Oct 2019 07:18:29 +0000 (16:18 +0900)
This fixes two issues with recent features added in pg_rewind:
- --dry-run should do nothing on the target directory, but 927474c
forgot to consider that for --write-recovery-conf.
- --no-ensure-shutdown was not actually working.  There is no test
coverage for this option yet, but a subsequent patch will add that.

Author: Alexey Kondratov
Discussion: https://postgr.es/m/7ca88204-3e0b-2f4c-c8af-acadc4b266e5@postgrespro.ru

src/bin/pg_rewind/pg_rewind.c

index 2eb18a92c62ffa85572119d9fea9eb032c256646..fe1468b771aa71b5e8811234d089334154a8849f 100644 (file)
@@ -101,7 +101,7 @@ main(int argc, char **argv)
                {"write-recovery-conf", no_argument, NULL, 'R'},
                {"source-pgdata", required_argument, NULL, 1},
                {"source-server", required_argument, NULL, 2},
-               {"no-ensure-shutdown", no_argument, NULL, 44},
+               {"no-ensure-shutdown", no_argument, NULL, 4},
                {"version", no_argument, NULL, 'V'},
                {"dry-run", no_argument, NULL, 'n'},
                {"no-sync", no_argument, NULL, 'N'},
@@ -180,9 +180,11 @@ main(int argc, char **argv)
                        case 1:                         /* --source-pgdata */
                                datadir_source = pg_strdup(optarg);
                                break;
+
                        case 2:                         /* --source-server */
                                connstr_source = pg_strdup(optarg);
                                break;
+
                        case 4:
                                no_ensure_shutdown = true;
                                break;
@@ -341,7 +343,7 @@ main(int argc, char **argv)
        if (!rewind_needed)
        {
                pg_log_info("no rewind required");
-               if (writerecoveryconf)
+               if (writerecoveryconf && !dry_run)
                        WriteRecoveryConfig(conn, datadir_target,
                                                                GenerateRecoveryConfig(conn, NULL));
                exit(0);
@@ -442,7 +444,7 @@ main(int argc, char **argv)
                pg_log_info("syncing target data directory");
        syncTargetDirectory();
 
-       if (writerecoveryconf)
+       if (writerecoveryconf && !dry_run)
                WriteRecoveryConfig(conn, datadir_target,
                                                        GenerateRecoveryConfig(conn, NULL));