Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
Reviewed
Description
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.
try { namenodeUri = StringUtils.popOptionWithArgument("-namenode", args); } catch (IllegalArgumentException iae) { printUsage(); }
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().
if (args.indexOf("-namenode") >= 0) { try { namenodeUri = StringUtils.popOptionWithArgument("-namenode", args); } catch (IllegalArgumentException iae) { printUsage(); } }
Attachments
Attachments
Issue Links
- is related to
-
HDFS-9421 NNThroughputBenchmark replication test NPE with -namenode option
- Resolved