- Revert #3108 and #3173
- To avoid dual active controller, node already give up promotion
has set role to QUIESCED should not promote active anyway.
---
 src/rde/rded/role.cc | 18 +++++-------------
 src/rde/rded/role.h  |  1 -
 2 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/src/rde/rded/role.cc b/src/rde/rded/role.cc
index ae588780f..2eae363d9 100644
--- a/src/rde/rded/role.cc
+++ b/src/rde/rded/role.cc
@@ -110,6 +110,10 @@ void Role::PromoteNode(const uint64_t cluster_size,
     return;
   } else if (rc != SA_AIS_OK && relaxed_mode == true) {
     LOG_WA("Unable to set active controller in consensus service");
+    if (role_ == PCS_RDA_QUIESCED) {
+      LOG_WA("Another controller is already promoted");
+      return;
+    }
     LOG_WA("Will become active anyway");
     promotion_pending = true;
   } else if (rc != SA_AIS_OK) {
@@ -262,8 +266,7 @@ 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::kNotActive ||
-       (cb->state == State::kNotActiveSeenPeer && IsLowestNodeid()))) {
+      cb->state == State::kNotActiveSeenPeer) {
     LOG_NO("Relaxed node promotion enabled. This node is a candidate.");
     result = true;
   }
@@ -282,17 +285,6 @@ 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 9bf1b10bd..9c63cbe7b 100644
--- a/src/rde/rded/role.h
+++ b/src/rde/rded/role.h
@@ -38,7 +38,6 @@ 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



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

Reply via email to