[
https://issues.apache.org/jira/browse/HDFS-13307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16406010#comment-16406010
]
liuhongtong edited comment on HDFS-13307 at 3/20/18 9:35 AM:
-------------------------------------------------------------
[~linyiqun]
If setQuota() throws Exception, run() will catch it, print out the error
message and return error return code -1. The following is just an example.
{code:java}
$ hdfs dfsrouteradmin -setQuota /test10 -nsQuota aaa --ssQuota 200
setQuota: Cannot parse nsQuota: aaa
Federation Admin Tools:
[-add <source> <nameservice> <destination> [-readonly] -owner <owner> -group
<group> -mode <mode>]
[-rm <source>]
[-ls <path>]
[-setQuota <path> -nsQuota <nsQuota> -ssQuota <quota in bytes or quota size
string>]
[-clrQuota <path>]
[-safemode enter | leave | get]
$ echo $?
255
{code}
If as your advice, setQuota() print error message and return false, but the
caller run() ignores false return and return 0.
If we want to deal with all false return from every command, not only
setQuota, we must modify all branches, while these are tedious.
{code:java}
......
if (setQuota(argv, i)) {
System.out.println(
"Successfully set quota for mount point " + argv[i]);
+ } else {
+ exitCode = -1;
}
} else if ("-clrQuota".equals(cmd)) {
if (clrQuota(argv[i])) {
System.out.println(
"Successfully clear quota for mount point " + argv[i]);
+ } else {
+ exitCode = -1;
}
} else if ("-safemode".equals(cmd)) {
manageSafeMode(argv[i]);
......
{code}
So I think throwing Exception may be more reasonable.
was (Author: liuhongtong):
[~linyiqun]
If setQuota() throws Exception, run() will catch it, print out the error
message and return error return code -1. The following is just an example.
```shell
$ hdfs dfsrouteradmin -setQuota /test10 -nsQuota aaa --ssQuota 200
setQuota: Cannot parse nsQuota: aaa
Federation Admin Tools:
[-add <source> <nameservice> <destination> [-readonly] -owner <owner>
-group <group> -mode <mode>]
[-rm <source>]
[-ls <path>]
[-setQuota <path> -nsQuota <nsQuota> -ssQuota <quota in bytes or quota
size string>]
[-clrQuota <path>]
[-safemode enter | leave | get]
$ echo $?
255
```
If as your advice, setQuota() print error message and return false, but the
caller run() ignores false return and return 0.
If we want to deal with all false return from every command, not only setQuota,
we must modify all branches, while these are tedious.
```java
......
} else if ("-setQuota".equals(cmd)) {
if (setQuota(argv, i)) {
System.out.println(
"Successfully set quota for mount point " + argv[i]);
+ } else {
+ exitCode = -1;
}
} else if ("-clrQuota".equals(cmd)) {
if (clrQuota(argv[i])) {
System.out.println(
"Successfully clear quota for mount point " + argv[i]);
+ } else {
+ exitCode = -1;
}
} else if ("-safemode".equals(cmd)) {
......
```
So I think throwing Exception may be more reasonable.
> RBF: Fix setQuota bug
> ---------------------
>
> Key: HDFS-13307
> URL: https://issues.apache.org/jira/browse/HDFS-13307
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Reporter: liuhongtong
> Assignee: liuhongtong
> Priority: Major
> Attachments: HDFS-13307.001.patch, HDFS-13307.002.patch,
> HDFS-13307.003.patch
>
>
> If hdfs dfsrouteradmin -setQuota only set one of -nsQuota and -ssQuota, the
> another one will be cleared.
> The following is the step:
> 1. set /test1 -nsQuota 400 -ssQuota 200
> hdfs dfsrouteradmin -setQuota /test1 -nsQuota 400 -ssQuota 200
> Successfully set quota for mount point /test1
> 2. after a moment, list /test1, everything is ok.
> hdfs dfsrouteradmin -ls /test1
> Source Destinations Owner
> Group Mode Quota/Usage
> /test1 ns1->/test1 hadp
> hadp rwxr-xr-x [NsQuota: 400/0, SsQuota:
> 200 B/0 B]
> 3. only set /test1 -nsQuota 600
> hdfs dfsrouteradmin -setQuota /test1 -nsQuota 600
> Successfully set quota for mount point /test1
> 4. after a moment, list /test1, now ssQuota has been cleared.
> hdfs dfsrouteradmin -ls /test1
> Source Destinations Owner
> Group Mode Quota/Usage
> /test1 ns1->/test1 hadp
> hadp rwxr-xr-x [NsQuota: 600/0, SsQuota:
> -/-]
> [^HDFS-13307.001.patch]
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]