From cbded629e9ba2d293832e9ed9e81e0390ef29f72 Mon Sep 17 00:00:00 2001 From: Sunil Kumar Acharya Date: Mon, 27 Feb 2017 15:35:17 +0530 Subject: cluster/ec: Metadata healing fails to update the version During meatadata heal, we were not updating the version though all the inode attributes were in sync. Updated the code to adjust version when all the inode attributes are in sync. >BUG: 1425703 >Change-Id: I6723be3c5f748b286d4efdaf3c71e9d2087c7235 >Signed-off-by: Sunil Kumar Acharya >Reviewed-on: https://review.gluster.org/16772 >Smoke: Gluster Build System >Reviewed-by: Xavier Hernandez >NetBSD-regression: NetBSD Build System >Reviewed-by: Pranith Kumar Karampuri >CentOS-regression: Gluster Build System BUG: 1434298 Change-Id: I5b74423253138957644b1bfa543d4abb2532c377 Signed-off-by: Sunil Kumar Acharya Reviewed-on: https://review.gluster.org/16935 Smoke: Gluster Build System CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Xavier Hernandez --- xlators/cluster/ec/src/ec-heal.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/xlators/cluster/ec/src/ec-heal.c b/xlators/cluster/ec/src/ec-heal.c index da08f6c9a75..2373e6f93d5 100644 --- a/xlators/cluster/ec/src/ec-heal.c +++ b/xlators/cluster/ec/src/ec-heal.c @@ -410,6 +410,8 @@ ec_adjust_versions (call_frame_t *frame, ec_t *ec, ec_txn_t type, if (EC_COUNT (sources, ec->nodes) + EC_COUNT (healed_sinks, ec->nodes) == ec->nodes) erase_dirty = _gf_true; + else + op_ret = -ENOTCONN; for (i = 0; i < ec->nodes; i++) { if (!sources[i] && !healed_sinks[i]) @@ -509,7 +511,7 @@ ec_heal_metadata_find_direction (ec_t *ec, default_args_cbk_t *replies, if (!are_dicts_equal(replies[i].xdata, replies[j].xdata, ec_sh_key_match, NULL)) continue; - groups[j] = i; /*If iatts match put them into a group*/ + groups[j] = i; same_count++; } @@ -541,7 +543,6 @@ out: return ret; } - int __ec_heal_metadata_prepare (call_frame_t *frame, ec_t *ec, inode_t *inode, unsigned char *locked_on, default_args_cbk_t *replies, @@ -679,15 +680,12 @@ __ec_heal_metadata (call_frame_t *frame, ec_t *ec, inode_t *inode, goto out; } - if (EC_COUNT (sources, ec->nodes) == ec->nodes) { + if ((EC_COUNT (sources, ec->nodes) == ec->nodes) || + (EC_COUNT (healed_sinks, ec->nodes) == 0)) { ret = 0; goto erase_dirty; } - if (EC_COUNT (healed_sinks, ec->nodes) == 0) { - ret = -ENOTCONN; - goto out; - } source_buf = replies[source].stat; ret = cluster_setattr (ec->xl_list, healed_sinks, ec->nodes, sreplies, output, frame, ec->xl, &loc, -- cgit