---
src/amf/amfd/osaf-amfd.in | 4 ++++
src/amf/amfd/role.cc | 35 ++++++++++++++++++++++++++++++-----
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/src/amf/amfd/osaf-amfd.in b/src/amf/amfd/osaf-amfd.in
index 45c5ab9e4..26a77ef52 100644
--- a/src/amf/amfd/osaf-amfd.in
+++ b/src/amf/amfd/osaf-amfd.in
@@ -28,6 +28,10 @@ else
. $pkgsysconfdir/amfd.conf
fi
+if [ -f "$pkgsysconfdir/fmd.conf" ]; then
+ . "$pkgsysconfdir/fmd.conf"
+fi
+
binary=$pkglibdir/$osafprog
pidfile=$pkgpiddir/$osafprog.pid
lockfile=$lockdir/$initscript
diff --git a/src/amf/amfd/role.cc b/src/amf/amfd/role.cc
index 865d89d94..f98beea01 100644
--- a/src/amf/amfd/role.cc
+++ b/src/amf/amfd/role.cc
@@ -38,6 +38,7 @@
#include "osaf/immutil/immutil.h"
#include "base/logtrace.h"
#include "rde/agent/rda_papi.h"
+#include "osaf/consensus/service.h"
#include "amf/amfd/amfd.h"
#include "amf/amfd/imm.h"
@@ -1085,6 +1086,12 @@ uint32_t amfd_switch_actv_qsd(AVD_CL_CB *cb) {
avd_d2n_msg_dequeue(cb);
}
+ Consensus consensus_service;
+ rc = consensus_service.DemoteThisNode();
+ if (rc != SA_AIS_OK) {
+ LOG_ER("Failed to demote this node from consensus service");
+ }
+
TRACE_LEAVE();
return NCSCC_RC_SUCCESS;
}
@@ -1209,13 +1216,21 @@ uint32_t amfd_switch_stdby_actv(AVD_CL_CB *cb) {
cb->avail_state_avd = SA_AMF_HA_ACTIVE;
osaf_mutex_unlock_ordie(&imm_reinit_mutex);
+ Consensus consensus_service;
+ rc = consensus_service.BeginActivePromotion();
+ if (rc != SA_AIS_OK) {
+ LOG_ER("Unable to set active controller in consensus service");
+ LOG_ER("Split brain is possible");
+ }
+
/* Declare this standby as Active. Set Vdest role role */
if (NCSCC_RC_SUCCESS !=
(status = avd_mds_set_vdest_role(cb, SA_AMF_HA_ACTIVE))) {
LOG_ER("Switch Standby --> Active FAILED, MDS role set failed");
cb->swap_switch = false;
avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE);
- return NCSCC_RC_FAILURE;
+ status = NCSCC_RC_FAILURE;
+ goto done;
}
/* Time to send fail-over messages to all the AVND's */
@@ -1240,7 +1255,8 @@ uint32_t amfd_switch_stdby_actv(AVD_CL_CB *cb) {
} else {
cb->swap_switch = false;
avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE);
- return NCSCC_RC_FAILURE;
+ status = NCSCC_RC_FAILURE;
+ goto done;
}
}
@@ -1259,7 +1275,8 @@ uint32_t amfd_switch_stdby_actv(AVD_CL_CB *cb) {
in avd_imm_reinit_bg_thread.*/
} else {
avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE);
- return NCSCC_RC_FAILURE;
+ status = NCSCC_RC_FAILURE;
+ goto done;
}
} else
osaf_mutex_unlock_ordie(&imm_reinit_mutex);
@@ -1274,7 +1291,8 @@ uint32_t amfd_switch_stdby_actv(AVD_CL_CB *cb) {
LOG_ER("Switch Standby --> Active, clm track start failed");
Fifo::queue(new ClmTrackStart());
avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE);
- return NCSCC_RC_FAILURE;
+ status = NCSCC_RC_FAILURE;
+ goto done;
}
/* Send the message to other avd for role change rsp as success */
@@ -1291,8 +1309,15 @@ uint32_t amfd_switch_stdby_actv(AVD_CL_CB *cb) {
}
}
+ status = NCSCC_RC_SUCCESS;
+done:
+ rc = consensus_service.EndActivePromotion();
+ if (rc != SA_AIS_OK) {
+ LOG_ER("Unable to remove lock in consensus service");
+ }
+
TRACE_LEAVE();
- return NCSCC_RC_SUCCESS;
+ return status;
}
/****************************************************************************\
--
2.14.1
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel