Hi Long, As per ticket, issue occurred during si-swap. Please update the ticket with brief analysis so that seeing the ticket one can have idea where the problem occurred. I guess si-swap initiated before AMFD could update to IMM. If that is the case, we should reject the admin operation from si_admin_op_cb() if invocationId is still set in Si.
Thanks, Praveen On 16-Nov-16 4:19 PM, Long HB Nguyen wrote: > osaf/services/saf/amf/amfd/imm.cc | 22 ++++++++++++++++++++++ > osaf/services/saf/amf/amfd/include/imm.h | 2 ++ > osaf/services/saf/amf/amfd/role.cc | 5 +++++ > 3 files changed, 29 insertions(+), 0 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 > @@ -423,6 +423,28 @@ AvdJobDequeueResultT Fifo::execute(const > return ret; > } > > +AvdJobDequeueResultT Fifo::executeAdminResp(const AVD_CL_CB *cb) > +{ > + Job *ajob; > + AvdJobDequeueResultT ret = JOB_EXECUTED; > + > + TRACE_ENTER(); > + > + while ((ajob = peek()) != nullptr) { > + if (dynamic_cast<ImmAdminResponse *>(ajob) != nullptr) { > + ret = ajob->exec(cb); > + } else { > + ajob = dequeue(); > + delete ajob; > + ret = JOB_EXECUTED; > + } > + } > + > + TRACE_LEAVE2("%d", ret); > + > + return ret; > +} > + > // > void Fifo::empty() > { > 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 > @@ -146,6 +146,8 @@ public: > > static AvdJobDequeueResultT execute(const AVD_CL_CB *cb); > > + static AvdJobDequeueResultT executeAdminResp(const AVD_CL_CB *cb); > + > static void empty(); > > static uint32_t size(); > diff --git a/osaf/services/saf/amf/amfd/role.cc > b/osaf/services/saf/amf/amfd/role.cc > --- a/osaf/services/saf/amf/amfd/role.cc > +++ b/osaf/services/saf/amf/amfd/role.cc > @@ -766,6 +766,11 @@ void avd_mds_qsd_role_evh(AVD_CL_CB *cb, > } > > try_again: > + /* Execute admin op jobs before calling saImmOiImplementerClear to avoid > + * SA_AIS_ERR_TIMEOUT > + */ > + Fifo::executeAdminResp(cb); > + > /* Take mutex here to sync with imm reinit thread.*/ > osaf_mutex_lock_ordie(&imm_reinit_mutex); > /* Give up IMM OI implementer role */ > ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel