[ https://issues.apache.org/jira/browse/HDFS-760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12779270#action_12779270 ]
Jakob Homan commented on HDFS-760: ---------------------------------- Some info: This is being caused by a problem in the configuration. The stack trace: {noformat} java.lang.IllegalArgumentException: 63 at org.apache.hadoop.fs.permission.PermissionParser.<init>(PermissionParser.java:54) at org.apache.hadoop.fs.permission.UmaskParser.<init>(UmaskParser.java:37) at org.apache.hadoop.fs.permission.FsPermission.getUMask(FsPermission.java:204) at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:569) at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:537) at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:213) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:547) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:528) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:435) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:219) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:192) at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:156) at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1533) at org.apache.hadoop.fs.FsShell.copyFromLocal(FsShell.java:129) at org.apache.hadoop.fs.FsShell.run(FsShell.java:1837) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79) at org.apache.hadoop.fs.FsShell.main(FsShell.java:1974) {noformat} is misleading. dfs.umask is the old-style key for setting the umask and is correctly read in by the Configuration as the old-style. However, the section of the code that determines whether or not to treat it as an old-style, decimal value (that should be converted to octal before being passed to the PermissionParser) is being given the wrong answer by the configuration: {code} if(conf != null) { String confUmask = conf.get(UMASK_LABEL); if(confUmask != null) // UMASK_LABEL is set if(conf.deprecatedKeyWasSet(DEPRECATED_UMASK_LABEL)) { // <--- this is returning false but should be true umask = Integer.parseInt(confUmask); // Evaluate as decimal value else umask = new UmaskParser(confUmask).getUMask(); // <----- therefore this tries to parse the decimal as padded octal and fails {code} The code in Configuration that checks whether or not a deprecated value was set is returning false, though it shouldn't be (specifically deprecatedKeyMap.get(oldKey).accessed is still set to false and should be true). I'll look more tomorrow. Regardless of the reason, we should probably have better exception handling in the FsShell. The exception thrown from PermissionParser should be more descriptive so that when it hits the user there is a better sense of what went wrong. > "fs -put" fails if dfs.umask is set to 63 > ----------------------------------------- > > Key: HDFS-760 > URL: https://issues.apache.org/jira/browse/HDFS-760 > Project: Hadoop HDFS > Issue Type: Bug > Affects Versions: 0.21.0 > Reporter: Tsz Wo (Nicholas), SZE > Priority: Blocker > Fix For: 0.21.0, 0.22.0 > > > Add the following to hdfs-site.conf > {noformat} > <property> > <name>dfs.umask</name> > <value>63</value> > </property> > {noformat} > Then run "hadoop fs -put" > {noformat} > -bash-3.1$ ./bin/hadoop fs -put README.txt r.txt > 09/11/09 23:09:07 WARN conf.Configuration: mapred.task.id is deprecated. > Instead, use mapreduce.task.attempt.id > put: 63 > Usage: java FsShell [-put <localsrc> ... <dst>] > -bash-3.1$ > {noformat} > Observed the above behavior in 0.21. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.