Patch 5 of 5 is similar to the admo-init (((4 of 5) messaging patch.
Also here I would like to see a new type that replace SaNameT with
OCTET_STRING.
Thus a new IMMSV_OI_CCB_UPCALL_RSP_2; type.
But this type is only used locally IMMA<->IMMND so the impact should be
much smaller,
both relative to the base and relative to this version of patch 5 of 5.
/AndersBj
On 04/16/2015 09:20 AM, Hung Nguyen wrote:
> osaf/libs/agents/saf/imma/imma_oi_api.c | 10 ++++-
> osaf/libs/agents/saf/imma/imma_proc.c | 16 ++++++-
> osaf/libs/common/immsv/immsv_evt.c | 47
> ++++++++++++++++++++++++
> osaf/libs/common/immsv/include/immsv_evt.h | 3 +
> osaf/libs/common/immsv/include/immsv_evt_model.h | 1 +
> osaf/services/saf/immsv/immnd/ImmModel.cc | 20 ++++++++-
> osaf/services/saf/immsv/immnd/immnd_evt.c | 17 ++++++++
> 7 files changed, 106 insertions(+), 8 deletions(-)
>
>
> Define new message types: IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3,
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4 and IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2.
>
> Add new member 'stringName' to IMMSV_OI_CCB_UPCALL_RSP.
> 'stringName' is used in new message types.
>
> Clients will use new messages when 'isProto47' is true. Otherwise, old
> messages are used.
>
> ImmModel now has to handle both old and new messages.
> The message type is detected by checking if 'name' member of
> IMMSV_OI_CCB_UPCALL_RSP is empty or not.
>
> diff --git a/osaf/libs/agents/saf/imma/imma_oi_api.c
> b/osaf/libs/agents/saf/imma/imma_oi_api.c
> --- a/osaf/libs/agents/saf/imma/imma_oi_api.c
> +++ b/osaf/libs/agents/saf/imma/imma_oi_api.c
> @@ -3777,11 +3777,17 @@ SaAisErrorT saImmOiAugmentCcbInitialize(
> /* populate the EVT structure */
> memset(&init_evt, 0, sizeof(IMMSV_EVT));
> init_evt.type = IMMSV_EVT_TYPE_IMMND;
> - init_evt.info.immnd.type = IMMND_EVT_A2ND_OI_CCB_AUG_INIT;
> + if (cl_node->isProto47) {
> + init_evt.info.immnd.type = IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2;
> + init_evt.info.immnd.info.ccbUpcallRsp.stringName.buf = (char*)
> osaf_extended_name_borrow(&cbi->name);
> + init_evt.info.immnd.info.ccbUpcallRsp.stringName.size =
> osaf_extended_name_length(&cbi->name) + 1;
> + } else {
> + init_evt.info.immnd.type = IMMND_EVT_A2ND_OI_CCB_AUG_INIT;
> + init_evt.info.immnd.info.ccbUpcallRsp.name = cbi->name;
> + }
> init_evt.info.immnd.info.ccbUpcallRsp.ccbId = ccbId;
> init_evt.info.immnd.info.ccbUpcallRsp.implId = cbi->implId;
> init_evt.info.immnd.info.ccbUpcallRsp.inv = cbi->inv;
> - init_evt.info.immnd.info.ccbUpcallRsp.name = cbi->name;
>
> /* Note that we register using the new OM handle as client for the
> aug-ccb */
> rc = imma_evt_fake_evs(cb, &init_evt, &out_evt, cl_node->syncr_timeout,
> diff --git a/osaf/libs/agents/saf/imma/imma_proc.c
> b/osaf/libs/agents/saf/imma/imma_proc.c
> --- a/osaf/libs/agents/saf/imma/imma_proc.c
> +++ b/osaf/libs/agents/saf/imma/imma_proc.c
> @@ -2613,12 +2613,18 @@ static bool imma_process_callback_info(I
> SaImmHandleT privateAugOmHandle = 0LL;
> memset(&ccbObjDelRpl, 0,
> sizeof(IMMSV_EVT));
> ccbObjDelRpl.type =
> IMMSV_EVT_TYPE_IMMND;
> - ccbObjDelRpl.info.immnd.type =
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP;
> + if (cl_node->isProto47) {
> + ccbObjDelRpl.info.immnd.type =
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3;
> +
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.stringName.buf = (char*)
> osaf_extended_name_borrow(&callback->name);
> +
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.stringName.size =
> osaf_extended_name_length(&callback->name) + 1;
> + } else {
> + ccbObjDelRpl.info.immnd.type =
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP;
> +
> osaf_extended_name_lend(osaf_extended_name_borrow(&(callback->name)),
> &(ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.name));
> + }
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.result = localEr;
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.oi_client_hdl =
> callback->lcl_imm_hdl;
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.ccbId = callback->ccbID;
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.inv = callback->inv;
> -
> osaf_extended_name_lend(osaf_extended_name_borrow(&(callback->name)),
> &(ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.name));
>
> osafassert(m_NCS_LOCK(&cb->cb_lock,
> NCS_LOCK_WRITE) == NCSCC_RC_SUCCESS);
> locked = true;
> @@ -2628,7 +2634,11 @@ static bool imma_process_callback_info(I
>
> if (localEr != SA_AIS_OK) {
> if(errorStr) {
> -
> ccbObjDelRpl.info.immnd.type = IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2;
> + if
> (ccbObjDelRpl.info.immnd.type == IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP) {
> +
> ccbObjDelRpl.info.immnd.type = IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2;
> + } else if
> (ccbObjDelRpl.info.immnd.type == IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) {
> +
> ccbObjDelRpl.info.immnd.type = IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4;
> + }
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.errorString.size =
>
> strlen(errorStr) + 1;
>
> ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.errorString.buf = errorStr;
> diff --git a/osaf/libs/common/immsv/immsv_evt.c
> b/osaf/libs/common/immsv/immsv_evt.c
> --- a/osaf/libs/common/immsv/immsv_evt.c
> +++ b/osaf/libs/common/immsv/immsv_evt.c
> @@ -183,6 +183,9 @@ static const char *immnd_evt_names[] = {
> "IMMND_EVT_A2ND_OBJ_CREATE_2", /* saImmOmCcbObjectCreate_o3 */
> "IMMND_EVT_A2ND_OI_OBJ_CREATE_2", /* saImmOiRtObjectCreate_o3 */
> "IMMND_EVT_D2ND_ADMINIT_2", /* Admin Owner init reply */
> + "IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3", /*CcbObjDelete local Reply */
> + "IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4", /*CcbObjDelete local Reply */
> + "IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2",
> "undefined (high)"
> };
>
> @@ -2005,6 +2008,19 @@ static uint32_t immsv_evt_enc_sublevels(
> if(!immsv_evt_enc_inline_text(__LINE__, o_ub, os)) {
> return NCSCC_RC_OUT_OF_MEM;
> }
> + } else if ((i_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) ||
> + (i_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> + (i_evt->info.immnd.type ==
> IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2)) {
> + IMMSV_OCTET_STRING *os =
> &(i_evt->info.immnd.info.ccbUpcallRsp.stringName);
> + if (!immsv_evt_enc_inline_text(__LINE__, o_ub, os)) {
> + return NCSCC_RC_OUT_OF_MEM;
> + }
> + if (i_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) {
> + os =
> &(i_evt->info.immnd.info.ccbUpcallRsp.errorString);
> + if (!immsv_evt_enc_inline_text(__LINE__, o_ub,
> os)) {
> + return NCSCC_RC_OUT_OF_MEM;
> + }
> + }
> }
> }
>
> @@ -2522,6 +2538,15 @@ static uint32_t immsv_evt_dec_sublevels(
> } else if (o_evt->info.immnd.type == IMMND_EVT_D2ND_ADMINIT_2) {
> IMMSV_OCTET_STRING *os =
> &(o_evt->info.immnd.info.adminitGlobal.i.stringAdminOwnerName);
> immsv_evt_dec_inline_string(i_ub, os);
> + } else if ((o_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) ||
> + (o_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> + (o_evt->info.immnd.type ==
> IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2)) {
> + IMMSV_OCTET_STRING *os =
> &(o_evt->info.immnd.info.ccbUpcallRsp.stringName);
> + immsv_evt_dec_inline_string(i_ub, os);
> + if (o_evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) {
> + os =
> &(o_evt->info.immnd.info.ccbUpcallRsp.errorString);
> + immsv_evt_dec_inline_string(i_ub, os);
> + }
> }
> }
> return NCSCC_RC_SUCCESS;
> @@ -3599,6 +3624,9 @@ static uint32_t immsv_evt_enc_toplevel(I
> case IMMND_EVT_A2ND_PBE_PRTO_DELETES_COMPLETED_RSP:/*Pbe PRTO
> deletes done */
> case IMMND_EVT_A2ND_PBE_PRT_ATTR_UPDATE_RSP:/* Pbe OI rt attr
> update response*/
> case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:/*OI augments CCB inside
> ccb upcall. #1963 */
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3: /*CcbObjDelete
> local Reply */
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4: /*CcbObjDelete
> local Reply */
> + case IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2: /*OI augments CCB
> inside ccb upcall */
> {
> IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 8);
> ncs_encode_64bit(&p8,
> immndevt->info.ccbUpcallRsp.oi_client_hdl);
> @@ -3641,11 +3669,19 @@ static uint32_t immsv_evt_enc_toplevel(I
> break;
> }
> }
> + } else if ((immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2)) {
> + IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4);
> + ncs_encode_32bit(&p8,
> immndevt->info.ccbUpcallRsp.stringName.size);
> + ncs_enc_claim_space(o_ub, 4);
> + /* immndevt->info.ccbUpcallRsp.stringName.buf
> encoded by sublevel */
> }
>
> if((immndevt->type ==
> IMMND_EVT_A2ND_CCB_COMPLETED_RSP_2) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_CREATE_RSP_2) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_MODIFY_RSP_2)) {
> IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4);
> ncs_encode_32bit(&p8,
> immndevt->info.ccbUpcallRsp.errorString.size);
> @@ -5013,6 +5049,9 @@ static uint32_t immsv_evt_dec_toplevel(N
> case IMMND_EVT_A2ND_PBE_PRTO_DELETES_COMPLETED_RSP:/*Pbe PRTO
> deletes done */
> case IMMND_EVT_A2ND_PBE_PRT_ATTR_UPDATE_RSP:/* Pbe OI rt attr
> update response*/
> case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:/*OI augments CCB inside
> ccb upcall. #1963 */
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3: /*CcbObjDelete
> local Reply */
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4: /*CcbObjDelete
> local Reply */
> + case IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2: /*OI augments CCB
> inside ccb upcall */
> {
> IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 8);
> immndevt->info.ccbUpcallRsp.oi_client_hdl =
> ncs_decode_64bit(&p8);
> @@ -5057,11 +5096,19 @@ static uint32_t immsv_evt_dec_toplevel(N
> value[length] = '\0';
> osaf_extended_name_steal(value,
> &immndevt->info.ccbUpcallRsp.name);
> }
> + } else if ((immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2)) {
> + IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub,
> 4);
> + immndevt->info.ccbUpcallRsp.stringName.size =
> ncs_decode_32bit(&p8);
> + ncs_dec_skip_space(i_ub, 4);
> + /* immndevt->info.ccbUpcallRsp.stringName.buf
> decoded by sublevel */
> }
>
> if((immndevt->type ==
> IMMND_EVT_A2ND_CCB_COMPLETED_RSP_2) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_CREATE_RSP_2) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2) ||
> + (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> (immndevt->type ==
> IMMND_EVT_A2ND_CCB_OBJ_MODIFY_RSP_2)) {
> IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub,
> 4);
> immndevt->info.ccbUpcallRsp.errorString.size =
> ncs_decode_32bit(&p8);
> diff --git a/osaf/libs/common/immsv/include/immsv_evt.h
> b/osaf/libs/common/immsv/include/immsv_evt.h
> --- a/osaf/libs/common/immsv/include/immsv_evt.h
> +++ b/osaf/libs/common/immsv/include/immsv_evt.h
> @@ -215,6 +215,9 @@ typedef enum immnd_evt_type {
> IMMND_EVT_A2ND_OI_OBJ_CREATE_2 = 99, /* saImmOiRtObjectCreate_o3 */
>
> IMMND_EVT_D2ND_ADMINIT_2 = 100, /* Admin Owner init reply */
> + IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3 = 101, /*CcbObjDelete local
> Reply */
> + IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4 = 102, /*CcbObjDelete local
> Reply */
> + IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2 = 103, /* Init of OI augmented ccb
> handle */
>
> IMMND_EVT_MAX
> } IMMND_EVT_TYPE;
> diff --git a/osaf/libs/common/immsv/include/immsv_evt_model.h
> b/osaf/libs/common/immsv/include/immsv_evt_model.h
> --- a/osaf/libs/common/immsv/include/immsv_evt_model.h
> +++ b/osaf/libs/common/immsv/include/immsv_evt_model.h
> @@ -288,6 +288,7 @@ extern "C" {
> SaAisErrorT result;
> SaNameT name;
> IMMSV_OCTET_STRING errorString;
> + IMMSV_OCTET_STRING stringName;
> } IMMSV_OI_CCB_UPCALL_RSP;
>
> typedef struct ImmsvSyncFevsBase {
> diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc
> b/osaf/services/saf/immsv/immnd/ImmModel.cc
> --- a/osaf/services/saf/immsv/immnd/ImmModel.cc
> +++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
> @@ -5985,10 +5985,17 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
> ObjectMutationMap::iterator omuti;
> ObjectInfo* obj = NULL;
> ObjectMap::iterator oi;
> + std::string objectName;
>
> TRACE_ENTER();
> /*Note: objectName is parent-name for the create case! */
> - std::string objectName(osaf_extended_name_borrow(&rsp->name));
> + if (osaf_is_extended_name_empty(&rsp->name)) {
> + /* This must be IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2 */
> + const IMMSV_OCTET_STRING *os = &rsp->stringName;
> + objectName = std::string((const char*) os->buf, strnlen((const
> char*) os->buf, (size_t) os->size));
> + } else {
> + objectName = std::string(osaf_extended_name_borrow(&rsp->name));
> + }
> osafassert(nameCheck(objectName)||nameToInternal(objectName));
>
> i = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
> @@ -9640,12 +9647,19 @@ ImmModel::ccbObjDelContinuation(immsv_oi
> SaUint32T* reqConn, bool* augDelete)
> {
> TRACE_ENTER();
> - std::string objectName(osaf_extended_name_borrow(&rsp->name));
> -
> + std::string objectName;
> SaUint32T ccbId = rsp->ccbId;
> CcbInfo* ccb = 0;
> CcbVector::iterator i1;
>
> + if (osaf_is_extended_name_empty(&rsp->name)) {
> + /* This must be IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3 or
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4 */
> + const IMMSV_OCTET_STRING *os = &rsp->stringName;
> + objectName = std::string((const char*) os->buf, strnlen((const
> char*) os->buf, (size_t) os->size));
> + } else {
> + objectName = std::string(osaf_extended_name_borrow(&rsp->name));
> + }
> +
> i1 = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
> if(i1 == sCcbVector.end() || (!(*i1)->isActive()) ) {
> TRACE_5("ccb id %u missing or terminated in delete processing",
> ccbId);
> diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c
> b/osaf/services/saf/immsv/immnd/immnd_evt.c
> --- a/osaf/services/saf/immsv/immnd/immnd_evt.c
> +++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
> @@ -484,6 +484,17 @@ uint32_t immnd_evt_destroy(IMMSV_EVT *ev
>
> free(evt->info.immnd.info.adminitGlobal.i.stringAdminOwnerName.buf);
> evt->info.immnd.info.adminitGlobal.i.stringAdminOwnerName.buf =
> NULL;
> evt->info.immnd.info.adminitGlobal.i.stringAdminOwnerName.size
> = 0;
> + } else if ((evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3) ||
> + (evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4) ||
> + (evt->info.immnd.type ==
> IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2)) {
> + free(evt->info.immnd.info.ccbUpcallRsp.stringName.buf);
> + evt->info.immnd.info.ccbUpcallRsp.stringName.buf = NULL;
> + evt->info.immnd.info.ccbUpcallRsp.stringName.size = 0;
> + if ((evt->info.immnd.type ==
> IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4)) {
> + free(evt->info.immnd.info.ccbUpcallRsp.errorString.buf);
> + evt->info.immnd.info.ccbUpcallRsp.errorString.buf =
> NULL;
> + evt->info.immnd.info.ccbUpcallRsp.errorString.size = 0;
> + }
> }
>
> if (onheap) {
> @@ -3217,6 +3228,7 @@ static SaAisErrorT immnd_fevs_local_chec
> case IMMND_EVT_A2ND_OBJ_DELETE:
> case IMMND_EVT_A2ND_CCB_FINALIZE:
> case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:
> + case IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2:
> case IMMND_EVT_A2ND_AUG_ADMO:
> if(immModel_pbeNotWritable(cb)) {
> error = SA_AIS_ERR_TRY_AGAIN;
> @@ -3536,6 +3548,8 @@ static SaAisErrorT immnd_fevs_local_chec
> case IMMND_EVT_A2ND_PBE_PRT_ATTR_UPDATE_RSP:
> case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP:
> case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2:
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3:
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4:
> if(fevsReq->sender_count != 0x0) {
> LOG_WA("ERR_LIBRARY: fevsReq->sender_count != 0x0 for
> OI response type:%u",
> frwrd_evt.info.immnd.type);
> @@ -7981,6 +7995,7 @@ immnd_evt_proc_fevs_dispatch(IMMND_CB *c
> break;
>
> case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:
> + case IMMND_EVT_A2ND_OI_CCB_AUG_INIT_2:
> immnd_evt_ccb_augment_init(cb, &frwrd_evt.info.immnd,
> originatedAtThisNd, clnt_hdl, reply_dest);
> break;
>
> @@ -8054,6 +8069,8 @@ immnd_evt_proc_fevs_dispatch(IMMND_CB *c
>
> case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP:
> case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2:
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_3:
> + case IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_4:
> immnd_evt_proc_ccb_obj_delete_rsp(cb, &frwrd_evt.info.immnd,
> originatedAtThisNd, clnt_hdl, reply_dest);
> break;
>
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel