This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch branch-1.18.x
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 806bba5b2995e50c37d14cc6cb67f166dd27c7fb
Author: Alexey Serbin <[email protected]>
AuthorDate: Fri Jan 24 16:18:06 2025 -0800

    [consensus] micro-optimisation on RequestVote()
    
    This patch simplifies the logic around 'update_guard' in
    RaftConsensus::RequestVote() since unique_lock<>::try_lock() already
    reports if the underlying locking primitive has been acquired.  It also
    fixes compilation warning issued by GCC13/14 about ignoring the return
    value of the unique_lock<>::try_lock() method.
    
    This patch doesn't contain any functional modifications.
    
    Change-Id: I115d88b90ce6ec94737bb85f1003cf943e1ab9e0
    Reviewed-on: http://gerrit.cloudera.org:8080/22387
    Tested-by: Kudu Jenkins
    Reviewed-by: Abhishek Chennaka <[email protected]>
    (cherry picked from commit 47af08154d1522ae4910ea306cf77c2b0e8e4f81)
    Reviewed-on: http://gerrit.cloudera.org:8080/22402
    Tested-by: Alexey Serbin <[email protected]>
    Reviewed-by: Gabriella Lotz <[email protected]>
---
 src/kudu/consensus/raft_consensus.cc | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/kudu/consensus/raft_consensus.cc 
b/src/kudu/consensus/raft_consensus.cc
index 6be58bbf8..5ec7aea89 100644
--- a/src/kudu/consensus/raft_consensus.cc
+++ b/src/kudu/consensus/raft_consensus.cc
@@ -1749,19 +1749,19 @@ Status RaftConsensus::RequestVote(const VoteRequestPB* 
request,
   // Lock ordering: update_lock_ must be acquired before lock_.
   std::unique_lock<simple_spinlock> update_guard(update_lock_, 
std::defer_lock);
   if (PREDICT_TRUE(FLAGS_enable_leader_failure_detection)) {
-    update_guard.try_lock();
+    if (!update_guard.try_lock()) {
+      // There is another vote or update concurrent with the vote. In that 
case, that
+      // other request is likely to reset the timer, and we'll end up just 
voting
+      // "NO" after waiting. To avoid starving RPC handlers and causing 
cascading
+      // timeouts, just vote a quick NO.
+      return RequestVoteRespondIsBusy(request, response);
+    }
   } else {
     // If failure detection is not enabled, then we can't just reject the vote,
     // because there will be no automatic retry later. So, block for the lock.
     update_guard.lock();
   }
-  if (!update_guard.owns_lock()) {
-    // There is another vote or update concurrent with the vote. In that case, 
that
-    // other request is likely to reset the timer, and we'll end up just voting
-    // "NO" after waiting. To avoid starving RPC handlers and causing cascading
-    // timeouts, just vote a quick NO.
-    return RequestVoteRespondIsBusy(request, response);
-  }
+  DCHECK(update_guard.owns_lock());
 
   // Acquire the replica state lock so we can read / modify the consensus 
state.
   ThreadRestrictions::AssertWaitAllowed();

Reply via email to