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 d6df90f7b5
commit fb77ac6243
2 changed files with 26 additions and 11 deletions

View File

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

View File

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