Ack from me , with some  minor comments:
1)PR doc needs to be updated.
2)Small fix similar to #1356 is required for lock-in and unlock-in 
operation also.
3)Two more minor comments below inline with [Praveen].


Thanks,
Praveen



On 12-May-15 1:19 PM, Hans Nordeback wrote:
>   osaf/services/saf/amf/amfd/include/sg.h |    1 +
>   osaf/services/saf/amf/amfd/ndproc.cc    |    2 +
>   osaf/services/saf/amf/amfd/nodegroup.cc |  197 
> ++++++++++++++++++++++++++++++++
>   osaf/services/saf/amf/amfd/sgproc.cc    |   20 +++-
>   4 files changed, 219 insertions(+), 1 deletions(-)
>
>
> Merged the V1 of this patch with Praveens patch.
>
> diff --git a/osaf/services/saf/amf/amfd/include/sg.h 
> b/osaf/services/saf/amf/amfd/include/sg.h
> --- a/osaf/services/saf/amf/amfd/include/sg.h
> +++ b/osaf/services/saf/amf/amfd/include/sg.h
> @@ -552,6 +552,7 @@ extern bool sg_is_tolerance_timer_runnin
>   extern void avd_sg_adjust_config(AVD_SG *sg);
>   extern uint32_t sg_instantiated_su_count(const AVD_SG *sg);
>   extern bool sg_stable_after_lock_in_or_unlock_in(AVD_SG *sg);
> +extern void process_su_si_response_for_ng(AVD_SU *su, SaAisErrorT res);
>
>
>   #endif
> diff --git a/osaf/services/saf/amf/amfd/ndproc.cc 
> b/osaf/services/saf/amf/amfd/ndproc.cc
> --- a/osaf/services/saf/amf/amfd/ndproc.cc
> +++ b/osaf/services/saf/amf/amfd/ndproc.cc
> @@ -784,6 +784,8 @@ void avd_data_update_req_evh(AVD_CL_CB *
>                                               node_admin_op_report_to_imm(su, 
> static_cast<SaAmfPresenceStateT>(l_val));
>                                       } else if (su->pend_cbk.invocation != 
> 0) {
>                                               su_admin_op_report_to_imm(su, 
> static_cast<SaAmfPresenceStateT>(l_val));
> +                                     } else if (su->su_on_node->admin_ng != 
> NULL) {
> +                                             
> process_su_si_response_for_ng(su, SA_AIS_OK);
>                                       }
>
>                                       if (l_val == 
> SA_AMF_PRESENCE_TERMINATION_FAILED) {
> 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
> @@ -824,6 +824,91 @@ void ng_unlock(AVD_AMF_NG *ng)
>       }
>       TRACE_LEAVE2("node_oper_list size:%u",ng->oper_list_size());
>   }
> +
> +/**
> + * Set term_state for all pre-inst SUs hosted on the specified node
> + *
> + * @param node
> + */
> +static void node_sus_termstate_set(AVD_AVND *node, bool term_state)
> +{
> +     AVD_SU *su;
> +
> +     for (su = node->list_of_su; su; su = su->avnd_list_su_next) {
> +             if (su->saAmfSUPreInstantiable == true)
> +                     su->set_term_state(term_state);
> +     }
> +}
> +
> +/**
> + * perform unlock-instantiation on NG with honoring saAmfSURank.
> + *
> + * @param cb
> + * @param ng
> + */
> +static void ng_admin_unlock_inst(AVD_AMF_NG *ng)
> +{
> +     uint32_t su_try_inst;
> +     std::set<std::string> tmp_sg_list;
> +     TRACE_ENTER2("%s", ng->name.value);
> +
> +     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->node_info.member == false) {
> +                     LOG_NO("'%s' UNLOCK_INSTANTIATION: CLM node is not 
> member", node->name.value);
> +                     continue;
> +             }
> +             if (node->saAmfNodeOperState == SA_AMF_OPERATIONAL_DISABLED) {
> +                     LOG_NO("'%s' UNLOCK_INSTANTIATION: AMF node oper state 
> disabled", node->name.value);
> +                     continue;
> +             }
> +             for (AVD_SU *node_su = node->list_of_su; node_su != NULL;  
> node_su = node_su->avnd_list_su_next) {
> +                     /*Instantiate only those SUs in this SG which are 
> hosted on the Nodes of NG.
> +                        Also honor saAmfSURank while instantating.
> +                      */
> +                     AVD_SG *sg = node_su->sg_of_su;
> +
> +                     std::set<std::string>::const_iterator iter1 ;
> +                     iter1 = tmp_sg_list.find(Amf::to_string(&sg->name));
> +                     if (iter1 != tmp_sg_list.end())
> +                             continue;
> +
> +                     AVD_SU *su =  sg->list_of_su;
> +                     for (su_try_inst = 0; su != NULL; su = 
> su->sg_list_su_next) {
> +                             //Continue if this SU is not hosted on the Node 
> of NG.
> +                             if 
> (node_in_nodegroup(Amf::to_string(&su->su_on_node->name), ng) == false)
> +                                     continue;
> +
> +                             if ((su->saAmfSUAdminState != 
> SA_AMF_ADMIN_LOCKED_INSTANTIATION) &&
> +                                     (node->saAmfNodeAdminState != 
> SA_AMF_ADMIN_LOCKED_INSTANTIATION) &&
> +                                             (su->saAmfSUOperState == 
> SA_AMF_OPERATIONAL_ENABLED) &&
> +                                             (su->saAmfSUPresenceState == 
> SA_AMF_PRESENCE_UNINSTANTIATED)) {
> +                                     if ((su->saAmfSUPreInstantiable == 
> false) ||
> +                                                     (node->node_state != 
> AVD_AVND_STATE_PRESENT))
> +                                             continue;
> +
> +                                     if (sg->saAmfSGNumPrefInserviceSUs > 
> su_try_inst) {
> +                                             if 
> (avd_snd_presence_msg(avd_cb, su, false) != NCSCC_RC_SUCCESS) {
> +                                                     LOG_NO("Failed to send 
> Instantiation of '%s'", su->name.value);
> +                                             } else {
> +                                                     
> su->su_on_node->su_cnt_admin_oper++;
> +                                                     su_try_inst++;
> +                                             }
> +                                     }
> +                             }
> +                     }
> +                     tmp_sg_list.insert(Amf::to_string(&sg->name));
> +             }
> +             TRACE("node:'%s', su_cnt_admin_oper:%u",
> +                             node->name.value, node->su_cnt_admin_oper);
> +             if (node->su_cnt_admin_oper > 0)
> +                     ng->node_oper_list.insert(Amf::to_string(&node->name));
> +     }
> +     TRACE("node_oper_list size:%u",ng->oper_list_size());
> +     TRACE_LEAVE();
> +}
> +
>   /**
>    * Handle admin operations on SaAmfNodeGroup objects.
>    *
> @@ -842,6 +927,118 @@ static void ng_admin_op_cb(SaImmOiHandle
>       TRACE_ENTER2("'%s', inv:'%llu', 
> op:'%llu'",ng_name->value,invocation,op_id);
>
>       switch(op_id) {
> +     case SA_AMF_ADMIN_LOCK_INSTANTIATION:
> +             rc = check_ng_stability(ng);
> +             if (rc != SA_AIS_OK) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation,
> +                                           SA_AIS_ERR_TRY_AGAIN, NULL,
> +                                           "Some entity is unstable, 
> Operation cannot "
> +                                           "be performed on '%s'"
> +                                           "Check syslog for entity 
> details", ng_name->value);
> +                     goto done;
> +             }
> +             if (ng->saAmfNGAdminState == SA_AMF_ADMIN_LOCKED_INSTANTIATION) 
> {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation, 
> SA_AIS_ERR_BAD_OPERATION, NULL,
[Praveen] Here return code should be SA_AIS_ERR_NO_OP.

> +                                           "'%s' Invalid Admin Operation 
> LOCK INSTANTIATION in state %s",
> +                                           ng->name.value, 
> avd_adm_state_name[ng->saAmfNGAdminState]);
> +                     goto done;
> +             }
> +             if (ng->saAmfNGAdminState != SA_AMF_ADMIN_LOCKED) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation, 
> SA_AIS_ERR_BAD_OPERATION, NULL,
> +                                           "'%s' Invalid Admin Operation 
> LOCK_INSTANTIATION in state %s",
> +                                           ng->name.value, 
> avd_adm_state_name[ng->saAmfNGAdminState]);
> +                     goto done;
> +             }
> +             rc = check_red_model_service_outage(ng);
> +             if (rc != SA_AIS_OK) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation,
> +                                           SA_AIS_ERR_NOT_SUPPORTED, NULL,
> +                                           "SUs of unsupported red models 
> hosted on '%s'"
> +                                           "Check syslog for entity 
> details", ng_name->value);
> +                     goto done;
> +             }
> +             ng->admin_ng_pend_cbk.invocation = invocation;
> +             ng->admin_ng_pend_cbk.admin_oper = 
> static_cast<SaAmfAdminOperationIdT>(op_id);
> +             ng->node_oper_list.clear();
> +
> +             avd_ng_admin_state_set(ng, SA_AMF_ADMIN_LOCKED_INSTANTIATION);
> +             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;
> +                     node->admin_ng = ng;
> +node_sus_termstate_set(node, true);
[Praveen] Above line is not aligned.

> +                     node_admin_state_set(node, 
> SA_AMF_ADMIN_LOCKED_INSTANTIATION);
> +             }
> +             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->node_info.member == false) {
> +                             LOG_NO("'%s' LOCK_INSTANTIATION: CLM node is 
> not member", node->name.value);
> +                             continue;
> +                     }
> +                     if (node->saAmfNodeOperState == 
> SA_AMF_OPERATIONAL_DISABLED) {
> +                             LOG_NO("'%s' LOCK_INSTANTIATION: AMF node oper 
> state disabled", node->name.value);
> +                             continue;
> +                     }
> +                     avd_node_admin_lock_instantiation(node);
> +                     TRACE("node:'%s', su_cnt_admin_oper:%u",
> +                                     node->name.value, 
> node->su_cnt_admin_oper);
> +                     if (node->su_cnt_admin_oper > 0)
> +                             
> ng->node_oper_list.insert(Amf::to_string(&node->name));
> +             }
> +             TRACE("node_oper_list size:%u",ng->oper_list_size());
> +             if (ng->node_oper_list.empty())
> +                     ng_complete_admin_op(ng, SA_AIS_OK);
> +             break;
> +     case SA_AMF_ADMIN_UNLOCK_INSTANTIATION:
> +             rc = check_ng_stability(ng);
> +             if (rc != SA_AIS_OK) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation,
> +                                           SA_AIS_ERR_TRY_AGAIN, NULL,
> +                                           "Some entity is unstable, 
> Operation cannot "
> +                                           "be performed on '%s'"
> +                                           "Check syslog for entity 
> details", ng_name->value);
> +                     goto done;
> +             }
> +             if (ng->saAmfNGAdminState == SA_AMF_ADMIN_LOCKED) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation, 
> SA_AIS_ERR_NO_OP, NULL,
> +                                           "'%s' Already in LOCKED state", 
> ng->name.value);
> +                     goto done;
> +             }
> +
> +             if (ng->saAmfNGAdminState != SA_AMF_ADMIN_LOCKED_INSTANTIATION) 
> {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation, 
> SA_AIS_ERR_BAD_OPERATION, NULL,
> +                                           "'%s' Invalid Admin Operation 
> UNLOCK_INSTANTIATION in state %s",
> +                                           ng->name.value, 
> avd_adm_state_name[ng->saAmfNGAdminState]);
> +                     goto done;
> +             }
> +             rc = check_red_model_service_outage(ng);
> +             if (rc != SA_AIS_OK) {
> +                     report_admin_op_error(avd_cb->immOiHandle, invocation,
> +                                           SA_AIS_ERR_NOT_SUPPORTED, NULL,
> +                                           "SUs of unsupported red models 
> hosted on '%s'"
> +                                           "Check syslog for entity 
> details", ng_name->value);
> +                     goto done;
> +             }
> +
> +                ng->admin_ng_pend_cbk.invocation = invocation;
> +             ng->admin_ng_pend_cbk.admin_oper = 
> static_cast<SaAmfAdminOperationIdT>(op_id);
> +             ng->node_oper_list.clear();
> +
> +             avd_ng_admin_state_set(ng, 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);
> +                     node->su_cnt_admin_oper = 0;
> +                     node->admin_ng = ng;
> +                     node_sus_termstate_set(node, false);
> +                     node_admin_state_set(node, SA_AMF_ADMIN_LOCKED);
> +             }
> +             ng_admin_unlock_inst(ng);
> +             if (ng->node_oper_list.empty())
> +                     ng_complete_admin_op(ng, SA_AIS_OK);
> +             break;
>       case SA_AMF_ADMIN_LOCK:
>               rc = check_ng_stability(ng);    
>               if (rc != 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
> @@ -329,7 +329,7 @@ static void node_complete_admin_op(AVD_A
>    * @param[in]   ptr to SU (AVD_SU).
>    * @param[in]   res(SaAisErrorT).
>    */
> -static void process_su_si_response_for_ng(AVD_SU *su, SaAisErrorT res)
> +void process_su_si_response_for_ng(AVD_SU *su, SaAisErrorT res)
>   {
>       TRACE_ENTER2("'%s'",su->name.value);
>       AVD_AMF_NG *ng = su->su_on_node->admin_ng;
> @@ -377,6 +377,24 @@ static void process_su_si_response_for_n
>                       avd_ng_admin_state_set(ng, SA_AMF_ADMIN_LOCKED);
>               }
>       }
> +     if (ng->saAmfNGAdminState == SA_AMF_ADMIN_LOCKED_INSTANTIATION) {
> +             if ((su->saAmfSUPresenceState == 
> SA_AMF_PRESENCE_UNINSTANTIATED) ||
> +                     (su->saAmfSUPresenceState == 
> SA_AMF_PRESENCE_TERMINATION_FAILED)) {
> +                             su->su_on_node->su_cnt_admin_oper--;
> +                             TRACE("node:'%s', su_cnt_admin_oper:%u",
> +                                             
> su->su_on_node->name.value,su->su_on_node->su_cnt_admin_oper);
> +             }
> +     }
> +     if ((ng->saAmfNGAdminState == SA_AMF_ADMIN_LOCKED) &&
> +                     (ng->admin_ng_pend_cbk.admin_oper == 
> SA_AMF_ADMIN_UNLOCK_INSTANTIATION)) {
> +             if ((su->saAmfSUPresenceState == SA_AMF_PRESENCE_INSTANTIATED) 
> ||
> +                             (su->saAmfSUPresenceState == 
> SA_AMF_PRESENCE_TERMINATION_FAILED) ||
> +                             (su->saAmfSUPresenceState == 
> SA_AMF_PRESENCE_INSTANTIATION_FAILED)) {
> +                             su->su_on_node->su_cnt_admin_oper--;
> +                             TRACE("node:'%s', su_cnt_admin_oper:%u",
> +                                             
> su->su_on_node->name.value,su->su_on_node->su_cnt_admin_oper);
> +             }
> +     }
>       /*If no futher SU is undergoing assignment changes, erase node from
>          nodgroup operation tracking list.*/
>       if (node->su_cnt_admin_oper == 0) {
>

------------------------------------------------------------------------------
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