@@ -454,12 +454,30 @@ void ClusterDiscovery::registerInZk(zkutil::ZooKeeperPtr & zk, ClusterInfo & inf
454454 return ;
455455 }
456456
457+ if (context->isPreShutdownCalled ())
458+ {
459+ LOG_DEBUG (log, " PreShutdown called, skip self-registering current node {} in cluster {}" , current_node_name, info.name );
460+ return ;
461+ }
462+
457463 LOG_DEBUG (log, " Registering current node {} in cluster {}" , current_node_name, info.name );
458464
459465 zk->createOrUpdate (node_path, info.current_node .serialize (), zkutil::CreateMode::Ephemeral);
460466 LOG_DEBUG (log, " Current node {} registered in cluster {}" , current_node_name, info.name );
461467}
462468
469+ void ClusterDiscovery::unregisterFromZk (zkutil::ZooKeeperPtr & zk, ClusterInfo & info)
470+ {
471+ if (info.current_node_is_observer )
472+ return ;
473+
474+ String node_path = getShardsListPath (info.zk_root ) / current_node_name;
475+ LOG_DEBUG (log, " Removing current node {} from cluster {}" , current_node_name, info.name );
476+
477+ zk->remove (node_path);
478+ LOG_DEBUG (log, " Current node {} removed from cluster {}" , current_node_name, info.name );
479+ }
480+
463481void ClusterDiscovery::initialUpdate ()
464482{
465483 LOG_DEBUG (log, " Initializing" );
@@ -505,6 +523,15 @@ void ClusterDiscovery::initialUpdate()
505523 is_initialized = true ;
506524}
507525
526+ void ClusterDiscovery::unregisterAll ()
527+ {
528+ for (auto & [_, info] : clusters_info)
529+ {
530+ auto zk = context->getDefaultOrAuxiliaryZooKeeper (info.zk_name );
531+ unregisterFromZk (zk, info);
532+ }
533+ }
534+
508535void ClusterDiscovery::findDynamicClusters (
509536 std::unordered_map<String, ClusterDiscovery::ClusterInfo> & info,
510537 std::unordered_set<size_t > * unchanged_roots)
0 commit comments