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