[Bugs] [Bug 1226880] Fix infinite looping in shard_readdir(p) on '/'
bugzilla at redhat.com
bugzilla at redhat.com
Wed Jun 3 03:46:42 UTC 2015
https://bugzilla.redhat.com/show_bug.cgi?id=1226880
--- Comment #2 from Anand Avati <aavati at redhat.com> ---
COMMIT: http://review.gluster.org/11031 committed in release-3.7 by Pranith
Kumar Karampuri (pkarampu at redhat.com)
------
commit 9d74710581262a570547f1dc6bba4e1750871864
Author: Krutika Dhananjay <kdhananj at redhat.com>
Date: Mon May 18 18:06:32 2015 +0530
features/shard: Fix issue with readdir(p) fop
Backport of: http://review.gluster.org/10809
Problem:
When readdir(p) is performed on '/' and ".shard" happens to be
the last of the entries read in a given iteration of dht_readdir(p)
(in other words the entry with the highest offset in the dirent list
sorted in ascending order of d_offs), shard xlator would delete this
entry as part of handling the call so as to avoid exposing its presence
to the application. This would cause xlators above (like fuse,
readdir-ahead etc) to wind the next readdirp as part of the same req
at an offset which is (now) the highest d_off (post deletion of .shard)
from the previously unwound list of entries. This offset would be less
than that of ".shard" and therefore cause /.shard to be read once again.
If by any chance this happens to be the only entry until end-of-directory,
shard xlator would delete this entry and unwind with 0 entries, causing the
xlator(s) above to think there is nothing more to readdir and the fop is
complete. This would prevent DHT from gathering entries from the rest of
its subvolumes, causing some entries to disappear.
Fix:
At the level of shard xlator, if ".shard" happens to be the last entry,
make shard xlator wind another readdirp at offset equal to d_off of
".shard". That way, if ".shard" happens to be the only other entry under
'/'
until end-of-directory, DHT would receive an op_ret=0. This would enable it
to wind readdir(p) on the rest of its subvols and gather the complete
picture.
Also, fixed a bug in shard_lookup_cbk() wherein file_size should be fetched
unconditionally in cbk since it is set unconditionally in the wind path,
failing
which, lookup would be unwound with ia_size and ia_blocks only equal to
that of
the base file.
Change-Id: I0ff0b48b6c9c12edbef947b6840a77a54c131650
BUG: 1226880
Signed-off-by: Krutika Dhananjay <kdhananj at redhat.com>
Reviewed-on: http://review.gluster.org/11031
Tested-by: Gluster Build System <jenkins at build.gluster.com>
Reviewed-by: Pranith Kumar Karampuri <pkarampu at redhat.com>
Tested-by: NetBSD Build System <jenkins at build.gluster.org>
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are on the CC list for the bug.
More information about the Bugs
mailing list