Hello Bernd,

This is my first time looking at Commons VFS.  It looks like a very useful
project, and I'm sorry to hear that we've caused some grief for your tests.

I can provide some background on these changes.  Traditionally, 1.2 and
earlier versions didn't officially support Windows beyond a best effort to
keep some approximation of the functionality running on developer desktops.
 As we worked on enabling real production deployments on Windows, we
discovered multiple bugs caused by those approximations.

In some cases, the Cygwin and GnuWin32 tools had incomplete implementations
or bugs.  Examples of the buggy areas include finding the groups for a user
and process management.  Basically, anything in
org.apache.hadoop.util.Shell was problematic.  For this category of bugs,
the solution was winutils.exe, which delegates straight to the necessary
Windows API calls.

Other problems arose from bugs or missing functionality in the Windows JDK
implementation.  For example, the canRead/canWrite methods in java.io.File
don't work correctly on Windows.  (This is the code path shown in your
stack trace.)  For this category of bugs, the solution was hadoop.dll,
which is a JNI layer that delegates to the Windows API.

Without these workarounds, production deployment on Windows wouldn't have
been feasible.  There would have been too many dangerous bugs.

Unfortunately, we have a weakness right now in that the Windows native
build artifacts aren't bundled into the Apache releases.  We also don't
have a fallback mode that works without the native code.  (Even if there
was such a fallback mode, it would be very dangerous to run in this mode in
production, so I'd want to treat it as a test-only setting.)

I expect you'll run into a lot of challenges while fully implementing a
Java-only fallback.  I'd like to help by checking out the Commons VFS code
and experimenting a bit.  I'll try to put some time into this next week and
then comment on the VFS jira issues with my findings.  Does this sound good?

Chris Nauroth
Hortonworks
http://hortonworks.com/



On Tue, Jun 17, 2014 at 7:46 PM, Bernd Eckenfels <e...@zusammenkunft.net>
wrote:

> Hello,
>
> in the Commons VFS project we have a Provider for HDFS. This
> Provider is unit-tested with the help of the excelent MiniDFSCluster
> component.
>
> A while back I enabled automated testing on Windows (cause it worked
> for me), but I did not realize it only works with cygwin (namely
> ls.exe) in the Path. This was some 1.2 version and it used the ls
> command to read the owner.
>
> We currently switch the dependency to 2.4.0 and had the hope that it
> better (i.e.
> without binary dependencies) works in this scenario - as we want to run
> the maven tests without pre-installing a tool chain on Windows.
>
> However it got actually worse, it warns about a missing winutils.exe
> and it requires the hadoop.dll. The first location where it fails is
> testing writeability for the name node. And unlike all the comments in
> FileUtil/NativeIO it does not cleanly fall back to java portable
> methods.
>
> I think the access/access0 method can easily be fixed, but before I work
> on this patch, does it make sense to go in this direction or will I have to
> fix some other, more complicated platform dependencies. My goal would be to
> start MiniDFSCluster inside surefire from maven without the need for
> complicated external toolchain setup.
>
> Is actually anybody caring about making this possible?
>
> org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTest  Time
> elapsed: 2.291 sec  <<< ERROR!
> java.lang.UnsatisfiedLinkError:
> org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
>         at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native
> Method)
>         at
> org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:570)
>         at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:996)
>         at
> org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:484)
>         at
> org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:292)
>         at
> org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:202)
>         at
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:879)
>         at
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:638)
>         at
> org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:455)
>         at
> org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:511)
>         at
> org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:670)
>         at
> org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:655)
>         at
> org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1304)
>         at
> org.apache.hadoop.hdfs.MiniDFSCluster.createNameNode(MiniDFSCluster.java:975)
>         at
> org.apache.hadoop.hdfs.MiniDFSCluster.createNameNodesAndSetConf(MiniDFSCluster.java:856)
>         at
> org.apache.hadoop.hdfs.MiniDFSCluster.initMiniDFSCluster(MiniDFSCluster.java:702)
>         at
> org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:640)
>         at
> org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTest.<clinit>(HdfsFileProviderTest.java:95)
>
> Greetings
> Bernd
>
> PS - in case you want to follow the VFS progress:
> * https://issues.apache.org/jira/browse/VFS-530 - tracks 2.4 migration
> * https://issues.apache.org/jira/browse/VFS-529 - the broken windows tests
> * https://issues.apache.org/jira/browse/VFS-526 - failed enable of win
> tests
>
>

-- 
CONFIDENTIALITY NOTICE
NOTICE: This message is intended for the use of the individual or entity to 
which it is addressed and may contain information that is confidential, 
privileged and exempt from disclosure under applicable law. If the reader 
of this message is not the intended recipient, you are hereby notified that 
any printing, copying, dissemination, distribution, disclosure or 
forwarding of this communication is strictly prohibited. If you have 
received this communication in error, please contact the sender immediately 
and delete it from your system. Thank You.

Reply via email to