when saflogtest write log records and get error TRY_AGAIN in ack message, it
will handle to re-write until the error is not TRY_AGAIN. There is no limited 
timeout
to handle try-again. The patch add timeout 10s for handling try-again.
---
 src/log/apitest/saflogtest.c   | 86 ++++++++++++++++++++++++++++++------------
 src/log/apitest/tet_LogOiOps.c | 48 +++++++++++------------
 2 files changed, 82 insertions(+), 52 deletions(-)

diff --git a/src/log/apitest/saflogtest.c b/src/log/apitest/saflogtest.c
index e6db5e104..160cc3b74 100644
--- a/src/log/apitest/saflogtest.c
+++ b/src/log/apitest/saflogtest.c
@@ -21,7 +21,7 @@
  * This file contains a command line test utility to write to the SAF LOG.
  *
  * The main purpose of the utility is to send a burst of log messages, by
- * default not waiting for ack for each message.
+ * default waiting for ack for each message.
  */
 
 #include <stdio.h>
@@ -42,6 +42,7 @@
 #include <poll.h>
 #include <unistd.h>
 #include <limits.h>
+#include "base/osaf_time.h"
 #include "base/saf_error.h"
 
 #include <saAis.h>
@@ -55,10 +56,12 @@
 
 #define MAX_NUM_STREAM 4
 
+const uint64_t kWaitTime = 10*1000; // Wait for timeout is 10 seconds
+const SaVersionT KLogVersion = {'A', 0x02, 0x03};
+
 static void logWriteLogCallbackT(SaInvocationT invocation, SaAisErrorT error);
 
 static SaLogCallbacksT logCallbacks = {0, 0, logWriteLogCallbackT};
-static SaVersionT logVersion = {'A', 0x02, 0x03};
 
 static char *progname = "saflogtest";
 static SaInvocationT cb_invocation;
@@ -154,15 +157,21 @@ static SaAisErrorT write_log_record(SaLogHandleT 
logHandle,
        static int i = 0;
        int try_agains = 0;
        SaLogAckFlagsT ackflags;
+       struct timespec timeout_time;
 
        if (wait_for_ack)
                ackflags = SA_LOG_RECORD_WRITE_ACK;
        else
                ackflags = 0;
-
 retry:
-       errorCode = saLogWriteLogAsync(logStreamHandle, invocation, ackflags,
-                                      logRecord);
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
+       while (!osaf_is_timeout(&timeout_time)) {
+
+               errorCode = saLogWriteLogAsync(logStreamHandle, invocation,
+                                              ackflags, logRecord);
+               if (errorCode != SA_AIS_ERR_TRY_AGAIN) break;
+               osaf_nanosleep(&kHundredMilliseconds);
+       }
 
        if (errorCode != SA_AIS_OK) {
                fprintf(stderr, "saLogWriteLogAsync FAILED: %s\n",
@@ -202,9 +211,8 @@ retry:
                }
 
                if (cb_invocation != invocation) {
-                       fprintf(
-                           stderr,
-                           "logWriteLogCallbackT FAILED: wrong invocation\n");
+                       fprintf(stderr, "logWriteLogCallbackT FAILED:"
+                                       " wrong invocation\n");
                        return SA_AIS_ERR_BAD_OPERATION;
                }
 
@@ -215,17 +223,16 @@ retry:
                        return cb_error;
                }
 
-               if (cb_error == SA_AIS_ERR_TRY_AGAIN) {
-                       usleep(100000); /* 100 ms */
+               if (cb_error == SA_AIS_ERR_TRY_AGAIN &&
+                               !osaf_is_timeout(&timeout_time)) {
+                       osaf_nanosleep(&kHundredMilliseconds);
                        try_agains++;
                        goto retry;
                }
 
                if (try_agains > 0) {
-                       fprintf(
-                           stderr,
-                           "\tgot %u SA_AIS_ERR_TRY_AGAIN, waited %u secs\n",
-                           try_agains, try_agains / 10);
+                       fprintf(stderr, "\tgot %u SA_AIS_ERR_TRY_AGAIN\n",
+                               try_agains);
                }
        }
 
@@ -545,7 +552,14 @@ int main(int argc, char *argv[])
                }
        }
 
