diff options
author | Nithya Balachandran <nbalacha@redhat.com> | 2015-05-14 19:33:44 +0530 |
---|---|---|
committer | Raghavendra G <rgowdapp@redhat.com> | 2015-06-04 05:23:04 -0700 |
commit | 3e8f9c1da61bf70ed635a655e966df574d1e15cd (patch) | |
tree | aaead5cd1f628f01cdc3fb293917510eca7b0d3d /xlators/cluster/dht/src/dht-common.c | |
parent | 4124fc8cb1b5026d8b9bb31b5e24d97aa1d94f86 (diff) |
dht/rebalance : Fixed rebalance failure
The rebalance process determines the local subvols for the
node it is running on and only acts on files in those subvols.
If a dist-rep or dist-disperse volume is created on 2 nodes by
dividing the bricks equally across the nodes, one process might
determine it has no local_subvols.
When trying to update the commit hash, the function attempts to
lock all local subvols. On the node with no local_subvols the dht
inode lock operation fails, in turn causing the rebalance to fail.
In a dist-rep volume with 2 nodes, if brick 0 of each replica
set is on node1 and brick 1 is on node2, node2 will find that it has
no local subvols.
Change-Id: I7d73b5b4bf1c822eae6df2e6f79bd6a1606f4d1c
BUG: 1221656
Signed-off-by: Nithya Balachandran <nbalacha@redhat.com>
Reviewed-on-master: http://review.gluster.org/10786
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Reviewed-by: Susant Palai <spalai@redhat.com>
Reviewed-on: http://review.gluster.org/10788
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 3a461cbf3a8..083c5ae1810 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -3693,8 +3693,6 @@ dht_setxattr (call_frame_t *frame, xlator_t *this, tmp = dict_get (xattr, GF_XATTR_FIX_LAYOUT_KEY); if (tmp) { - gf_log (this->name, GF_LOG_INFO, - "fixing the layout of %s", loc->path); ret = dict_get_uint32(xattr, "new-commit-hash", &new_hash); if (ret == 0) { @@ -3712,6 +3710,9 @@ dht_setxattr (call_frame_t *frame, xlator_t *this, return ret; } + gf_log (this->name, GF_LOG_INFO, + "fixing the layout of %s", loc->path); + ret = dht_fix_directory_layout (frame, dht_common_setxattr_cbk, layout); if (ret) { |