diff --git a/src/communication/bolt/ha_client.hpp b/src/communication/bolt/ha_client.hpp
index d5f94e1f3..97ee193bf 100644
--- a/src/communication/bolt/ha_client.hpp
+++ b/src/communication/bolt/ha_client.hpp
@@ -1,6 +1,8 @@
 #pragma once
 
+#include <chrono>
 #include <memory>
+#include <thread>
 #include <vector>
 
 #include <glog/logging.h>
@@ -89,6 +91,15 @@ class HAClient final {
                                num_retries_);
   }
 
+  /// Function that returns the current leader ID.
+  ///
+  /// @throws ClientFatalException when we couldn't find the leader server even
+  ///                              after `num_retries` tries
+  uint64_t GetLeaderId() {
+    Execute("SHOW RAFT INFO", {});
+    return leader_id_;
+  }
+
  private:
   void FindLeader() {
     // Reconnect clients that aren't available
@@ -118,8 +129,10 @@ class HAClient final {
 
     // Determine which server is the leader
     leader_ = nullptr;
-    int64_t leader_id = -1;
-    for (const auto &client : clients_) {
+    uint64_t leader_id = 0;
+    int64_t leader_term = -1;
+    for (uint64_t i = 0; i < clients_.size(); ++i) {
+      auto &client = clients_[i];
       try {
         auto ret = client->Execute("SHOW RAFT INFO", {});
         int64_t term_id = -1;
@@ -138,14 +151,16 @@ class HAClient final {
             continue;
           }
         }
-        if (is_leader && term_id > leader_id) {
-          leader_id = term_id;
+        if (is_leader && term_id > leader_term) {
+          leader_term = term_id;
+          leader_id = i + 1;
           leader_ = client.get();
         }
       } catch (const utils::BasicException &) {
         continue;
       }
     }
+    leader_id_ = leader_id;
     if (!leader_) {
       throw ClientFatalException("Couldn't find leader server!");
     }
@@ -159,6 +174,7 @@ class HAClient final {
   std::chrono::milliseconds retry_delay_;
   std::string client_name_;
 
+  uint64_t leader_id_ = 0;
   Client *leader_ = nullptr;
   std::vector<std::unique_ptr<Client>> clients_;
 };