Hi Canh,

Ack with minor comments inline.

Regards, Vu

> -----Original Message-----
> From: Canh Van Truong <canh.v.tru...@dektech.com.au>
> Sent: Monday, July 2, 2018 5:24 PM
> To: lennart.l...@ericsson.com; vu.m.ngu...@dektech.com.au
> Cc: opensaf-devel@lists.sourceforge.net; Canh Van Truong
> <canh.v.tru...@dektech.com.au>
> Subject: [PATCH 1/1] osaf: update for saflog in case saLogWriteLogAsync
> with BAD_HANDLE [#2886]
> 
> If saLogWriteLogAsync return BAD_HANDLE error, log client will never be
> re-initialized again. The patch reset variable "log_client_initialized =
false"
> in case BAD_HANDLE and the client will be re-initialized later.
> ---
>  src/osaf/saflog/saflog.c | 75
++++++++++++++++--------------------------------
>  1 file changed, 25 insertions(+), 50 deletions(-)
> 
> diff --git a/src/osaf/saflog/saflog.c b/src/osaf/saflog/saflog.c
> index 0c6ae5850..24312d162 100644
> --- a/src/osaf/saflog/saflog.c
> +++ b/src/osaf/saflog/saflog.c
> @@ -15,53 +15,48 @@
>   * Author(s): Ericsson
>   *
>   */
> +#include "osaf/saflog/saflog.h"
> 
>  #include <stdio.h>
> -#include <syslog.h>
>  #include <stdarg.h>
> +#include <stdbool.h>
>  #include <unistd.h>
> -#include "osaf/saflog/saflog.h"
>  #include <saAis.h>
> +#include "base/logtrace.h"
> 
> -static int initialized;
> +static bool log_client_initialized;
[Vu] Should initialize this variable.

>  static SaLogStreamHandleT logStreamHandle;
>  static SaLogHandleT logHandle;
> 
>  void saflog_init(void)
>  {
> -     SaAisErrorT error;
> -
> -     if (!initialized) {
> +     if (log_client_initialized == false) {
[Vu] Checking the value with true might be better. Return if true, otherwise
do below. 
Do that, we will not have one more level of indentation.

>               SaVersionT logVersion = {'A', 2, 3};
>               SaNameT stream_name;
>               saAisNameLend(SA_LOG_STREAM_SYSTEM, &stream_name);
> 
> -             error = saLogInitialize(&logHandle, NULL, &logVersion);
> -             if (error != SA_AIS_OK) {
> -                     syslog(LOG_INFO,
> -                            "saflogInit: saLogInitialize FAILED: %u",
error);
> +             SaAisErrorT rc = saLogInitialize(&logHandle, NULL,
> &logVersion);
[Vu] Consider to add retry mechanism when calling SAF API.

> +             if (rc != SA_AIS_OK) {
> +                     LOG_NO("saflogInit: saLogInitialize FAILED: %u",
rc);
>                       return;
>               }
> 
> -             error = saLogStreamOpen_2(logHandle, &stream_name,
> NULL, 0,
> +             rc = saLogStreamOpen_2(logHandle, &stream_name, NULL, 0,
>                                         SA_TIME_ONE_SECOND,
> &logStreamHandle);
> -             if (error != SA_AIS_OK) {
> -                     syslog(LOG_INFO,
> -                            "saflogInit: saLogStreamOpen_2 FAILED: %u",
> -                            error);
> +             if (rc != SA_AIS_OK) {
> +                     LOG_NO("saflogInit: saLogStreamOpen_2 FAILED: %u",
> rc);
>                       if (saLogFinalize(logHandle) != SA_AIS_OK)
> -                             syslog(LOG_INFO,
> -                                    "saflogInit: saLogFinalize FAILED:
%u",
> -                                    error);
> +                             LOG_NO("saflogInit: saLogFinalize FAILED:
%u",
> +                                    rc);
>                       return;
>               }
> -             initialized = 1;
> +             log_client_initialized = true;
>       }
>  }
> 
>  void saflog(int priority, const SaNameT *logSvcUsrName, const char
> *format, ...)
>  {
> -     SaAisErrorT error;
> +     SaAisErrorT rc;
>       SaLogRecordT logRecord;
>       SaLogBufferT logBuffer;
>       va_list ap;
> @@ -74,34 +69,14 @@ void saflog(int priority, const SaNameT
> *logSvcUsrName, const char *format, ...)
>       va_end(ap);
> 
>       if (logBuffer.logBufSize > SA_LOG_MAX_RECORD_SIZE) {
> -             syslog(LOG_INFO,
> -                    "saflog write FAILED: log record size > %u max
limit",
> +             LOG_NO("saflog write FAILED: log record size > %u max
limit",
>                      SA_LOG_MAX_RECORD_SIZE);
>               return;
>       }
> 
> -     if (!initialized) {
> -             SaVersionT logVersion = {'A', 2, 3};
> -             SaNameT stream_name;
> -             saAisNameLend(SA_LOG_STREAM_SYSTEM, &stream_name);
> -
> -             error = saLogInitialize(&logHandle, NULL, &logVersion);
> -             if (error != SA_AIS_OK) {
> -                     syslog(LOG_INFO, "saLogInitialize FAILED: %u",
error);
> -                     goto done;
> -             }
> -
> -             error = saLogStreamOpen_2(logHandle, &stream_name,
> NULL, 0,
> -                                       SA_TIME_ONE_SECOND,
> &logStreamHandle);
> -             if (error != SA_AIS_OK) {
> -                     syslog(LOG_INFO, "saLogStreamOpen_2 FAILED: %u",
> error);
> -                     if (saLogFinalize(logHandle) != SA_AIS_OK)
> -                             syslog(LOG_INFO, "saLogFinalize FAILED: %u",
> -                                    error);
> -                     goto done;
> -             }
> -             initialized = 1;
> -     }
> +     // Initialize log client and open system stream if they are NOT
> +     saflog_init();
> +     if (log_client_initialized == false) return;
> 
>       logRecord.logTimeStamp = SA_TIME_UNKNOWN;
>       logRecord.logHdrType = SA_LOG_GENERIC_HEADER;
> @@ -111,11 +86,11 @@ void saflog(int priority, const SaNameT
> *logSvcUsrName, const char *format, ...)
>       logRecord.logBuffer = &logBuffer;
>       logBuffer.logBuf = (SaUint8T *)str;
> 
> -     error = saLogWriteLogAsync(logStreamHandle, 0, 0, &logRecord);
> +     rc = saLogWriteLogAsync(logStreamHandle, 0, 0, &logRecord);
[Vu] Consider to add retry mechanism when calling SAF API
> 
> -done:
> -     /* fallback to syslog at ANY error, syslog prio same as saflog
severity
> -      */
> -     if (error != SA_AIS_OK)
> -             syslog(priority, "%s", str);
> +     if (rc != SA_AIS_OK) {
> +             LOG_NO("saflog write \"%s\" FAILED", str);
> +             if (rc == SA_AIS_ERR_BAD_HANDLE)
[Vu] Finalize log handle here.
> +                     log_client_initialized = false;
> +     }
>  }
> --
> 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