[ https://issues.apache.org/jira/browse/HDFS-9387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14997114#comment-14997114 ]
Xiaoyu Yao commented on HDFS-9387: ---------------------------------- Thanks [~liuml07] for reporting the issue and posting the fix. The fix looks good to me overall. I just have one comment: Can you add additional check to ensure -namenode argument does come with a Uri and printUsage() otherwise like the handling of other parameters "-logLevel, etc." > 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 > Attachments: HDFS-9387.000.patch > > > 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)