Hi

Ack (tested)

-----Original Message-----
From: thang.d.nguyen [mailto:thang.d.ngu...@dektech.com.au] 
Sent: Tuesday, 4 February 2020 1:37 PM
To: Gary Lee <gary....@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net; Thang Duc Nguyen
<thang.d.ngu...@dektech.com.au>
Subject: [PATCH 1/1] rde: correct to promote node to active [#3108]

If relaxed node promotion is enabled, allow this node to be promoted active
if it can see a peer SC and this node has the lowest node ID.
---
 src/rde/rded/role.cc | 14 +++++++++++++-  src/rde/rded/role.h  |  1 +
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/rde/rded/role.cc b/src/rde/rded/role.cc index
593ccf0eb..7ca020d5d 100644
--- a/src/rde/rded/role.cc
+++ b/src/rde/rded/role.cc
@@ -260,7 +260,8 @@ bool Role::IsCandidate() {
   // if relaxed node promotion is enabled, allow this node to be promoted
   // active if it can see a peer SC and this node has the lowest node ID
   if (consensus_service.IsRelaxedNodePromotionEnabled() == true &&
-      cb->state == State::kNotActiveSeenPeer) {
+      cb->state == State::kNotActiveSeenPeer &&
+      IsLowestNodeid() == true) {
     LOG_NO("Relaxed node promotion enabled. This node is a candidate.");
     result = true;
   }
@@ -279,6 +280,17 @@ bool Role::IsPeerPresent() {
   return result;
 }
 
+bool Role::IsLowestNodeid() {
+  bool result = true;
+  RDE_CONTROL_BLOCK* cb = rde_get_control_block();
+
+  for (auto peer_id : cb->peer_controllers) {
+    if (peer_id < own_node_id_)
+      return false;
+  }
+  return result;
+}
+
 uint32_t Role::SetRole(PCS_RDA_ROLE new_role) {
   TRACE_ENTER();
   PCS_RDA_ROLE old_role = role_;
diff --git a/src/rde/rded/role.h b/src/rde/rded/role.h index
9c63cbe7b..9bf1b10bd 100644
--- a/src/rde/rded/role.h
+++ b/src/rde/rded/role.h
@@ -38,6 +38,7 @@ class Role {
   void AddPeer(NODE_ID node_id);
   bool IsCandidate();
   bool IsPeerPresent();
+  bool IsLowestNodeid();
   void SetPeerState(PCS_RDA_ROLE node_role, NODE_ID node_id);
   timespec* Poll(timespec* ts);
   uint32_t SetRole(PCS_RDA_ROLE new_role);
--
2.17.1

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to