Description
STEPS TO REPRODUCE:
add mount table entry 1->/
mountTable.getDestinationForPath("/foo/a") will return "1->/foo/a", that's correct
add mount table entry 2->/foo
mountTable.getDestinationForPath("/foo/a") should return "2->/foo/a", but it still return "1->/foo/a"
WHY:
private void invalidateLocationCache(...) { ... String src = loc.getSourcePath(); if (src != null) { if (isParentEntry(src, path)) { LOG.debug("Removing {}", src); it.remove(); } } ... }
path is the new entry, in our case is "/foo"
But src is the mount point path, in our case is "/", which isn't child of "/foo"
So, it can't invalidate the cache entry.
HOW TO FIX:
Just reverse the parameters of isParentEntry .
PS:
PathLocation#getSourcePath() will return PathLocation#sourcePath, which attached a comment about "Source path in global namespace.". But I think the field indeed denotes the mount point path after I review the code. I think it's confused.
Attachments
Attachments
Issue Links
- links to