-       error = saLogInitialize(&logHandle, &logCallbacks, &logVersion);
+       struct timespec timeout_time;
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
+       while(!osaf_is_timeout(&timeout_time)) {
+               SaVersionT version = KLogVersion;
+               error = saLogInitialize(&logHandle, &logCallbacks, &version);
+               if (error != SA_AIS_ERR_TRY_AGAIN) break;
+               osaf_nanosleep(&kHundredMilliseconds);
+       }
        if (error != SA_AIS_OK) {
                fprintf(stderr, "saLogInitialize FAILED: %s\n",
                        saf_error(error));
@@ -573,10 +587,17 @@ int main(int argc, char *argv[])
                        logFileCreateAttributes_ptr = NULL;
                }
 
-               error = saLogStreamOpen_2(
-                   logHandle, &stream_info[j].logStreamName,
-                   logFileCreateAttributes_ptr, logStreamOpenFlags,
-                   SA_TIME_ONE_SECOND, &logStreamHandle);
+               osaf_set_millis_timeout(kWaitTime, &timeout_time);
+               while(!osaf_is_timeout(&timeout_time)) {
+                       error = saLogStreamOpen_2(
+                                     logHandle, &stream_info[j].logStreamName,
+                                     logFileCreateAttributes_ptr,
+                                     logStreamOpenFlags,
+                                     SA_TIME_ONE_SECOND, &logStreamHandle);
+                       if (error != SA_AIS_ERR_TRY_AGAIN) break;
+                       osaf_nanosleep(&kHundredMilliseconds);
+               }
+
                if (error != SA_AIS_OK) {
                        fprintf(stderr, "saLogStreamOpen_2 FAILED: %s\n",
                                saf_error(error));
@@ -589,8 +610,13 @@ int main(int argc, char *argv[])
                                write_log_record(
                                    logHandle, logStreamHandle, selectionObject,
                                    &stream_info[j].logRecord, wait_for_ack);
-                               if (interval > 0)
-                                       usleep(interval);
+                               if (interval > 0) {
+                                       struct timespec sleep_time;
+                                       sleep_time.tv_sec = interval / 1000000;
+                                       sleep_time.tv_nsec =
+                                               (interval % 1000000) * 1000;
+                                       osaf_nanosleep(&sleep_time);
+                               }
                        }
                }
 
