It was not clear from the code why it is necessary. And we need a clean
shutdown to avoid random checksum failures caused by torn pages.
Author: Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoDum5MbAb7F=pa9dOD1W2tukuDMPzWT7NjZceNoWB_6Qw@mail.gmail.com
exit(1);
}
- /* Check if cluster is running */
+ /* Read the control file and check compatibility */
ControlFile = get_controlfile(DataDir, &crc_ok);
if (!crc_ok)
{
exit(1);
}
+ /*
+ * Check if cluster is running. A clean shutdown is required to avoid
+ * random checksum failures caused by torn pages. Note that this doesn't
+ * guard against someone starting the cluster concurrently.
+ */
if (ControlFile->state != DB_SHUTDOWNED &&
ControlFile->state != DB_SHUTDOWNED_IN_RECOVERY)
{