Hi zoran,
Reviewed and tested the patch.
Ack with the following comments.
1. object_info_add must be after saImmOmCcbObjectCreate_2 is successful
in both imm_cfg.c and imm_import.cc
2. add "object_info_clear" aftersaImmOmCcbApply in imm_import.cc
3. add "object_info_clear" in ccb_apply and ccb_abort
/Neel.
On Friday 08 May 2015 06:48 PM, Zoran Milinkovic wrote:
> osaf/tools/safimm/immcfg/imm_cfg.c | 90
> +++++++++++++++++++++++++++++++++-
> osaf/tools/safimm/immcfg/imm_import.cc | 14 +++-
> 2 files changed, 99 insertions(+), 5 deletions(-)
>
>
> Add support for ccbObjectModify operation on an object created by
> ccbObjectCreate in the same CCB.
>
> diff --git a/osaf/tools/safimm/immcfg/imm_cfg.c
> b/osaf/tools/safimm/immcfg/imm_cfg.c
> --- a/osaf/tools/safimm/immcfg/imm_cfg.c
> +++ b/osaf/tools/safimm/immcfg/imm_cfg.c
> @@ -46,6 +46,12 @@
>
> #include "osaf_extended_name.h"
>
> +typedef struct ObjectInfo {
> + char *objectName;
> + char *className;
> + struct ObjectInfo *next;
> +} ObjectInfoT;
> +
> static SaVersionT immVersion = { 'A', 2, 15 };
> int verbose = 0;
> int ccb_safe = 1;
> @@ -56,6 +62,8 @@ SaImmAdminOwnerNameT adminOwnerName = NU
> SaImmAdminOwnerHandleT ownerHandle = 0;
> SaImmCcbHandleT ccbHandle = -1;
>
> +static ObjectInfoT *objectInfo = NULL;
> +
> extern struct ImmutilWrapperProfile immutilWrapperProfile;
> typedef enum {
> INVALID = 0,
> @@ -182,6 +190,76 @@ void sigalarmh(int sig)
> exit(EXIT_FAILURE);
> }
>
> +void object_info_add(const char *objectName, const char *className) {
> + ObjectInfoT *oi;
> + ObjectInfoT *prev;
> + int rc;
> +
> + prev = NULL;
> + oi = objectInfo;
> + while(oi) {
> + if((rc = strcmp(oi->objectName, objectName)) >= 0) {
> + if(!rc) {
> + // Object is already in the list
> + return;
> + }
> +
> + break;
> + }
> +
> + prev = oi;
> + oi = oi->next;
> + }
> +
> + if(prev) {
> + oi = (ObjectInfoT *)calloc(1, sizeof(ObjectInfoT));
> + oi->objectName = strdup(objectName);
> + oi->className = strdup(className);
> + oi->next = prev->next;
> + prev->next = oi;
> + } else {
> + objectInfo = (ObjectInfoT *)calloc(1, sizeof(ObjectInfoT));
> + objectInfo->objectName = strdup(objectName);
> + objectInfo->className = strdup(className);
> + objectInfo->next = oi;
> + }
> +}
> +
> +void object_info_clear() {
> + ObjectInfoT *oi = objectInfo;
> + ObjectInfoT *next;
> +
> + while(oi) {
> + next = oi->next;
> + free(oi->objectName);
> + free(oi->className);
> + free(oi);
> + oi = next;
> + }
> +
> + objectInfo = NULL;
> +}
> +
> +char *object_info_get_class(const char *objectName) {
> + ObjectInfoT *oi;
> + int rc;
> +
> + oi = objectInfo;
> + while(oi) {
> + if((rc = strcmp(oi->objectName, objectName)) >= 0) {
> + if(!rc) {
> + return strdup(oi->className);
> + }
> +
> + break;
> + }
> +
> + oi = oi->next;
> + }
> +
> + return NULL;
> +}
> +
> static void free_attr_value(SaImmValueTypeT attrValueType, SaImmAttrValueT
> attrValue) {
> if(attrValue) {
> if(attrValueType == SA_IMM_ATTR_SASTRINGT)
> @@ -233,10 +311,15 @@ static SaImmAttrModificationT_2 *new_att
> char *name = strdup(nameval);
> char *value;
> SaImmAttrModificationT_2 *attrMod = NULL;
> - SaImmClassNameT className = immutil_get_className(objectName);
> + SaImmClassNameT className;
> SaAisErrorT error;
> SaImmAttrModificationTypeT modType = SA_IMM_ATTR_VALUES_REPLACE;
>
> + className =
> object_info_get_class(osaf_extended_name_borrow(objectName));
> + if(!className) {
> + className = immutil_get_className(objectName);
> + }
> +
> if (className == NULL) {
> fprintf(stderr, "Object with DN '%s' does not exist\n",
> osaf_extended_name_borrow(objectName));
> res = -1;
> @@ -435,10 +518,13 @@ int object_create(const SaNameT **object
> fprintf(stderr, "error - saImmOmCcbInitialize FAILED:
> %s\n", saf_error(error));
> goto done;
> }
> + object_info_clear();
> }
>
> i = 0;
> while (objectNames[i] != NULL) {
> + object_info_add(osaf_extended_name_borrow(objectNames[i]),
> className);
> +
> str = strdup(osaf_extended_name_borrow(objectNames[i]));
> if ((delim = strchr(str, ',')) != NULL) {
> /* a parent exist */
> @@ -584,6 +670,7 @@ int object_modify(const SaNameT **object
> fprintf(stderr, "error - saImmOmCcbInitialize FAILED:
> %s\n", saf_error(error));
> goto done;
> }
> + object_info_clear();
> }
>
> i = 0;
> @@ -657,6 +744,7 @@ int object_delete(const SaNameT **object
> fprintf(stderr, "error - saImmOmCcbInitialize FAILED:
> %s\n", saf_error(error));
> goto done;
> }
> + object_info_clear();
> }
>
> while (objectNames[i] != NULL) {
> diff --git a/osaf/tools/safimm/immcfg/imm_import.cc
> b/osaf/tools/safimm/immcfg/imm_import.cc
> --- a/osaf/tools/safimm/immcfg/imm_import.cc
> +++ b/osaf/tools/safimm/immcfg/imm_import.cc
> @@ -68,6 +68,10 @@ extern "C"
> SaImmHandleT *immHandle, SaImmAdminOwnerHandleT
> *ownerHandle,
> SaImmCcbHandleT *ccbHandle, int mode, const char
> *xsdPath, int strictParse);
> int validateImmXML(const char *xmlfile, int verbose, int mode, int
> strictParse);
> +
> + void object_info_add(const char *objectName, const char *className);
> + void object_info_clear();
> + char *object_info_get_class(const char *objectName);
> }
>
> extern ImmutilErrorFnT immutilError;
> @@ -638,7 +642,6 @@ static void createImmObject(ParserState*
> SaImmAttrValuesT_2** attrValues;
> SaAisErrorT errorCode = SA_AIS_OK;
> int i = 0;
> - size_t DNlen;
> SaNameT objectName;
> std::list<SaImmAttrValuesT_2>::iterator it;
>
> @@ -686,15 +689,17 @@ static void createImmObject(ParserState*
> if(state->ctxt->instate == XML_PARSER_EOF)
> return;
>
> + object_info_add(state->objectName, className);
> +
> #ifdef TRACE_8
> /* Get the length of the DN and truncate state->objectName */
> if (!osaf_is_extended_name_empty(&parentName)) {
> - DNlen = strlen(state->objectName) -
> (strlen(osaf_extended_name_borrow(&parentName)) + 1);
> + i = strlen(state->objectName) -
> (strlen(osaf_extended_name_borrow(&parentName)) + 1);
> } else {
> - DNlen = strlen(state->objectName);
> + i = strlen(state->objectName);
> }
>
> - state->objectName[DNlen] = '\0';
> + state->objectName[i] = '\0';
> TRACE_8("OBJECT NAME: %s", state->objectName);
> #endif
>
> @@ -1704,6 +1709,7 @@ static void endElementHandler(void* user
> state->parsingStatus = 1;
> return;
> }
> + object_info_clear();
> state->ccbInit = 1;
>
> }
------------------------------------------------------------------------------
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