Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-19 Thread Anders Björnerstedt
Hi,

The immsv/README obviously needs an update.

/AndersBj

-Original Message-
From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com] 
Sent: den 18 september 2015 15:27
To: Hung Nguyen D; reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

Hi Hung,

Find my comments inline.


From: Hung Nguyen D
Sent: Thursday, September 17, 2015 12:00 PM
To: Zoran Milinkovic; reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

Hi Zoran,

Please see inline comments below.

Best Regards,

Hùng Nguyễn - DEK Technologies




From: Zoran Milinkovic
Sent: Wednesday, September 16, 2015 9:28PM
To: Neelakanta Reddy
Cc: Opensaf-devel
Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
existing error strings [#744]

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

 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +

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

 osaf/services/saf/immsv/immnd/immnd_init.h |6 +

 4 files changed, 232 insertions(+), 33 deletions(-)





The patch set prefix "IMM:" to all error string that come from IMM.

Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"





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

@@ -38,6 +38,10 @@

 #define IMMND_SEARCH_BUNDLE_SIZE ((MDS_DIRECT_BUF_MAXSIZE / 100) * 90)

 #define IMMND_MAX_SEARCH_RESULT (IMMND_SEARCH_BUNDLE_SIZE / 300)



+// Same strings exists in ImmModel.cc

+#define IMM_VALIDATION_ABORT  "IMM: Validation abort: "

+#define IMM_RESOURCE_ABORT   "IMM: Resource abort: "

+

[Hung] Can we expose these macros to saImmOm_A_2_x.h so that applications can 
use them?



[Zoran] These strings are for internal use, and make them official in public 
headers is not a good idea.

I know that it’s not the best solution to keep the same defined strings in two 
places.

These error string should be described in a document, so that applications use 
the string pattern to distinguish between two kind of aborts.





@@ -7413,14 +7503,23 @@ static void immnd_evt_proc_ccb_finalize(

   memset(&send_evt, '\0', sizeof(IMMSV_EVT));



   send_evt.type = IMMSV_EVT_TYPE_IMMA;

-  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR;

   send_evt.info.imma.info.errRsp.error = err;

+  send_evt.info.imma.info.errRsp.errStrings = NULL;

+

+  if(err == SA_AIS_OK) {

+  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR;

+  } else {

+  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR_2;

+  send_evt.info.imma.info.errRsp.errStrings = 
immModel_ccbGrabErrStrings(cb, evt->info.ccbId);

+  }

[Hung] IMM_ERROR_2 should only be used when there's at least one error string.

We can't make sure that when err is not SA_AIS_OK, there will be at least one 
error string.

Please see immnd_evt_proc_object_create().



[Zoran] I will change this when I push the code



@@ -7768,11 +7871,19 @@ static void immnd_evt_proc_ccb_apply(IMM

   memset(&send_evt, '\0', sizeof(IMMSV_EVT));

   send_evt.type = IMMSV_EVT_TYPE_IMMA;

   send_evt.info.imma.info.errRsp.error = err;

+  send_evt.info.imma.info.errRsp.errStrings = NULL;

   send_evt.info.imma.type = 
IMMA_EVT_ND2A_IMM_ERROR;



+  if(err != SA_AIS_OK) {

+ send_evt.info.imma.type = 
IMMA_EVT_ND2A_IMM_ERROR_2;

+ send_evt.info.imma.info.errRsp.errStrings 
= immModel_ccbGrabErrStrings(cb, evt->info.objDelete.ccbId);

+  }

+

[Hung] The same as immnd_evt_proc_ccb_finalize().



[Zoran] I will change this when I push the code



Thanks,

Zoran


--
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel
--
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-18 Thread Zoran Milinkovic
Hi Hung,

Find my comments inline.


From: Hung Nguyen D
Sent: Thursday, September 17, 2015 12:00 PM
To: Zoran Milinkovic; reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

Hi Zoran,

Please see inline comments below.

Best Regards,

Hùng Nguyễn - DEK Technologies




From: Zoran Milinkovic
Sent: Wednesday, September 16, 2015 9:28PM
To: Neelakanta Reddy
Cc: Opensaf-devel
Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
existing error strings [#744]

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

 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +

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

 osaf/services/saf/immsv/immnd/immnd_init.h |6 +

 4 files changed, 232 insertions(+), 33 deletions(-)





The patch set prefix "IMM:" to all error string that come from IMM.

Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"





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

@@ -38,6 +38,10 @@

 #define IMMND_SEARCH_BUNDLE_SIZE ((MDS_DIRECT_BUF_MAXSIZE / 100) * 90)

 #define IMMND_MAX_SEARCH_RESULT (IMMND_SEARCH_BUNDLE_SIZE / 300)



+// Same strings exists in ImmModel.cc

+#define IMM_VALIDATION_ABORT  "IMM: Validation abort: "

+#define IMM_RESOURCE_ABORT   "IMM: Resource abort: "

+

[Hung] Can we expose these macros to saImmOm_A_2_x.h so that applications can 
use them?



[Zoran] These strings are for internal use, and make them official in public 
headers is not a good idea.

I know that it’s not the best solution to keep the same defined strings in two 
places.

These error string should be described in a document, so that applications use 
the string pattern to distinguish between two kind of aborts.





@@ -7413,14 +7503,23 @@ static void immnd_evt_proc_ccb_finalize(

   memset(&send_evt, '\0', sizeof(IMMSV_EVT));



   send_evt.type = IMMSV_EVT_TYPE_IMMA;

-  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR;

   send_evt.info.imma.info.errRsp.error = err;

+  send_evt.info.imma.info.errRsp.errStrings = NULL;

+

+  if(err == SA_AIS_OK) {

+  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR;

+  } else {

+  send_evt.info.imma.type = IMMA_EVT_ND2A_IMM_ERROR_2;

+  send_evt.info.imma.info.errRsp.errStrings = 
immModel_ccbGrabErrStrings(cb, evt->info.ccbId);

+  }

[Hung] IMM_ERROR_2 should only be used when there's at least one error string.

We can't make sure that when err is not SA_AIS_OK, there will be at least one 
error string.

Please see immnd_evt_proc_object_create().



[Zoran] I will change this when I push the code



@@ -7768,11 +7871,19 @@ static void immnd_evt_proc_ccb_apply(IMM

   memset(&send_evt, '\0', sizeof(IMMSV_EVT));

   send_evt.type = IMMSV_EVT_TYPE_IMMA;

   send_evt.info.imma.info.errRsp.error = err;

+  send_evt.info.imma.info.errRsp.errStrings = NULL;

   send_evt.info.imma.type = 
IMMA_EVT_ND2A_IMM_ERROR;



+  if(err != SA_AIS_OK) {

+ send_evt.info.imma.type = 
IMMA_EVT_ND2A_IMM_ERROR_2;

+ send_evt.info.imma.info.errRsp.errStrings 
= immModel_ccbGrabErrStrings(cb, evt->info.objDelete.ccbId);

+  }

+

[Hung] The same as immnd_evt_proc_ccb_finalize().



[Zoran] I will change this when I push the code



Thanks,

Zoran


--
___
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-17 Thread Hung Nguyen
Hi Zoran,

Please see inline comments below.

Best Regards,

Hùng Nguyễn - DEK Technologies






*From:* Zoran Milinkovic
*Sent:* Wednesday, September 16, 2015 9:28PM
*To:* Neelakanta Reddy
*Cc:* Opensaf-devel
*Subject:* [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

  osaf/services/saf/immsv/immnd/ImmModel.cc  |  129 +++-
  osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
  osaf/services/saf/immsv/immnd/immnd_evt.c  |  125 ++-
  osaf/services/saf/immsv/immnd/immnd_init.h |6 +
  4 files changed, 232 insertions(+), 33 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -35,6 +35,9 @@
  #define CCB_CRIT_THRESHOLD 8 /* See ImmModel::immNotPbeWritable */
  #define SEARCH_TIMEOUT_SEC 600 /* Search timeout */
  
+// Same strings exists in immnd_evt.c
+#define IMM_VALIDATION_ABORT   "IMM: Validation abort: "
+#define IMM_RESOURCE_ABORT "IMM: Resource abort: "
  
  struct ContinuationInfo2
  {
@@ -2145,6 +2148,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
  resourceDisplay(reqparams, rparams, searchcount);
  }
  
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
  /**/
  
  ImmModel::ImmModel() :
@@ -5019,6 +5039,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist",
  ccb->mAdminOwnerId);
  ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "Admin owner does not 
exist");
  } else if(ccb->mState > IMM_CCB_READY) {
  if(ccb->mState == IMM_CCB_VALIDATING) {
  LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5040,6 +5062,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  /* apply callback needs to be sent to 
implementers. */
 err = SA_AIS_ERR_INTERRUPT;
  }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "Completed 
validation failed");
  }
  goto done;
 }
@@ -5070,9 +5094,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
  }
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "Parent is missing");
  } else if(!validateNoDanglingRefs(ccb)) {
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "No dangling 
validation failed");
  } else {
  /* sMissingParents must be empty if err is SA_AIS_OK */
  osafassert(sMissingParents.empty());
@@ -5111,6 +5137,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  "refusing apply", impInfo->mImplementerName.c_str());
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+IMM_RESOURCE_ABORT "Lost connection with 
implementer");
  break;
  }
  //Wait for ack, possibly remote
@@ -5699,7 +5727,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn
 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 "
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB abort due to either "
  "OI t

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-17 Thread Anders Björnerstedt
Ack from me.

Not tested.

/AndersBj

-Original Message-
From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com] 
Sent: den 16 september 2015 16:28
To: reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
existing error strings [#744]

 osaf/services/saf/immsv/immnd/ImmModel.cc  |  129 +++-
 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
 osaf/services/saf/immsv/immnd/immnd_evt.c  |  125 ++-
 osaf/services/saf/immsv/immnd/immnd_init.h |6 +
 4 files changed, 232 insertions(+), 33 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -35,6 +35,9 @@
 #define CCB_CRIT_THRESHOLD 8 /* See ImmModel::immNotPbeWritable */  #define 
SEARCH_TIMEOUT_SEC 600 /* Search timeout */
 
+// Same strings exists in immnd_evt.c
+#define IMM_VALIDATION_ABORT   "IMM: Validation abort: "
+#define IMM_RESOURCE_ABORT "IMM: Resource abort: "
 
 struct ContinuationInfo2
 {
@@ -2145,6 +2148,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
 resourceDisplay(reqparams, rparams, searchcount);  }
 
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
 /**/
 
 ImmModel::ImmModel() : 
@@ -5019,6 +5039,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist", 
 ccb->mAdminOwnerId);
 ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "Admin owner does 
+ not exist");
 } else if(ccb->mState > IMM_CCB_READY) {
 if(ccb->mState == IMM_CCB_VALIDATING) {
 LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5040,6 +5062,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 /* apply callback needs to be sent to 
implementers. */
err = SA_AIS_ERR_INTERRUPT;
 }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT 
+ "Completed validation failed");
 }
 goto done;
}
@@ -5070,9 +5094,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
 }
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "Parent is 
+ missing");
 } else if(!validateNoDanglingRefs(ccb)) {
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "No dangling 
+ validation failed");
 } else {
 /* sMissingParents must be empty if err is SA_AIS_OK */
 osafassert(sMissingParents.empty());
@@ -5111,6 +5137,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 "refusing apply", impInfo->mImplementerName.c_str());
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+IMM_RESOURCE_ABORT "Lost connection with 
+ implementer");
 break;
 }
 //Wait for ack, possibly remote @@ -5699,7 +5727,7 @@ 
ImmModel::ccbAbort(SaUint32T ccbId, Conn
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 "
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB abort due to either "
 "OI timeout or explicit abort request.");
 }
 
@@ -6087,6 +6115,7 @@ ImmModel:

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-16 Thread Zoran Milinkovic
Hi Anders,

The answer to Johan is correct. All error strings are prefixed with "IMM:" 
string. Only error strings for error code SA_AIS_FAILED_OPRATION have prefix 
"IMM: Resource abort" or "IMM: Validation abort".
I made static prefix in the new patch, so the typo will not be possible.

Assertion because of missed error string would be too strict. If an error 
string is missing, then it would be considered as a resource abort. All 
validation aborts are covered.

Thanks,
Zoran

-Original Message-
From: Anders Widell 
Sent: Wednesday, September 02, 2015 1:00 PM
To: Johan Mårtensson O; Zoran Milinkovic; reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

Johan, I guess the abort classification only applies to the case when we return 
SA_AIS_ERR_FAILED_OPERATION, and that is the reason why some error strings have 
neither the "Resource abort" nor the "Validation abort" prefix in the patch 
below? Still I see a potential that this classification is forgotten, in some 
future modification of the code. 
Zoran, would it be possible to add some sort of assertion (or at least a log 
message) that can catch cases where the classification has been forgotten (or 
even the string has been misspelt) in the error string?

/ Anders Widell

On 09/01/2015 10:56 AM, Johan Mårtensson O wrote:
> Hi Zoran,
>
> See comments on the patch below.
>
> / Johan
>
> -Original Message-
> From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com]
> Sent: den 28 augusti 2015 16:07
> To: reddy.neelaka...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
> prefix existing error strings [#744]
>
>   osaf/services/saf/immsv/immnd/ImmModel.cc  |  126 
> +++-
>   osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
>   osaf/services/saf/immsv/immnd/immnd_evt.c  |   48 ++-
>   osaf/services/saf/immsv/immnd/immnd_init.h |6 +
>   4 files changed, 156 insertions(+), 29 deletions(-)
>
>
> The patch set prefix "IMM:" to all error string that come from IMM.
> Based on CCB abort type (resource or validation abort), error strings are 
> prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"
>
> 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
> @@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
>   resourceDisplay(reqparams, rparams, searchcount);  }
>   
> +void
> +immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
> *errorString, ...) {
> +CcbVector::iterator cvi;
> +va_list vl;
> +
> +cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
> +if (cvi == sCcbVector.end()) {
> +/* Cannot find CCB. Error string will be ignored.
> + * This case should never happen. */
> +return;
> +}
> +
> +va_start(vl, errorString);
> +ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
> vl);
> +va_end(vl);
> +}
> +
>   
> /*
> */
>   
>   ImmModel::ImmModel() :
> @@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist",
>   ccb->mAdminOwnerId);
>   ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
> +/* Later in the code, error code will be set to 
> SA_AIS_ERR_FAILED_OPERATION */
> +setCcbErrorString(ccb, "IMM: Resource abort: Admin owner 
> + does not exist");
>   } else if(ccb->mState > IMM_CCB_READY) {
>   if(ccb->mState == IMM_CCB_VALIDATING) {
>   LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
> @@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   /* apply callback needs to be sent to 
> implementers. */
>  err = SA_AIS_ERR_INTERRUPT;
>   }
> +} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
> +setCcbErrorString(ccb, "IMM: Validation abort:
> + Completed validation failed");
>   }
>   goto done;
>  }
> @@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   }
>   err = 

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-16 Thread Zoran Milinkovic
Hi Hung,

I fixed all your comments in the new patch.
Find more details in the email sent to Neelakanta.

Thanks,
Zoran

From: Hung Nguyen [mailto:hung.d.ngu...@dektech.com.au]
Sent: Monday, August 31, 2015 8:51 PM
To: Zoran Milinkovic; reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

Hi Zoran,

I have some inline comments, please see below for details.

Best Regards,

Hung Nguyen

DEK Technologies Vietnam




From: Zoran Milinkovic
Sent: Friday, August 28, 2015 9:06PM
To: Neelakanta Reddy
Cc: Opensaf-devel
Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
existing error strings [#744]

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

 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +

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

 osaf/services/saf/immsv/immnd/immnd_init.h |6 +

 4 files changed, 156 insertions(+), 29 deletions(-)





The patch set prefix "IMM:" to all error string that come from IMM.

Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"



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

@@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,

 resourceDisplay(reqparams, rparams, searchcount);

 }



+void

+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {

+CcbVector::iterator cvi;

+va_list vl;

+

+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));

+if (cvi == sCcbVector.end()) {

+/* Cannot find CCB. Error string will be ignored.

+ * This case should never happen. */

+return;

+}

+

+va_start(vl, errorString);

+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);

+va_end(vl);

+}

+

 /**/



 ImmModel::ImmModel() :

@@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,

 LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist",

 ccb->mAdminOwnerId);

 ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;

+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */

+setCcbErrorString(ccb, "IMM: Resource abort: Admin owner does not 
exist");

 } else if(ccb->mState > IMM_CCB_READY) {

 if(ccb->mState == IMM_CCB_VALIDATING) {

 LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "

@@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,

 /* apply callback needs to be sent to 
implementers. */

err = SA_AIS_ERR_INTERRUPT;

 }

+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {

+setCcbErrorString(ccb, "IMM: Validation abort: 
Completed validation failed");

 }

 goto done;

}

@@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,

 }

 err = SA_AIS_ERR_FAILED_OPERATION;

 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;

+setCcbErrorString(ccb, "IMM: Validation abort: Parent is missing");

 } else if(!validateNoDanglingRefs(ccb)) {

 err = SA_AIS_ERR_FAILED_OPERATION;

 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;

+setCcbErrorString(ccb, "IMM: Validation abort: No dangling 
validation failed");

 } else {

 /* sMissingParents must be empty if err is SA_AIS_OK */

 osafassert(sMissingParents.empty());

@@ -5074,6 +5097,8 @@ ImmModel::ccbApply(SaUint32T ccbId,

 "refusing apply", impInfo->mImplementerName.c_str());

 err = SA_AIS_ERR_FAILED_OPERATION;

 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;

+setCcbErrorString(ccb,

+"IMM: Resource abort: Lost connection with 
implementer");

 break;

 }

 //Wait for ack, possibly remote

@@ -5662,7 +5687,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn

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 "

+setCcbErrorString(ccb, "

[devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-16 Thread Zoran Milinkovic
 osaf/services/saf/immsv/immnd/ImmModel.cc  |  129 +++-
 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
 osaf/services/saf/immsv/immnd/immnd_evt.c  |  125 ++-
 osaf/services/saf/immsv/immnd/immnd_init.h |6 +
 4 files changed, 232 insertions(+), 33 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -35,6 +35,9 @@
 #define CCB_CRIT_THRESHOLD 8 /* See ImmModel::immNotPbeWritable */
 #define SEARCH_TIMEOUT_SEC 600 /* Search timeout */
 
+// Same strings exists in immnd_evt.c
+#define IMM_VALIDATION_ABORT   "IMM: Validation abort: "
+#define IMM_RESOURCE_ABORT "IMM: Resource abort: "
 
 struct ContinuationInfo2
 {
@@ -2145,6 +2148,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
 resourceDisplay(reqparams, rparams, searchcount);
 }
 
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
 /**/
 
 ImmModel::ImmModel() : 
@@ -5019,6 +5039,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist", 
 ccb->mAdminOwnerId);
 ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "Admin owner does not 
exist");
 } else if(ccb->mState > IMM_CCB_READY) {
 if(ccb->mState == IMM_CCB_VALIDATING) {
 LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5040,6 +5062,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 /* apply callback needs to be sent to 
implementers. */
err = SA_AIS_ERR_INTERRUPT;
 }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "Completed 
validation failed");
 }
 goto done;
}
@@ -5070,9 +5094,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
 }
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "Parent is missing");
 } else if(!validateNoDanglingRefs(ccb)) {
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, IMM_VALIDATION_ABORT "No dangling 
validation failed");
 } else {
 /* sMissingParents must be empty if err is SA_AIS_OK */
 osafassert(sMissingParents.empty());
@@ -5111,6 +5137,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 "refusing apply", impInfo->mImplementerName.c_str());
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+IMM_RESOURCE_ABORT "Lost connection with 
implementer");
 break;
 }
 //Wait for ack, possibly remote
@@ -5699,7 +5727,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn
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 "
+setCcbErrorString(ccb, IMM_RESOURCE_ABORT "CCB abort due to either "
 "OI timeout or explicit abort request.");
 }
 
@@ -6087,6 +6115,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
rsp->inv, ccbId);
 if(ccb->mVeto == SA_AIS_OK) {
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+/* Note: This error code is returned to OI. Parent CCB is aborted 
*/
 err = SA_AIS_ERR_BAD_OPERATION;
 }
 goto done;
@@ -6108,6 +6137,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
 TRACE("Ccb %u is already in an error state %u, can not accept 
augmentation",
  ccbId, ccb->mVeto);
 err = SA_AIS_ERR_FAILED_OPERATION; /*ccb->mVeto;*/
+set

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-02 Thread Anders Widell
Johan, I guess the abort classification only applies to the case when we 
return SA_AIS_ERR_FAILED_OPERATION, and that is the reason why some 
error strings have neither the "Resource abort" nor the "Validation 
abort" prefix in the patch below? Still I see a potential that this 
classification is forgotten, in some future modification of the code. 
Zoran, would it be possible to add some sort of assertion (or at least a 
log message) that can catch cases where the classification has been 
forgotten (or even the string has been misspelt) in the error string?

/ Anders Widell

On 09/01/2015 10:56 AM, Johan Mårtensson O wrote:
> Hi Zoran,
>
> See comments on the patch below.
>
> / Johan
>
> -Original Message-
> From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com]
> Sent: den 28 augusti 2015 16:07
> To: reddy.neelaka...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
> existing error strings [#744]
>
>   osaf/services/saf/immsv/immnd/ImmModel.cc  |  126 
> +++-
>   osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
>   osaf/services/saf/immsv/immnd/immnd_evt.c  |   48 ++-
>   osaf/services/saf/immsv/immnd/immnd_init.h |6 +
>   4 files changed, 156 insertions(+), 29 deletions(-)
>
>
> The patch set prefix "IMM:" to all error string that come from IMM.
> Based on CCB abort type (resource or validation abort), error strings are 
> prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"
>
> 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
> @@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
>   resourceDisplay(reqparams, rparams, searchcount);  }
>   
> +void
> +immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
> *errorString, ...) {
> +CcbVector::iterator cvi;
> +va_list vl;
> +
> +cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
> +if (cvi == sCcbVector.end()) {
> +/* Cannot find CCB. Error string will be ignored.
> + * This case should never happen. */
> +return;
> +}
> +
> +va_start(vl, errorString);
> +ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
> vl);
> +va_end(vl);
> +}
> +
>   /**/
>   
>   ImmModel::ImmModel() :
> @@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist",
>   ccb->mAdminOwnerId);
>   ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
> +/* Later in the code, error code will be set to 
> SA_AIS_ERR_FAILED_OPERATION */
> +setCcbErrorString(ccb, "IMM: Resource abort: Admin owner
> + does not exist");
>   } else if(ccb->mState > IMM_CCB_READY) {
>   if(ccb->mState == IMM_CCB_VALIDATING) {
>   LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
> @@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   /* apply callback needs to be sent to 
> implementers. */
>  err = SA_AIS_ERR_INTERRUPT;
>   }
> +} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
> +setCcbErrorString(ccb, "IMM: Validation abort:
> + Completed validation failed");
>   }
>   goto done;
>  }
> @@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   }
>   err = SA_AIS_ERR_FAILED_OPERATION;
>   ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
> +setCcbErrorString(ccb, "IMM: Validation abort: Parent is
> + missing");
>   } else if(!validateNoDanglingRefs(ccb)) {
>   err = SA_AIS_ERR_FAILED_OPERATION;
>   ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
> +setCcbErrorString(ccb, "IMM: Validation abort: No dangling
> + validation failed");
>   } else {
>   /* sMissingParents must be empty if err is SA_AIS_OK */
>   osafassert(sMissingParents.empty());
> @@ -5074,6 +5097,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
>   "refusing apply", 
> impInfo->mImplementerName.c_str());
>   err = SA_AIS_ERR_FAIL

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-09-01 Thread Johan Mårtensson O
Hi Zoran,

See comments on the patch below. 

/ Johan

-Original Message-
From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com] 
Sent: den 28 augusti 2015 16:07
To: reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix 
existing error strings [#744]

 osaf/services/saf/immsv/immnd/ImmModel.cc  |  126 +++-
 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
 osaf/services/saf/immsv/immnd/immnd_evt.c  |   48 ++-
 osaf/services/saf/immsv/immnd/immnd_init.h |6 +
 4 files changed, 156 insertions(+), 29 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
 resourceDisplay(reqparams, rparams, searchcount);  }
 
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
 /**/
 
 ImmModel::ImmModel() : 
@@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist", 
 ccb->mAdminOwnerId);
 ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, "IMM: Resource abort: Admin owner 
