Hi,

Tested prototype, this is how it looks on AMF demo.
# immadm -o 18 safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
error - saImmOmAdminOperationInvoke_2 admin-op RETURNED: 
SA_AIS_ERR_NOT_SUPPORTED (19)
error-string: Unsupported admin op for SU: 18

# immadm -o 4 safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
error - saImmOmAdminOperationInvoke_2 admin-op RETURNED: 
SA_AIS_ERR_NO_OP (28)
error-string: Admin operation (4) has no effect on current state (2)

Looks ok to me.

Thanks,
Praveen
On 30-Oct-13 10:18 AM, nagendr...@oracle.com wrote:
>   osaf/services/saf/amf/amfd/imm.cc        |  39 ++++++++++++++++++++
>   osaf/services/saf/amf/amfd/include/imm.h |   3 +
>   osaf/services/saf/amf/amfd/su.cc         |  61 
> ++++++++++++++++++++-----------
>   3 files changed, 81 insertions(+), 22 deletions(-)
>
>
> diff --git a/osaf/services/saf/amf/amfd/imm.cc 
> b/osaf/services/saf/amf/amfd/imm.cc
> --- a/osaf/services/saf/amf/amfd/imm.cc
> +++ b/osaf/services/saf/amf/amfd/imm.cc
> @@ -1794,4 +1794,43 @@ void report_ccb_validation_error(const C
>       else
>               LOG_WA("%s", err_str);
>   }
> +/**
> + * Respond admin op to IMM
> + * @param immOiHandle
> + * @param invocation
> + * @param result
> + * @param pend_cbk
> + * @param  format
> + * @param  ...
> + */
> +void immAdminOperationResult_2(SaImmOiHandleT immOiHandle, SaInvocationT 
> invocation, SaAisErrorT result,
> +             AVD_ADMIN_OPER_CBK *pend_cbk, const char *format, ...)
> +{
> +     char ao_err_string[256];
> +     SaAisErrorT error;
> +     SaStringT p_ao_err_string = ao_err_string;
> +     SaImmAdminOperationParamsT_2 ao_err_param = {
> +             const_cast<SaStringT>(SA_IMM_PARAM_ADMOP_ERROR),
> +             SA_IMM_ATTR_SASTRINGT,
> +             const_cast<SaStringT *> (&p_ao_err_string)};
> +     const SaImmAdminOperationParamsT_2 *ao_err_params[2] = {
> +             &ao_err_param,
> +             NULL };
> +     ao_err_string[sizeof(ao_err_string) - 1] = 0;
>   
> +     va_list ap;
> +     va_start(ap, format);
> +     (void) vsnprintf(ao_err_string, sizeof(ao_err_string), format, ap);
> +     va_end(ap);
> +     TRACE("%s",ao_err_string);
> +
> +     error= saImmOiAdminOperationResult_o2(immOiHandle, invocation, result, 
> ao_err_params);
> +     if (error != SA_AIS_OK)
> +             LOG_ER("saImmOiAdminOperationResult_o2 for %llu failed %u", 
> invocation, error);
> +
> +     if (pend_cbk) {
> +             pend_cbk->admin_oper = static_cast<SaAmfAdminOperationIdT>(0);
> +             pend_cbk->invocation = 0;
> +     }
> +
> +}
> diff --git a/osaf/services/saf/amf/amfd/include/imm.h 
> b/osaf/services/saf/amf/amfd/include/imm.h
> --- a/osaf/services/saf/amf/amfd/include/imm.h
> +++ b/osaf/services/saf/amf/amfd/include/imm.h
> @@ -88,5 +88,8 @@ extern void avd_saImmOiAdminOperationRes
>                                                                        
> SaAisErrorT result);
>   void report_ccb_validation_error(const CcbUtilOperationData_t *opdata,
>               const char *format, ...) __attribute__ ((format(printf, 2, 3)));
> +void immAdminOperationResult_2(SaImmOiHandleT immOiHandle, SaInvocationT 
> invocation, SaAisErrorT result,
> +             struct admin_oper_cbk *pend_cbk,
> +             const char *format, ...) __attribute__ ((format(printf, 5, 6)));
>   
>   #endif
> diff --git a/osaf/services/saf/amf/amfd/su.cc 
> b/osaf/services/saf/amf/amfd/su.cc
> --- a/osaf/services/saf/amf/amfd/su.cc
> +++ b/osaf/services/saf/amf/amfd/su.cc
> @@ -881,13 +881,15 @@ static void su_admin_op_cb(SaImmOiHandle
>   
>       if ( op_id > SA_AMF_ADMIN_SHUTDOWN && op_id != SA_AMF_ADMIN_REPAIRED) {
>               rc = SA_AIS_ERR_NOT_SUPPORTED;
> -             LOG_WA("Unsupported admin op for SU: %llu", op_id);
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, NULL,
> +                             "Unsupported admin op for SU: %llu", op_id);
>               goto done;
>       }
>   
>       if (cb->init_state != AVD_APP_STATE ) {
>               rc = SA_AIS_ERR_TRY_AGAIN;
> -             LOG_WA("AMF (state %u) is not available for admin ops", 
> cb->init_state);
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, NULL,
> +                             "AMF (state %u) is not available for admin 
> ops", cb->init_state);
>               goto done;
>       }
>   
> @@ -900,7 +902,8 @@ static void su_admin_op_cb(SaImmOiHandle
>       if ((su->sg_of_su->sg_ncs_spec == SA_TRUE)
>               && (cb->node_id_avd == su->su_on_node->node_info.nodeId)) {
>               rc = SA_AIS_ERR_NOT_SUPPORTED;
> -             LOG_WA("Admin operation on Active middleware SU is not 
> allowed");
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "Admin operation on Active middleware SU is not 
> allowed");
>               goto done;
>       }
>   
> @@ -908,20 +911,24 @@ static void su_admin_op_cb(SaImmOiHandle
>       for (su_ptr = su->sg_of_su->list_of_su; su_ptr != NULL; su_ptr = 
> su_ptr->sg_list_su_next) {
>               if (su_ptr->pend_cbk.invocation != 0) {
>                       rc = SA_AIS_ERR_TRY_AGAIN;
> -                     LOG_WA("Admin operation is already going on (su'%s')", 
> su_ptr->name.value);
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Admin operation is already going on 
> (su'%s')", su_ptr->name.value);
>                       goto done;
>               }
>       }
>   
>       if (su->sg_of_su->sg_fsm_state != AVD_SG_FSM_STABLE) {
>               rc = SA_AIS_ERR_TRY_AGAIN;
> -             LOG_WA("SG state is not stable"); /* whatever that means... */
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "SG state is not stable"); /* whatever that 
> means... */
>               goto done;
>       }
>       /* if Tolerance timer is running for any SI's withing this SG, then 
> return SA_AIS_ERR_TRY_AGAIN */
>       if (sg_is_tolerance_timer_running_for_any_si(su->sg_of_su)) {
>               rc = SA_AIS_ERR_TRY_AGAIN;
> -             LOG_WA("Tolerance timer is running for some of the SI's in the 
> SG '%s', so differing admin opr",su->sg_of_su->name.value);
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "Tolerance timer is running for some of the 
> SI's in the SG '%s', "
> +                             "so differing admin 
> opr",su->sg_of_su->name.value);
>               goto done;
>       }
>   
> @@ -932,7 +939,8 @@ static void su_admin_op_cb(SaImmOiHandle
>            ((su->saAmfSUAdminState == SA_AMF_ADMIN_LOCKED)   && (op_id == 
> SA_AMF_ADMIN_UNLOCK_INSTANTIATION))) {
>   
>               rc = SA_AIS_ERR_NO_OP;
> -             LOG_WA("Admin operation (%llu) has no effect on current state 
> (%u)", op_id, su->saAmfSUAdminState);
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "Admin operation (%llu) has no effect on 
> current state (%u)", op_id, su->saAmfSUAdminState);
>               goto done;
>       }
>   
> @@ -951,14 +959,16 @@ static void su_admin_op_cb(SaImmOiHandle
>                 (op_id == SA_AMF_ADMIN_SHUTDOWN))) {
>   
>               rc = SA_AIS_ERR_BAD_OPERATION;
> -             LOG_WA("State transition invalid, state %u, op %llu", 
> su->saAmfSUAdminState, op_id);
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "State transition invalid, state %u, op %llu", 
> su->saAmfSUAdminState, op_id);
>               goto done;
>       }
>   
>       m_AVD_GET_SU_NODE_PTR(cb, su, node);
>       if (node->admin_node_pend_cbk.admin_oper != 0) {
>               rc = SA_AIS_ERR_TRY_AGAIN;
> -             LOG_WA("Node'%s' hosting SU'%s', undergoing admin 
> operation'%u'", node->name.value, su->name.value,
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                             "Node'%s' hosting SU'%s', undergoing admin 
> operation'%u'", node->name.value, su->name.value,
>                               node->admin_node_pend_cbk.admin_oper);
>               goto done;
>       }
> @@ -1001,7 +1011,8 @@ static void su_admin_op_cb(SaImmOiHandle
>                       avd_su_readiness_state_set(su, 
> SA_AMF_READINESS_OUT_OF_SERVICE);
>                       avd_su_admin_state_set(su, SA_AMF_ADMIN_LOCKED);
>                       rc = SA_AIS_ERR_FAILED_OPERATION;
> -                     LOG_WA("SG redundancy model specific handler failed");
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "SG redundancy model specific handler 
> failed");
>                       goto done;
>               }
>   
> @@ -1043,7 +1054,8 @@ static void su_admin_op_cb(SaImmOiHandle
>                       avd_su_readiness_state_set(su, back_red_state);
>                       avd_su_admin_state_set(su, back_admin_state);
>                       rc = SA_AIS_ERR_FAILED_OPERATION;
> -                     LOG_WA("SG redundancy model specific handler failed");
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "SG redundancy model specific handler 
> failed");
>                       goto done;
>               }
>   
> @@ -1060,7 +1072,8 @@ static void su_admin_op_cb(SaImmOiHandle
>   
>               if ( su->list_of_susi != NULL ) {
>                       rc = SA_AIS_ERR_TRY_AGAIN;
> -                     LOG_WA("SIs still assigned to this SU");
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "SIs still assigned to this SU");
>                       goto done;
>               }
>   
> @@ -1090,7 +1103,8 @@ static void su_admin_op_cb(SaImmOiHandle
>                               goto done;
>                       }
>                       rc = SA_AIS_ERR_TRY_AGAIN;
> -                     LOG_ER("Internal error, could not send message to 
> avnd");
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Internal error, could not send message 
> to avnd");
>                       goto done;
>               } else {
>                       avd_su_admin_state_set(su, 
> SA_AMF_ADMIN_LOCKED_INSTANTIATION);
> @@ -1103,8 +1117,9 @@ static void su_admin_op_cb(SaImmOiHandle
>       case SA_AMF_ADMIN_UNLOCK_INSTANTIATION:
>   
>               if (NULL == su->list_of_comp) {
> -                     LOG_WA("There is no component configured for SU '%s'.", 
> su->name.value);
>                       rc = SA_AIS_ERR_BAD_OPERATION;
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "There is no component configured for 
> SU '%s'.", su->name.value);
>                       goto done;
>               }
>   
> @@ -1119,9 +1134,10 @@ static void su_admin_op_cb(SaImmOiHandle
>               }
>   
>               if (su->saAmfSUPresenceState != SA_AMF_PRESENCE_UNINSTANTIATED) 
> {
> -                     LOG_WA("Can't instantiate '%s', whose presense state is 
> '%u'", su_name->value,
> +                     rc = SA_AIS_ERR_BAD_OPERATION;
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Can't instantiate '%s', whose presense 
> state is '%u'", su_name->value,
>                                       su->saAmfSUPresenceState);
> -                     rc = SA_AIS_ERR_BAD_OPERATION;
>                       goto done;
>               }
>   
> @@ -1142,7 +1158,8 @@ static void su_admin_op_cb(SaImmOiHandle
>                               goto done;
>                       }
>                       rc = SA_AIS_ERR_TRY_AGAIN;
> -                     LOG_ER("Internal error, could not send message to 
> avnd");
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Internal error, could not send message 
> to avnd");
>               } else {
>                       avd_su_admin_state_set(su, SA_AMF_ADMIN_LOCKED);
>                       avd_saImmOiAdminOperationResult(immoi_handle, 
> invocation, SA_AIS_OK);
> @@ -1152,8 +1169,9 @@ static void su_admin_op_cb(SaImmOiHandle
>               break;
>       case SA_AMF_ADMIN_REPAIRED:
>               if (su->saAmfSUOperState == SA_AMF_OPERATIONAL_ENABLED) {
> -                     LOG_NO("Admin repair request for '%s', op state already 
> enabled", su_name->value);
>                       rc = SA_AIS_ERR_NO_OP;
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Admin repair request for '%s', op 
> state already enabled", su_name->value);
>                       goto done;
>               }
>   
> @@ -1165,19 +1183,18 @@ static void su_admin_op_cb(SaImmOiHandle
>                       rc = SA_AIS_OK;
>               }
>               else {
> -                     LOG_WA("Admin op request send failed '%s'", 
> su_name->value);
>                       rc = SA_AIS_ERR_TIMEOUT;
> +                     immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk,
> +                                     "Admin op request send failed '%s'", 
> su_name->value);
>               }
>               break;
>       default:
> -             LOG_ER("Unsupported admin op");
>               rc = SA_AIS_ERR_INVALID_PARAM;
> +             immAdminOperationResult_2(immoi_handle, invocation, rc, 
> &su->pend_cbk, "Unsupported admin op");
>               break;
>       }
>   
>   done:
> -     if (rc != SA_AIS_OK)
> -             avd_saImmOiAdminOperationResult(immoi_handle, invocation, rc);
>   
>       TRACE_LEAVE2("%u", rc);
>   }


------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to