Hi Hung,

Reviewed the patch. Ack from me with a minor comment.

IMM CCB error strings are usually reported in format like "IMM: <error>: ....".
Please add error after "IMM: " before you push the code.

Thanks,
Zoran

-----Original Message-----
From: Hung Nguyen [mailto:[email protected]] 
Sent: den 21 april 2017 08:45
To: Zoran Milinkovic <[email protected]>; 
[email protected]
Cc: [email protected]; Hung Duc Nguyen 
<[email protected]>
Subject: [PATCH 1/1] imm: Add more details to no dangling CcbErrorString [#2433]

Add more details to no dangling CcbErrorString.
---
 src/imm/immnd/ImmModel.cc | 50 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc
index 35c8a31..7afce0f 100644
--- a/src/imm/immnd/ImmModel.cc
+++ b/src/imm/immnd/ImmModel.cc
@@ -5401,6 +5401,9 @@ bool ImmModel::validateNoDanglingRefsModify(CcbInfo* ccb,
               LOG_NO(
                   "ERR_FAILED_OPERATION: NO_DANGLING reference (%s) is 
dangling (Ccb %u)",
                   av->getValueC_str(), ccb->mId);
+              setCcbErrorString(ccb,
+                                "IMM: Object %s has dangling reference (%s)",
+                                omit->first.c_str(), av->getValueC_str());
               TRACE_LEAVE();
               return false;
             }
@@ -5416,6 +5419,9 @@ bool ImmModel::validateNoDanglingRefsModify(CcbInfo* ccb,
                     "ERR_FAILED_OPERATION: NO_DANGLING Reference (%s) "
                     "refers to a non-persistent RTO (Ccb %u)",
                     av->getValueC_str(), ccb->mId);
+                setCcbErrorString(
+                    ccb, "IMM: Object %s refers to a non-persistent RTO (%s)",
+                    omit->first.c_str(), av->getValueC_str());
                 TRACE_LEAVE();
                 return false;
               }
@@ -5429,6 +5435,10 @@ bool ImmModel::validateNoDanglingRefsModify(CcbInfo* ccb,
                     "refers to object flagged for delete by another Ccb: %u, 
(this Ccb %u)",
                     av->getValueC_str(), omi->second->mCcbId, ccb->mId);
               }
+              setCcbErrorString(
+                  ccb,
+                  "IMM: Object %s refers to object flagged for deletion (%s)",
+                  omit->first.c_str(), av->getValueC_str());
               TRACE_LEAVE();
               return false;
             }
@@ -5438,6 +5448,10 @@ bool ImmModel::validateNoDanglingRefsModify(CcbInfo* ccb,
                   "ERR_FAILED_OPERATION: NO_DANGLING reference (%s) "
                   "refers to object flagged for create by another CCB: %u, 
(this Ccb %u)",
                   av->getValueC_str(), omi->second->mCcbId, ccb->mId);
+              setCcbErrorString(
+                  ccb,
+                  "IMM: Object %s refers to object flagged for creation in 
another CCB (%s)",
+                  omit->first.c_str(), av->getValueC_str());
               TRACE_LEAVE();
               return false;
             }
@@ -5500,6 +5514,10 @@ bool ImmModel::validateNoDanglingRefsDelete(CcbInfo* ccb,
           "ERR_FAILED_OPERATION: Delete of object %s would violate NO_DANGLING 
reference "
           "from object %s, not scheduled for delete by this Ccb:%u",
           omit->first.c_str(), objName.c_str(), ccb->mId);
+      setCcbErrorString(ccb,
+                        "IMM: Object %s is currently reffered by object %s, "
+                        "not scheduled for deletion by this CCB",
+                        omit->first.c_str(), objName.c_str());
       rc = false;
       break;
     }
@@ -5510,6 +5528,10 @@ bool ImmModel::validateNoDanglingRefsDelete(CcbInfo* ccb,
           "ERR_FAILED_OPERATION: Delete of object %s would violate NO_DANGLING 
reference "
           "from object %s, scheduled for delete by another Ccb:%u (this 
Ccb:%u)",
           omit->first.c_str(), objName.c_str(), ommi->second->mCcbId, 
ccb->mId);
+      setCcbErrorString(ccb,
+                        "IMM: Object %s is currently reffered by object %s, "
+                        "scheduled for deletion by another CCB",
+                        omit->first.c_str(), objName.c_str());
       rc = false;
       break;
     }
@@ -8437,6 +8459,10 @@ SaAisErrorT ImmModel::ccbObjectCreate(
                         "refers to a non persistent RTO %s (Ccb %u)",
                         objectName.c_str(), i4->first.c_str(),
                         attrVal->getValueC_str(), ccbId);
