diff options
author | Niels de Vos <ndevos@redhat.com> | 2017-04-17 15:50:07 +0530 |
---|---|---|
committer | Kaleb KEITHLEY <kkeithle@redhat.com> | 2017-05-01 09:30:14 +0000 |
commit | 73fcf3a874b2049da31d01b8363d1ac85c9488c2 (patch) | |
tree | b9db965e337fde22a7668cb11ffb0351619a924f /xlators | |
parent | 859669759f7fa0f2114add13660ce3bf16c77f30 (diff) |
core: make the per glusterfs_ctx_t timer-wheel refcounted
xlators can use a 'global' timer-wheel for scheduling events. This
timer-wheel is managed per glusterfs_ctx_t, but does not need to be
allocated for every graph. When an xlator wants to use the timer-wheel,
it will be instanciated on demand, and provided to xlators that request
it later on.
By adding a reference counter to the glusterfs_ctx_t for the
timer-wheel, the threads and structures can be cleaned up when the last
xlator does not have a need for it anymore. In general, the xlators
request the timer-wheel in init(), and they should return it in fini().
Because the timer-wheel is managed per glusterfs_ctx_t, the functions
can be added to ctx.c and do not need to live in their very minimal
tw.[ch] files.
Change-Id: I19d225b39aaa272d9005ba7adc3104c3764f1572
BUG: 1442788
Reported-by: Poornima G <pgurusid@redhat.com>
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: https://review.gluster.org/17068
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Zhou Zhengping <johnzzpcrystal@gmail.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot.c | 6 | ||||
-rw-r--r-- | xlators/features/leases/src/leases.c | 18 | ||||
-rw-r--r-- | xlators/features/leases/src/leases.h | 1 | ||||
-rw-r--r-- | xlators/performance/nl-cache/src/nl-cache.c | 18 |
4 files changed, 16 insertions, 27 deletions
diff --git a/xlators/features/bit-rot/src/bitd/bit-rot.c b/xlators/features/bit-rot/src/bitd/bit-rot.c index e55a22f1cdc..6e86ceb02e7 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot.c +++ b/xlators/features/bit-rot/src/bitd/bit-rot.c @@ -21,8 +21,6 @@ #include <pthread.h> #include "bit-rot-bitd-messages.h" -#include "tw.h" - #define BR_HASH_CALC_READ_SIZE (128 * 1024) typedef int32_t (br_child_handler)(xlator_t *, br_child_t *); @@ -1994,7 +1992,7 @@ init (xlator_t *this) INIT_LIST_HEAD (&priv->bricks); INIT_LIST_HEAD (&priv->signing); - priv->timer_wheel = glusterfs_global_timer_wheel (this); + priv->timer_wheel = glusterfs_ctx_tw_get (this->ctx); if (!priv->timer_wheel) { gf_msg (this->name, GF_LOG_ERROR, 0, BRB_MSG_TIMER_WHEEL_UNAVAILABLE, @@ -2062,6 +2060,8 @@ fini (xlator_t *this) this->private = NULL; GF_FREE (priv); + glusterfs_ctx_tw_put (this->ctx); + return; } diff --git a/xlators/features/leases/src/leases.c b/xlators/features/leases/src/leases.c index 3e0460000d7..faffa0e71f8 100644 --- a/xlators/features/leases/src/leases.c +++ b/xlators/features/leases/src/leases.c @@ -957,19 +957,11 @@ leases_init_priv (xlator_t *this) GF_ASSERT (priv); if (!priv->timer_wheel) { - if (!glusterfs_global_timer_wheel (this)) { - gf_msg_debug (this->name, 0, "Initing the global " - "timer wheel"); - ret = glusterfs_global_timer_wheel_init (this->ctx); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, - LEASE_MSG_NO_TIMER_WHEEL, - "Initing the global timer " - "wheel failed"); - goto out; - } + priv->timer_wheel = glusterfs_ctx_tw_get (this->ctx); + if (!priv->timer_wheel) { + ret = -1; + goto out; } - priv->timer_wheel = glusterfs_global_timer_wheel (this); } if (!priv->inited_recall_thr) { @@ -1076,6 +1068,8 @@ fini (xlator_t *this) GF_FREE (priv); + glusterfs_ctx_tw_put (this->ctx); + return 0; } diff --git a/xlators/features/leases/src/leases.h b/xlators/features/leases/src/leases.h index 703c4d809cd..443c6a22324 100644 --- a/xlators/features/leases/src/leases.h +++ b/xlators/features/leases/src/leases.h @@ -26,7 +26,6 @@ #include "lkowner.h" #include "locking.h" #include "upcall-utils.h" -#include "tw.h" #include "timer-wheel.h" #include "leases-mem-types.h" #include "leases-messages.h" diff --git a/xlators/performance/nl-cache/src/nl-cache.c b/xlators/performance/nl-cache/src/nl-cache.c index f301b2d06dd..f8d2642be30 100644 --- a/xlators/performance/nl-cache/src/nl-cache.c +++ b/xlators/performance/nl-cache/src/nl-cache.c @@ -12,7 +12,6 @@ #include "nl-cache.h" #include "statedump.h" #include "upcall-utils.h" -#include "tw.h" static void nlc_dentry_op (call_frame_t *frame, xlator_t *this, gf_boolean_t multilink) @@ -627,6 +626,8 @@ nlc_priv_dump (xlator_t *this) void fini (xlator_t *this) { + glusterfs_ctx_tw_put (this->ctx); + return; } @@ -702,17 +703,12 @@ init (xlator_t *this) INIT_LIST_HEAD (&conf->lru); time (&conf->last_child_down); - if (!glusterfs_global_timer_wheel (this)) { - gf_msg_debug (this->name, 0, "Initing the global timer wheel"); - ret = glusterfs_global_timer_wheel_init (this->ctx); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, - NLC_MSG_NO_TIMER_WHEEL, - "Initing the global timer wheel failed"); - goto out; - } + conf->timer_wheel = glusterfs_ctx_tw_get (this->ctx); + if (!conf->timer_wheel) { + gf_msg (this->name, GF_LOG_ERROR, 0, NLC_MSG_NO_TIMER_WHEEL, + "Initing the global timer wheel failed"); + goto out; } - conf->timer_wheel = glusterfs_global_timer_wheel (this); this->private = conf; |