Hi Hung,

The trace should go in another ticket.
This ticket is for fixing error strings.

Thanks,
Zoran

From: Hung Nguyen [mailto:[email protected]]
Sent: Wednesday, September 30, 2015 6:22 AM
To: Zoran Milinkovic; [email protected]
Cc: [email protected]
Subject: Re: [devel] [PATCH 1 of 1] imm: fix returning error strings when 
ccbObjectApply is called on aborted CCB [#1508]


Hi Zoran,



I still get duplicated 'resource abort' error strings when trying to add a 
delete operation to a aborted CCB.



root@SC1:~# immcfg -c Test test=1

root@SC1:~# immcfg

 > immcfg -c Test test=2

 > (Add SA_NOTIFY to an attribute of class 'Test' to make the ccb abort)

 > immcfg -d test=1

error - saImmOmCcbObjectDelete for 'test=1' FAILED: SA_AIS_ERR_FAILED_OPERATION 
(21)

OI reports: IMM: Resource abort: Class change for class: Test, attr: single

OI reports: IMM: Resource abort: CCB in error state

CCB is aborted





One more minor comment.

It would be great if this trace was moved into the if block together with 
immModel_ccbFinalize()

TRACE_2("CCB APPLY TERMINATING CCB: %u", evt->info.ccbId);





Best Regards,

Hung Nguyen - DEK Technologies


--------------------------------------------------------------------------------

From: Zoran Milinkovic 
[email protected]<mailto:[email protected]>

Sent: Wednesday, September 30, 2015 11:10AM

To: Neelakanta Reddy

    [email protected]<mailto:[email protected]>

Cc: Opensaf-devel

    
[email protected]<mailto:[email protected]>

Subject: [devel] [PATCH 1 of 1] imm: fix returning error strings when 
ccbObjectApply is called on aborted CCB [#1508]





 osaf/services/saf/immsv/immnd/ImmModel.cc |  63 +++++++++++++++++++++++++++++-

 osaf/services/saf/immsv/immnd/immnd_evt.c |   7 ++-

 2 files changed, 66 insertions(+), 4 deletions(-)





The patch provides the fix for returning error string when ccbObjectApply is 
called on aborted CCB.

The patch also contains missing error strings.



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

@@ -4082,6 +4082,8 @@ ImmModel::notCompatibleAtt(const std::st

                                     "class change for class: %s attr: %s. 
Aborting Ccb.",

                                     ccb->mId, omit->first.c_str(), 
className.c_str(),

                                     attName.c_str());

+                                setCcbErrorString(ccb, IMM_RESOURCE_ABORT 
"Class change for class: %s, attr: %s",

+                                    className.c_str(), attName.c_str());

                                 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;

                             } else {

                                 osafassert(ccb->mState == IMM_CCB_CRITICAL);

@@ -5182,6 +5184,22 @@ ImmModel::ccbApply(SaUint32T ccbId,

         osafassert(reqConn==0 || (ccb->mOriginatingConn == reqConn));



         if(!ccb->isOk()) {

+            /* At this point, CCB might already have error string with CCB 
abort reason.

+             * If none CCB abort reason can be found in error strings,

+             * then it's a resource abort.

+            */

+            ImmsvAttrNameList *errStr = ccb->mErrorStrings;

+            while(errStr) {

+                if(strstr(errStr->name.buf, IMM_VALIDATION_ABORT) == 
errStr->name.buf

+                        || strstr(errStr->name.buf, IMM_RESOURCE_ABORT) == 
errStr->name.buf) {

+                    break;

+                }

+                errStr = errStr->next;

+            }

+            if(!errStr) {

+                setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error 
state");

+            }

+

             err = SA_AIS_ERR_FAILED_OPERATION;

         } else if((sImmNodeState == IMM_NODE_LOADING) && 
!sMissingParents.empty()) {

             MissingParentsMap::iterator mpm;

@@ -6235,8 +6253,21 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up

     if(ccb->mVeto != SA_AIS_OK) {

         TRACE("Ccb %u is already in an error state %u, can not accept 
augmentation",

              ccbId, ccb->mVeto);

+

+        /* ccb->mVeto != SA_AIS_OK, error string with abort reason can already 
be set */

+        ImmsvAttrNameList *errStr = ccb->mErrorStrings;

+        while(errStr) {

+            if(strstr(errStr->name.buf, IMM_VALIDATION_ABORT) == 
errStr->name.buf

+                    || strstr(errStr->name.buf, IMM_RESOURCE_ABORT) == 
errStr->name.buf) {

+                break;

+            }

+            errStr = errStr->next;

+        }

+        if(!errStr) {

+            setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error 
state");

+        }

+

         err = SA_AIS_ERR_FAILED_OPERATION; /*ccb->mVeto;*/

-        setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error state");

         goto done;

     }



@@ -6988,8 +7019,21 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im

     if(!ccb->isOk()) {

         LOG_NO("ERR_FAILED_OPERATION: ccb %u is in an error state "

             "rejecting ccbObjectCreate operation ", ccbId);

+

+        /* !ccb->isOk(), error string with abort reason can already be set */

+        ImmsvAttrNameList *errStr = ccb->mErrorStrings;

+        while(errStr) {

+            if(strstr(errStr->name.buf, IMM_VALIDATION_ABORT) == 
errStr->name.buf

+                    || strstr(errStr->name.buf, IMM_RESOURCE_ABORT) == 
errStr->name.buf) {

+                break;

+            }

+            errStr = errStr->next;

+        }

+        if(!errStr) {

+            setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error 
state");

+        }

+

         err = SA_AIS_ERR_FAILED_OPERATION;

-        setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error state");

         goto ccbObjectCreateExit;

     }



@@ -8147,8 +8191,21 @@ ImmModel::ccbObjectModify(const ImmsvOmC

     if(!ccb->isOk()) {

         LOG_NO("ERR_FAILED_OPERATION: ccb %u is in an error state "

             "rejecting ccbObjectModify operation ", ccbId);

+

+        /* !ccb->isOk(), error string with abort reason can already be set */

+        ImmsvAttrNameList *errStr = ccb->mErrorStrings;

+        while(errStr) {

+            if(strstr(errStr->name.buf, IMM_VALIDATION_ABORT) == 
errStr->name.buf

+                    || strstr(errStr->name.buf, IMM_RESOURCE_ABORT) == 
errStr->name.buf) {

+                break;

+            }

+            errStr = errStr->next;

+        }

+        if(!errStr) {

+            setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error 
state");

+        }

+

         err = SA_AIS_ERR_FAILED_OPERATION;

-        setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB is in an error state");

         goto ccbObjectModifyExit;

     }



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

@@ -7572,6 +7572,7 @@ static void immnd_evt_proc_ccb_apply(IMM

        NCS_NODE_ID *pbeNodeIdPtr = NULL;

        SaUint32T pbeId = 0;

        SaUint32T pbeCtn = 0;

+       int bCcbFinalize = 0;

        TRACE_ENTER();

 #if 0 /* Ticket #496  testcase immomtest 6 22 */

        if((evt->info.ccbId == 10)&&(originatedAtThisNd)) {

@@ -7866,7 +7867,7 @@ static void immnd_evt_proc_ccb_apply(IMM

                       osafassert(!client || originatedAtThisNd);

               }

               TRACE_2("CCB APPLY TERMINATING CCB: %u", evt->info.ccbId);

-              immModel_ccbFinalize(cb, evt->info.ccbId);

+              bCcbFinalize = 1;



  immediate_reply:

               if (originatedAtThisNd) {

@@ -7893,6 +7894,10 @@ static void immnd_evt_proc_ccb_apply(IMM

                               
immsv_evt_free_attrNames(send_evt.info.imma.info.errRsp.errStrings);

                       }

               }

+

+              if(bCcbFinalize) {

+                      immModel_ccbFinalize(cb, evt->info.ccbId);

+              }

        }

  done:

        TRACE_LEAVE();



------------------------------------------------------------------------------

_______________________________________________

Opensaf-devel mailing list

[email protected]<mailto:[email protected]>

https://lists.sourceforge.net/lists/listinfo/opensaf-devel

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to