summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2017-04-17 15:50:07 +0530
committerKaleb KEITHLEY <kkeithle@redhat.com>2017-05-01 09:30:14 +0000
commit73fcf3a874b2049da31d01b8363d1ac85c9488c2 (patch)
treeb9db965e337fde22a7668cb11ffb0351619a924f /xlators
parent859669759f7fa0f2114add13660ce3bf16c77f30 (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.c6
-rw-r--r--xlators/features/leases/src/leases.c18
-rw-r--r--xlators/features/leases/src/leases.h1
-rw-r--r--xlators/performance/nl-cache/src/nl-cache.c18
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;