Hi Canh, It will be good to send V2 patch with Lennart comments and adding new test cases.
-AVM On 6/21/2016 9:46 AM, A V Mahesh wrote: > Hi Canh, > > Some how we were not able to open your attachment , so my self written > > a multi threaded test case ( attached `thread_LogInitializeFinalize.c` > ) and reviewed/tested it is working fine. > > ACK from me with following : > > - Please add such as attached multi threaded test case to logtest, > before pushing > > - add # before ticket number in commit message #1396 > > -AVM > > > On 6/14/2016 2:47 PM, Canh Truong wrote: >> Hi Mahesh, >> >> I have created new test case for multiple threads. Please help check new >> patch in attachment. >> >> Thanks, >> Canh. >> >> -----Original Message----- >> From: A V Mahesh [mailto:mahesh.va...@oracle.com] >> Sent: Tuesday, June 14, 2016 11:03 AM >> To: Canh Van Truong; vu.m.ngu...@dektech.com.au; >> lennart.l...@ericsson.com >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: Re: [PATCH 1 of 1] log: fix issue with priority of messages >> adding >> to mailbox in the server[1396] >> >> Hi Canh Van Truong, >> >> I hope this patch will work for multiple threads doing >> saLogInitialize() , saLogStreamOpen_2() and saLogFinalize() >> concurrently in >> a single process and reaches lga_use_count = 0 , againg restarting >> saLogInitialize() , saLogStreamOpen_2() and >> saLogFinalize() >> without process exist. >> >> If so let us have a test case like for multiple threads doing >> saLogInitialize() , saLogStreamOpen_2() and saLogFinalize() >> concurrently >> >> -AVM >> >> >> On 6/13/2016 12:37 PM, Canh Van Truong wrote: >>> 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"); >>> } > ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel