Re: [devel] [PATCH 1 of 3] IMM: API support for NO_DANGLING flag [#49]

2013-12-06 Thread Hans Feldt
Aren't the checks in imma redundant? The same ones seems to be done in the 
server.
/Hans

 -Original Message-
 From: Zoran Milinkovic [mailto:zoran.milinko...@ericsson.com]
 Sent: den 5 december 2013 16:05
 To: reddy.neelaka...@oracle.com
 Cc: opensaf-devel@lists.sourceforge.net
 Subject: [devel] [PATCH 1 of 3] IMM: API support for NO_DANGLING flag [#49]
 
  osaf/libs/agents/saf/imma/imma_om_api.c   |  36 +--
  osaf/libs/common/immsv/include/immpbe_dump.hh |   2 +-
  osaf/libs/common/immsv/include/immsv_api.h|   9 
  osaf/libs/saf/include/Makefile.am |   3 +-
  osaf/libs/saf/include/saImmOm_A_2_12.h|   2 +
  osaf/libs/saf/include/saImmOm_A_2_13.h|  60 
 +++
  osaf/libs/saf/libSaImm/Makefile.am|   2 +-
  7 files changed, 106 insertions(+), 8 deletions(-)
 
 
 IMM API support for reference integrity (NO_DANGLING flag)
 
 diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c 
 b/osaf/libs/agents/saf/imma/imma_om_api.c
 --- a/osaf/libs/agents/saf/imma/imma_om_api.c
 +++ b/osaf/libs/agents/saf/imma/imma_om_api.c
 @@ -4173,7 +4173,7 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
   for (i = 0; attr != 0; attr = attrDefinitions[++i]) {
   if (attr-attrName == NULL)  {
   TRACE(NULL attrName , not allowed.);
 - TRACE_LEAVE();
 + TRACE_LEAVE();
   return SA_AIS_ERR_INVALID_PARAM;
   }
 
 @@ -4181,21 +4181,47 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
   if(((attr-attrValueType != SA_IMM_ATTR_SANAMET ) 
   (attr-attrValueType != 
 SA_IMM_ATTR_SASTRINGT))) {
   TRACE(ERR_INVALID_PARAM: RDN '%s' must be of 
 type SaNameT or SaStringT, attr-attrName);
 - TRACE_LEAVE();
 + TRACE_LEAVE();
   return SA_AIS_ERR_INVALID_PARAM;
   }
 
   if(attr-attrFlags  SA_IMM_ATTR_MULTI_VALUE) {
   TRACE(ERR_INVALID_PARAM: RDN '%s' can not be 
 multivalued, attr-attrName);
   TRACE_LEAVE();
 -  return SA_AIS_ERR_INVALID_PARAM;
 - }
 + return SA_AIS_ERR_INVALID_PARAM;
 + }
 +
 + if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
 + TRACE(ERR_INVALID_PARAM: RDN '%s' can not have 
 NO_DANGLING flag, attr-attrName);
 + TRACE_LEAVE();
 + return SA_AIS_ERR_INVALID_PARAM;
 + }
 + }
 +
 + if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
 + if(classCategory == SA_IMM_CLASS_RUNTIME) {
 + TRACE(ERR_INVALID_PARAM: NO_DANGLING attribute 
 '%s' cannot be defined for runtime class,
 attr-attrName);
 + TRACE_LEAVE();
 + return SA_AIS_ERR_INVALID_PARAM;
 + }
 +
 + if(attr-attrValueType != SA_IMM_ATTR_SANAMET) {
 + TRACE(ERR_INVALID_PARAM: Attribute '%s' is 
 flagged NO_DANGLING, must be of type SaNameT,
 attr-attrName);
 + TRACE_LEAVE();
 + return SA_AIS_ERR_INVALID_PARAM;
 + }
 +
 + if(attr-attrFlags  SA_IMM_ATTR_RUNTIME) {
 + TRACE(ERR_INVALID_PARAM: Runtime attribute 
 '%s' cannot have NO_DANGLING flag, attr-
 attrName);
 + TRACE_LEAVE();
 + return SA_AIS_ERR_INVALID_PARAM;
 + }
   }
   }
 
   if (cb-is_immnd_up == false) {
   TRACE_2(ERR_TRY_AGAIN: IMMND is DOWN);
 -TRACE_LEAVE();
 + TRACE_LEAVE();
   return SA_AIS_ERR_TRY_AGAIN;
   }
 
 diff --git a/osaf/libs/common/immsv/include/immpbe_dump.hh 
 b/osaf/libs/common/immsv/include/immpbe_dump.hh
 --- a/osaf/libs/common/immsv/include/immpbe_dump.hh
 +++ b/osaf/libs/common/immsv/include/immpbe_dump.hh
 @@ -31,7 +31,7 @@
 
  #define RELEASE_CODE 'A'
  #define MAJOR_VERSION 2
 -#define MINOR_VERSION 12
 +#define MINOR_VERSION 13
 
  /* Prototypes */
  typedef std::mapstd::string, SaImmAttrFlagsT AttrMap;
 diff --git a/osaf/libs/common/immsv/include/immsv_api.h 
 b/osaf/libs/common/immsv/include/immsv_api.h
 --- a/osaf/libs/common/immsv/include/immsv_api.h
 +++ b/osaf/libs/common/immsv/include/immsv_api.h
 @@ -76,6 +76,15 @@ extern C {
  #define OPENSAF_IMM_REPL_B_NAME @OpenSafImmReplicatorB
 
  /* Used internally in the SaImmCcbFlagsT space to indicate that
 +   a ccb currently contains at lest one operation that either
 +   a) creates an object

[devel] [PATCH 1 of 3] IMM: API support for NO_DANGLING flag [#49]

2013-12-05 Thread Zoran Milinkovic
 osaf/libs/agents/saf/imma/imma_om_api.c   |  36 +--
 osaf/libs/common/immsv/include/immpbe_dump.hh |   2 +-
 osaf/libs/common/immsv/include/immsv_api.h|   9 
 osaf/libs/saf/include/Makefile.am |   3 +-
 osaf/libs/saf/include/saImmOm_A_2_12.h|   2 +
 osaf/libs/saf/include/saImmOm_A_2_13.h|  60 +++
 osaf/libs/saf/libSaImm/Makefile.am|   2 +-
 7 files changed, 106 insertions(+), 8 deletions(-)


IMM API support for reference integrity (NO_DANGLING flag)

diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c 
b/osaf/libs/agents/saf/imma/imma_om_api.c
--- a/osaf/libs/agents/saf/imma/imma_om_api.c
+++ b/osaf/libs/agents/saf/imma/imma_om_api.c
@@ -4173,7 +4173,7 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
for (i = 0; attr != 0; attr = attrDefinitions[++i]) {
if (attr-attrName == NULL)  {
TRACE(NULL attrName , not allowed.);
-   TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
}
 
@@ -4181,21 +4181,47 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
if(((attr-attrValueType != SA_IMM_ATTR_SANAMET )  
(attr-attrValueType != 
SA_IMM_ATTR_SASTRINGT))) {
TRACE(ERR_INVALID_PARAM: RDN '%s' must be of 
type SaNameT or SaStringT, attr-attrName);
-   TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
}
 
if(attr-attrFlags  SA_IMM_ATTR_MULTI_VALUE) {
TRACE(ERR_INVALID_PARAM: RDN '%s' can not be 
multivalued, attr-attrName);
TRACE_LEAVE();
-return SA_AIS_ERR_INVALID_PARAM;
-   }
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
+   TRACE(ERR_INVALID_PARAM: RDN '%s' can not have 
NO_DANGLING flag, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
+   if(classCategory == SA_IMM_CLASS_RUNTIME) {
+   TRACE(ERR_INVALID_PARAM: NO_DANGLING attribute 
'%s' cannot be defined for runtime class, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrValueType != SA_IMM_ATTR_SANAMET) {
+   TRACE(ERR_INVALID_PARAM: Attribute '%s' is 
flagged NO_DANGLING, must be of type SaNameT, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_RUNTIME) {
+   TRACE(ERR_INVALID_PARAM: Runtime attribute 
'%s' cannot have NO_DANGLING flag, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
}
}
 
if (cb-is_immnd_up == false) {
TRACE_2(ERR_TRY_AGAIN: IMMND is DOWN);
-TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_TRY_AGAIN;
}
 
diff --git a/osaf/libs/common/immsv/include/immpbe_dump.hh 
b/osaf/libs/common/immsv/include/immpbe_dump.hh
--- a/osaf/libs/common/immsv/include/immpbe_dump.hh
+++ b/osaf/libs/common/immsv/include/immpbe_dump.hh
@@ -31,7 +31,7 @@
 
 #define RELEASE_CODE 'A'
 #define MAJOR_VERSION 2
-#define MINOR_VERSION 12
+#define MINOR_VERSION 13
 
 /* Prototypes */
 typedef std::mapstd::string, SaImmAttrFlagsT AttrMap;
diff --git a/osaf/libs/common/immsv/include/immsv_api.h 
b/osaf/libs/common/immsv/include/immsv_api.h
--- a/osaf/libs/common/immsv/include/immsv_api.h
+++ b/osaf/libs/common/immsv/include/immsv_api.h
@@ -76,6 +76,15 @@ extern C {
 #define OPENSAF_IMM_REPL_B_NAME @OpenSafImmReplicatorB
 
 /* Used internally in the SaImmCcbFlagsT space to indicate that
+   a ccb currently contains at lest one operation that either
+   a) creates an object with no dangling attribute(s) (that is/are not empty).
+   b) deletes an object that has no dangling attribute(s) (that are not empty).
+   c) modifies a NO_DANGLING attribute,
+   d) deletes an object that is referred to by some NO_DANGLING attribute.
+*/
+#define OPENSAF_IMM_CCB_NO_DANGLING_MUTATE 0x4000
+
+/* Used internally in the SaImmCcbFlagsT space to indicate that
a ccb 

[devel] [PATCH 1 of 3] IMM: API support for NO_DANGLING flag [#49]

2013-11-22 Thread Zoran Milinkovic
 osaf/libs/agents/saf/imma/imma_om_api.c   |  36 +--
 osaf/libs/common/immsv/include/immpbe_dump.hh |   2 +-
 osaf/libs/saf/include/Makefile.am |   3 +-
 osaf/libs/saf/include/saImmOm_A_2_12.h|   2 +
 osaf/libs/saf/include/saImmOm_A_2_13.h|  60 +++
 osaf/libs/saf/libSaImm/Makefile.am|   2 +-
 6 files changed, 97 insertions(+), 8 deletions(-)


IMM API support for reference integrity (NO_DANGLING flag)

diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c 
b/osaf/libs/agents/saf/imma/imma_om_api.c
--- a/osaf/libs/agents/saf/imma/imma_om_api.c
+++ b/osaf/libs/agents/saf/imma/imma_om_api.c
@@ -4158,7 +4158,7 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
for (i = 0; attr != 0; attr = attrDefinitions[++i]) {
if (attr-attrName == NULL)  {
TRACE(NULL attrName , not allowed.);
-   TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
}
 
@@ -4166,21 +4166,47 @@ SaAisErrorT saImmOmClassCreate_2(SaImmHa
if(((attr-attrValueType != SA_IMM_ATTR_SANAMET )  
(attr-attrValueType != 
SA_IMM_ATTR_SASTRINGT))) {
TRACE(ERR_INVALID_PARAM: RDN '%s' must be of 
type SaNameT or SaStringT, attr-attrName);
-   TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
}
 
if(attr-attrFlags  SA_IMM_ATTR_MULTI_VALUE) {
TRACE(ERR_INVALID_PARAM: RDN '%s' can not be 
multivalued, attr-attrName);
TRACE_LEAVE();
-return SA_AIS_ERR_INVALID_PARAM;
-   }
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
+   TRACE(ERR_INVALID_PARAM: RDN '%s' can not have 
NO_DANGLING flag, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_NO_DANGLING) {
+   if(classCategory == SA_IMM_CLASS_RUNTIME) {
+   TRACE(ERR_INVALID_PARAM: NO_DANGLING attribute 
'%s' cannot be defined for runtime class, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrValueType != SA_IMM_ATTR_SANAMET) {
+   TRACE(ERR_INVALID_PARAM: Attribute '%s' is 
flagged NO_DANGLING, must be of type SaNameT, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
+
+   if(attr-attrFlags  SA_IMM_ATTR_RUNTIME) {
+   TRACE(ERR_INVALID_PARAM: Runtime attribute 
'%s' cannot have NO_DANGLING flag, attr-attrName);
+   TRACE_LEAVE();
+   return SA_AIS_ERR_INVALID_PARAM;
+   }
}
}
 
if (cb-is_immnd_up == false) {
TRACE_2(ERR_TRY_AGAIN: IMMND is DOWN);
-TRACE_LEAVE();
+   TRACE_LEAVE();
return SA_AIS_ERR_TRY_AGAIN;
}
 
diff --git a/osaf/libs/common/immsv/include/immpbe_dump.hh 
b/osaf/libs/common/immsv/include/immpbe_dump.hh
--- a/osaf/libs/common/immsv/include/immpbe_dump.hh
+++ b/osaf/libs/common/immsv/include/immpbe_dump.hh
@@ -31,7 +31,7 @@
 
 #define RELEASE_CODE 'A'
 #define MAJOR_VERSION 2
-#define MINOR_VERSION 12
+#define MINOR_VERSION 13
 
 /* Prototypes */
 typedef std::mapstd::string, SaImmAttrFlagsT AttrMap;
diff --git a/osaf/libs/saf/include/Makefile.am 
b/osaf/libs/saf/include/Makefile.am
--- a/osaf/libs/saf/include/Makefile.am
+++ b/osaf/libs/saf/include/Makefile.am
@@ -35,6 +35,7 @@ include_HEADERS = \
saSmf.h \
saImmOi_A_2_11.h \
saImmOm_A_2_11.h \
-   saImmOm_A_2_12.h
+   saImmOm_A_2_12.h \
+   saImmOm_A_2_13.h
 
 
diff --git a/osaf/libs/saf/include/saImmOm_A_2_12.h 
b/osaf/libs/saf/include/saImmOm_A_2_12.h
--- a/osaf/libs/saf/include/saImmOm_A_2_12.h
+++ b/osaf/libs/saf/include/saImmOm_A_2_12.h
@@ -73,4 +73,6 @@ extern C {
 }
 #endif
 
+#include saImmOm_A_2_13.h
+
 #endif   /* _SA_IMM_OM_A_2_12_H */
diff --git a/osaf/libs/saf/include/saImmOm_A_2_13.h 
b/osaf/libs/saf/include/saImmOm_A_2_13.h
new file mode 100644
--- /dev/null
+++ b/osaf/libs/saf/include/saImmOm_A_2_13.h
@@ -0,0 +1,60 @@
+/*  -*- OpenSAF  -*-
+ *
+ * (C) Copyright