+ does not exist");
 } else if(ccb->mState > IMM_CCB_READY) {
 if(ccb->mState == IMM_CCB_VALIDATING) {
 LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 /* apply callback needs to be sent to 
implementers. */
err = SA_AIS_ERR_INTERRUPT;
 }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, "IMM: Validation abort: 
+ Completed validation failed");
 }
 goto done;
}
@@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
 }
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: Parent is 
+ missing");
 } else if(!validateNoDanglingRefs(ccb)) {
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: No dangling 
+ validation failed");
 } else {
 /* sMissingParents must be empty if err is SA_AIS_OK */
 osafassert(sMissingParents.empty());
@@ -5074,6 +5097,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 "refusing apply", impInfo->mImplementerName.c_str());
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+"IMM: Resource abort: Lost connection with 
+ implementer");
 break;
 }
 //Wait for ack, possibly remote @@ -5662,7 +5687,7 @@ 
ImmModel::ccbAbort(SaUint32T ccbId, Conn
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 "
+setCcbErrorString(ccb, "IMM: Resource abort: CCB abort due to either "
 "OI timeout or explicit abort request.");
 }
 
@@ -6050,6 +6075,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
rsp->inv, ccbId);
 if(ccb->mVeto == SA_AIS_OK) {
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+/* Note: This error code is returned to OI. Parent CCB is 
+ aborted */
 err = SA_AIS_ERR_BAD_OPERATION;
 }
 goto do

Re: [devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-08-31 Thread Hung Nguyen
Hi Zoran,

I have some inline comments, please see below for details.

Best Regards,

Hung Nguyen
DEK Technologies Vietnam






*From:*Zoran Milinkovic
*Sent:*Friday, August 28, 2015 9:06PM
*To:*Neelakanta Reddy
*Cc:*Opensaf-devel
*Subject:*[devel] [PATCH 1 of 1] imm: classify abort error strings and 
prefix existing error strings [#744]

  osaf/services/saf/immsv/immnd/ImmModel.cc  |  126 +++-
  osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
  osaf/services/saf/immsv/immnd/immnd_evt.c  |   48 ++-
  osaf/services/saf/immsv/immnd/immnd_init.h |6 +
  4 files changed, 156 insertions(+), 29 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
  resourceDisplay(reqparams, rparams, searchcount);
  }
  
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
  /**/
  
  ImmModel::ImmModel() :
@@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist",
  ccb->mAdminOwnerId);
  ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, "IMM: Resource abort: Admin owner does not 
exist");
  } else if(ccb->mState > IMM_CCB_READY) {
  if(ccb->mState == IMM_CCB_VALIDATING) {
  LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  /* apply callback needs to be sent to 
implementers. */
 err = SA_AIS_ERR_INTERRUPT;
  }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, "IMM: Validation abort: 
Completed validation failed");
  }
  goto done;
 }
@@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
  }
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: Parent is missing");
  } else if(!validateNoDanglingRefs(ccb)) {
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: No dangling 
validation failed");
  } else {
  /* sMissingParents must be empty if err is SA_AIS_OK */
  osafassert(sMissingParents.empty());
@@ -5074,6 +5097,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
  "refusing apply", impInfo->mImplementerName.c_str());
  err = SA_AIS_ERR_FAILED_OPERATION;
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+"IMM: Resource abort: Lost connection with 
implementer");
  break;
  }
  //Wait for ack, possibly remote
@@ -5662,7 +5687,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn
 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 "
+setCcbErrorString(ccb, "IMM: Resource abort: CCB abort due to either "
  "OI timeout or explicit abort request.");
  }
  
