apache/hadoop · error · IOException

No namespace availaible.

Error message

No namespace availaible.

What it means

AsyncErasureCoding.getECTopologyResultForPolicies (async RBF path, used when clients call the Router with the async RPC router mode) checks the membership table before verifying EC policies: if namenodeResolver.getNamespaces() returns an empty set it throws IOException('No namespace availaible.') (typo is in the source). With no registered namespaces there is no NameNode to answer the EC topology query, so the call cannot proceed.

Source

Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/AsyncErasureCoding.java:211

  /**
   * Asynchronously get the EC topology result for the given policies.
   * This method checks the operation category and then invokes the
   * getECTopologyResultForPolicies method concurrently across all namespaces.
   * <p>
   * The results are merged and the first unsupported result is returned.
   *
   * @param policyNames Array of policy names to check.
   * @return ECTopologyVerifierResult for the policies.
   * @throws IOException If an I/O error occurs.
   */
  @Override
  public ECTopologyVerifierResult getECTopologyResultForPolicies(
      String[] policyNames) throws IOException {
    RemoteMethod method = new RemoteMethod("getECTopologyResultForPolicies",
        new Class<?>[] {String[].class}, new Object[] {policyNames});
    Set<FederationNamespaceInfo> nss = namenodeResolver.getNamespaces();
    if (nss.isEmpty()) {
      throw new IOException("No namespace availaible.");
    }

    rpcClient.invokeConcurrent(nss, method, true, false,
        ECTopologyVerifierResult.class);
    asyncApply((ApplyFunction<Map<FederationNamespaceInfo, ECTopologyVerifierResult>,
        ECTopologyVerifierResult>) ret -> {
        for (Map.Entry<FederationNamespaceInfo, ECTopologyVerifierResult> entry :
            ret.entrySet()) {
            if (!entry.getValue().isSupported()) {
              return entry.getValue();
            }
          }
        // If no negative result, return the result from the first namespace.
        return ret.get(nss.iterator().next());
      });
    return asyncReturn(ECTopologyVerifierResult.class);
  }

View on GitHub (pinned to 2add963021)

Solutions

  1. Verify membership: hdfs dfsrouteradmin -getNamespaceInfo should list all namespaces; if empty, fix NameNode-to-Router heartbeat configuration (dfs.federation.router.* on the NN side) so namespaces register
  2. Check State Store connectivity and health from the Router (safemode status, router logs for StateStoreUnavailableException)
  3. Retry after namespaces are registered; the call succeeds once the membership table is populated
Defensive patterns

Strategy: try-catch

Validate before calling

// Ops precheck: hdfs dfsrouteradmin -getNamespaceInfo
// must list namespaces before issuing EC calls through the Router.

Try / catch

catch (IOException e) {
  if (e.getMessage().equals("No namespace availaible.")) {
    // membership table empty: fix NN heartbeats / State Store, then retry
  }
}

Prevention

When it happens

Trigger: Any EC-related client call (e.g. hdfs erasurecode or setErasureCodingPolicy flows reaching getECTopologyResultForPolicies) when the State Store membership table is empty; NameNode heartbeats never registered; Router pointed at the wrong State Store.

Common situations: Fresh RBF setup where NN federation heartbeats are not yet configured/sent; State Store (ZK) quorum down so membership reads return nothing; router.namenode.resolver pointing at a store without membership records.

Related errors


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