From 75c20274002982bade23179b3680025c0bce7af4 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Mon, 6 Jul 2015 12:22:20 +0530 Subject: cluster/ec: Remove failed subvols from source/sink computation >Change-Id: Ib0de34c86ee25de361ec821d4015296c514742e0 >BUG: 1240210 >Signed-off-by: Pranith Kumar K >Reviewed-on: http://review.gluster.org/11546 >Reviewed-by: Xavier Hernandez >Tested-by: NetBSD Build System >Tested-by: Gluster Build System BUG: 1243644 Change-Id: I41817ca933bb1eecdb3e895a16753226b608814a Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/11681 Tested-by: Gluster Build System Reviewed-by: Xavier Hernandez --- xlators/cluster/ec/src/ec-heal.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index 6ee1f9ee832..6f82203b66c 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -471,6 +471,8 @@ ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies, for (i = 0; i < ec->nodes; i++) { if (!replies[i].valid) continue; + if (replies[i].op_ret < 0) + continue; ret = ec_dict_del_array (replies[i].xdata, EC_XATTR_VERSION, xattr, EC_VERSION_SIZE); if (ret == 0) { @@ -489,6 +491,8 @@ ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies, same_count = 1; source_ia = replies[i].stat; for (j = i + 1; j < ec->nodes; j++) { + if (!replies[j].valid || replies[j].op_ret < 0) + continue; child_ia = replies[j].stat; if (!IA_EQUAL(source_ia, child_ia, gfid) || !IA_EQUAL(source_ia, child_ia, type) || @@ -517,7 +521,7 @@ ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies, for (i = 0; i < ec->nodes; i++) { if (groups[i] == groups[same_source]) sources[i] = 1; - else if (replies[i].valid) + else if (replies[i].valid && replies[i].op_ret >= 0) healed_sinks[i] = 1; } ret = same_source; @@ -606,6 +610,7 @@ __ec_removexattr_sinks (call_frame_t *frame, ec_t *ec, inode_t *inode, if (ret < 0) { sources[i] = 0; healed_sinks[i] = 0; + continue; } if (replies[i].xdata->count == 0) { -- cgit