diff options
author | Xavier Hernandez <xhernandez@datalab.es> | 2014-11-13 13:55:36 +0100 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-11-15 10:00:47 -0800 |
commit | 8c4ae34f8803f44f2f1e459883581a953bca42ec (patch) | |
tree | 278badf08a1045875ba347aed0e74c2c7a755d60 /xlators/cluster/ec | |
parent | dfd3624ff6362ac58f57f9dd25c426dbfe488661 (diff) |
ec: Avoid self-heal on directories on (f)stat calls
To avoid inconsistent directory listings, a full self-heal
cannot happen on a directory until all its contents have
been healed. This is controlled by a manual command using
getfattr recursively and in post-order.
While navigating the directories, sometimes an (f)stat fop
can be sent. This fop caused a full self-heal of the directory.
This patch makes that (f)stat only initiates a partial self-heal.
Change-Id: I0a92bda8f4f9e43c1acbceab2d7926944a8a4d9a
BUG: 1163760
Signed-off-by: Xavier Hernandez <xhernandez@datalab.es>
Reviewed-on: http://review.gluster.org/9117
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/cluster/ec')
-rw-r--r-- | xlators/cluster/ec/src/ec-common.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index 2ba17305411..177b24bb010 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -146,7 +146,8 @@ void ec_check_status(ec_fop_data_t * fop) int32_t partial = 0; if (fop->answer->op_ret >= 0) { - if (fop->id == GF_FOP_LOOKUP) { + if ((fop->id == GF_FOP_LOOKUP) || + (fop->id == GF_FOP_STAT) || (fop->id == GF_FOP_FSTAT)) { partial = fop->answer->iatt[0].ia_type == IA_IFDIR; } else if (fop->id == GF_FOP_OPENDIR) { partial = 1; |