From b43596fb4cdb84ae8b5665537914fe72517b8722 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Thu, 29 Sep 2011 19:37:18 +0530 Subject: mgmt/glusterd: skip shd graph generation for non-replicate vols Change-Id: I1bb83342bc0fa883ede527527ec8fd6ee470f781 BUG: 3666 Reviewed-on: http://review.gluster.com/535 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- xlators/mgmt/glusterd/src/glusterd-op-sm.c | 21 --------- xlators/mgmt/glusterd/src/glusterd-utils.c | 62 +++++++++++++++++++++++-- xlators/mgmt/glusterd/src/glusterd-volgen.c | 5 +- xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 7 +-- 4 files changed, 62 insertions(+), 33 deletions(-) diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index bb8cccfbf..6e2ee7e5b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -135,27 +135,6 @@ glusterd_is_volume_started (glusterd_volinfo_t *volinfo) return (volinfo->status == GLUSTERD_STATUS_STARTED); } -gf_boolean_t -glusterd_are_all_volumes_stopped () -{ - glusterd_conf_t *priv = NULL; - xlator_t *this = NULL; - glusterd_volinfo_t *voliter = NULL; - - this = THIS; - GF_ASSERT (this); - priv = this->private; - GF_ASSERT (priv); - - list_for_each_entry (voliter, &priv->volumes, vol_list) { - if (voliter->status == GLUSTERD_STATUS_STARTED) - return _gf_false; - } - - return _gf_true; - -} - static int glusterd_op_sm_inject_all_acc () { diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index d2305df1e..f4b888891 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2798,20 +2798,72 @@ glusterd_nodesvcs_stop (glusterd_volinfo_t *volinfo) glusterd_shd_stop); } +gf_boolean_t +glusterd_are_all_volumes_stopped () +{ + glusterd_conf_t *priv = NULL; + xlator_t *this = NULL; + glusterd_volinfo_t *voliter = NULL; + + this = THIS; + GF_ASSERT (this); + priv = this->private; + GF_ASSERT (priv); + + list_for_each_entry (voliter, &priv->volumes, vol_list) { + if (voliter->status == GLUSTERD_STATUS_STARTED) + return _gf_false; + } + + return _gf_true; + +} + +gf_boolean_t +glusterd_all_replicate_volumes_stopped () +{ + glusterd_conf_t *priv = NULL; + xlator_t *this = NULL; + glusterd_volinfo_t *voliter = NULL; + + this = THIS; + GF_ASSERT (this); + priv = this->private; + GF_ASSERT (priv); + + list_for_each_entry (voliter, &priv->volumes, vol_list) { + if (!glusterd_is_volume_replicate (voliter)) + continue; + if (voliter->status == GLUSTERD_STATUS_STARTED) + return _gf_false; + } + + return _gf_true; +} + int glusterd_nodesvcs_handle_graph_change (glusterd_volinfo_t *volinfo) { - return glusterd_nodesvcs_batch_op (volinfo, - glusterd_check_generate_start_nfs, - glusterd_check_generate_start_shd); + int (*shd_op) () = NULL; + int (*nfs_op) () = NULL; + + shd_op = glusterd_check_generate_start_shd; + nfs_op = glusterd_check_generate_start_nfs; + if (glusterd_are_all_volumes_stopped ()) { + shd_op = glusterd_shd_stop; + nfs_op = glusterd_nfs_server_stop; + } else if (glusterd_all_replicate_volumes_stopped()) { + shd_op = glusterd_shd_stop; + } + return glusterd_nodesvcs_batch_op (volinfo, nfs_op, shd_op); } int glusterd_nodesvcs_handle_reconfigure (glusterd_volinfo_t *volinfo) { return glusterd_nodesvcs_batch_op (volinfo, - glusterd_check_generate_start_nfs, - glusterd_reconfigure_shd); + glusterd_check_generate_start_nfs, + glusterd_reconfigure_shd); } int diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 13c1bffa0..2ade1c574 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -2461,6 +2461,9 @@ build_shd_graph (volgen_graph_t *graph, dict_t *mod_dict) if (voliter->status != GLUSTERD_STATUS_STARTED) continue; + if (!glusterd_is_volume_replicate (voliter)) + continue; + replica_count = voliter->replica_count; valid_config = _gf_true; @@ -2965,7 +2968,7 @@ glusterd_create_shd_volfile () goto out; glusterd_get_nodesvc_volfile ("glustershd", conf->workdir, - filepath, sizeof (filepath)); + filepath, sizeof (filepath)); ret = glusterd_create_global_volfile (build_shd_graph, filepath, mod_dict); out: diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 6888fd9d5..b1686b321 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1299,12 +1299,7 @@ glusterd_op_stop_volume (dict_t *dict) if (ret) goto out; - if (glusterd_are_all_volumes_stopped ()) { - ret = glusterd_nodesvcs_stop (volinfo); - } else { - ret = glusterd_nodesvcs_handle_graph_change (volinfo); - } - + ret = glusterd_nodesvcs_handle_graph_change (volinfo); out: return ret; } -- cgit