mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-28 10:31:57 +00:00
Add reconnects to zookeeper-dump-tree tool
This commit is contained in:
parent
554fa482e6
commit
ce7b8aefd2
@ -29,16 +29,20 @@ try
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
zkutil::ZooKeeper zookeeper(options.at("address").as<std::string>());
|
zkutil::ZooKeeperPtr zookeeper = std::make_shared<zkutil::ZooKeeper>(options.at("address").as<std::string>());
|
||||||
|
|
||||||
std::string initial_path = options.at("path").as<std::string>();
|
std::string initial_path = options.at("path").as<std::string>();
|
||||||
|
|
||||||
std::list<std::pair<std::string, std::future<Coordination::ListResponse>>> list_futures;
|
std::list<std::pair<std::string, std::future<Coordination::ListResponse>>> list_futures;
|
||||||
list_futures.emplace_back(initial_path, zookeeper.asyncGetChildren(initial_path));
|
list_futures.emplace_back(initial_path, zookeeper->asyncGetChildren(initial_path));
|
||||||
|
|
||||||
|
size_t num_reconnects = 0;
|
||||||
|
constexpr size_t max_reconnects = 100;
|
||||||
|
|
||||||
for (auto it = list_futures.begin(); it != list_futures.end(); ++it)
|
for (auto it = list_futures.begin(); it != list_futures.end(); ++it)
|
||||||
{
|
{
|
||||||
Coordination::ListResponse response;
|
Coordination::ListResponse response;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
response = it->second.get();
|
response = it->second.get();
|
||||||
@ -46,8 +50,25 @@ try
|
|||||||
catch (const Coordination::Exception & e)
|
catch (const Coordination::Exception & e)
|
||||||
{
|
{
|
||||||
if (e.code == Coordination::Error::ZNONODE)
|
if (e.code == Coordination::Error::ZNONODE)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
throw;
|
}
|
||||||
|
else if (Coordination::isHardwareError(e.code))
|
||||||
|
{
|
||||||
|
/// Reinitialize the session and move the node to the end of the queue for later retry.
|
||||||
|
if (zookeeper->expired())
|
||||||
|
{
|
||||||
|
if (num_reconnects == max_reconnects)
|
||||||
|
throw;
|
||||||
|
++num_reconnects;
|
||||||
|
zookeeper = zookeeper->startNewSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
list_futures.emplace_back(it->first, zookeeper->asyncGetChildren(it->first));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << it->first << '\t' << response.stat.numChildren << '\t' << response.stat.dataLength << '\n';
|
std::cout << it->first << '\t' << response.stat.numChildren << '\t' << response.stat.dataLength << '\n';
|
||||||
@ -55,7 +76,7 @@ try
|
|||||||
for (const auto & name : response.names)
|
for (const auto & name : response.names)
|
||||||
{
|
{
|
||||||
std::string child_path = it->first == "/" ? it->first + name : it->first + '/' + name;
|
std::string child_path = it->first == "/" ? it->first + name : it->first + '/' + name;
|
||||||
list_futures.emplace_back(child_path, zookeeper.asyncGetChildren(child_path));
|
list_futures.emplace_back(child_path, zookeeper->asyncGetChildren(child_path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user