@@ -6050,6 +6075,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
 rsp->inv, ccbId);
  if(ccb->mVeto == SA_AIS_OK) {
  ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+/* Note: This error code is returned to OI. Parent CCB is aborted 
*/
  

[devel] [PATCH 1 of 1] imm: classify abort error strings and prefix existing error strings [#744]

2015-08-28 Thread Zoran Milinkovic
 osaf/services/saf/immsv/immnd/ImmModel.cc  |  126 +++-
 osaf/services/saf/immsv/immnd/ImmModel.hh  |5 +
 osaf/services/saf/immsv/immnd/immnd_evt.c  |   48 ++-
 osaf/services/saf/immsv/immnd/immnd_init.h |6 +
 4 files changed, 156 insertions(+), 29 deletions(-)


The patch set prefix "IMM:" to all error string that come from IMM.
Based on CCB abort type (resource or validation abort), error strings are 
prefixed with "IMM: Resource abort:" or "IMM: Validation abort:"

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
@@ -2109,6 +2109,23 @@ immModel_resourceDisplay(IMMND_CB *cb,
 resourceDisplay(reqparams, rparams, searchcount);
 }
 
+void
+immModel_setCcbErrorString(IMMND_CB *cb, SaUint32T ccbId, const char 
*errorString, ...) {
+CcbVector::iterator cvi;
+va_list vl;
+
+cvi = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
+if (cvi == sCcbVector.end()) {
+/* Cannot find CCB. Error string will be ignored.
+ * This case should never happen. */
+return;
+}
+
+va_start(vl, errorString);
+ImmModel::instance(&cb->immModel)->setCcbErrorString(*cvi, errorString, 
vl);
+va_end(vl);
+}
+
 /**/
 
 ImmModel::ImmModel() : 
@@ -4982,6 +4999,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 LOG_NO("ERR_BAD_HANDLE: Admin owner id %u does not exist", 
 ccb->mAdminOwnerId);
 ccb->mVeto = SA_AIS_ERR_BAD_HANDLE;
+/* Later in the code, error code will be set to 
SA_AIS_ERR_FAILED_OPERATION */
+setCcbErrorString(ccb, "IMM: Resource abort: Admin owner does not 
exist");
 } else if(ccb->mState > IMM_CCB_READY) {
 if(ccb->mState == IMM_CCB_VALIDATING) {
 LOG_IN("Ccb <%u> in incorrect state 'CCB_VALIDATING for "
@@ -5003,6 +5022,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 /* apply callback needs to be sent to 
implementers. */
err = SA_AIS_ERR_INTERRUPT;
 }
+} else if(err == SA_AIS_ERR_FAILED_OPERATION) {
+setCcbErrorString(ccb, "IMM: Validation abort: 
Completed validation failed");
 }
 goto done;
}
@@ -5033,9 +5054,11 @@ ImmModel::ccbApply(SaUint32T ccbId,
 }
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: Parent is missing");
 } else if(!validateNoDanglingRefs(ccb)) {
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb, "IMM: Validation abort: No dangling 
validation failed");
 } else {
 /* sMissingParents must be empty if err is SA_AIS_OK */
 osafassert(sMissingParents.empty());
@@ -5074,6 +5097,8 @@ ImmModel::ccbApply(SaUint32T ccbId,
 "refusing apply", impInfo->mImplementerName.c_str());
 err = SA_AIS_ERR_FAILED_OPERATION;
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+setCcbErrorString(ccb,
+"IMM: Resource abort: Lost connection with 
implementer");
 break;
 }
 //Wait for ack, possibly remote
@@ -5662,7 +5687,7 @@ ImmModel::ccbAbort(SaUint32T ccbId, Conn
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 "
+setCcbErrorString(ccb, "IMM: Resource abort: CCB abort due to either "
 "OI timeout or explicit abort request.");
 }
 
@@ -6050,6 +6075,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
rsp->inv, ccbId);
 if(ccb->mVeto == SA_AIS_OK) {
 ccb->mVeto = SA_AIS_ERR_FAILED_OPERATION;
+/* Note: This error code is returned to OI. Parent CCB is aborted 
*/
 err = SA_AIS_ERR_BAD_OPERATION;
 }
 goto done;
@@ -6071,6 +6097,7 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
 TRACE("Ccb %u is already in an error state %u, can not accept 
augmentation",
  ccbId, ccb->mVeto);
 err = SA_AIS_ERR_FAILED_OPERATION; /*ccb->mVeto;*/
+setCcbErrorString(ccb, "IMM: Resource abort: CCB is in an error 
state");
 goto done;
 }
 
@@ -6823,6 +6850,7 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
 LOG_NO("ERR_FAILED_OPERATION: ccb %u is in an error state "
 "rejecting ccbObjectCreate operation ", ccbId);
 err = SA_AIS_ERR_FAILED_OPERATION;