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)