Skip to content

Commit 7a36526

Browse files
authored
Merge pull request ClickHouse#79696 from ianton-ru/macros_for_autodiscovery
Resolve macros for autodiscovery clusters
2 parents fe0dbbe + dac342b commit 7a36526

File tree

5 files changed

+29
-3
lines changed

5 files changed

+29
-3
lines changed

src/Interpreters/ClusterDiscovery.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,12 @@ class ClusterDiscovery::Flags
121121
ClusterDiscovery::ClusterDiscovery(
122122
const Poco::Util::AbstractConfiguration & config,
123123
ContextPtr context_,
124+
MultiVersion<Macros>::Version macros_,
124125
const String & config_prefix)
125126
: context(Context::createCopy(context_))
126127
, current_node_name(toString(ServerUUID::get()))
127128
, log(getLogger("ClusterDiscovery"))
129+
, macros(macros_)
128130
{
129131
LOG_DEBUG(log, "Cluster discovery is enabled");
130132

@@ -735,7 +737,8 @@ bool ClusterDiscovery::runMainThread(std::function<void()> up_to_date_callback)
735737
ClusterPtr ClusterDiscovery::getCluster(const String & cluster_name) const
736738
{
737739
std::lock_guard lock(mutex);
738-
auto it = cluster_impls.find(cluster_name);
740+
auto expanded_cluster_name = macros->expand(cluster_name);
741+
auto it = cluster_impls.find(expanded_cluster_name);
739742
if (it == cluster_impls.end())
740743
return nullptr;
741744
return it->second;

src/Interpreters/ClusterDiscovery.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class ClusterDiscovery
2828
ClusterDiscovery(
2929
const Poco::Util::AbstractConfiguration & config,
3030
ContextPtr context_,
31+
MultiVersion<Macros>::Version macros_,
3132
const String & config_prefix = "remote_servers");
3233

3334
void start();
@@ -204,6 +205,8 @@ class ClusterDiscovery
204205
};
205206

206207
std::shared_ptr<std::vector<std::shared_ptr<MulticlusterDiscovery>>> multicluster_discovery_paths;
208+
209+
MultiVersion<Macros>::Version macros;
207210
};
208211

209212
}

src/Interpreters/Context.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4655,7 +4655,7 @@ void Context::setClustersConfig(const ConfigurationPtr & config, bool enable_dis
46554655
std::lock_guard lock(shared->clusters_mutex);
46564656
if (ConfigHelper::getBool(*config, "allow_experimental_cluster_discovery") && enable_discovery && !shared->cluster_discovery)
46574657
{
4658-
shared->cluster_discovery = std::make_unique<ClusterDiscovery>(*config, getGlobalContext());
4658+
shared->cluster_discovery = std::make_unique<ClusterDiscovery>(*config, getGlobalContext(), getMacros());
46594659
}
46604660

46614661
/// Do not update clusters if this part of config wasn't changed.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<clickhouse>
2+
<macros>
3+
<autocluster>test_auto_cluster</autocluster>
4+
</macros>
5+
</clickhouse>

tests/integration/test_cluster_discovery/test.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
nodes = {
2121
node_name: cluster.add_instance(
2222
node_name,
23-
main_configs=[shard_config, "config/config_discovery_path.xml"],
23+
main_configs=[shard_config, "config/config_discovery_path.xml", "config/macros.xml"],
2424
stay_alive=True,
2525
with_zookeeper=True,
2626
)
@@ -122,3 +122,18 @@ def test_cluster_discovery_startup_and_stop(start_cluster):
122122

123123
# cleanup
124124
nodes["node0"].query("DROP TABLE tbl ON CLUSTER 'test_auto_cluster' SYNC")
125+
126+
127+
def test_cluster_discovery_macros(start_cluster):
128+
# wait for all nodes to be started
129+
check_nodes_count = functools.partial(
130+
check_on_cluster, what="count()", msg="Wrong nodes count in cluster"
131+
)
132+
total_nodes = len(nodes) - 1
133+
check_nodes_count([nodes["node_observer"]], total_nodes)
134+
135+
# check macros
136+
res = nodes["node_observer"].query(
137+
"SELECT sum(number) FROM clusterAllReplicas('{autocluster}', system.numbers) WHERE number=1"
138+
)
139+
assert res.strip() == "5"

0 commit comments

Comments
 (0)