Hi Minh,
One more.

B.R/Thang

-----Original Message-----
From: Minh Hon Chau <minh.c...@dektech.com.au> 
Sent: Tuesday, May 18, 2021 9:36 AM
To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Thien Minh Huynh 
<thien.m.hu...@dektech.com.au>; Surbhi Tripathi <surbhi.tripa...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 1/2] immnd: Make IMMSV_FEVS_MAX_PENDING environment 
variable [#3260]

Hi Thang,

Please see inline comments

Thanks

Minh

On 18/5/21 12:28 pm, Thang Duc Nguyen wrote:
> Hi Minh,
> 2 comments inline.
>
> B.R/Thang
>
> -----Original Message-----
> From: Minh Hon Chau <minh.c...@dektech.com.au>
> Sent: Tuesday, May 18, 2021 6:51 AM
> To: Thien Minh Huynh <thien.m.hu...@dektech.com.au>; Surbhi Tripathi 
> <surbhi.tripa...@dektech.com.au>; Thang Duc Nguyen 
> <thang.d.ngu...@dektech.com.au>
> Cc: opensaf-devel@lists.sourceforge.net; Minh Hon Chau 
> <minh.c...@dektech.com.au>
> Subject: [PATCH 1/2] immnd: Make IMMSV_FEVS_MAX_PENDING environment 
> variable [#3260]
>
> Immnd allows IMMSV_FEVS_MAX_PENDING sourced from enviroment variable, 
> or uses default value (16) otherwise
> [Thang]: I think it's better if we can define MAX VALUE for this env var.
[M: It's already checked with UINT8_MAX.
[Thang]: IMM can work/any degradation if it is to high value, e.g,  
(UINT8_MAX-1).

> For Example 64 or 128 ....
> ---
>   src/imm/common/immsv_api.h     |  4 ----
>   src/imm/immloadd/imm_loader.cc |  2 +-
>   src/imm/immnd/ImmModel.cc      |  2 +-
>   src/imm/immnd/immnd.conf       |  4 ++++
>   src/imm/immnd/immnd_cb.h       |  1 +
>   src/imm/immnd/immnd_evt.c      | 41 ++++++++++++++++------------------
>   src/imm/immnd/immnd_main.c     | 15 +++++++++++++
>   7 files changed, 41 insertions(+), 28 deletions(-)
>
> diff --git a/src/imm/common/immsv_api.h b/src/imm/common/immsv_api.h 
> index c37a624ed..f809c8168 100644
> --- a/src/imm/common/immsv_api.h
> +++ b/src/imm/common/immsv_api.h
> @@ -77,10 +77,6 @@ typedef enum {
>     ACCESS_CONTROL_ENFORCING = 2
>   } OsafImmAccessControlModeT;
>   
> -/*Max # of outstanding fevs messages towards director.*/ -/*Note 
> max-max is 255. cb->fevs_replies_pending is an uint8_t*/ -#define 
> IMMSV_DEFAULT_FEVS_MAX_PENDING 16
> -
>   #define IMMSV_MAX_OBJECTS 10000
>   #define IMMSV_MAX_ATTRIBUTES 128
>   #define IMMSV_MAX_ADMO_NAME_LENGTH 256 diff --git 
> a/src/imm/immloadd/imm_loader.cc b/src/imm/immloadd/imm_loader.cc 
> index 516fb24ec..fadb0da51 100644
> --- a/src/imm/immloadd/imm_loader.cc
> +++ b/src/imm/immloadd/imm_loader.cc
> @@ -2318,7 +2318,7 @@ int syncObjectsOfClass(std::string className, 
> SaImmHandleT &immHandle,
>       do {
>         if (retries) {
>           /* TRY_AGAIN while sync is in progress means *this* IMMND most 
> likely
> -           has reached IMMSV_DEFAULT_FEVS_MAX_PENDING. This means that *this*
> +           has reached max pending fevs messages. This means that
> + *this*
>              IMMND has sent its quota of fevs messages to IMMD without having
>              received them back via broadcast from IMMD.
>   
> diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc 
> index 2d750040e..8631dc21f 100644
> --- a/src/imm/immnd/ImmModel.cc
> +++ b/src/imm/immnd/ImmModel.cc
> @@ -1614,7 +1614,7 @@ SaAisErrorT immModel_nextResult(IMMND_CB* cb, void* 
> searchOp,
>         TRACE_2(
>             "ERR_TRY_AGAIN: Too many pending incoming fevs "
>             "messages (> %u) rejecting sync iteration next request",
> -          IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +          cb->mFevsMaxPending);
>         return SA_AIS_ERR_TRY_AGAIN;
>       }
>       err = ImmModel::instance(&cb->immModel)->nextSyncResult(rsp, 
> *op); diff --git a/src/imm/immnd/immnd.conf b/src/imm/immnd/immnd.conf 
> index e62367654..f9a809e16 100644
> --- a/src/imm/immnd/immnd.conf
> +++ b/src/imm/immnd/immnd.conf
> @@ -95,3 +95,7 @@ export IMMSV_ENV_HEALTHCHECK_KEY="Default"
>   #                                    objects, objects_blob_multi,
>   #                                    objects_int_multi, objects_real_multi,
>   #                                    objects_text_multi, pbe_rep_version";
> +
> +# Max outstanding fevs messages towards director without having 
> +received # them back via director's broadcast message. Default value is 16.
> +# export IMMSV_FEVS_MAX_PENDING=64
> diff --git a/src/imm/immnd/immnd_cb.h b/src/imm/immnd/immnd_cb.h index 
> bb3bb8493..bc2d75b05 100644
> --- a/src/imm/immnd/immnd_cb.h
> +++ b/src/imm/immnd/immnd_cb.h
> @@ -209,6 +209,7 @@ typedef struct immnd_cb_tag {
>     NCS_PATRICIA_TREE immnd_clm_list; /* IMMND_IMM_CLIENT_NODE - node */
>     tmr_t splitbrain_tmr;
>     bool splitbrain_tmr_run;
> +  uint8_t mFevsMaxPending; /* Max pending fevs messages towards 
> + director */
>   } IMMND_CB;
>   
>   /* CB prototypes */
> diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c 
> index 0e801a942..64c5223c4 100644
> --- a/src/imm/immnd/immnd_evt.c
> +++ b/src/imm/immnd/immnd_evt.c
> @@ -1787,7 +1787,7 @@ static uint32_t immnd_evt_proc_search_next(IMMND_CB 
> *cb, IMMND_EVT *evt,
>       IMMSV_OM_RSP_SEARCH_NEXT **rspList = NULL;
>       MDS_DEST implDest = 0LL;
>       bool retardSync =
> -         ((cb->fevs_replies_pending >= IMMSV_DEFAULT_FEVS_MAX_PENDING) &&
> +         ((cb->fevs_replies_pending >= cb->mFevsMaxPending) &&
>            cb->mIsCoord && (cb->syncPid > 0));
>       SaUint32T resultSize = 0;
>       IMMSV_OM_RSP_SEARCH_BUNDLE_NEXT bundleSearch = {0, NULL}; @@ -2767,10 
> +2767,10 @@ static uint32_t immnd_evt_proc_admowner_init(IMMND_CB *cb, 
> IMMND_EVT *evt,
>               goto agent_rsp;
>       }
>   
> -     if (cb->fevs_replies_pending >= IMMSV_DEFAULT_FEVS_MAX_PENDING) {
> +     if (cb->fevs_replies_pending >= cb->mFevsMaxPending) {
>               TRACE_2(
>                   "ERR_TRY_AGAIN: Too many pending incoming fevs messages (> 
> %u) rejecting admo_init request",
> -                 IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                 cb->mFevsMaxPending);
>               send_evt.info.imma.info.admInitRsp.error = SA_AIS_ERR_TRY_AGAIN;
>               goto agent_rsp;
>       }
> @@ -2895,10 +2895,10 @@ static uint32_t immnd_evt_proc_impl_set(IMMND_CB *cb, 
> IMMND_EVT *evt,
>               goto agent_rsp;
>       }
>   
> -     if (cb->fevs_replies_pending >= IMMSV_DEFAULT_FEVS_MAX_PENDING) {
> +     if (cb->fevs_replies_pending >= cb->mFevsMaxPending) {
>               TRACE_2(
>                   "ERR_TRY_AGAIN: Too many pending incoming fevs messages (> 
> %u) rejecting impl_set request",
> -                 IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                 cb->mFevsMaxPending);
>               send_evt.info.imma.info.implSetRsp.error = SA_AIS_ERR_TRY_AGAIN;
>               goto agent_rsp;
>       }
> @@ -3061,10 +3061,10 @@ static uint32_t immnd_evt_proc_ccb_init(IMMND_CB *cb, 
> IMMND_EVT *evt,
>               goto agent_rsp;
>       }
>   
> -     if (cb->fevs_replies_pending >= IMMSV_DEFAULT_FEVS_MAX_PENDING) {
> +     if (cb->fevs_replies_pending >= cb->mFevsMaxPending) {
>               TRACE_2(
>                   "ERR_TRY_AGAIN: Too many pending incoming fevs messages (> 
> %u) rejecting ccb_init request",
> -                 IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                 cb->mFevsMaxPending);
>               send_evt.info.imma.info.ccbInitRsp.error = SA_AIS_ERR_TRY_AGAIN;
>               goto agent_rsp;
>       }
> @@ -3220,11 +3220,10 @@ static uint32_t immnd_evt_proc_rt_update(IMMND_CB 
> *cb, IMMND_EVT *evt,
>                  writbale.
>                */
>   
> -             if (cb->fevs_replies_pending >=
> -                 IMMSV_DEFAULT_FEVS_MAX_PENDING) {
> +             if (cb->fevs_replies_pending >= cb->mFevsMaxPending) {
>                       TRACE_2(
>                           "ERR_TRY_AGAIN: Too many pending incoming fevs 
> messages (> %u) rejecting rt_update request",
> -                         IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                         cb->mFevsMaxPending);
>                       err = SA_AIS_ERR_TRY_AGAIN;
>                       goto agent_rsp;
>               }
> @@ -3497,7 +3496,7 @@ static uint32_t immnd_evt_proc_fevs_forward(IMMND_CB 
> *cb, IMMND_EVT *evt,
>       /* If overflow .....OR IMMD is down.....OR sync is on-going AND
>          out-queue is not empty => go via out-queue. The sync should be
>          throttled by immnd_evt_proc_search_next. */
> -     if ((cb->fevs_replies_pending >= IMMSV_DEFAULT_FEVS_MAX_PENDING) ||
> +     if ((cb->fevs_replies_pending >= cb->mFevsMaxPending) ||
>           !immnd_is_immd_up(cb) ||
>           ((cb->mState == IMM_SERVER_SYNC_SERVER) && cb->fevs_out_count &&
>            asyncReq && newMsg)) {
> @@ -3518,12 +3517,12 @@ static uint32_t immnd_evt_proc_fevs_forward(IMMND_CB 
> *cb, IMMND_EVT *evt,
>                               TRACE_2(
>                                   "Too many pending incoming FEVS messages (> 
> %u) "
>                                   "enqueueing async message. Backlog:%u",
> -                                 IMMSV_DEFAULT_FEVS_MAX_PENDING, backlog);
> +                                 cb->mFevsMaxPending, backlog);
>                       } else {
>                               LOG_IN(
>                                   "Too many pending incoming FEVS messages (> 
> %u) "
>                                   "enqueueing async message. Backlog:%u",
> -                                 IMMSV_DEFAULT_FEVS_MAX_PENDING, backlog);
> +                                 cb->mFevsMaxPending, backlog);
>                       }
>   
>                       return NCSCC_RC_SUCCESS;
> @@ -3533,7 +3532,7 @@ static uint32_t immnd_evt_proc_fevs_forward(IMMND_CB 
> *cb, IMMND_EVT *evt,
>                          case. */
>                       TRACE_2(
>                           "ERR_TRY_AGAIN: Too many pending FEVS message 
> replies (> %u) rejecting request",
> -                         IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                         cb->mFevsMaxPending);
>                       error = SA_AIS_ERR_TRY_AGAIN;
>                       goto agent_rsp;
>               }
> @@ -3824,8 +3823,7 @@ static SaAisErrorT immnd_fevs_local_checks(IMMND_CB 
> *cb, IMMSV_FEVS *fevsReq,
>                       break;
>               }
>               if (immModel_pbeNotWritable(cb) ||
> -                 (cb->fevs_replies_pending >=
> -                  IMMSV_DEFAULT_FEVS_MAX_PENDING) ||
> +                 (cb->fevs_replies_pending >= cb->mFevsMaxPending) ||
>                   !immnd_is_immd_up(cb)) {
>                       /* NO_RESOURCES is here imm internal proxy for
>                          TRY_AGAIN. The library code for saImmOmCcbApply will 
> @@ -3836,12 +3834,11 @@ static SaAisErrorT immnd_fevs_local_checks(IMMND_CB 
> *cb, IMMSV_FEVS *fevsReq,
>                          TRY_AGAIN towards that particular library code.
>                        */
>                       error = SA_AIS_ERR_NO_RESOURCES;
> -                     if (cb->fevs_replies_pending >=
> -                         IMMSV_DEFAULT_FEVS_MAX_PENDING) {
> +                     if (cb->fevs_replies_pending >= cb->mFevsMaxPending) {
>                               TRACE_2(
>                                   "ERR_TRY_AGAIN: Too many pending FEVS 
> message replies (> %u) rejecting request"
>                                   "for CcbApply",
> -                                 IMMSV_DEFAULT_FEVS_MAX_PENDING);
> +                                 cb->mFevsMaxPending);
>                       }
>               }
>               break;
> @@ -10731,15 +10728,15 @@ void dequeue_outgoing(IMMND_CB *cb)
>       IMMND_EVT dummy_evt;
>   
>       unsigned int space =
> -         (cb->fevs_replies_pending < IMMSV_DEFAULT_FEVS_MAX_PENDING)
> -             ? (IMMSV_DEFAULT_FEVS_MAX_PENDING - cb->fevs_replies_pending)
> +         (cb->fevs_replies_pending < cb->mFevsMaxPending)
> +             ? (cb->mFevsMaxPending - cb->fevs_replies_pending)
>               : 0;
>   
>       TRACE("Pending replies:%u space:%u out list?:%p",
>             cb->fevs_replies_pending, space, cb->fevs_out_list);
>   
>       while (cb->fevs_out_list && space &&
> -            (cb->fevs_replies_pending < IMMSV_DEFAULT_FEVS_MAX_PENDING) &&
> +            (cb->fevs_replies_pending < cb->mFevsMaxPending) &&
>              immnd_is_immd_up(cb)) {
>               memset(&dummy_evt, '\0', sizeof(IMMND_EVT));
>               unsigned int backlog = immnd_dequeue_outgoing_fevs_msg( diff 
> --git 
> a/src/imm/immnd/immnd_main.c b/src/imm/immnd/immnd_main.c index 
> 410134c97..a26005528 100644
> --- a/src/imm/immnd/immnd_main.c
> +++ b/src/imm/immnd/immnd_main.c
> @@ -337,6 +337,21 @@ static uint32_t immnd_initialize(char *progname)
>                   "Persistent Back-End capability configured, Pbe file:%s 
> (suffix may get added)",
>                   immnd_cb->mPbeFile);
>       }
> +     immnd_cb->mFevsMaxPending = 16;
> +     if ((envVar = getenv("IMMSV_FEVS_MAX_PENDING"))) {
> +             int maxFevsPending = atoi(envVar);
> +             if (maxFevsPending > UINT8_MAX) {
> +                     LOG_WA("IMMSV_FEVS_MAX_PENDING set too large(%u)",
> +                             maxFevsPending);
> +                     maxFevsPending = UINT8_MAX;
> +             } else if (maxFevsPending <= 0) {
> +                     LOG_WA("Invalid IMMSV_FEVS_MAX_PENDING environment"
> +                             " variable");
> [Thang]: It's better to inform default value(16) will be used.
[M]: The below LOG_NO has informed the value sourced from the env variable, 
whether it is valid or invalid, the value being used is printed out in LOG_NO
>
> +                     maxFevsPending = 16;
> +             }
> +             immnd_cb->mFevsMaxPending = maxFevsPending;
> +             LOG_NO("Use IMMSV_FEVS_MAX_PENDING (%u)", maxFevsPending);
> +     }
>   
>       FILE *fp;
>       char node_type[20];
> --
> 2.20.1
>

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

Reply via email to