From f8d77623ff49ebc60686dcb17978175e861b6634 Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Thu, 9 May 2013 18:07:59 +0530 Subject: glusterd: Start bricks on glusterd startup, only once The restarting of bricks has been deffered until the cluster 'stabilizes' itself volumes' view. Since glusterd_spawn_daemons is executed everytime a peer 'joins' the cluster, it may inadvertently restart bricks that were taken offline for say, maintenance purposes. This fix avoids that. Change-Id: Ic2a0a9657eb95c82d03cf5eb893322cf55c44eba BUG: 960190 Signed-off-by: Krishnan Parthasarathi Reviewed-on: http://review.gluster.org/4973 Reviewed-by: Amar Tumballi Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- xlators/mgmt/glusterd/src/glusterd-sm.c | 2 +- xlators/mgmt/glusterd/src/glusterd-utils.c | 6 ++++-- xlators/mgmt/glusterd/src/glusterd.c | 3 +-- xlators/mgmt/glusterd/src/glusterd.h | 1 + 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index 47e559e7..ba36b7f4 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-sm.c @@ -1092,7 +1092,7 @@ out: * the functions spawn process(es) only if they are not started yet. * * */ - glusterd_spawn_daemons ((void*) _gf_false); + glusterd_spawn_daemons (NULL); glusterd_do_quorum_action (); } return ret; diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 950b5554..7970777a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2416,10 +2416,12 @@ int glusterd_spawn_daemons (void *opaque) { glusterd_conf_t *conf = THIS->private; - gf_boolean_t start_bricks = (long) opaque; + gf_boolean_t start_bricks = !conf->restart_done; - if (start_bricks) + if (start_bricks) { glusterd_restart_bricks (conf); + conf->restart_done = _gf_true; + } glusterd_restart_gsyncds (conf); glusterd_restart_rebalance (conf); return 0; diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 41a1cb36..3b419d2e 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -1154,8 +1154,7 @@ init (xlator_t *this) * time (this) glusterd was up.*/ if (list_empty (&conf->peers)) { - glusterd_launch_synctask (glusterd_spawn_daemons, - (void*) _gf_true); + glusterd_launch_synctask (glusterd_spawn_daemons, NULL); } ret = glusterd_options_init (this); if (ret < 0) diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 49e7e727..9271a854 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -152,6 +152,7 @@ typedef struct { gf_boolean_t pending_quorum_action; dict_t *opts; synclock_t big_lock; + gf_boolean_t restart_done; } glusterd_conf_t; -- cgit