osaf/services/saf/amf/amfd/include/si.h | 1 + osaf/services/saf/amf/amfd/si.cc | 18 ++++++++++++++---- osaf/services/saf/amf/amfd/siass.cc | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/include/si.h b/osaf/services/saf/amf/amfd/include/si.h --- a/osaf/services/saf/amf/amfd/include/si.h +++ b/osaf/services/saf/amf/amfd/include/si.h @@ -109,6 +109,7 @@ public: bool alarm_sent; /* SI unassigned alarm has been sent */ + struct avd_avnd_tag *si_on_node; /* the node on which this SI resides */ void inc_curr_act_ass(); void dec_curr_act_ass(); void inc_curr_stdby_ass(); diff --git a/osaf/services/saf/amf/amfd/si.cc b/osaf/services/saf/amf/amfd/si.cc --- a/osaf/services/saf/amf/amfd/si.cc +++ b/osaf/services/saf/amf/amfd/si.cc @@ -26,6 +26,7 @@ #include <csi.h> #include <proc.h> #include <si_dep.h> +#include <node.h> AmfDb<std::string, AVD_SI> *si_db = NULL; @@ -320,7 +321,8 @@ AVD_SI::AVD_SI() : list_of_sus_per_si_rank(NULL), rankedsu_list_head(NULL), invocation(0), - alarm_sent(false) + alarm_sent(false), + si_on_node{nullptr} { memset(&name, 0, sizeof(SaNameT)); memset(&saAmfSvcType, 0, sizeof(SaNameT)); @@ -1315,9 +1317,17 @@ void AVD_SI::update_ass_state() /* alarm & notifications */ if (saAmfSIAssignmentState == SA_AMF_ASSIGNMENT_UNASSIGNED) { - avd_send_si_unassigned_alarm(&name); - alarm_sent = true; - m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this, AVSV_CKPT_SI_ALARM_SENT); + osafassert(si_on_node != nullptr); + if ((sg_of_si->sg_type->saAmfSgtRedundancyModel == SA_AMF_NO_REDUNDANCY_MODEL) && + ((si_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_SHUTTING_DOWN) || + (si_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_LOCKED) || + (si_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_LOCKED_INSTANTIATION))) { + LOG_NO("Node is locked, no SI unassigned alarm will be sent"); + } else { + avd_send_si_unassigned_alarm(&name); + alarm_sent = true; + m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, this, AVSV_CKPT_SI_ALARM_SENT); + } } else { avd_send_si_assigned_ntf(&name, oldState, saAmfSIAssignmentState); diff --git a/osaf/services/saf/amf/amfd/siass.cc b/osaf/services/saf/amf/amfd/siass.cc --- a/osaf/services/saf/amf/amfd/siass.cc +++ b/osaf/services/saf/amf/amfd/siass.cc @@ -166,6 +166,8 @@ AVD_SU_SI_REL *avd_susi_create(AVD_CL_CB su_si->si = si; su_si->su = su; + si->si_on_node = su->su_on_node; + /* * Add the susi rel rec to the ordered si-list */ ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel