Hi Canh,

Ack, see minor comment below [Lennart]


Thanks

Lennart


________________________________
Från: Canh Van Truong <canh.v.tru...@dektech.com.au>
Skickat: den 9 januari 2019 10:22
Till: Lennart Lund; Minh Hon Chau
Kopia: opensaf-devel@lists.sourceforge.net; Canh Van Truong
Ämne: [PATCH 2/2] ntf: Update TRY_AGAIN error in ntfsend tool [#2961]

ntfsend is blocked in case TRY_AGAIN error. It should do the retry in
limit time.
---
 src/ntf/tools/ntfclient.c |  75 ++++++++-------
 src/ntf/tools/ntfsend.c   | 240 +++++++++++++++-------------------------------
 2 files changed, 120 insertions(+), 195 deletions(-)

diff --git a/src/ntf/tools/ntfclient.c b/src/ntf/tools/ntfclient.c
index 472be4bc3..ce93bb164 100644
--- a/src/ntf/tools/ntfclient.c
+++ b/src/ntf/tools/ntfclient.c
@@ -21,10 +21,13 @@
 #include <saAmf.h>
 #include <saClm.h>
 #include <saNtf.h>
+#include "base/osaf_time.h"
 #include "ntf/tools/ntfclient.h"
 #include "ntf/tools/ntfconsumer.h"
 #include <limits.h>

+const uint64_t kWaitTime = 10*1000;  // Wait for timeout is 10 seconds
+
 /* help functions for printouts */
 void ntfsvtools_exitIfFalse(const char *file, unsigned int line, int 
expression)
 {
@@ -1097,18 +1100,19 @@ SaAisErrorT ntftool_saNtfInitialize(SaNtfHandleT 
*ntfHandle,
                                     const SaNtfCallbacksT *ntfCallbacks,
                                     SaVersionT *version)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
         SaVersionT ntf_version = *version;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfInitialize(ntfHandle, ntfCallbacks, &ntf_version);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                         ntf_version = *version;
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));
[Lennart] Why not use a "normal" while loop here? Is easier to read. You can 
directly on the
first line see that this is a timed out loop. Applies to all the loops below

         return rc;
 }
