diff options
author | Amar Tumballi <amar@gluster.com> | 2011-07-01 04:39:41 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-07-14 01:01:33 -0700 |
commit | 6cf06cfd4bf72b16ac7665323629d354b78b6b05 (patch) | |
tree | 0162bec6d2c801f78c81a4af0b53e6fa23c61e46 /xlators/cluster/dht/src/dht-common.c | |
parent | 05a1422bbd82a28ccf7fa7c17b357f8350508e6e (diff) |
cluster/distribute: handle layout overlaps while giving a new fix
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2258 (enhance gluster volume rebalance)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2258
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 4bc87fc2c43..237a0789426 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -2080,7 +2080,6 @@ dht_setxattr (call_frame_t *frame, xlator_t *this, dht_layout_t *layout = NULL; int i = 0; int op_errno = EINVAL; - int flag = 0; int ret = -1; data_t *tmp = NULL; @@ -2115,29 +2114,18 @@ dht_setxattr (call_frame_t *frame, xlator_t *this, tmp = dict_get (xattr, GF_XATTR_FIX_LAYOUT_KEY); if (tmp) { - for (i = 0; i < layout->cnt; i++) { - if (layout->list[i].start == layout->list[i].stop) { - flag = 1; - break; - } - } - if ((layout->cnt < conf->subvolume_cnt) || flag) { - gf_log (this->name, GF_LOG_INFO, - "expanding layout of %s from %d to %d", - loc->path, layout->cnt, conf->subvolume_cnt); - - ret = loc_dup (loc, &local->loc); - if (ret == -1) { - op_errno = ENOMEM; - goto err; - } + gf_log (this->name, GF_LOG_INFO, + "fixing the layout of %s", loc->path); - dht_selfheal_new_directory (frame, dht_fix_layout_cbk, - layout); - return 0; + ret = loc_dup (loc, &local->loc); + if (ret == -1) { + op_errno = ENOMEM; + goto err; } - op_errno = ENOTSUP; - goto err; + + dht_fix_directory_layout (frame, dht_fix_layout_cbk, + layout); + return 0; } local->call_cnt = layout->cnt; |