Merge pull request #41403 from ClickHouse/keeper-fix-shutdown-without-server

Fix Keeper segfault during shutdown when RAFT server failed to start
This commit is contained in:
Antonio Andelic 2022-09-19 12:03:58 +02:00 committed by GitHub
commit 1763af37b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 3 deletions

View File

@ -370,7 +370,7 @@ void KeeperDispatcher::shutdown()
/// Clear all registered sessions /// Clear all registered sessions
std::lock_guard lock(session_to_response_callback_mutex); std::lock_guard lock(session_to_response_callback_mutex);
if (hasLeader()) if (server && hasLeader())
{ {
close_requests.reserve(session_to_response_callback.size()); close_requests.reserve(session_to_response_callback.size());
// send to leader CLOSE requests for active sessions // send to leader CLOSE requests for active sessions
@ -394,7 +394,7 @@ void KeeperDispatcher::shutdown()
} }
// if there is no leader, there is no reason to do CLOSE because it's a write request // if there is no leader, there is no reason to do CLOSE because it's a write request
if (hasLeader() && !close_requests.empty()) if (server && hasLeader() && !close_requests.empty())
{ {
LOG_INFO(log, "Trying to close {} session(s)", close_requests.size()); LOG_INFO(log, "Trying to close {} session(s)", close_requests.size());
const auto raft_result = server->putRequestBatch(close_requests); const auto raft_result = server->putRequestBatch(close_requests);

View File

@ -520,7 +520,7 @@ bool KeeperServer::isFollower() const
bool KeeperServer::isLeaderAlive() const bool KeeperServer::isLeaderAlive() const
{ {
return raft_instance->is_leader_alive(); return raft_instance && raft_instance->is_leader_alive();
} }
/// TODO test whether taking failed peer in count /// TODO test whether taking failed peer in count