Hi all,

Wondering if anybody else has seen this behavior and if/how they resolved it.  
- on Hadoop 0.20.2.

When I specify the ^ char in a file name within a hadoop command line it works 
just fine for commands that don't use globbing  like put.
But after putting that file, then I can't get a listing of the file with ls or 
view the file with cat/text using the same path.

i.e.
hadoop dfs -put test^ing /tmp         <- works
hadoop dfs -ls /tmp                              <- works and shows the file in 
the dir
hadoop dfs -ls /tmp/test^ing            <- returns "ls: Cannot access 
/tmp/test^ing: No such file or directory."

After walking through the code it looks like the culprit is in FileSystem.java 
@line 1050 in setRegex(String filePattern).:

....
      for (int i = 0; i < len; i++) {
        char pCh;

        // Examine a single pattern character
        pCh = filePattern.charAt(i);
...
    } else if (pCh == '[' && setOpen == 0) {
          setOpen++;
          hasPattern = true;
        } else if (pCh == '^' && setOpen > 0) {
        } else if (pCh == '-' && setOpen > 0) {
          // Character set range
          setRange = true;
        } else if (pCh == PAT_SET_CLOSE && setRange) {
...

So it looks like the ^ char isn't appended to the output file pattern under any 
circumstances.

Is this a bug in the put (that it doesn't test to disallow the ^) or is it a 
bug in the globbing that doesn't support the use of the ^ literal in the path?
I looks to me like it's an issue with the globbing, since I can use the ^ when 
I create Path() objects in code, but I could be wrong.

I've thought about mangling the filename to get around the use of the ^ char, 
but would prefer to just use them as literals if possible.

Thanks for any thoughts / help.

-Karl

Reply via email to