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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel