From 82a1e45e80d6699dd0a70066c692138b8c1b470f Mon Sep 17 00:00:00 2001 From: "zhangwenjie" <757634191@qq.com> Date: Fri, 14 Jun 2019 17:23:39 +0800 Subject: [PATCH] While synchronous_standby_names is like 'FIRST 3 (1,2)' or 'ANY 22 (1,2,3)' and synchronous_commit > SYNCHRONOUS_COMMIT_REMOTE_WRITE, the processes will wait forever. It is dangerous, so check it in the beginning is necessary. --- src/backend/replication/syncrep.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index 577791f3d5..78bb056e05 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -1172,6 +1172,13 @@ check_synchronous_standby_names(char **newval, void **extra, GucSource source) syncrep_parse_result->num_sync); return false; } + + if (syncrep_parse_result->num_sync > syncrep_parse_result->nmembers) + { + GUC_check_errmsg("number of synchronous standbys (%d) must be smaller than or equal to number of potential synchronous standbys (%d)", + syncrep_parse_result->num_sync, syncrep_parse_result->nmembers); + return false; + } /* GUC extra value must be malloc'd, not palloc'd */ pconf = (SyncRepConfigData *) -- 2.19.1.3.ge56e4f7