osaf/libs/agents/saf/lga/lga.h     |   1 +
 osaf/libs/agents/saf/lga/lga_api.c |   4 +++-
 osaf/libs/agents/saf/lga/lga_mds.c |  12 +++++++++---
 tests/logsv/tet_Log_clm.c          |  35 ++++++++++++++++++++++++++++++++++-
 4 files changed, 47 insertions(+), 5 deletions(-)


Issue :
If client saLogInitialize with  A.2.1 and
linked with New agents lib A.2.2 code is considering CLM status.

But as explained in osaf/services/saf/logsv/README
old lga clients  saLogInitialize with A.02.01 are always clm member,

Fix:

If  client saLogInitialize() with  A.2.1 , irrelevant of linked with New agents 
lib A.2.2 code
or linked with Old agents lib A.2.1 code, CLM status will be ignored .

Test code added two new test cases  in testsuite 14
Please check test case 14 of /usr/bin/logtest -e 14

diff --git a/osaf/libs/agents/saf/lga/lga.h b/osaf/libs/agents/saf/lga/lga.h
--- a/osaf/libs/agents/saf/lga/lga.h
+++ b/osaf/libs/agents/saf/lga/lga.h
@@ -79,6 +79,7 @@ typedef struct lga_client_hdl_rec {
                                * streams are recovered
                                */
   bool is_stale_client;  /* Status of client based on the CLM status of node.*/
+  SaVersionT version; /* the API version is being used by client, used for CLM 
status */
 } lga_client_hdl_rec_t;
 
 /* States of the server */
diff --git a/osaf/libs/agents/saf/lga/lga_api.c 
b/osaf/libs/agents/saf/lga/lga_api.c
--- a/osaf/libs/agents/saf/lga/lga_api.c
+++ b/osaf/libs/agents/saf/lga/lga_api.c
@@ -164,7 +164,8 @@ SaAisErrorT saLogInitialize(SaLogHandleT
        /* validate the version */
        if ((version->releaseCode == LOG_RELEASE_CODE) && 
(version->majorVersion <= LOG_MAJOR_VERSION)) {
                version->majorVersion = LOG_MAJOR_VERSION;
-               version->minorVersion = LOG_MINOR_VERSION;
+               if (version->minorVersion != LOG_MINOR_VERSION_0)
+                       version->minorVersion = LOG_MINOR_VERSION;
        } else {
                TRACE("version FAILED, required: %c.%u.%u, supported: 
%c.%u.%u\n",
                      version->releaseCode, version->majorVersion, 
version->minorVersion,
@@ -264,6 +265,7 @@ SaAisErrorT saLogInitialize(SaLogHandleT
 
        /* pass the handle value to the appl */
        *logHandle = lga_hdl_rec->local_hdl;
+       lga_hdl_rec->version = *version;
 
  err:
        /* free up the response message */
diff --git a/osaf/libs/agents/saf/lga/lga_mds.c 
b/osaf/libs/agents/saf/lga/lga_mds.c
--- a/osaf/libs/agents/saf/lga/lga_mds.c
+++ b/osaf/libs/agents/saf/lga/lga_mds.c
@@ -545,9 +545,15 @@ static uint32_t lga_lgs_msg_proc(lga_cb_
                                          library handles and all resources 
associated with these handles. Hence, it is recommended
                                          for the processes to finalize the 
library handles as soon as the processes
                                          detect that the node left the 
membership.*/
-                                       lga_hdl_rec->is_stale_client = true;
-                                       TRACE("CLM_NODE callback 
is_stale_client: %d clm_node_state: %d",
-                                                       
lga_hdl_rec->is_stale_client, cb->clm_node_state);
+                                        
+                                       /*Old LGA clients A.02.01 are always 
clm member */
+                                       if (!((lga_hdl_rec->version.releaseCode 
== LOG_RELEASE_CODE_0) &&
+                                                       
(lga_hdl_rec->version.majorVersion == LOG_MAJOR_VERSION_0) &&
+                                                       
(lga_hdl_rec->version.minorVersion == LOG_MINOR_VERSION_0))) {
+                                               lga_hdl_rec->is_stale_client = 
true;
+                                               TRACE("CLM_NODE callback 
is_stale_client: %d clm_node_state: %d",
+                                                               
lga_hdl_rec->is_stale_client, cb->clm_node_state);
+                                       }
                                }
                                lga_msg_destroy(lgsv_msg);
                        }
diff --git a/tests/logsv/tet_Log_clm.c b/tests/logsv/tet_Log_clm.c
--- a/tests/logsv/tet_Log_clm.c
+++ b/tests/logsv/tet_Log_clm.c
@@ -95,7 +95,7 @@ void saLogInitializ_14_02(void)
        rc = saLogInitialize(&logHandle, &logCallbacks, &logPreviousVersion);
        saLogFinalize(logHandle);
        unlockNode();
-       test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+       test_validate(rc, SA_AIS_OK);
 }
 
 void saLogInitializ_14_03(void)
@@ -150,6 +150,37 @@ void saLogStreamOpen_14_06(void)
 
 }
 
+void saLogStreamOpen_14_07(void)
+{
+        cond_check();
+       SaVersionT logPreviousVersion = { 'A', 0x02, 0x01 };
+        safassert(saLogInitialize(&logHandle, &logCallbacks, 
&logPreviousVersion), SA_AIS_OK);
+        lockNode();
+        printf_s(" to saLogStreamOpen_2(). ");
+        rc = saLogStreamOpen_2(logHandle, &systemStreamName, NULL, 0,
+                        SA_TIME_ONE_SECOND, &logStreamHandle);
+        saLogStreamClose(logStreamHandle);
+        safassert(saLogFinalize(logHandle), SA_AIS_OK);
+        unlockNode();
+        test_validate(rc, SA_AIS_OK);
+}
+        
+void saLogStreamOpen_14_08(void)
+{       
+        cond_check();
+       SaVersionT logPreviousVersion = { 'A', 0x02, 0x01 };
+        safassert(saLogInitialize(&logHandle, &logCallbacks, 
&logPreviousVersion), SA_AIS_OK);
+        lockNode();
+        unlockNode();
+        printf_s(" to saLogStreamOpen_2(). ");
+        rc = saLogStreamOpen_2(logHandle, &systemStreamName, NULL, 0,
+                        SA_TIME_ONE_SECOND, &logStreamHandle);
+        saLogStreamClose(logStreamHandle);
+        safassert(saLogFinalize(logHandle), SA_AIS_OK);
+        test_validate(rc, SA_AIS_OK);
+ 
+}
+
 void add_suite_14(void) 
 {
        test_suite_add(14, "Log Service CLM Operations");
@@ -159,5 +190,7 @@ void add_suite_14(void)
        test_case_add(14, saLogInitializ_14_04, "saLogInitializ(previous 
versions) on Lock & Un-Lock");
        test_case_add(14, saLogStreamOpen_14_05, "saLogStreamOpen_2() on Node 
Lock");
        test_case_add(14, saLogStreamOpen_14_06, "saLogStreamOpen_2() On Node 
Lock & Un-Lock");
+       test_case_add(14, saLogStreamOpen_14_07, "saLogStreamOpen_2(previous 
versions) on Node Lock");
+       test_case_add(14, saLogStreamOpen_14_08, "saLogStreamOpen_2(previous 
versions) On Node Lock & Un-Lock");
 }
 

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

Reply via email to