Yuxuan Wang created HDFS-14761:
----------------------------------

             Summary: RBF: MountTableResolver cannot invalidate cache correctly
                 Key: HDFS-14761
                 URL: https://issues.apache.org/jira/browse/HDFS-14761
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: rbf
            Reporter: Yuxuan Wang


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:
{code:title=MountTableResolver.java|borderStyle=solid}
private void invalidateLocationCache(...)
{
    ...
    String src = loc.getSourcePath();
    if (src != null) {
        if (isParentEntry(src, path)) {
          LOG.debug("Removing {}", src);
          it.remove();
        }
    }
    ...
}
{code}
*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.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to