pg_upgrade: include additional detail in cluster check
authorDaniel Gustafsson
Thu, 20 Jul 2023 12:55:50 +0000 (14:55 +0200)
committerDaniel Gustafsson
Thu, 20 Jul 2023 12:55:50 +0000 (14:55 +0200)
When the cluster failed the pg_controldata check for clean shut
down we only reported that it did so, not why. The state of the
cluster can be important information when diagnosing the failed
upgrade attempt, so instead include it in the error message.

Discussion: https://postgr.es/m/E0D5EA16-A085-4753-8DDC-C7055048B439@yesql.se

src/bin/pg_upgrade/controldata.c

index 9071a6fd457b2c34a9375fffe3c2fdfd08883411..4beb65ab22004864dba9cf5b3d9b2d36ea098134 100644 (file)
@@ -149,22 +149,23 @@ get_control_data(ClusterInfo *cluster, bool live_check)
                 * the server was shut down cleanly, from the controldata
                 * perspective.
                 */
-               /* remove leading spaces */
+               /* Remove trailing newline and leading spaces */
+               (void) pg_strip_crlf(p);
                while (*p == ' ')
                    p++;
-               if (strcmp(p, "shut down in recovery\n") == 0)
+               if (strcmp(p, "shut down in recovery") == 0)
                {
                    if (cluster == &old_cluster)
                        pg_fatal("The source cluster was shut down while in recovery mode.  To upgrade, use \"rsync\" as documented or shut it down as a primary.");
                    else
                        pg_fatal("The target cluster was shut down while in recovery mode.  To upgrade, use \"rsync\" as documented or shut it down as a primary.");
                }
-               else if (strcmp(p, "shut down\n") != 0)
+               else if (strcmp(p, "shut down") != 0)
                {
                    if (cluster == &old_cluster)
-                       pg_fatal("The source cluster was not shut down cleanly.");
+                       pg_fatal("The source cluster was not shut down cleanly, state reported as: \"%s\"", p);
                    else
-                       pg_fatal("The target cluster was not shut down cleanly.");
+                       pg_fatal("The target cluster was not shut down cleanly, state reported as: \"%s\"", p);
                }
                got_cluster_state = true;
            }