From acd9cb089e838094161a22f325378a45ac8d2345 Mon Sep 17 00:00:00 2001 From: Antonio Andelic Date: Fri, 16 Sep 2022 10:03:21 +0000 Subject: [PATCH] Fix segfault during shutdown when RAFT server failed to start --- src/Coordination/KeeperDispatcher.cpp | 4 ++-- src/Coordination/KeeperServer.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Coordination/KeeperDispatcher.cpp b/src/Coordination/KeeperDispatcher.cpp index 3445ef5ea23..ebd219d7748 100644 --- a/src/Coordination/KeeperDispatcher.cpp +++ b/src/Coordination/KeeperDispatcher.cpp @@ -574,7 +574,7 @@ void KeeperDispatcher::shutdown() /// Clear all registered sessions std::lock_guard lock(session_to_response_callback_mutex); - if (hasLeader()) + if (server && hasLeader()) { close_requests.reserve(session_to_response_callback.size()); // send to leader CLOSE requests for active sessions @@ -598,7 +598,7 @@ void KeeperDispatcher::shutdown() } // 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()); const auto raft_result = server->putRequestBatch(close_requests); diff --git a/src/Coordination/KeeperServer.cpp b/src/Coordination/KeeperServer.cpp index b708c5a51ba..9e143264699 100644 --- a/src/Coordination/KeeperServer.cpp +++ b/src/Coordination/KeeperServer.cpp @@ -545,7 +545,7 @@ bool KeeperServer::isFollower() 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