osaf/services/saf/amf/amfd/nodegroup.cc |  18 ++++++++++++++++--
 osaf/services/saf/amf/amfd/sgproc.cc    |   2 ++
 2 files changed, 18 insertions(+), 2 deletions(-)


If a node is in lock-in state and lock, shutdown or unlock are initiated on any 
of its
nodegroup then there are two problems:
1)During lock and shutdown operation on ng, locked-in admin state of node is 
changed
to locked.
2)During unlock operation on ng, locked-in admin state of node is changed to 
unlocked.
In both the above cases locked-in state of node should remain intact.

Patch ensures that a locked-in node remains untouched during lock, shutdown and 
unlock
operation on any nodegroup of node.

diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc 
b/osaf/services/saf/amf/amfd/nodegroup.cc
--- a/osaf/services/saf/amf/amfd/nodegroup.cc
+++ b/osaf/services/saf/amf/amfd/nodegroup.cc
@@ -771,19 +771,22 @@ void ng_unlock(AVD_AMF_NG *ng)
        for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                        iter != ng->saAmfNGNodeList.end(); ++iter) {
                AVD_AVND *node = avd_node_get(*iter);
+               node->su_cnt_admin_oper = 0;
+               if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                       continue;
                node_admin_state_set(node, SA_AMF_ADMIN_UNLOCKED);
                if (node->node_info.member == false) {
                        LOG_NO("'%s' UNLOCK: CLM node is not member", 
node->name.value);
                        continue;
                }
-               node->su_cnt_admin_oper = 0;
                node->admin_ng = ng;
        }
        for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                        iter != ng->saAmfNGNodeList.end(); ++iter) {
                AVD_AVND *node = avd_node_get(*iter);
                if ((node->saAmfNodeOperState == SA_AMF_OPERATIONAL_DISABLED) ||
-                               (node->node_info.member == false))
+                               (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION) ||
+                               (node->node_info.member == false)) 
                        continue;
                for (AVD_SU *su = node->list_of_su; su != NULL;  su = 
su->avnd_list_su_next) {
                        if (su->is_in_service() == true) {
@@ -796,6 +799,7 @@ void ng_unlock(AVD_AMF_NG *ng)
                AVD_AVND *node = avd_node_get(*iter);
                if ((node->saAmfNodeOperState == SA_AMF_OPERATIONAL_DISABLED) ||
                                (node->node_info.member == false) ||
+                               (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION) ||
                                (avd_cb->init_state == AVD_INIT_DONE))
                        continue;
                /*
@@ -867,12 +871,16 @@ static void ng_admin_op_cb(SaImmOiHandle
                                iter != ng->saAmfNGNodeList.end(); ++iter) {
                        AVD_AVND *node = avd_node_get(*iter);
                        node->su_cnt_admin_oper = 0;
+                       if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                               continue;
                        node->admin_ng = ng;
                        node_admin_state_set(node, SA_AMF_ADMIN_LOCKED);
                }
                for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                                iter != ng->saAmfNGNodeList.end(); ++iter) {
                        AVD_AVND *node = avd_node_get(*iter);
+                       if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                               continue;
                        ng_node_lock_and_shutdown(node);
                }
                if (ng->node_oper_list.empty())
@@ -916,12 +924,16 @@ static void ng_admin_op_cb(SaImmOiHandle
                                iter != ng->saAmfNGNodeList.end(); ++iter) {
                        AVD_AVND *node = avd_node_get(*iter);
                        node->su_cnt_admin_oper = 0;
+                       if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                               continue;
                        node->admin_ng = ng;
                        node_admin_state_set(node, SA_AMF_ADMIN_SHUTTING_DOWN);
                }
                for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                                iter != ng->saAmfNGNodeList.end(); ++iter) {
                        AVD_AVND *node = avd_node_get(*iter);
+                       if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                               continue;
                        ng_node_lock_and_shutdown(node);
                        if (node->su_cnt_admin_oper == 0)
                                node_admin_state_set(node, SA_AMF_ADMIN_LOCKED);
@@ -931,6 +943,8 @@ static void ng_admin_op_cb(SaImmOiHandle
                        for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                                        iter != ng->saAmfNGNodeList.end(); 
++iter) {
                                AVD_AVND *node = avd_node_get(*iter);
+                               if (node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                                       continue;
                                node_admin_state_set(node, SA_AMF_ADMIN_LOCKED);
                        }
                        ng_complete_admin_op(ng, SA_AIS_OK);
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
@@ -369,6 +369,8 @@ static void process_su_si_response_for_n
                for (std::set<std::string>::const_iterator iter = 
ng->saAmfNGNodeList.begin();
                                iter != ng->saAmfNGNodeList.end(); ++iter) {
                        AVD_AVND *tmp_node = avd_node_get(*iter);
+                       if (tmp_node->saAmfNodeAdminState == 
SA_AMF_ADMIN_LOCKED_INSTANTIATION)
+                               continue;
                        if (tmp_node->saAmfNodeAdminState != 
SA_AMF_ADMIN_LOCKED)
                                flag = false;
                }

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to