osaf/services/saf/amf/amfd/include/proc.h | 1 +
osaf/services/saf/amf/amfd/sgproc.cc | 31 +++++++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 0 deletions(-)
When admin operation like lock and shutdown are performed on Node and this
leads to sufailover,
AMFD is not clearing the operation related flag in node pointer. This patch
ensures if sufailover
gets escalated when admin operation is performed on the node, then AMF will
clear operation related flag.
Also AMF will respond to IMM for the completion of operation.
diff --git a/osaf/services/saf/amf/amfd/include/proc.h
b/osaf/services/saf/amf/amfd/include/proc.h
--- a/osaf/services/saf/amf/amfd/include/proc.h
+++ b/osaf/services/saf/amf/amfd/include/proc.h
@@ -161,6 +161,7 @@ extern AVD_SU *get_other_su_from_oper_li
extern void su_complete_admin_op(AVD_SU *su, SaAisErrorT result);
extern void comp_complete_admin_op(AVD_COMP *comp, SaAisErrorT result);
extern void su_disable_comps(AVD_SU *su, SaAisErrorT result);
+extern void node_complete_admin_op(AVD_AVND *node, SaAisErrorT result);
extern bool cluster_su_instantiation_done(AVD_CL_CB *cb, AVD_SU *su);
extern void cluster_startup_expiry_event_generate(AVD_CL_CB *cb);
diff --git a/osaf/services/saf/amf/amfd/sgproc.cc
b/osaf/services/saf/amf/amfd/sgproc.cc
--- a/osaf/services/saf/amf/amfd/sgproc.cc
+++ b/osaf/services/saf/amf/amfd/sgproc.cc
@@ -277,6 +277,20 @@ static uint32_t sg_su_failover_func(AVD_
avd_su_readiness_state_set(su, SA_AMF_READINESS_OUT_OF_SERVICE);
su_complete_admin_op(su, SA_AIS_ERR_TIMEOUT);
su_disable_comps(su, SA_AIS_ERR_TIMEOUT);
+ if (su->su_on_node->admin_node_pend_cbk.invocation != 0) {
+
+ /* Node level operation is going on the node hosting the SU for
which
+ sufailover got escalated. Sufailover event will always come
after the
+ initiation of node level operation on the list of SUs. So if
this SU has
+ list of SUSIs, AMF would have sent assignment as a part of
node level operation.
+ Now SUSIs in this SU are going to be deleted so we can
decrement the counter in node.
+ */
+ su->su_on_node->su_cnt_admin_oper--;
+
+ /* If node level operation is finished on all the SUs, reply to
imm.*/
+ if (su->su_on_node->su_cnt_admin_oper == 0)
+ node_complete_admin_op(su->su_on_node,
SA_AIS_ERR_TIMEOUT);
+ }
/*If the AvD is in AVD_APP_STATE then reassign all the SUSI assignments
for this SU */
if (avd_cb->init_state == AVD_APP_STATE) {
@@ -2116,3 +2130,20 @@ void su_disable_comps(AVD_SU *su, SaAisE
m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp,
AVSV_CKPT_AVD_COMP_CONFIG);
}
}
+
+/**
+ * @brief This function completes admin operation on node.
+ * It responds IMM with the result of admin operation on node.
+ * @param ptr to node
+ * @param result
+ *
+ */
+void node_complete_admin_op(AVD_AVND *node, SaAisErrorT result)
+{
+ if (node->admin_node_pend_cbk.invocation != 0) {
+ avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
+ node->admin_node_pend_cbk.invocation, result);
+ node->admin_node_pend_cbk.invocation = 0;
+ node->admin_node_pend_cbk.admin_oper =
static_cast<SaAmfAdminOperationIdT>(0);
+ }
+}
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel