Mingliang Liu created HDFS-9387:
-----------------------------------
Summary: Parse namenodeUri parameter only once in
NNThroughputBenchmark$OperationStatsBase#verifyOpArgument()
Key: HDFS-9387
URL: https://issues.apache.org/jira/browse/HDFS-9387
Project: Hadoop HDFS
Issue Type: Bug
Components: namenode
Reporter: Mingliang Liu
Assignee: Mingliang Liu
In {{NNThroughputBenchmark$OperationStatsBase#verifyOpArgument()}}, the
{{namenodeUri}} is always parsed from {{-namenode}} argument. This works just
fine if the {{-op}} parameter is not {{all}}, as the single benchmark will need
to parse the {{namenodeUri}} from args anyway.
When the {{-op}} is {{all}}, namely all sub-benchmark will run, multiple
sub-benchmark will call the {{verifyOpArgument()}} method. In this case, the
first sub-benchmark reads the {{namenode}} argument and removes it from args.
The other sub-benchmarks will thereafter read {{null}} value since the argument
is removed. This contradicts the intension of providing {{namenode}} for all
sub-benchmarks.
{code:title=current code}
try {
namenodeUri = StringUtils.popOptionWithArgument("-namenode", args);
} catch (IllegalArgumentException iae) {
printUsage();
}
{code}
The fix is to parse the {{namenodeUri}}, which is shared by all sub-benchmarks,
from {{-namenode}} argument only once. This follows the convention of parsing
other global arguments in {{OperationStatsBase#verifyOpArgument()}}.
{code:title=simple fix}
if (args.indexOf("-namenode") >= 0) {
try {
namenodeUri = StringUtils.popOptionWithArgument("-namenode", args);
} catch (IllegalArgumentException iae) {
printUsage();
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)