So, the reason is that HdfsFileObject.equals only compares the paths, and not 
the HdfsFileSystem object it is attached to.

    @Override
    public boolean equals(final Object o)
    {
        if (null == o)
        {
            return false;
        }
        if (o == this)
        {
            return true;
        }
        if (o instanceof HdfsFileObject)
        {
            final HdfsFileObject other = (HdfsFileObject) o;
            if (other.path.equals(this.path))
            {
                return true;
            }
        }
        return false;
    }

And likewise, "hashCode" only returns the hash of the path.

Think I will file a JIRA with a patch for this.

Thanks,
~Roger Whitcomb

-----Original Message-----
From: Roger Whitcomb [mailto:[email protected]] 
Sent: Monday, May 05, 2014 3:41 PM
To: Commons Users List
Subject: [VFS] Funny result for HDFS FileObject.equals

Hi,
                I'm using Commons VFS inside an Apache Pivot remote file 
browser and I'm getting a strange result when switching between different HDFS 
hosts.  I have two FileObjects, with different host:port (but the same 
directory name), and they compare equal (i.e., the FileObject.equals(...) 
method returns true, when they are clearly not the same.  Any thoughts?
                Here is the code and my results:
System.out.format("VFSBrowserSheet.setRootDirectory: does '%1$s' exist()? 
%2$s%n", rootDirectory, rootDirectory.exists());
        if (rootDirectory.exists()) {
            FileObject previousRootDirectory = this.rootDirectory;

System.out.format("VFSBrowserSheet.setRootDirectory: previousRootDirectory = 
%1$s%n", previousRootDirectory);
System.out.format("VFSBrowserSheet.setRootDirectory: 
rootDirectory[%1$s].equals(previousRootDirectory[%2$s])? %3$s%n", 
rootDirectory, previousRootDirectory, 
rootDirectory.equals(previousRootDirectory));
            if (!rootDirectory.equals(previousRootDirectory)) {
                this.rootDirectory = rootDirectory;
                selectedFiles.clear();
System.out.format("VFSBrowserSheet.setRootDirectory, calling 
'rootDirectoryChanged'%n");
                fileBrowserSheetListeners.rootDirectoryChanged(this, 
previousRootDirectory);
            }

VFSBrowserSheet.setRootDirectory: does 'hdfs://chhadoop-master:9000/' exist()? 
true
VFSBrowserSheet.setRootDirectory: previousRootDirectory = 
hdfs://chcluster2-master:8020/
VFSBrowserSheet.setRootDirectory: 
rootDirectory[hdfs://chhadoop-master:9000/].equals(previousRootDirectory[hdfs://chcluster2-master:8020/])?
 True

Thanks,
~Roger Whitcomb




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to