{"record":{"id":"800c5f0c5a64dc7c","repo":"apache/hadoop","slug":"invalid-argument-cmd","errorCode":null,"errorMessage":"\"Invalid argument: \" + cmd","messagePattern":"\"Invalid argument: \" \\+ cmd","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java","lineNumber":1215,"sourceCode":"  /**\n   * Manager the safe mode state.\n   * @param cmd Input command, enter or leave safe mode.\n   * @throws IOException\n   */\n  private void manageSafeMode(String cmd) throws IOException {\n    if (cmd.equals(\"enter\")) {\n      if (enterSafeMode()) {\n        System.out.println(\"Successfully enter safe mode.\");\n      }\n    } else if (cmd.equals(\"leave\")) {\n      if (leaveSafeMode()) {\n        System.out.println(\"Successfully leave safe mode.\");\n      }\n    } else if (cmd.equals(\"get\")) {\n      boolean result = getSafeMode();\n      System.out.println(\"Safe Mode: \" + result);\n    } else {\n      throw new IllegalArgumentException(\"Invalid argument: \" + cmd);\n    }\n  }\n\n  /**\n   * Request the Router entering safemode state.\n   * @return Return true if entering safemode successfully.\n   * @throws IOException\n   */\n  private boolean enterSafeMode() throws IOException {\n    RouterStateManager stateManager = client.getRouterStateManager();\n    EnterSafeModeResponse response = stateManager.enterSafeMode(\n        EnterSafeModeRequest.newInstance());\n    return response.getStatus();\n  }\n\n  /**\n   * Request the Router leaving safemode state.\n   * @return Return true if leaving safemode successfully.","sourceCodeStart":1197,"sourceCodeEnd":1233,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java#L1197-L1233","documentation":"The dfsrouteradmin -safemode subcommand accepts exactly three verbs: enter, leave, get (see the usage string '[-safemode enter | leave | get]'). Any other token reaches the else branch and throws IllegalArgumentException('Invalid argument: ' + cmd). Note there is no 'wait' here, unlike hdfs dfsadmin -safemode.","triggerScenarios":"hdfs dfsrouteradmin -safemode on (or off / true / wait / status) carried over from other tools' vocabularies; a script variable expanding to an empty or misspelled verb.","commonSituations":"Operators used to NameNode safemode vocabulary ('wait', 'get') or generic on/off toggles; automation written against a different Hadoop CLI.","solutions":["Use one of the three verbs: hdfs dfsrouteradmin -safemode enter | leave | get","Check the usage: hdfs dfsrouteradmin -help safemode","Validate the verb in wrappers: case \"$verb\" in enter|leave|get) ;; *) exit 2;; esac"],"exampleFix":"# before\nhdfs dfsrouteradmin -safemode on\n# after\nhdfs dfsrouteradmin -safemode enter","handlingStrategy":"validation","validationCode":"case \"$VERB\" in enter|leave|get) ;; *) echo \"-safemode accepts enter|leave|get only\" >&2; exit 2;; esac\nhdfs dfsrouteradmin -safemode \"$VERB\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Router safemode has no 'wait' verb (unlike dfsadmin)","Whitelist the verb in wrapper scripts before executing"],"tags":["hdfs","rbf","federation","safe-mode","cli","argument-validation"],"backgroundTag":"invalid-command-line-argument","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}