apache/hadoop · error · java.io.IOException

Mount table " + mount + " doesn't exist

Error message

Mount table " + mount + " doesn't exist

What it means

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.

Source

Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/rbfbalance/MountTableProcedure.java:110

   * path.
   *
   * @param mount   the mount point.
   * @param dstNs   the target namespace.
   * @param dstPath the target path
   * @param conf    the configuration of the router.
   */
  private static void updateMountTableDestination(String mount, String dstNs,
      String dstPath, Configuration conf) throws IOException {
    String address = conf.getTrimmed(RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_KEY,
        RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_DEFAULT);
    InetSocketAddress routerSocket = NetUtils.createSocketAddr(address);
    RouterClient rClient = new RouterClient(routerSocket, conf);
    try {
      MountTableManager mountTable = rClient.getMountTableManager();

      MountTable originalEntry = getMountEntry(mount, mountTable);
      if (originalEntry == null) {
        throw new IOException("Mount table " + mount + " doesn't exist");
      } else {
        RemoteLocation remoteLocation =
            new RemoteLocation(dstNs, dstPath, mount);
        originalEntry.setDestinations(Arrays.asList(remoteLocation));
        UpdateMountTableEntryRequest updateRequest =
            UpdateMountTableEntryRequest.newInstance(originalEntry);
        UpdateMountTableEntryResponse response =
            mountTable.updateMountTableEntry(updateRequest);
        if (!response.getStatus()) {
          throw new IOException("Failed update mount table " + mount);
        }
        rClient.getMountTableManager().refreshMountTableEntries(
            RefreshMountTableEntriesRequest.newInstance());
      }
    } finally {
      rClient.close();
    }
  }

View on GitHub (pinned to 2add963021)

Solutions

  1. List the mount table on the router the procedure talks to: hdfs dfsrouteradmin -list, and confirm the exact mount source path exists
  2. Re-run the balance job with the exact path shown by -list
  3. Verify dfs.federation.router.admin.address points to the intended router and its state store is reachable and current
  4. If the mount was removed concurrently, abort the job, re-add the mount, and restart the balance
Defensive patterns

Strategy: validation

Validate before calling

// Before launching a fedbalance job, verify the mount entry exists on the target router
try (RouterClient client = new RouterClient(routerAdminAddr, conf)) {
  MountTableManager mgr = client.getMountTableManager();
  MountTable entry = MountTableProcedure.getMountEntry(mountPath, mgr);
  if (entry == null) {
    throw new IllegalArgumentException(
        "Refusing to balance: mount " + mountPath + " not in router mount table");
  }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/17ca4286c09028bc. Report an issue: GitHub.