Hi Zoran

Sorry I didn't see this email. Ack (tested and reviewed).

/Gary

On 26/10/17 02:28, Zoran Milinkovic wrote:
Due to long execution of immadm in a separated thread and possible timeout in 
poll, the executing immadm command for locking, unlocking and shutting down 
nodes is replaced with calling IMM admin operation function.
---
  src/clm/apitest/clmtest.c               | 92 +++++++++++++++++++++++++++++++++
  src/clm/apitest/clmtest.h               |  4 ++
  src/clm/apitest/tet_ClmLongRdn.c        | 35 +++----------
  src/clm/apitest/tet_saClmClusterTrack.c | 38 ++------------
  4 files changed, 106 insertions(+), 63 deletions(-)

diff --git a/src/clm/apitest/clmtest.c b/src/clm/apitest/clmtest.c
index 683bfe4..5b4366f 100644
--- a/src/clm/apitest/clmtest.c
+++ b/src/clm/apitest/clmtest.c
@@ -18,6 +18,9 @@
  #include <sys/time.h>
  #include <unistd.h>
+#include <saImm.h>
+#include <saImmOm.h>
+
  #include "clmtest.h"
  /* Highest supported version*/
  #define CLM_HIGHEST_SUPPORTED_VERSION                                         
 \
@@ -32,9 +35,98 @@
        {                                                                      \
                'B', 0x02, 0x03                                                \
        }
+#define IMM_VERSION        \
+       {                      \
+               'A', 0x02, 0x0f    \
+       }
SaNameT node_name; +static SaAisErrorT immadm(SaImmAdminOperationIdT op,
+                                               SaConstStringT object,
+                                               SaTimeT timeout) {
+       /* timeout is in seconds. If timeout is set to 0,
+        * the default timeout of 60 seconds will be used */
+
+       SaVersionT immVersion = IMM_VERSION;
+       SaImmHandleT immHandle = 0;
+       SaImmAdminOwnerHandleT ownerHandle = 0;
+       const SaImmAdminOperationParamsT_2 *params[] = { NULL };
+       SaConstStringT objects[] = { object, NULL };
+       SaAisErrorT err;
+       SaAisErrorT retErr;
+
+       err = saImmOmInitialize(&immHandle, NULL, &immVersion);
+       if(err != SA_AIS_OK) {
+               goto done;
+       }
+
+       err = saImmOmAdminOwnerInitialize(immHandle,
+                       (SaImmAdminOwnerNameT)__FUNCTION__,
+                       SA_TRUE, &ownerHandle);
+       if(err != SA_AIS_OK) {
+               goto done;
+       }
+
+       err = saImmOmAdminOwnerSet_o3(ownerHandle, objects, SA_IMM_ONE);
+       if(err != SA_AIS_OK) {
+               goto done;
+       }
+
+       timeout = (timeout) ? (timeout * SA_TIME_ONE_SECOND)
+                                               : SA_TIME_ONE_MINUTE;
+
+       err = saImmOmAdminOperationInvoke_o3(ownerHandle, object, 1, op,
+                       params, &retErr, timeout, NULL);
+       if(err != SA_AIS_OK) {
+               goto done;
+       }
+
+       err = retErr;
+
+done:
+       if(ownerHandle) {
+               saImmOmAdminOwnerFinalize(ownerHandle);
+       }
+       if(immHandle) {
+               saImmOmFinalize(immHandle);
+       }
+       return err;
+}
+
+SaAisErrorT clm_node_unlock(const char *nodeName, int ignoreOutput) {
+       SaAisErrorT err;
+
+       err = immadm(1, nodeName, 0);
+       if(err != SA_AIS_OK && !ignoreOutput) {
+               fprintf(stderr, "immadm: node unlock failed with error: %d", 
err);
+       }
+
+       return err;
+}
+
+SaAisErrorT clm_node_lock(const char *nodeName, int ignoreOutput) {
+       SaAisErrorT err;
+
+       err = immadm(2, nodeName, 0);
+       if(err != SA_AIS_OK && !ignoreOutput) {
+               fprintf(stderr, "immadm: node lock failed with error: %d", err);
+       }
+
+       return err;
+}
+
+SaAisErrorT clm_node_shutdown(const char *nodeName, int ignoreOutput) {
+       SaAisErrorT err;
+
+       err = immadm(3, nodeName, 0);
+       if(err != SA_AIS_OK && !ignoreOutput) {
+               fprintf(stderr, "immadm: node shutdown failed with error: %d", 
err);
+       }
+
+       return err;
+}
+
  void clm_init(void)
  {
        FILE *fp;
diff --git a/src/clm/apitest/clmtest.h b/src/clm/apitest/clmtest.h
index 02449a0..66590ea 100644
--- a/src/clm/apitest/clmtest.h
+++ b/src/clm/apitest/clmtest.h
@@ -39,4 +39,8 @@ extern SaClmCallbacksT clmCallbacks_1;
  extern SaSelectionObjectT selectionObject;
  extern SaNameT node_name;
+SaAisErrorT clm_node_unlock(const char *nodeName, int ignoreOutput);
+SaAisErrorT clm_node_lock(const char *nodeName, int ignoreOutput);
+SaAisErrorT clm_node_shutdown(const char *nodeName, int ignoreOutput);
+
  #endif  // CLM_APITEST_CLMTEST_H_
diff --git a/src/clm/apitest/tet_ClmLongRdn.c b/src/clm/apitest/tet_ClmLongRdn.c
index 53e6c1d..fdf7f0b 100644
--- a/src/clm/apitest/tet_ClmLongRdn.c
+++ b/src/clm/apitest/tet_ClmLongRdn.c
@@ -209,36 +209,15 @@ static void clmTrackCallback4(
  static SaClmCallbacksT_4 clmCallback4 = {nodeGetCallBack4, clmTrackCallback4};
  static SaClmCallbacksT clmCallback = {nodeGetCallBack, clmTrackCallback};
-static void unlock_node(char *nodename)
-{
-       int rc;
-       char command[1024];
-
-       // Unlock the node
-       snprintf(command, sizeof(command), "immadm -o 1 %s", nodename);
-       rc = system(command);
-       assert(rc != -1);
-}
-
-static void lock_node(char *nodename)
-{
-       int rc;
-       char command[1024];
-       // Lock the node
-       snprintf(command, sizeof(command), "immadm -o 2 %s", nodename);
-       rc = system(command);
-       assert(rc != -1);
-}
-
  static void remove_node(char *nodename)
  {
        int rc;
        char command[1024];
+       SaAisErrorT err;
// Lock the node
-       snprintf(command, sizeof(command), "immadm -o 2 %s", nodename);
-       rc = system(command);
-       assert(rc != -1);
+       err = clm_node_lock(nodename, 0);
+       assert(err == SA_AIS_OK);
// Remove the node
        snprintf(command, sizeof(command), "immcfg -d %s", nodename);
@@ -327,7 +306,7 @@ void saClmLongRdn_02(void)
        // Set node name that will be compared in CLM callback
        s_clmTrackCallback_node = nodeName;
- lock_node(nodeName);
+       clm_node_lock(nodeName, 0);
while (1) {
                rc = poll(fds, 1, 2000);
@@ -341,7 +320,7 @@ void saClmLongRdn_02(void)
        safassert(saClmFinalize(clmHandle), SA_AIS_OK);
        test_validate(s_clmTrackCallback_err, SA_AIS_OK);
- unlock_node(nodeName);
+       clm_node_unlock(nodeName, 0);
  }
void saClmLongRdn_03(void)
@@ -382,7 +361,7 @@ void saClmLongRdn_03(void)
        // Set node name that will be compared in CLM callback
        s_clmTrackCallback_node = nodeName;
- lock_node(nodeName);
+       clm_node_lock(nodeName, 0);
while (1) {
                rc = poll(fds, 1, 2000);
@@ -396,7 +375,7 @@ void saClmLongRdn_03(void)
        safassert(saClmFinalize(clmHandle), SA_AIS_OK);
        test_validate(s_clmTrackCallback_err, SA_AIS_OK);
- unlock_node(nodeName);
+       clm_node_unlock(nodeName, 0);
  }
void saClmLongRdn_04(void)
diff --git a/src/clm/apitest/tet_saClmClusterTrack.c 
b/src/clm/apitest/tet_saClmClusterTrack.c
index 8a8ca89..66e8ed0 100644
--- a/src/clm/apitest/tet_saClmClusterTrack.c
+++ b/src/clm/apitest/tet_saClmClusterTrack.c
@@ -27,56 +27,24 @@ SaInvocationT invocation;
  SaInvocationT lock_inv;
  static const char *s_node_name = "safNode=PL-3,safCluster=myClmCluster";
-static int clm_node_lock(const char *nodeName, int ignoreOutput) {
-       char command[256];
-
-       if (ignoreOutput) {
-               sprintf(command, "immadm -o 2 %s 2> /dev/null", nodeName);
-       } else {
-               sprintf(command, "immadm -o 2 %s", nodeName);
-       }
-       return system(command);
-}
-
-static int clm_node_unlock(const char *nodeName, int ignoreOutput) {
-       char command[256];
-
-       if (ignoreOutput) {
-               sprintf(command, "immadm -o 1 %s 2> /dev/null", nodeName);
-       } else {
-               sprintf(command, "immadm -o 1 %s", nodeName);
-       }
-       return system(command);
-}
-
-static int clm_node_shutdown(const char *nodeName, int ignoreOutput) {
-       char command[256];
-
-       if (ignoreOutput) {
-               sprintf(command, "immadm -o 3 %s 2> /dev/null", nodeName);
-       } else {
-               sprintf(command, "immadm -o 3 %s", nodeName);
-       }
-       return system(command);
-}
static void *admin_lock(void *dummy)
  {
-       assert(clm_node_lock(s_node_name, 0) != -1);
+       assert(clm_node_lock(s_node_name, 0) == SA_AIS_OK);
        /*test_validate(WEXITSTATUS(rc), 0);*/
        return NULL;
  }
static void *admin_unlock(void *dummy)
  {
-       assert(clm_node_unlock(s_node_name, 0) != -1);
+       assert(clm_node_unlock(s_node_name, 0) == SA_AIS_OK);
        /*test_validate(WEXITSTATUS(rc), 0);*/
        return NULL;
  }
static void *admin_shutdown(void *dummy)
  {
-       assert(clm_node_shutdown(s_node_name, 0) != -1);
+       assert(clm_node_shutdown(s_node_name, 0) == SA_AIS_OK);
        /*test_validate(WEXITSTATUS(rc), 0);*/
        return NULL;
  }


------------------------------------------------------------------------------
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