@@ -1119,16 +1123,17 @@ SaAisErrorT ntftool_saNtfInitialize(SaNtfHandleT 
*ntfHandle,
 SaAisErrorT ntftool_saNtfDispatch(SaNtfHandleT ntfHandle,
                                   SaDispatchFlagsT dispatchFlags)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfDispatch(ntfHandle, dispatchFlags);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1139,16 +1144,17 @@ SaAisErrorT ntftool_saNtfDispatch(SaNtfHandleT 
ntfHandle,
 SaAisErrorT
 ntftool_saNtfNotificationSend(SaNtfNotificationHandleT notificationHandle)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationSend(notificationHandle);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1160,17 +1166,18 @@ SaAisErrorT ntftool_saNtfNotificationSubscribe(
     const SaNtfNotificationTypeFilterHandlesT *notificationFilterHandles,
     SaNtfSubscriptionIdT subscriptionId)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationSubscribe(notificationFilterHandles,
                                                 subscriptionId);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1181,16 +1188,17 @@ SaAisErrorT ntftool_saNtfNotificationSubscribe(
 SaAisErrorT
 ntftool_saNtfNotificationUnsubscribe(SaNtfSubscriptionIdT subscriptionId)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationUnsubscribe(subscriptionId);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1203,17 +1211,18 @@ SaAisErrorT ntftool_saNtfNotificationReadInitialize(
     const SaNtfNotificationTypeFilterHandlesT *notificationFilterHandles,
     SaNtfReadHandleT *readHandle)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationReadInitialize(
                     searchCriteria, notificationFilterHandles, readHandle);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1226,17 +1235,18 @@ ntftool_saNtfNotificationReadNext(SaNtfReadHandleT 
readHandle,
                                   SaNtfSearchDirectionT searchDirection,
                                   SaNtfNotificationsT *notification)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationReadNext(readHandle, searchDirection,
                                                notification);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
@@ -1246,16 +1256,17 @@ ntftool_saNtfNotificationReadNext(SaNtfReadHandleT 
readHandle,
  */
 SaAisErrorT ntftool_saNtfNotificationReadFinalize(SaNtfReadHandleT readhandle)
 {
-       int curRetryTime = 0;
         SaAisErrorT rc;
+       struct timespec timeout_time;
+
+       osaf_set_millis_timeout(kWaitTime, &timeout_time);
         do {
                 rc = saNtfNotificationReadFinalize(readhandle);
                 if (rc == SA_AIS_ERR_TRY_AGAIN) {
-                       sleep(gl_apiRetry);
-                       curRetryTime += gl_apiRetry;
+                       osaf_nanosleep(&kHundredMilliseconds);
                 } else
                         break;
-       } while (curRetryTime < gl_apiTolerance);
+       } while (!osaf_is_timeout(&timeout_time));

         return rc;
 }
diff --git a/src/ntf/tools/ntfsend.c b/src/ntf/tools/ntfsend.c
index 4c59fe83c..43c8f3138 100644
--- a/src/ntf/tools/ntfsend.c
+++ b/src/ntf/tools/ntfsend.c
@@ -405,18 +405,12 @@ static SaAisErrorT sendNotification(

         unsigned int repeat = notificationParams->repeateSends;

-       do {
-               errorCode = ntftool_saNtfInitialize(&ntfHandle, NULL, &version);
-               if (SA_AIS_OK != errorCode &&
-                   SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                       (void)printf("ntftool_saNtfInitialize %s\n",
-                                    error_output(errorCode));
-                       return errorCode;
-               }
-               if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                       usleep(100000);
-               }
-       } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+       errorCode = ntftool_saNtfInitialize(&ntfHandle, NULL, &version);
+       if (errorCode != SA_AIS_OK) {
+               (void)printf("ntftool_saNtfInitialize %s\n",
+                            error_output(errorCode));
+               return errorCode;
+       }

         switch (notificationParams->notificationType) {
         case SA_NTF_TYPE_ALARM:
@@ -854,21 +848,13 @@ repeatedSend:
         case SA_NTF_TYPE_ALARM:

                 /* Send the alarm notification */
-               do {
-
-                       errorCode = ntftool_saNtfNotificationSend(
-                           myAlarmNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf(
-                                   "ntftool_saNtfNotificationSend %s\n",
-                                   error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = ntftool_saNtfNotificationSend(
+                               myAlarmNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("ntftool_saNtfNotificationSend %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 ntfId =
                     *(myAlarmNotification.notificationHeader.notificationId);
@@ -884,38 +870,25 @@ repeatedSend:
                         goto repeatedSend;
                 }

-               do {
-                       errorCode = saNtfNotificationFree(
-                           myAlarmNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf("saNtfNotificationFree %s\n",
-                                            error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = saNtfNotificationFree(
+                               myAlarmNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("saNtfNotificationFree %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 break;
         case SA_NTF_TYPE_STATE_CHANGE:
                 /* Send the state change notification */

-               do {
-                       errorCode = ntftool_saNtfNotificationSend(
-                           myStateChangeNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf(
-                                   "ntftool_saNtfNotificationSend %s\n",
-                                   error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = ntftool_saNtfNotificationSend(
+                   myStateChangeNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("ntftool_saNtfNotificationSend %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 ntfId = *(myStateChangeNotification.notificationHeader
                               .notificationId);
@@ -931,39 +904,26 @@ repeatedSend:
                         goto repeatedSend;
                 }

-               do {
-                       errorCode = saNtfNotificationFree(
-                           myStateChangeNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf("saNtfNotificationFree %s\n",
-                                            error_output(errorCode));
-                               return errorCode;
-                       }
-                       usleep(100000);
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = saNtfNotificationFree(
+                               myStateChangeNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("saNtfNotificationFree %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 break;

         case SA_NTF_TYPE_OBJECT_CREATE_DELETE:
                 /* Send the object create/delete notification */

-               do {
-
-                       errorCode = ntftool_saNtfNotificationSend(
-                           myObjectCreateDeleteNotification
-                               .notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf(
-                                   "ntftool_saNtfNotificationSend %s\n",
-                                   error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = ntftool_saNtfNotificationSend(
+                       myObjectCreateDeleteNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("ntftool_saNtfNotificationSend %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 ntfId = *(myObjectCreateDeleteNotification.notificationHeader
                               .notificationId);
@@ -979,40 +939,25 @@ repeatedSend:
                         goto repeatedSend;
                 }

-               do {
-
-                       errorCode = saNtfNotificationFree(
-                           myObjectCreateDeleteNotification
-                               .notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf("saNtfNotificationFree %s\n",
-                                            error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = saNtfNotificationFree(
+                       myObjectCreateDeleteNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("saNtfNotificationFree %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 break;

         case SA_NTF_TYPE_ATTRIBUTE_CHANGE:
                 /* Send the attribute change notification */
-               do {
-                       errorCode = ntftool_saNtfNotificationSend(
-                           myAttributeChangeNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf(
-                                   "ntftool_saNtfNotificationSend %s\n",
-                                   error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = ntftool_saNtfNotificationSend(
+                       myAttributeChangeNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("ntftool_saNtfNotificationSend %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 ntfId = *(myAttributeChangeNotification.notificationHeader
                               .notificationId);
@@ -1027,40 +972,26 @@ repeatedSend:
                         goto repeatedSend;
                 }

-               do {
-
-                       errorCode = saNtfNotificationFree(
-                           myAttributeChangeNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf("saNtfNotificationFree %s\n",
-                                            error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = saNtfNotificationFree(
+                       myAttributeChangeNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("saNtfNotificationFree %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 break;

         case SA_NTF_TYPE_SECURITY_ALARM: /* Send the state change notification
                                           */

-               do {
-                       errorCode = ntftool_saNtfNotificationSend(
-                           mySecurityAlarmNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf(
-                                   "ntftool_saNtfNotificationSend %s\n",
-                                   error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = ntftool_saNtfNotificationSend(
+                               mySecurityAlarmNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("ntftool_saNtfNotificationSend %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 ntfId = *(mySecurityAlarmNotification.notificationHeader
                               .notificationId);
@@ -1075,19 +1006,13 @@ repeatedSend:
                         goto repeatedSend;
                 }

-               do {
-                       errorCode = saNtfNotificationFree(
-                           mySecurityAlarmNotification.notificationHandle);
-                       if (SA_AIS_OK != errorCode &&
-                           SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                               (void)printf("saNtfNotificationFree %s\n",
-                                            error_output(errorCode));
-                               return errorCode;
-                       }
-                       if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                               usleep(100000);
-                       }
-               } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+               errorCode = saNtfNotificationFree(
+                               mySecurityAlarmNotification.notificationHandle);
+               if (SA_AIS_OK != errorCode) {
+                       (void)printf("saNtfNotificationFree %s\n",
+                                    error_output(errorCode));
+                       return errorCode;
+               }

                 break;

@@ -1096,18 +1021,7 @@ repeatedSend:
                 break;
         }

-       do {
-               errorCode = saNtfFinalize(ntfHandle);
-               if (SA_AIS_OK != errorCode &&
-                   SA_AIS_ERR_TRY_AGAIN != errorCode) {
-                       (void)printf("saNtfFinalize %s\n",
-                                    error_output(errorCode));
-                       return errorCode;
-               }
-               if (SA_AIS_ERR_TRY_AGAIN == errorCode) {
-                       usleep(100000);
-               }
-       } while (SA_AIS_ERR_TRY_AGAIN == errorCode);
+       saNtfFinalize(ntfHandle);

         return SA_AIS_OK;

--
2.15.1


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to