ACK /Lennart
> -----Original Message----- > From: Canh Van Truong [mailto:canh.v.tru...@dektech.com.au] > Sent: den 30 juni 2017 09:05 > To: Lennart Lund <lennart.l...@ericsson.com>; Vu Minh Nguyen > <vu.m.ngu...@dektech.com.au>; mahesh.va...@oracle.com > Cc: opensaf-devel@lists.sourceforge.net; Canh Van Truong > <canh.v.tru...@dektech.com.au> > Subject: [PATCH 1/1] log: update test case logtest 2 51 [#2515] > > Test case logtest 2 51 takes more than 3 minutes. The patch updates this > test case as following: > 1/ Thread reports fail immeditely exit the test case with fail . > 2/ Print information if any operation fails in each thread > 3/ Wait thread terminate with timeout > --- > src/log/apitest/tet_saLogStreamOpen_2.c | 80 ++++++++++++++++++++--- > ---------- > 1 file changed, 49 insertions(+), 31 deletions(-) > > diff --git a/src/log/apitest/tet_saLogStreamOpen_2.c > b/src/log/apitest/tet_saLogStreamOpen_2.c > index ada98a4c8..dc2a3c90c 100644 > --- a/src/log/apitest/tet_saLogStreamOpen_2.c > +++ b/src/log/apitest/tet_saLogStreamOpen_2.c > @@ -16,7 +16,9 @@ > * > */ > > -#include "logtest.h" > +#include "base/osaf_time.h" > +#include "base/saf_error.h" > +#include "log/apitest/logtest.h" > > extern struct LogProfile logProfile; > > @@ -856,43 +858,49 @@ void *saLogInitialize_1(void *arg) > SaAisErrorT *rt = (SaAisErrorT *)arg; > SaLogStreamHandleT logStreamHandle1; > SaLogHandleT logHandle1; > + int time_wait = 10*1000; // Wait for timeout is 10 seconds > > - *rt = saLogInitialize(&logHandle1, &logCallbacks, &logVersion); > - unsigned int nTries = 1; > - while (*rt == SA_AIS_ERR_TRY_AGAIN && nTries < 50) { > - usleep(100 * 1000); > + struct timespec timeout_time; > + osaf_set_millis_timeout(time_wait, &timeout_time); > + while (!osaf_is_timeout(&timeout_time)) { > *rt = saLogInitialize(&logHandle1, &logCallbacks, > &logVersion); > - nTries++; > + if (*rt != SA_AIS_ERR_TRY_AGAIN) > + break; > + osaf_nanosleep(&kHundredMilliseconds); > } > if (*rt != SA_AIS_OK) { > + fprintf(stderr, " Initialize client failed: rc = %s\n", > + saf_error(*rt)); > goto done; > } > > - *rt = saLogStreamOpen_2( > - logHandle1, &app1StreamName, > &appStream1LogFileCreateAttributes, > - SA_LOG_STREAM_CREATE, SA_TIME_ONE_SECOND, > &logStreamHandle1); > - nTries = 1; > - while (*rt == SA_AIS_ERR_TRY_AGAIN && nTries < 50) { > - usleep(100 * 1000); > + osaf_set_millis_timeout(time_wait, &timeout_time); > + while (!osaf_is_timeout(&timeout_time)) { > *rt = saLogStreamOpen_2(logHandle1, &app1StreamName, > > &appStream1LogFileCreateAttributes, > SA_LOG_STREAM_CREATE, > SA_TIME_ONE_SECOND, > &logStreamHandle1); > - nTries++; > + if (*rt != SA_AIS_ERR_TRY_AGAIN) > + break; > + osaf_nanosleep(&kHundredMilliseconds); > } > if (*rt != SA_AIS_OK) { > + fprintf(stderr, " Open stream failed: rc = %s\n", > + saf_error(*rt)); > goto done; > } > > - *rt = saLogFinalize(logHandle1); > - nTries = 1; > - while (*rt == SA_AIS_ERR_TRY_AGAIN && nTries < 50) { > - usleep(100 * 1000); > + > + osaf_set_millis_timeout(time_wait, &timeout_time); > + while (!osaf_is_timeout(&timeout_time)) { > *rt = saLogFinalize(logHandle1); > - nTries++; > + if (*rt != SA_AIS_ERR_TRY_AGAIN) > + break; > + osaf_nanosleep(&kHundredMilliseconds); > } > if (*rt != SA_AIS_OK) { > - goto done; > + fprintf(stderr, " Finalize client failed: rc = %s\n", > + saf_error(*rt)); > } > > done: > @@ -934,38 +942,48 @@ void saLogMultipleInitialize(void) > */ > void saLogMultiThreadMultiInit(void) > { > - int i, errno, nThreads = 100; > + int ret, i, errno, nThreads = 50; > SaAisErrorT rt[nThreads], rc = SA_AIS_OK; > pthread_t threads[nThreads]; > + struct timespec timeout_t; > + int time_wait = 60; // Time wait for 60s > > - logProfile.nTries = 50; > for (i = 0; i < nThreads; i++) { > errno = pthread_create(&threads[i], NULL, saLogInitialize_1, > (void *)&rt[i]); > if (errno == EAGAIN) { > nThreads = i; > - fprintf( > - stderr, > - " Insufficient resource or limited system-imposed > to create" > - " no more than %d threads \n", > - nThreads); > + fprintf(stderr, " Insufficient resource or limited" > + " system-imposed to create" > + " no more than %d threads \n", > + nThreads); > break; > } > } > > - /* Wait for all threads terminated */ > - for (i = 0; i < nThreads; i++) { > - pthread_join(threads[i], NULL); > - } > + if ((ret = clock_gettime(CLOCK_REALTIME, &timeout_t)) == -1) { > + printf(" Get current time failed: %s\n", strerror(ret)); > + rc_validate(ret, 0); > + return; > + } > + timeout_t.tv_sec += time_wait; > > + /* Wait for threads terminated with timeout */ > for (i = 0; i < nThreads; i++) { > + ret = pthread_timedjoin_np(threads[i], NULL, &timeout_t); > + if (ret != 0) { > + fprintf(stderr, " Thread %d join error: %s\n", > + i, strerror(ret)); > + rc_validate(ret, 0); > + return; > + } > if (rt[i] != SA_AIS_OK) { > + fprintf(stderr, " Failed at thread %d\n", i); > rc = rt[i]; > break; > } > } > > - logProfile.nTries = 25; > test_validate(rc, SA_AIS_OK); > } > > -- > 2.13.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel