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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel