aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2016-12-17 02:20:59 +0900
committerFujii Masao <fujii@postgresql.org>2016-12-17 02:25:47 +0900
commit6c75fb6b3dbeda4dac19cee8f2d5cc7f38f362ee (patch)
tree195321964122173b062cc709963aa4aafdb81e38 /src
parent6f734554c38811316a9d6951b4500a6d1b0b84aa (diff)
downloadpostgresql-6c75fb6b3dbeda4dac19cee8f2d5cc7f38f362ee.tar.gz
postgresql-6c75fb6b3dbeda4dac19cee8f2d5cc7f38f362ee.zip
Ensure that num_sync is greater than zero in synchronous_standby_names.
Previously num_sync could be set to zero and this setting caused an assertion failure. This means that multiple synchronous standbys code should assume that num_sync is greater than zero. Also setting num_sync to zero is nonsense because it's basically the configuration for synchronous replication. If users want not to make transaction commits wait for any standbys, synchronous_standby_names should be emptied to disable synchronous replication instead of setting num_sync to zero. This patch forbids users from setting num_sync to zero in synchronous_standby_names. If zero is specified, an error will happen during processing the parameter settings. Back-patch to 9.6 where multiple synchronous standbys feature was added. Patch by me. Reviewed by Tom Lane. Discussion: <CAHGQGwHWB3izc6cXuFLh5kOcAbFXaRhhgwd-X5PeN9TEjxqXwg@mail.gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/syncrep.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index b442d061ec0..3dfff04405d 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -922,6 +922,13 @@ check_synchronous_standby_names(char **newval, void **extra, GucSource source)
return false;
}
+ if (syncrep_parse_result->num_sync <= 0)
+ {
+ GUC_check_errmsg("number of synchronous standbys (%d) must be greater than zero",
+ syncrep_parse_result->num_sync);
+ return false;
+ }
+
/* GUC extra value must be malloc'd, not palloc'd */
pconf = (SyncRepConfigData *)
malloc(syncrep_parse_result->config_size);