Hi Srinivas,

I have some comments:

1) Add such retry logic could hang the main thread and may cause unwanted
troubles 
such as health-check timeout, delay processing higher priority events.

2) Possibility of race condition using IMM OI handle b/w main thread and
recovery thread.

3) When getting TIMEOUT, we don't know the job is in progress on IMM side or
not. It could finally successfully create the object, we don't know.
If that is the case, that object may be leaked. 

Regards, Vu

> -----Original Message-----
> From: Srinivas [mailto:srinivas.mangip...@oracle.com]
> Sent: Monday, December 4, 2017 10:34 AM
> To: lennart.l...@ericsson.com; vu.m.ngu...@dektech.com.au
> Cc: opensaf-devel@lists.sourceforge.net; Srinivas
> <srinivas.mangip...@oracle.com>
> Subject: [PATCH 1/1] log: Added retry logic for RT object creation call
fails due
> to timeout error [#2711]
> 
> ---
>  src/log/logd/lgs_stream.cc | 44 +++++++++++++++++++++++++++++++----------
> ---
>  1 file changed, 31 insertions(+), 13 deletions(-)
> 
> diff --git a/src/log/logd/lgs_stream.cc b/src/log/logd/lgs_stream.cc
> index 65689d6..4f7c3f8 100644
> --- a/src/log/logd/lgs_stream.cc
> +++ b/src/log/logd/lgs_stream.cc
> @@ -623,19 +623,37 @@ SaAisErrorT lgs_create_rt_appstream(log_stream_t
> *const stream) {
>          NULL};
> 
>      {
> -      /**
> -       * Have to have retry for Rt creation.
> -       * Rt update could consider removing retry to avoid blocking
> -       */
> -      rc = immutil_saImmOiRtObjectCreate_2(
> -          lgs_cb->immOiHandle,
> const_cast<SaImmClassNameT>("SaLogStream"),
> -          parentName, attrValues);
> -      free(dndup);
> -
> -      if (rc != SA_AIS_OK) {
> -        LOG_WA("saImmOiRtObjectCreate_2 returned %u for %s, parent %s",
> rc,
> -               stream->name.c_str(), parent_name);
> -      }
> +        uint16_t count = 0;
> +        rc = immutil_saImmOiRtObjectCreate_2(
> +            lgs_cb->immOiHandle,
> const_cast<SaImmClassNameT>("SaLogStream"),
> +            parentName, attrValues);
> +
> +        while (((rc == SA_AIS_ERR_TIMEOUT) || (rc ==
> SA_AIS_ERR_BAD_HANDLE))
> +               && (count < 10)) {
> +            LOG_WA(
> +                "immutil_saImmOiRtObjectCreate_2 returned %u for %s,
parent
> %s",
> +                rc, stream->name.c_str(), parent_name);
> +
> +            if ( rc == SA_AIS_ERR_BAD_HANDLE ) {
> +                saImmOiFinalize(lgs_cb->immOiHandle);
> +                lgs_cb->immOiHandle = 0;
> +                lgs_cb->immSelectionObject = -1;
> +                /* Initiate IMM reinitializtion */
> +                lgs_imm_impl_reinit_nonblocking(lgs_cb);
> +            }
> +            count++;
> +            osaf_nanosleep(&kHundredMilliseconds);
> +            rc = immutil_saImmOiRtObjectCreate_2(
> +            lgs_cb->immOiHandle,
> const_cast<SaImmClassNameT>("SaLogStream"),
> +            parentName, attrValues);
> +        }
> +        free(dndup);
> +
> +        if (rc != SA_AIS_OK) {
> +            LOG_WA(
> +               "saImmOiRtObjectCreate_2 returned %u for %s, parent %s",
> +               rc, stream->name.c_str(), parent_name);
> +        }
>      }
>    }
> 
> --
> 2.7.4



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