Bug 1450080
| Summary: | [Negative Lookup]: negative lookup features doesn't seem to work on restart of volume | |||
|---|---|---|---|---|
| Product: | [Red Hat Storage] Red Hat Gluster Storage | Reporter: | Nag Pavan Chilakam <nchilaka> | |
| Component: | samba | Assignee: | Poornima G <pgurusid> | |
| Status: | CLOSED ERRATA | QA Contact: | Vivek Das <vdas> | |
| Severity: | high | Docs Contact: | ||
| Priority: | unspecified | |||
| Version: | rhgs-3.3 | CC: | amukherj, rhinduja, rhs-smb | |
| Target Milestone: | --- | |||
| Target Release: | RHGS 3.3.0 | |||
| Hardware: | Unspecified | |||
| OS: | Unspecified | |||
| Whiteboard: | ||||
| Fixed In Version: | glusterfs-3.8.4-28 | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1458539 (view as bug list) | Environment: | ||
| Last Closed: | 2017-09-21 04:41:45 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1417151, 1458539, 1460899 | |||
|
Description
Nag Pavan Chilakam
2017-05-11 13:51:26 UTC
RCA:
The cache is stored in the directories inode_ctx, and the time of cache is set to the time inode_ctx was created, and is not updated as and when new cache entries are added to the inode_ctx(as it is cumbersome to have timeout for each entry, and updating global time will result in stale cache of older entries). Consider a sequence of operation as below:
At T1, lookup dir1/f1 (f1 doesn't exist)
dir1 inode_ctx->cache_time = T1
cache = "f1"
lookup dir f2 (f2 doesn't exist)
dir1 inode_ctx->cache_time remains unchanged
cache = "f1", "f2"
Child_DOWN / all /some of the bricks down at T2
thus anything cached before T2 is considered invalid but is not cleared from memory.
At T3, lookup dir1/f1
dir1 inode_ctx->cache_time(T1) < T2, hence do not serve from cache.
lookup is sent to the brick.
At T4, lookup dir1/f3
dir1 inode_ctx->cache_time(T1) < T2, hence do not serve from cache.
lookup is sent to the brick.
Thus the cache of dir1 is invalid until T1+10 min(cache timeout), and also for the 10 min no new cache is added to the dir1.
Consequence:
After any brick down/up, the cache of all the existing directories is invalid and cannot be corrected for max 10 min. Thus after brick down/up the nl-cache doesn't work for the directories that already had the cache, for the max of 10 min.
Solution:
If the inoce_ctx->cachetime < brick_down time, then delete the existing cache and start populating fresh cache.
Upstream patch : https://review.gluster.org/17453 (In reply to Atin Mukherjee from comment #5) > Upstream patch : https://review.gluster.org/17453 One more upstream patch https://review.gluster.org/#/c/17450/ is required here. downstream patches: https://code.engineering.redhat.com/gerrit/#/c/108886/ https://code.engineering.redhat.com/gerrit/#/c/108892/ Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2017:2774 |