osaf/libs/agents/saf/lga/lga_api.c | 3 ++- osaf/libs/agents/saf/lga/lga_util.c | 21 ++++++++++++--------- tests/logsv/logtest.h | 1 + tests/logsv/tet_saLogStreamOpen_2.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 10 deletions(-)
Sometimes, Log service can handle LGSV_INITIALIZE_REQ before handle LGSV_LGS_EVT_LGA_DOWN, although LGSV_LGS_EVT_LGA_DOWN was sent first whenever finalize() is call for last client. Because lgs can not distinguish MDS address between new connection (initializing new client) and old connection (finalizing last client before). This patch fixes to keep MDS connection when last client finalized, and re-use it when next initialize() called. 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 @@ -41,7 +41,8 @@ /* The main controle block */ lga_cb_t lga_cb = { .cb_lock = PTHREAD_MUTEX_INITIALIZER, - .lgs_state = LGS_START + .lgs_state = LGS_START, + .mds_hdl = 0 }; static bool is_well_know_stream(const char* dn) diff --git a/osaf/libs/agents/saf/lga/lga_util.c b/osaf/libs/agents/saf/lga/lga_util.c --- a/osaf/libs/agents/saf/lga/lga_util.c +++ b/osaf/libs/agents/saf/lga/lga_util.c @@ -308,21 +308,17 @@ unsigned int lga_startup(lga_cb_t *cb) osaf_mutex_lock_ordie(&lga_lock); TRACE_ENTER2("lga_use_count: %u", lga_use_count); - if (lga_use_count > 0) { - /* Already created, just increment the use_count */ - lga_use_count++; - goto done; - } else { + + if (cb->mds_hdl == 0) { if ((rc = ncs_agents_startup()) != NCSCC_RC_SUCCESS) { TRACE("ncs_agents_startup FAILED"); goto done; } if ((rc = lga_create()) != NCSCC_RC_SUCCESS) { + cb->mds_hdl = 0; ncs_agents_shutdown(); goto done; - } else { - lga_use_count = 1; } /* Agent has successfully been started including communication @@ -331,6 +327,9 @@ unsigned int lga_startup(lga_cb_t *cb) set_lga_state(LGA_NORMAL); } + /* Increase the use_count */ + lga_use_count++; + done: osaf_mutex_unlock_ordie(&lga_lock); @@ -361,8 +360,12 @@ unsigned int lga_shutdown_after_last_cli /* Users still exist, just decrement the use count */ lga_use_count--; } else if (lga_use_count == 1) { - lga_destroy(); - rc = ncs_agents_shutdown(); + /* + * Disable MDS_UNINSTALL and ncs agent shutdown to keep MDS connection. + * Fix ticket 1396. Msg NCSMDS_DOWN and Initialize are out of order in Mbx. + */ + /* lga_destroy(); */ + /* rc = ncs_agents_shutdown(); */ lga_use_count = 0; } diff --git a/tests/logsv/logtest.h b/tests/logsv/logtest.h --- a/tests/logsv/logtest.h +++ b/tests/logsv/logtest.h @@ -27,6 +27,7 @@ #include <utest.h> #include <util.h> #include <sys/wait.h> +#include <unistd.h> #include <osaf_time.h> #include <logtrace.h> diff --git a/tests/logsv/tet_saLogStreamOpen_2.c b/tests/logsv/tet_saLogStreamOpen_2.c --- a/tests/logsv/tet_saLogStreamOpen_2.c +++ b/tests/logsv/tet_saLogStreamOpen_2.c @@ -704,6 +704,34 @@ done: } } +/* + * Ticket 1396 + * Verify that saLogInitialize() then saLogFinalize() multiple time OK + */ +void saLogMultipleInitialize(void) +{ + SaLogStreamHandleT logStreamHandle1; + int count = 100; + SaAisErrorT rc = SA_AIS_OK; + + while (count--) { + rc = saLogInitialize(&logHandle, &logCallbacks, &logVersion); + if (rc != SA_AIS_OK) + break; + + rc = saLogStreamOpen_2(logHandle, &app1StreamName, &appStream1LogFileCreateAttributes, + SA_LOG_STREAM_CREATE, SA_TIME_ONE_SECOND, &logStreamHandle1); + safassert(rc, SA_AIS_OK); + + rc = saLogFinalize(logHandle); + if (rc != SA_AIS_OK) + break; + + } + test_validate(rc, SA_AIS_OK); + +} + extern void saLogStreamOpenAsync_2_01(void); extern void saLogStreamOpenCallbackT_01(void); extern void saLogWriteLog_01(void); @@ -790,5 +818,6 @@ extern void saLogStreamClose_01(void); test_case_add(2, verFixLogRec_Max_Err, "saLogStreamOpen_2 with maxLogRecordSize > MAX_RECSIZE, ERR"); test_case_add(2, verFixLogRec_Min_Err, "saLogStreamOpen_2 with maxLogRecordSize < 150, ERR"); test_case_add(2, saLogStreamOpen_2_50, "saLogStreamOpen_2 with stream number out of the limitation, ERR"); + test_case_add(2, saLogMultipleInitialize, "saLogInitialize() then saLogFinalize() multiple time. keep MDS connection, OK"); } ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel