{"record":{"id":"17ca4286c09028bc","repo":"apache/hadoop","slug":"mount-table-mount-doesn-t-exist","errorCode":null,"errorMessage":"Mount table \" + mount + \" doesn't exist","messagePattern":"Mount table \" \\+ mount \\+ \" doesn't exist","errorType":"exception","errorClass":"java.io.IOException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/rbfbalance/MountTableProcedure.java","lineNumber":110,"sourceCode":"   * path.\n   *\n   * @param mount   the mount point.\n   * @param dstNs   the target namespace.\n   * @param dstPath the target path\n   * @param conf    the configuration of the router.\n   */\n  private static void updateMountTableDestination(String mount, String dstNs,\n      String dstPath, Configuration conf) throws IOException {\n    String address = conf.getTrimmed(RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_KEY,\n        RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_DEFAULT);\n    InetSocketAddress routerSocket = NetUtils.createSocketAddr(address);\n    RouterClient rClient = new RouterClient(routerSocket, conf);\n    try {\n      MountTableManager mountTable = rClient.getMountTableManager();\n\n      MountTable originalEntry = getMountEntry(mount, mountTable);\n      if (originalEntry == null) {\n        throw new IOException(\"Mount table \" + mount + \" doesn't exist\");\n      } else {\n        RemoteLocation remoteLocation =\n            new RemoteLocation(dstNs, dstPath, mount);\n        originalEntry.setDestinations(Arrays.asList(remoteLocation));\n        UpdateMountTableEntryRequest updateRequest =\n            UpdateMountTableEntryRequest.newInstance(originalEntry);\n        UpdateMountTableEntryResponse response =\n            mountTable.updateMountTableEntry(updateRequest);\n        if (!response.getStatus()) {\n          throw new IOException(\"Failed update mount table \" + mount);\n        }\n        rClient.getMountTableManager().refreshMountTableEntries(\n            RefreshMountTableEntriesRequest.newInstance());\n      }\n    } finally {\n      rClient.close();\n    }\n  }","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/rbfbalance/MountTableProcedure.java#L92-L128","documentation":"Thrown by the RBF FedBalance procedure when it tries to re-point a mount table entry to the destination cluster (updateMountTableDestination) but the router's admin API has no entry matching the mount name: getMountEntry(mount, mountTable) returned null. The balance job's switch phase cannot proceed without the original entry, so it aborts with IOException.","triggerScenarios":"A fedbalance job reaches the mount-table switch step and queries the router configured at dfs.federation.router.admin.address; the exact source path is absent from the mount table — never added, removed concurrently, or the address points at a router backed by a different/stale state store.","commonSituations":"Typo in the -s mount path of `hdfs fedbalance`; the mount was deleted while a long-running balance job was in progress; running the procedure against the wrong router; state store membership/mount records not yet synchronized.","solutions":["List the mount table on the router the procedure talks to: hdfs dfsrouteradmin -list, and confirm the exact mount source path exists","Re-run the balance job with the exact path shown by -list","Verify dfs.federation.router.admin.address points to the intended router and its state store is reachable and current","If the mount was removed concurrently, abort the job, re-add the mount, and restart the balance"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before launching a fedbalance job, verify the mount entry exists on the target router\ntry (RouterClient client = new RouterClient(routerAdminAddr, conf)) {\n  MountTableManager mgr = client.getMountTableManager();\n  MountTable entry = MountTableProcedure.getMountEntry(mountPath, mgr);\n  if (entry == null) {\n    throw new IllegalArgumentException(\n        \"Refusing to balance: mount \" + mountPath + \" not in router mount table\");\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always run hdfs dfsrouteradmin -list and match the exact source path before fedbalance","Pin balance jobs to one router admin address and keep that router's state store healthy","Freeze admin changes to the mount being migrated while the balance job runs"],"tags":["hadoop","rbf","router-based-federation","fedbalance","mount-table","admin-api"],"backgroundTag":"mount-point-not-found","analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}