summaryrefslogtreecommitdiffstats
path: root/rpc/rpc-lib
diff options
context:
space:
mode:
authorVijay Bellur <vbellur@redhat.com>2015-04-06 12:34:55 +0530
committerVijay Bellur <vbellur@redhat.com>2015-05-03 11:04:33 -0700
commitee4b5ce0ef140e2ee98e7f061450b18ff2b53367 (patch)
treee66f2d498e14b968e7be50ccad09cd08e80e874d /rpc/rpc-lib
parent9330d740fdc99707d8d5ac61eee2935ce63d57e3 (diff)
rpc: Introduce attribute throttle for rpcsvc_t
This attribute will be used to set/unset throttling for a rpcsvc_t program subsequently. Following APIs have been added to get/set throttle. int rpcsvc_set_throttle (rpcsvc_t svc, gf_boolean_t value); gf_boolean_t rpcsvc_get_throttle (rpcsvc_t svc); Change-Id: Ica8a9166cef22eb92d81fe68e48d0a5e24a1ef95 BUG: 1216310 Signed-off-by: Vijay Bellur <vbellur@redhat.com> Reviewed-on: http://review.gluster.org/10267 Reviewed-by: Niels de Vos <ndevos@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com> Tested-by: Raghavendra G <rgowdapp@redhat.com> Reviewed-on: http://review.gluster.org/10442 Tested-by: NetBSD Build System
Diffstat (limited to 'rpc/rpc-lib')
-rw-r--r--rpc/rpc-lib/src/rpcsvc-common.h2
-rw-r--r--rpc/rpc-lib/src/rpcsvc.c46
-rw-r--r--rpc/rpc-lib/src/rpcsvc.h10
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