diff options
Diffstat (limited to 'rpc/rpc-lib/src')
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc-common.h | 2 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 46 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.h | 10 | 
3 files changed, 58 insertions, 0 deletions
diff --git a/rpc/rpc-lib/src/rpcsvc-common.h b/rpc/rpc-lib/src/rpcsvc-common.h index 3c16abeb77a..832645bd12a 100644 --- a/rpc/rpc-lib/src/rpcsvc-common.h +++ b/rpc/rpc-lib/src/rpcsvc-common.h @@ -77,6 +77,8 @@ typedef struct rpcsvc_state {  	/* per-client limit of outstanding rpc requests */          int                     outstanding_rpc_limit;          gf_boolean_t            addr_namelookup; +        /* determine whether throttling is needed, by default OFF */ +        gf_boolean_t            throttle;  } rpcsvc_t;  /* DRC START */ diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index 5717bedcf17..0a4dc04c731 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -2203,6 +2203,52 @@ rpcsvc_set_outstanding_rpc_limit (rpcsvc_t *svc, dict_t *options, int defvalue)          return (0);  } +/* + * Enable throttling for rpcsvc_t svc. + * Returns 0 on success, -1 otherwise. + */ +int +rpcsvc_set_throttle_on (rpcsvc_t *svc) +{ + +        if (!svc) +                return -1; + +        svc->throttle = _gf_true; + +        return 0; +} + +/* + * Disable throttling for rpcsvc_t svc. + * Returns 0 on success, -1 otherwise. + */ +int +rpcsvc_set_throttle_off (rpcsvc_t *svc) +{ + +        if (!svc) +                return -1; + +        svc->throttle = _gf_false; + +        return 0; +} + +/* + * Get throttle state for rpcsvc_t svc. + * Returns value of attribute throttle on success, _gf_false otherwise. + */ +gf_boolean_t +rpcsvc_get_throttle (rpcsvc_t *svc) +{ + +        if (!svc) +                return _gf_false; + +        return svc->throttle; +} +  /* The global RPC service initializer.   */  rpcsvc_t * diff --git a/rpc/rpc-lib/src/rpcsvc.h b/rpc/rpc-lib/src/rpcsvc.h index 1bf6b07ee2f..027e2ca1ffb 100644 --- a/rpc/rpc-lib/src/rpcsvc.h +++ b/rpc/rpc-lib/src/rpcsvc.h @@ -604,6 +604,16 @@ int  rpcsvc_set_root_squash (rpcsvc_t *svc, dict_t *options);  int  rpcsvc_set_outstanding_rpc_limit (rpcsvc_t *svc, dict_t *options, int defvalue); + +int +rpcsvc_set_throttle_on (rpcsvc_t *svc); + +int +rpcsvc_set_throttle_off (rpcsvc_t *svc); + +gf_boolean_t +rpcsvc_get_throttle (rpcsvc_t *svc); +  int  rpcsvc_auth_array (rpcsvc_t *svc, char *volname, int *autharr, int arrlen);  rpcsvc_vector_sizer  | 
