apache/hadoop · error · IOException

The quota system is disabled in Router.

Error message

The quota system is disabled in Router.

What it means

AsyncQuota.getEachQuotaUsage throws IOException('The quota system is disabled in Router.') when a client requests quota usage through the Router's async path while the Router-level quota system is off. RBF quotas are gated by dfs.federation.router.quota.enabled (default false) in the Router configuration; without it the Router keeps no aggregated quota state and cannot answer getQuotaUsage for federation paths.

Source

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

      } catch (IOException e) {
        throw new CompletionException(e);
      }
    });
    return asyncReturn(QuotaUsage.class);
  }

  /**
   * Get quota usage for the federation path.
   * @param path Federation path.
   * @return quota usage for each remote location.
   * @throws IOException If the quota system is disabled.
   */
  @Override
  protected Map<RemoteLocation, QuotaUsage> getEachQuotaUsage(String path)
      throws IOException {
    rpcServer.checkOperation(NameNode.OperationCategory.READ);
    if (!router.isQuotaEnabled()) {
      throw new IOException("The quota system is disabled in Router.");
    }

    final List<RemoteLocation> quotaLocs = getValidQuotaLocations(path);
    RemoteMethod method = new RemoteMethod("getQuotaUsage",
        new Class<?>[] {String.class}, new RemoteParam());
    rpcClient.invokeConcurrent(
        quotaLocs, method, true, false, QuotaUsage.class);
    return asyncReturn(Map.class);
  }
}

View on GitHub (pinned to 2add963021)

Solutions

  1. Set dfs.federation.router.quota.enabled=true in the Router's configuration (with dfs.federation.router.quota.* limits as needed) and restart/reload the Router
  2. Alternatively query quota usage directly from each subcluster NameNode and aggregate client-side
  3. Verify the flag on every Router behind the load balancer, not just one

Example fix

<!-- before: router config lacks quota -->
<configuration/>

<!-- after: router (hdfs-rbf) config -->
<configuration>
  <property>
    <name>dfs.federation.router.quota.enabled</name>
    <value>true</value>
  </property>
</configuration>
Defensive patterns

Strategy: try-catch

Validate before calling

// Read Router config before quota calls:
// conf.getBoolean("dfs.federation.router.quota.enabled", false) must be true
// on the Router; clients can check the router's /conf endpoint if exposed.

Try / catch

catch (IOException e) {
  if (e.getMessage().equals("The quota system is disabled in Router.")) {
    // fall back to per-subcluster getQuotaUsage and aggregate client-side
  }
}

Prevention

When it happens

Trigger: Client calls getQuotaUsage/hdfs dfs -count -q or quota admin flows through the Router (async RPC enabled) while dfs.federation.router.quota.enabled is unset/false in the Router's config.

Common situations: Default Router deployments that never enabled federation quotas; enabling quotas on some Routers but not others in an HA group; operators assuming per-NameNode quotas imply Router quota support.

Related errors


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