Ack from me. Reviewed, but not tested. Best regards, Zoran
-----Original Message----- From: Anders Björnerstedt Sent: Wednesday, May 20, 2015 11:57 PM To: [email protected]; Zoran Milinkovic Cc: [email protected] Subject: [PATCH 1 of 1] IMM: Correction to support for admin-op for aborting non critical ccbs [#1107] osaf/services/saf/immsv/immnd/ImmModel.cc | 34 ++++++++++++++++++++---------- 1 files changed, 23 insertions(+), 11 deletions(-) The original fix only worked for aborting CCBs where there was an OI actively involved in processing a ccb callback at the time of the admin-op. It did not work for the case where the CCB was currently idle, i.e. waiting for the next operation from the om-client and OIs waiting for the next callback corrsponding to the next om-request. 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 @@ -351,7 +351,7 @@ struct CcbInfo SaAisErrorT mVeto; //SA_AIS_OK as long as no "participan" voted error. time_t mWaitStartTime; SaUint32T mOpCount; - SaUint32T mPbeRestartId; + SaUint32T mPbeRestartId; /* ImplId for new PBE to resolve CCBs in critical */ ImplementerSet mLocalAppliers; ImmsvAttrNameList* mErrorStrings;/*Error strings generated by current op */ AugCcbParent* mAugCcbParent; @@ -5634,7 +5634,19 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn *client = ccb->mOriginatingConn; ccb->mState = IMM_CCB_ABORTED; - ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION; + if(ccb->mVeto == SA_AIS_OK) { + /* An abort of a CCB currently not vetoed is most likely due to + either OI-timeout, or explicit abort by the om-client, or + abort by special admin-operation. All such cases must be + regarded as a resource error rather than a validation error. + Only an explicit reject of a ccb from an OI can be defined as + a validation error. Explicit abort by om-client or admin-op is + not really any error at all, but mVeto should not be SA_AIS_OK. + */ + ccb->mVeto = SA_AIS_ERR_NO_RESOURCES; + setCcbErrorString(ccb, "Resource Error: CCB abort due to either " + "OI timeout or explicit abort request."); + } ccb->mWaitStartTime = 0; @@ -12504,10 +12516,12 @@ ImmModel::cleanTheBasement(InvocVector& } uint32_t oi_timeout = ((*i3)->mState == IMM_CCB_CRITICAL) ? DEFAULT_TIMEOUT_SEC : max_oi_timeout; - if(((*i3)->mWaitStartTime && - (now - (*i3)->mWaitStartTime >= (int)oi_timeout)) || - ((*i3)->mPbeRestartId)) { - if((*i3)->mPbeRestartId) { + if(((*i3)->mWaitStartTime && (now - (*i3)->mWaitStartTime >= (int)oi_timeout)) || /* normal timeout */ + ((*i3)->mPbeRestartId) || /* CCB was critical when PBE restarted => Must ask new PBE for outcome */ + sAbortNonCriticalCcbs) /* Request to abort ALL non critical CCBs */ + { + if((*i3)->mPbeRestartId) + { oi_timeout = 0; TRACE_5("PBE restarted id:%u with ccb:%u in critical", (*i3)->mPbeRestartId, (*i3)->mId); @@ -12515,15 +12529,11 @@ ImmModel::cleanTheBasement(InvocVector& oi_timeout = 0; TRACE_5("CCB %u timeout while waiting on implementer reply", (*i3)->mId); - setCcbErrorString(*i3, "Resource Error: CCB timeout while " - "waiting on implementer reply"); } if(sAbortNonCriticalCcbs) { LOG_NO("CCB %u aborted by: immadm -o %u safRdn=immManagement,safApp=safImmService", (*i3)->mId, SA_IMM_ADMIN_ABORT_CCBS); - setCcbErrorString(*i3, "Resource Error: CCB aborted by admin-operation" - " '%u' on safRdn=immManagement,safApp=safImmService", SA_IMM_ADMIN_ABORT_CCBS); } if((*i3)->mState == IMM_CCB_CRITICAL) { @@ -12543,7 +12553,9 @@ ImmModel::cleanTheBasement(InvocVector& ccbsStuck=1; } } else if(!oi_timeout) { - // oi_timeout set to 0 means that the ccb should be added to the vector + /* oi_timeout set to 0 means that the ccb should be added to the vector. + CCB will be aborted only after the global abort generated here by the coord + arrives back over fevs.*/ ccbs.push_back((*i3)->mId); /*Non critical ccb to abort.*/ } } ------------------------------------------------------------------------------ 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
