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
- 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
- Alternatively query quota usage directly from each subcluster NameNode and aggregate client-side
- 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
- Enable dfs.federation.router.quota.enabled on all Routers if any client needs federation quota views
- Keep Router configurations identical across HA Router instances
- Document that per-NameNode quotas are invisible through the Router unless federation quotas are on
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
- The operation is not allowed because there are mount points:
- No namespace availaible.
- Rename of {} to {} is not allowed. The number of remote loca
- Rename of {src} to {dst} is not allowed. The number of remot
- Cannot find target file - {trg}
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/da5aee6a37c7b4c7.
Report an issue: GitHub.