From 27ac070dc9612cfcd591464dbaa40ed52b84e23f Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Wed, 25 Jan 2017 15:31:44 +0530 Subject: cluster/ec: Don't trigger data/metadata heal on Lookups Problem-1 If Lookup which doesn't take any locks observes version mismatch it can't be trusted. If we launch a heal based on this information it will lead to self-heals which will affect I/O performance in the cases where Lookup is wrong. Considering self-heal-daemon and operations on the inode from client which take locks can still trigger heal we can choose to not attempt a heal on Lookup. Problem-2: Fixed spurious failure of tests/bitrot/bug-1373520.t For the issues above, what was happening was that ec_heal_inspect() is preventing 'name' heal to happen Problem-3: tests/basic/ec/ec-background-heals.t To be honest I don't know what the problem was, while fixing the 2 problems above, I made some changes to ec_heal_inspect() and ec_need_heal() after which when I tried to recreate the spurious failure it just didn't happen even after a long time. >BUG: 1414287 >Signed-off-by: Pranith Kumar K >Change-Id: Ife2535e1d0b267712973673f6d474e288f3c6834 >Reviewed-on: https://review.gluster.org/16468 >Smoke: Gluster Build System >NetBSD-regression: NetBSD Build System >Reviewed-by: Xavier Hernandez >CentOS-regression: Gluster Build System >Reviewed-by: Ashish Pandey BUG: 1419824 Change-Id: I340b48cd416b07890bf3a5427562f5e3f88a481f Signed-off-by: Pranith Kumar K Reviewed-on: https://review.gluster.org/16765 NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Xavier Hernandez Smoke: Gluster Build System --- libglusterfs/src/cluster-syncop.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libglusterfs') diff --git a/libglusterfs/src/cluster-syncop.c b/libglusterfs/src/cluster-syncop.c index 10993e6088d..98a46c85e4b 100644 --- a/libglusterfs/src/cluster-syncop.c +++ b/libglusterfs/src/cluster-syncop.c @@ -102,6 +102,10 @@ void cluster_replies_wipe (default_args_cbk_t *replies, int numsubvols) { int i = 0; + + if (!replies) + return; + for (i = 0; i < numsubvols; i++) args_cbk_wipe (&replies[i]); memset (replies, 0, numsubvols * sizeof (*replies)); -- cgit