diff options
author | GauravKumarGarg <ggarg@redhat.com> | 2015-03-31 16:41:08 +0530 |
---|---|---|
committer | Venky Shankar <vshankar@redhat.com> | 2015-04-10 10:12:13 +0000 |
commit | accd61fb64b96c4af47aa6cfa41adb0f2e47a60a (patch) | |
tree | 2e1044171a52df21f090ca11c806ad93a8aa3269 /xlators/mgmt/glusterd/src/glusterd-bitd-svc.c | |
parent | d57642044b720663c6474d318106c19e84f2c8bf (diff) |
glusterd: bitd daemon should not start on the node which dont have any brick
If user enable bitrot from node1 which have brick then glusterd starting
bitd daemon on node1 as well as glusterd starting bitd deamon on another node2
which does not have any brick (node1 and node2 are part of cluster).
With this fix glusterd will not start bitd daemon on the node which
don't have brick.
Change-Id: Ic1c68d204221d369d89d628487cdd5957964792e
BUG: 1207029
Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/10071
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
Tested-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-bitd-svc.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-bitd-svc.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c index d007f3a0a0d..14c60fd5fba 100644 --- a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c @@ -70,26 +70,40 @@ out: int glusterd_bitdsvc_manager (glusterd_svc_t *svc, void *data, int flags) { - int ret = -EINVAL; + int ret = 0; + xlator_t *this = NULL; + glusterd_volinfo_t *volinfo = data; + glusterd_brickinfo_t *brickinfo = NULL; + + this = THIS; + GF_ASSERT (this); + GF_ASSERT (volinfo); if (glusterd_all_volumes_with_bitrot_stopped ()) { ret = svc->stop (svc, SIGTERM); } else { - ret = glusterd_bitdsvc_create_volfile (); - if (ret) - goto out; - - ret = svc->stop (svc, SIGKILL); - if (ret) - goto out; - - ret = svc->start (svc, flags); - if (ret) - goto out; - - ret = glusterd_conn_connect (&(svc->conn)); - if (ret) - goto out; + cds_list_for_each_entry (brickinfo, &volinfo->bricks, + brick_list) { + if (!glusterd_is_local_brick (this, volinfo, brickinfo)) + continue; + + ret = glusterd_bitdsvc_create_volfile (); + if (ret) + goto out; + + ret = svc->stop (svc, SIGKILL); + if (ret) + goto out; + + ret = svc->start (svc, flags); + if (ret) + goto out; + + ret = glusterd_conn_connect (&(svc->conn)); + if (ret) + goto out; + break; + } } out: |