From c1fc1fc9cb5a13e6ddf8c9270deb0c7609333540 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 --- xlators/cluster/ec/src/ec-helpers.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'xlators/cluster/ec/src/ec-helpers.h') diff --git a/xlators/cluster/ec/src/ec-helpers.h b/xlators/cluster/ec/src/ec-helpers.h index 0b355bd440e..4d2145c8317 100644 --- a/xlators/cluster/ec/src/ec-helpers.h +++ b/xlators/cluster/ec/src/ec-helpers.h @@ -30,6 +30,9 @@ int32_t ec_buffer_alloc(xlator_t *xl, size_t size, struct iobref **piobref, void **ptr); int32_t ec_dict_set_array(dict_t *dict, char *key, uint64_t *value, int32_t size); +int32_t ec_dict_get_array (dict_t *dict, char *key, uint64_t value[], + int32_t size); + int32_t ec_dict_del_array(dict_t *dict, char *key, uint64_t *value, int32_t size); int32_t ec_dict_set_number(dict_t * dict, char * key, uint64_t value); -- cgit