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

Reply via email to