From e81ceaed041e6b84139071842e36d5445eceeeba Mon Sep 17 00:00:00 2001 From: James Coleman Date: Mon, 9 Mar 2020 21:45:15 -0400 Subject: [PATCH v2] Improve standby connection denied error message. Currently when a standby is finished starting up but hot_standby is configured to off, the error message when a client connects is "the database system is starting up", which is needless confusing (and not really all that accurate either). Instead send a helpful error message so that the user immediately knows that their server is configured to deny these connections. --- src/backend/postmaster/postmaster.c | 14 +++++++++++--- src/include/libpq/libpq-be.h | 7 ++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 5b5fc97c72..456c0e466b 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2305,6 +2305,12 @@ retry1: (errcode(ERRCODE_CANNOT_CONNECT_NOW), errmsg("the database system is starting up"))); break; + case CAC_STANDBY: + ereport(FATAL, + (errcode(ERRCODE_CANNOT_CONNECT_NOW), + errmsg("the database system is up, but hot_standby is off"))); + break; + case CAC_SHUTDOWN: ereport(FATAL, (errcode(ERRCODE_CANNOT_CONNECT_NOW), @@ -2454,10 +2460,12 @@ canAcceptConnections(int backend_type) result = CAC_WAITBACKUP; /* allow superusers only */ else if (Shutdown > NoShutdown) return CAC_SHUTDOWN; /* shutdown is pending */ - else if (!FatalError && - (pmState == PM_STARTUP || - pmState == PM_RECOVERY)) + else if (!FatalError && pmState == PM_STARTUP) return CAC_STARTUP; /* normal startup */ + else if (!FatalError && pmState == PM_RECOVERY && EnableHotStandby) + return CAC_STARTUP; /* hot standby is starting up */ + else if (!FatalError && pmState == PM_RECOVERY) + return CAC_STANDBY; /* connection disallowed on non-hot standby */ else if (!FatalError && pmState == PM_HOT_STANDBY) result = CAC_OK; /* connection OK during hot standby */ diff --git a/src/include/libpq/libpq-be.h b/src/include/libpq/libpq-be.h index 179ebaa104..e38fed5a1c 100644 --- a/src/include/libpq/libpq-be.h +++ b/src/include/libpq/libpq-be.h @@ -70,7 +70,12 @@ typedef struct typedef enum CAC_state { - CAC_OK, CAC_STARTUP, CAC_SHUTDOWN, CAC_RECOVERY, CAC_TOOMANY, + CAC_OK, + CAC_STARTUP, + CAC_SHUTDOWN, + CAC_RECOVERY, + CAC_STANDBY, + CAC_TOOMANY, CAC_WAITBACKUP } CAC_state; -- 2.20.1 (Apple Git-117)