[Bugs] [Bug 1333023] readdir-ahead does not fetch xattrs that md-cache needs in it's internal calls

bugzilla at redhat.com bugzilla at redhat.com
Tue May 10 09:05:43 UTC 2016


https://bugzilla.redhat.com/show_bug.cgi?id=1333023



--- Comment #9 from Vijay Bellur <vbellur at redhat.com> ---
COMMIT: http://review.gluster.org/14214 committed in master by Raghavendra G
(rgowdapp at redhat.com) 
------
commit 0c73e7050c4d30ace0c39cc9b9634e9c1b448cfb
Author: Prashanth Pai <ppai at redhat.com>
Date:   Wed May 4 16:56:50 2016 +0530

    readdir-ahead: Prefetch xattrs needed by md-cache

    Problem:
    Negative cache feature implementation in md-cache requires xattrs
    returned by posix to be intercepted for every call that can possibly
    return xattrs. This includes readdirp(). This is crucial to treat
    missing keys in cache as a case of negative entry (returns ENODATA)

    md-cache puts names of xattrs that it wants to cache in xdata and
    passes it down to posix which returns the specified xattrs in the
    callback. This is done in lookup() and readdirp(). Hence, a xattr
    that is cached can be invalidated during readdirp_cbk too.

    This is based on the assumption that readdirp() will always return
    all xattrs that md-cache is interested in. However, this is not the
    case when readdirp() call is served from readdir-ahead's cache.
    readdir-ahead xlator will pre-fetch dentries during opendir_cbk
    and readdirp. These internal readdirp() calls made by readdir-ahead
    xlator does not set xdata in it's requests. Hence, no xattrs are
    fetched and stored in it's internal cache.

    This causes metadata loss in gluster-swift. md-cache returns ENODATA
    during getxattr() call even though the xattr for that object exists on
    the brick. On receiving ENODATA, gluster-swift will create new metadata
    and do setxattr(). This results in loss of information stored in
    existing xattr.

    Fix:
    During opendir, md-cache will communicate to readdir-ahead asking it
    to store the names of xattrs it's interested in so that readdir-ahead
    can fetch those in all subsequent internal readdirp() calls issued by
    it. This stored names of xattrs is invalidated/updated on the next
    real readdirp() call issued by application. This readdirp() call will
    have xdata set correctly by md-cache xlator.

    BUG: 1333023
    Change-Id: I32d46f93a99d4ec34c741f3c52b0646d141614f9
    Reviewed-on: http://review.gluster.org/14214
    Tested-by: Prashanth Pai <ppai at redhat.com>
    NetBSD-regression: NetBSD Build System <jenkins at build.gluster.org>
    CentOS-regression: Gluster Build System <jenkins at build.gluster.com>
    Tested-by: Gluster Build System <jenkins at build.gluster.com>
    Smoke: Gluster Build System <jenkins at build.gluster.com>
    Reviewed-by: Raghavendra G <rgowdapp at redhat.com>
    Tested-by: Raghavendra G <rgowdapp at redhat.com>

-- 
You are receiving this mail because:
You are on the CC list for the bug.
Unsubscribe from this bug https://bugzilla.redhat.com/token.cgi?t=vm38wJoqHd&a=cc_unsubscribe


More information about the Bugs mailing list