{"record":{"id":"4abdae02047f981e","repo":"apache/hadoop","slug":"invalid-args","errorCode":null,"errorMessage":"invalid args: {}","messagePattern":"invalid args: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/JMXGet.java","lineNumber":283,"sourceCode":"        .argName(\"VM's connector url\").hasArg()\n        .desc(\"connect to the VM on the same machine;\"\n        + \"\\n use:\\n jstat -J-Djstat.showUnsupported=true -snap <vmpid> | \"\n        + \"grep sun.management.JMXConnectorServer.address\\n \"\n        + \"to find the url\").build();\n\n    opts.addOption(jmxServer);\n    opts.addOption(jmxHelp);\n    opts.addOption(jmxService);\n    opts.addOption(jmxPort);\n    opts.addOption(jmxLocalVM);\n\n    CommandLine commandLine = null;\n    CommandLineParser parser = new GnuParser();\n    try {\n      commandLine = parser.parse(opts, args, true);\n    } catch (ParseException e) {\n      printUsage(opts);\n      throw new IllegalArgumentException(\"invalid args: \" + e.getMessage());\n    }\n    return commandLine;\n  }\n\n  public static void main(String[] args) {\n    int res = -1;\n\n    // parse arguments\n    Options opts = new Options();\n    CommandLine commandLine = null;\n    try {\n      commandLine = parseArgs(opts, args);\n    } catch (IllegalArgumentException iae) {\n      commandLine = null;\n    }\n\n    if (commandLine == null) {\n      // invalid arguments","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/JMXGet.java#L265-L301","documentation":"JMXGet ('hdfs jmxget') parses its command line with commons-cli GnuParser in stop-at-non-option mode. Any ParseException — unknown option, an option like -port missing its value, malformed flags — is caught, the usage is printed, and an IllegalArgumentException prefixed 'invalid args:' wrapping the parser's reason is thrown.","triggerScenarios":"Running 'hdfs jmxget' with a misspelled option (e.g. -prot instead of -port), an option that requires a value but is last on the line, or a stray token before recognized options depending on parse order.","commonSituations":"Wrong port/service combination while scraping NameNode JMX; scripts passing empty variables for -port/-service so the next token is consumed as its value; option order copied from a different Hadoop version.","solutions":["Run 'hdfs jmxget -help' and rebuild the command with only supported options: -server, -port, -service, -localVM.","Give every value-taking option an explicit non-empty value (e.g. -server localhost -port 8004).","If embedding in scripts, fail early on empty variables rather than letting the parser see a dangling option."],"exampleFix":"# before\nhdfs jmxget -server localhost -prot 8004\n# invalid args: Unrecognized option: prot\n\n# after\nhdfs jmxget -server localhost -port 8004","handlingStrategy":"try-catch","validationCode":"// Pre-validate with the same parser instead of invoking main directly\ntry {\n  CommandLine cl = new GnuParser().parse(buildJmxOptions(), args, true);\n  for (Option o : cl.getOptions()) {\n    if (o.hasArg() && (o.getValue() == null || o.getValue().isEmpty())) {\n      throw new IllegalArgumentException(\"option -\" + o.getOpt() + \" needs a value\");\n    }\n  }\n} catch (ParseException pe) {\n  throw new IllegalArgumentException(\"fix jmxget args: \" + pe.getMessage(), pe);\n}\nJMXGet.main(args);","typeGuard":null,"tryCatchPattern":"try {\n  JMXGet.main(args);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"invalid args\")) {\n    // usage was already printed; surface parser reason to caller/script\n    System.err.println(\"jmxget argument error: \" + e.getMessage());\n    System.exit(1);\n  }\n  throw e;\n}","preventionTips":["Always give -server/-port/-service explicit values; never pass empty shell variables.","Run 'hdfs jmxget -help' when porting scripts between Hadoop versions to catch changed options."],"tags":["hadoop","hdfs","jmxget","cli","arguments"],"backgroundTag":"invalid-cli-arguments","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}