diff options
| author | Sakshi <sabansal@redhat.com> | 2015-05-26 09:53:55 +0530 | 
|---|---|---|
| committer | Atin Mukherjee <amukherj@redhat.com> | 2016-02-28 08:23:48 -0800 | 
| commit | 368e26f454fe35477e46dc698fa6b8c3c608ea8d (patch) | |
| tree | 5a9f46d6eaccbf684c896c8a4edf7bc374d01fb9 /xlators | |
| parent | 15602865865386672bcb996dab8259d25b684900 (diff) | |
glusterd: check if glusterd is started on all nodes and all
          bricks are started before performing rebalance
Change-Id: I458ea9cd86cf35bdb7d758be55f951ae9f3e66f0
BUG: 1224857
Signed-off-by: Sakshi <sabansal@redhat.com>
Reviewed-on: http://review.gluster.org/10906
Smoke: Gluster Build System <jenkins@build.gluster.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 815b0aa6ae6..5bf456ba00b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -631,6 +631,8 @@ glusterd_op_stage_rebalance (dict_t *dict, char **op_errstr)          int32_t                 cmd          = 0;          char                    msg[2048]    = {0};          glusterd_volinfo_t      *volinfo     = NULL; +        glusterd_brickinfo_t    *brickinfo   = NULL; +        glusterd_peerinfo_t     *peerinfo    = NULL;          char                    *task_id_str = NULL;          dict_t                  *op_ctx      = NULL;          xlator_t                *this        = 0; @@ -698,6 +700,41 @@ glusterd_op_stage_rebalance (dict_t *dict, char **op_errstr)                          goto out;                  } +                cds_list_for_each_entry (brickinfo, &volinfo->bricks, +                                         brick_list) { +                        if (glusterd_is_local_brick (THIS, volinfo, brickinfo)) { +                                if (brickinfo->status != GF_BRICK_STARTED) { +                                        gf_asprintf (op_errstr, "Received" +                                                     " rebalance on volume with " +                                                     " stopped brick %s", +                                                     brickinfo->path); +                                        ret = -1; +                                        goto out; +                                } +                        } else { +                                rcu_read_lock (); +                                peerinfo = glusterd_peerinfo_find_by_uuid +                                           (brickinfo->uuid); +                                if (!peerinfo) { +                                        gf_asprintf (op_errstr, "Host node of " +                                                     "brick %s doesn't belong " +                                                     "to cluster", +                                                     brickinfo->path); +                                        ret = -1; +                                        rcu_read_unlock (); +                                        goto out; +                                } else if (!peerinfo->connected) { +                                        gf_asprintf (op_errstr, "Host node of " +                                                     "brick %s is down", +                                                     brickinfo->path); +                                        ret = -1; +                                        rcu_read_unlock (); +                                        goto out; +                                } +                                rcu_read_unlock (); +                        } +                } +          case GF_DEFRAG_CMD_START_FORCE:                  if (is_origin_glusterd (dict)) {                          op_ctx = glusterd_op_get_ctx ();  | 
