OK. No more comment. -----Original Message----- From: Minh Hon Chau <minh.c...@dektech.com.au> Sent: Tuesday, May 18, 2021 9:47 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 reply. Thanks Minh On 18/5/21 12:42 pm, Thang Duc Nguyen wrote: > 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). [M] Not sure what is comment/suggestion here? The old max value of fevs is 255 according to legacy code. UINT8_MAX is 255 > >> 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