@@ -617,16 +643,26 @@ int main(int argc, char *argv[])
         * closed automatically)
         */
        if (stream_cnt == 1) {
-               error = saLogStreamClose(logStreamHandle);
-               if (SA_AIS_OK != error) {
+               osaf_set_millis_timeout(kWaitTime, &timeout_time);
+               while(!osaf_is_timeout(&timeout_time)) {
+                       error = saLogStreamClose(logStreamHandle);
+                       if (error != SA_AIS_ERR_TRY_AGAIN) break;
+                       osaf_nanosleep(&kHundredMilliseconds);
+               }
+               if (error != SA_AIS_OK) {
                        fprintf(stderr, "saLogStreamClose FAILED: %s\n",
                                saf_error(error));
                        exit(EXIT_FAILURE);
                }
        }
 
-       error = saLogFinalize(logHandle);
-       if (SA_AIS_OK != error) {
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
+       while(!osaf_is_timeout(&timeout_time)) {
+               error = saLogFinalize(logHandle);
+               if (error != SA_AIS_ERR_TRY_AGAIN) break;
+               osaf_nanosleep(&kHundredMilliseconds);
+       }
+       if (error != SA_AIS_OK) {
                fprintf(stderr, "saLogFinalize FAILED: %s\n", saf_error(error));
                exit(EXIT_FAILURE);
        }
diff --git a/src/log/apitest/tet_LogOiOps.c b/src/log/apitest/tet_LogOiOps.c
index 0ee8078ad..896e993e4 100644
--- a/src/log/apitest/tet_LogOiOps.c
+++ b/src/log/apitest/tet_LogOiOps.c
@@ -793,36 +793,32 @@ void saLogOi_28()
                return;
        }
 
-       sprintf(
-           command,
-           "immcfg -a saLogStreamMaxLogFileSize=2001 
safLgStrCfg=strA,safApp=safLogService");
+       sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=2001 "
+                        "safLgStrCfg=strA,safApp=safLogService");
        rc = systemCall(command);
        if (rc != 0)
                goto done;
 
-       sprintf(
-           command,
-           "immcfg -a saLogStreamMaxFilesRotated=1 
safLgStrCfg=strA,safApp=safLogService");
+       sprintf(command, "immcfg -a saLogStreamMaxFilesRotated=1 "
+                        "safLgStrCfg=strA,safApp=safLogService");
        rc = systemCall(command);
        if (rc != 0)
                goto done;
 
-       sprintf(
-           command,
-           "saflogtest -b strA --count=1000 --interval=5000 \"saflogtest 
(1000,5000) strA\"");
+       sprintf(command, "saflogtest -b strA --count=100 --interval=5000 "
+                        "\"saflogtest (100,5000) strA\"");
        rc = systemCall(command);
        if (rc != 0)
                goto done;
 
-       sprintf(
-           command,
-           "immcfg -a saLogStreamMaxFilesRotated=3 
safLgStrCfg=strA,safApp=safLogService");
+       sprintf(command, "immcfg -a saLogStreamMaxFilesRotated=3 "
+                        "safLgStrCfg=strA,safApp=safLogService");
        rc = systemCall(command);
 
 done:
        /* Delete object strA */
-       sprintf(command,
-               "immcfg -d safLgStrCfg=strA,safApp=safLogService 2> /dev/null");
+       sprintf(command, "immcfg -d safLgStrCfg=strA,safApp=safLogService "
+                        "2> /dev/null");
        delay_ms();
        systemCall(command);
        rc_validate(rc, 0);
@@ -1041,21 +1037,20 @@ void saLogOi_34()
        if (rc != 0)
                goto done;
 
-       sprintf(
-           command,
-           "saflogtest -b strA --count=10 --interval=10000 \"saflogtest 
(10,10000) strA\"");
+       sprintf(command, "saflogtest -b strA --count=10 --interval=10000 "
+                        "\"saflogtest (10,10000) strA\"");
        rc = systemCall(command);
        if (rc != 0)
                goto done;
-       sprintf(
-           command,
-           "saflogtest -b strB --count=500 --interval=5 \"saflogtest (500,5) 
strB\"");
+       sprintf(command, "saflogtest -b strB --count=20 --interval=5 "
+                        "\"saflogtest (20,5) strB\"");
+       rc = systemCall(command);
        if (rc != 0)
                goto done;
 
-       sprintf(
-           command,
-           "saflogtest -b strC --count=700 --interval=5 \"saflogtest (700,5) 
strC\"");
+       sprintf(command,  "saflogtest -b strC --count=30 --interval=5"
+                         " \"saflogtest (30,5) strC\"");
+       rc = systemCall(command);
        if (rc != 0)
                goto done;
 
@@ -1299,9 +1294,8 @@ void saLogOi_44()
        if (rc != 0)
                goto delete_object;
 
-       sprintf(
-           command,
-           "saflogtest -b strD --count=500 --interval=5 \"saflogtest (500,5) 
strD\"");
+       sprintf(command, "saflogtest -b strD --count=50 --interval=5 "
+                        "\"saflogtest (50,5) strD\"");
        rc = systemCall(command);
 
 delete_object:
@@ -1428,7 +1422,7 @@ void saLogOi_50()
 
        while (noTimes--) {
                sprintf(command,
-                       "saflogtest -a appTest --count=100 --interval=1 "
+                       "saflogtest -a appTest --count=10 --interval=1 "
                        "\"saflogtest (100,1,%d) appTest\"",
                        noTimes);
                rc = system(command);
-- 
2.15.1


------------------------------------------------------------------------------
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

Reply via email to