osaf/services/saf/amf/amfd/ndproc.cc | 14 ++++++++++++++
osaf/services/saf/amf/amfd/sgproc.cc | 9 +++++++++
osaf/services/saf/amf/amfd/si.cc | 5 ++---
3 files changed, 25 insertions(+), 3 deletions(-)
As of now, amf return admin op except si swap immediately after admin op is
invoked.
Ideally, amf should first complete csi assignment or csi removal
then only amf should return admin op.
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
@@ -758,6 +758,20 @@ void avd_data_update_req_evh(AVD_CL_CB *
} else if (su->pend_cbk.invocation !=
0) {
su_admin_op_report_to_imm(su,
static_cast<SaAmfPresenceStateT>(l_val));
}
+ if (l_val ==
SA_AMF_PRESENCE_TERMINATION_FAILED) {
+ for (AVD_SI* si =
su->sg_of_su->list_of_si; si != NULL;
+ si =
si->sg_list_of_si_next) {
+ if (si->invocation !=
0) {
+
report_admin_op_error(cb->immOiHandle, si->invocation,
+
SA_AIS_ERR_REPAIR_PENDING,
+
NULL,
+
"SU '%s' moved to 'termination failed' state",
+
su->name.value);
+ si->invocation
= 0;
+ }
+ }
+ }
+
/* send response to pending clm
callback */
if (su->su_on_node->clm_pend_inv != 0)
clm_pend_response(su,
static_cast<SaAmfPresenceStateT>(l_val));
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
@@ -1200,6 +1200,15 @@ void avd_su_si_assign_evh(AVD_CL_CB *cb,
} else
; // wait for SG to become STABLE
}
+ if (su->sg_of_su->sg_fsm_state == AVD_SG_FSM_STABLE){
+ for (AVD_SI* si = su->sg_of_su->list_of_si; si
!= NULL; si = si->sg_list_of_si_next) {
+ if (si->invocation != 0) {
+
avd_saImmOiAdminOperationResult(avd_cb->immOiHandle,
+ si->invocation,
SA_AIS_OK);
+ si->invocation = 0;
+ }
+ }
+ }
}
/* also check for pending clm callback operations */
if (su->su_on_node->clm_pend_inv != 0) {
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
@@ -819,7 +819,7 @@ static void si_admin_op_cb(SaImmOiHandle
si->set_admin_state(SA_AMF_ADMIN_LOCKED);
goto done;
}
-
+ si->invocation = invocation;
break;
case SA_AMF_ADMIN_SHUTDOWN:
@@ -882,6 +882,7 @@ static void si_admin_op_cb(SaImmOiHandle
"SI shutdown/lock of %s failed",
objectName->value);
goto done;
}
+ si->invocation = invocation;
break;
@@ -905,8 +906,6 @@ static void si_admin_op_cb(SaImmOiHandle
goto done;
}
- if ((operationId != SA_AMF_ADMIN_SI_SWAP))
- avd_saImmOiAdminOperationResult(immOiHandle, invocation, rc);
done:
TRACE_LEAVE();
}
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel