HDFS-13307. RBF: Improve the use of setQuota command. Contributed by liuhongtong.

(cherry picked from commit 69fe4407eb)
This commit is contained in:
Yiqun Lin 2018-03-21 10:51:35 +08:00
parent 9b96e7522b
commit 131546002d
2 changed files with 26 additions and 11 deletions

View File

@ -453,7 +453,8 @@ public class RouterAdmin extends Configured implements Tool {
try {
nsQuota = Long.parseLong(parameters[i]);
} catch (Exception e) {
System.err.println("Cannot parse nsQuota: " + parameters[i]);
throw new IllegalArgumentException(
"Cannot parse nsQuota: " + parameters[i]);
}
} else if (parameters[i].equals("-ssQuota")) {
i++;
@ -461,7 +462,8 @@ public class RouterAdmin extends Configured implements Tool {
ssQuota = StringUtils.TraditionalBinaryPrefix
.string2long(parameters[i]);
} catch (Exception e) {
System.err.println("Cannot parse ssQuota: " + parameters[i]);
throw new IllegalArgumentException(
"Cannot parse ssQuota: " + parameters[i]);
}
}
@ -469,8 +471,14 @@ public class RouterAdmin extends Configured implements Tool {
}
if (nsQuota <= 0 || ssQuota <= 0) {
System.err.println("Input quota value should be a positive number.");
return false;
throw new IllegalArgumentException(
"Input quota value should be a positive number.");
}
if (nsQuota == HdfsConstants.QUOTA_DONT_SET &&
ssQuota == HdfsConstants.QUOTA_DONT_SET) {
throw new IllegalArgumentException(
"Must specify at least one of -nsQuota and -ssQuota.");
}
return updateQuota(mount, nsQuota, ssQuota);
@ -515,18 +523,23 @@ public class RouterAdmin extends Configured implements Tool {
}
if (existingEntry == null) {
return false;
throw new IOException(mount + " doesn't exist in mount table.");
} else {
long nsCount = existingEntry.getQuota().getFileAndDirectoryCount();
long ssCount = existingEntry.getQuota().getSpaceConsumed();
// If nsQuota or ssQuota was unset, reset corresponding usage
// value to zero.
if (nsQuota == HdfsConstants.QUOTA_DONT_SET) {
// If nsQuota and ssQuota were unset, clear nsQuota and ssQuota.
if (nsQuota == HdfsConstants.QUOTA_DONT_SET &&
ssQuota == HdfsConstants.QUOTA_DONT_SET) {
nsCount = RouterQuotaUsage.QUOTA_USAGE_COUNT_DEFAULT;
}
if (nsQuota == HdfsConstants.QUOTA_DONT_SET) {
ssCount = RouterQuotaUsage.QUOTA_USAGE_COUNT_DEFAULT;
} else {
// If nsQuota or ssQuota was unset, use the value in mount table.
if (nsQuota == HdfsConstants.QUOTA_DONT_SET) {
nsQuota = existingEntry.getQuota().getQuota();
}
if (ssQuota == HdfsConstants.QUOTA_DONT_SET) {
ssQuota = existingEntry.getQuota().getSpaceQuota();
}
}
RouterQuotaUsage updatedQuota = new RouterQuotaUsage.Builder()

View File

@ -381,6 +381,8 @@ public class TestRouterAdminCLI {
.getMountTableEntries(getRequest);
mountTable = getResponse.getEntries().get(0);
quotaUsage = mountTable.getQuota();
// verify if ns quota keeps quondam value
assertEquals(nsQuota, quotaUsage.getQuota());
// verify if ss quota is correctly set
assertEquals(2 * 1024 * 1024, quotaUsage.getSpaceQuota());