+                    setCcbErrorString(
+                        ccb,
+                        "IMM: Object %s refers to a non-persistent RTO (%s)",
+                        objectName.c_str(), attrVal->getValueC_str());
                     err = SA_AIS_ERR_INVALID_PARAM;
                     break;
                   }
@@ -8449,6 +8475,10 @@ SaAisErrorT ImmModel::ccbObjectCreate(
                         "refers to object %s that will be deleted in same Ccb 
(Ccb %u)",
                         objectName.c_str(), i4->first.c_str(),
                         attrVal->getValueC_str(), ccbId);
+                    setCcbErrorString(
+                        ccb,
+                        "IMM: Object %s refers to object flagged for deletion 
in the same CCB (%s)",
+                        objectName.c_str(), attrVal->getValueC_str());
                     err = SA_AIS_ERR_BAD_OPERATION;
                     break;
                   } else {
@@ -8457,6 +8487,10 @@ SaAisErrorT ImmModel::ccbObjectCreate(
                         "object %s flagged for deletion in other Ccb (%u), 
this (Ccb %u)",
                         objectName.c_str(), i4->first.c_str(),
                         attrVal->getValueC_str(), omi->second->mCcbId, ccbId);
+                    setCcbErrorString(
+                        ccb,
+                        "IMM: Object %s refers to object flagged for deletion 
in another CCB (%s)",
+                        objectName.c_str(), attrVal->getValueC_str());
                     err = SA_AIS_ERR_BUSY;
                     break;
                   }
@@ -8469,6 +8503,10 @@ SaAisErrorT ImmModel::ccbObjectCreate(
                         "object %s flagged for creation in other ccb (%u), 
this (Ccb %u)",
                         objectName.c_str(), i4->first.c_str(),
                         attrVal->getValueC_str(), omi->second->mCcbId, ccbId);
+                    setCcbErrorString(
+                        ccb,
+                        "IMM: Object %s refers to object flagged for creation 
in another CCB (%s)",
+                        objectName.c_str(), attrVal->getValueC_str());
                     err = SA_AIS_ERR_BUSY;
                     break;
                   }
@@ -10449,6 +10487,9 @@ SaAisErrorT ImmModel::deleteObject(ObjectMap::iterator& 
oi, SaUint32T reqConn,
                   "ERR_BAD_OPERATION: PRTO %s can't be deleted by Ccb(%u) "
                   "because another object %s has a NO_DANGLING reference to 
it",
                   oi->first.c_str(), ccb->mId, objName.c_str());
+              setCcbErrorString(ccb, "IMM: PRTO %s is referred by object %s "
+                                "not scheduled for deletion by this CCB",
+                                oi->first.c_str(), objName.c_str());
               return SA_AIS_ERR_BAD_OPERATION;
             }
           }
@@ -10474,6 +10515,9 @@ SaAisErrorT ImmModel::deleteObject(ObjectMap::iterator& 
oi, SaUint32T reqConn,
                 "is scheduled to be deleted in another Ccb(%u), this Ccb(%u)",
                 objName.c_str(), oi->first.c_str(), ommi->second->mCcbId,
                 ccb->mId);
+            setCcbErrorString(ccb, "IMM: Object %s refers to object %s "
+                              "and is flagged for deletion in another CCB",
+                              objName.c_str(), oi->first.c_str());
             return SA_AIS_ERR_BUSY;
           }
         } else if (ommi->second->mObjFlags & IMM_CREATE_LOCK) {
@@ -10484,6 +10528,9 @@ SaAisErrorT ImmModel::deleteObject(ObjectMap::iterator& 
oi, SaUint32T reqConn,
                 "ERR_BAD_OPERATION: Created object %s with NO_DANGLING 
reference to object %s "
                 "flagged for deletion in the same Ccb(%u) is not allowed",
                 objName.c_str(), oi->first.c_str(), ccb->mId);
+            setCcbErrorString(ccb, "IMM: Object %s refers to object %s "
+                              "and is flagged for creation in this CCB",
+                              objName.c_str(), oi->first.c_str());
             return SA_AIS_ERR_BAD_OPERATION;
           } else {
             LOG_IN(
@@ -10491,6 +10538,9 @@ SaAisErrorT ImmModel::deleteObject(ObjectMap::iterator& 
oi, SaUint32T reqConn,
                 "flagged for deletion is not created in the same Ccb(%u), this 
Ccb(%u)",
                 objName.c_str(), oi->first.c_str(), ommi->second->mCcbId,
                 ccb->mId);
+            setCcbErrorString(ccb, "IMM: Object %s refers to object %s "
+                              "and is flagged for creation in another CCB",
+                              objName.c_str(), oi->first.c_str());
             return SA_AIS_ERR_BUSY;
           }
         }
-- 
2.7.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to