diff --git a/dbms/src/Core/SettingsCommon.cpp b/dbms/src/Core/SettingsCommon.cpp index 8f56a6d1454..f1e6d6016ea 100644 --- a/dbms/src/Core/SettingsCommon.cpp +++ b/dbms/src/Core/SettingsCommon.cpp @@ -63,6 +63,17 @@ void SettingNumber::set(const String & x) set(parse(x)); } +template <> +void SettingNumber::set(const String & x) +{ + if (x == "false") + set(false); + else if (x == "true") + set(true); + else + set(parse(x)); +} + template void SettingNumber::serialize(WriteBuffer & buf) const { diff --git a/dbms/tests/integration/test_replica_can_become_leader/__init__.py b/dbms/tests/integration/test_replica_can_become_leader/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/dbms/tests/integration/test_replica_can_become_leader/configs/notleader.xml b/dbms/tests/integration/test_replica_can_become_leader/configs/notleader.xml new file mode 100644 index 00000000000..9905191d955 --- /dev/null +++ b/dbms/tests/integration/test_replica_can_become_leader/configs/notleader.xml @@ -0,0 +1,5 @@ + + + false + + diff --git a/dbms/tests/integration/test_replica_can_become_leader/test.py b/dbms/tests/integration/test_replica_can_become_leader/test.py new file mode 100644 index 00000000000..b4c1d8f309c --- /dev/null +++ b/dbms/tests/integration/test_replica_can_become_leader/test.py @@ -0,0 +1,33 @@ +import pytest + +from helpers.cluster import ClickHouseCluster + +cluster = ClickHouseCluster(__file__) +node1 = cluster.add_instance('node1', main_configs=['configs/notleader.xml'], with_zookeeper=True) +node2 = cluster.add_instance('node2', with_zookeeper=True) +node3 = cluster.add_instance('node3', with_zookeeper=True) + +@pytest.fixture(scope="module") +def start_cluster(): + try: + cluster.start() + + for i, node in enumerate((node1, node2, node3)): + node.query( + ''' + CREATE TABLE test_table(date Date, id UInt32, dummy UInt32) + ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_table', '{}') + PARTITION BY date ORDER BY id + '''.format(i) + ) + + yield cluster + + finally: + cluster.shutdown() + + +def test_can_become_leader(start_cluster): + assert node1.query("select can_become_leader from system.replicas where table = 'test_table'") == '0\n' + assert node2.query("select can_become_leader from system.replicas where table = 'test_table'") == '1\n' + assert node3.query("select can_become_leader from system.replicas where table = 'test_table'") == '1\n'