apache/hadoop · error · IOException
Mount table state store is not available.
Error message
Mount table state store is not available.
What it means
RouterQuotaUpdateService.getMountTableStore lazily fetches the MountTableStore record store from the router's State Store. If the State Store has no registered MountTableStore - because the state store is disabled, failed to initialize its driver, or the record store never registered - it throws this IOException, which aborts the periodic quota cache update cycle.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterQuotaUpdateService.java:188
HdfsConstants.QUOTA_DONT_SET, gQuota.getTypeQuota(t), t);
LOG.info("[Fix Quota] src={} dst={} type={} oldQuota={} newQuota={}",
location.getSrc(), location, t, remoteQuota.getTypeQuota(t),
gQuota.getTypeQuota(t));
}
}
}
/**
* Get mount table store management interface.
* @return MountTableStore instance.
* @throws IOException
*/
private MountTableStore getMountTableStore() throws IOException {
if (this.mountTableStore == null) {
this.mountTableStore = router.getStateStore().getRegisteredRecordStore(
MountTableStore.class);
if (this.mountTableStore == null) {
throw new IOException("Mount table state store is not available.");
}
}
return this.mountTableStore;
}
/**
* Get all the existing mount tables.
* @return List of mount tables.
* @throws IOException
*/
private List<MountTable> getMountTableEntries() throws IOException {
// scan mount tables from root path
GetMountTableEntriesRequest getRequest = GetMountTableEntriesRequest
.newInstance("/");
GetMountTableEntriesResponse getResponse = getMountTableStore()
.getMountTableEntries(getRequest);
return getResponse.getEntries();
}View on GitHub (pinned to 2add963021)
Solutions
- Check router startup logs for State Store driver errors and fix connectivity (ZK quorum address, JDBC URL, credentials)
- Verify dfs.federation.router.store.driver is set to a valid implementation (e.g. StateStoreZooKeeperImpl or the JDBC driver) and dfs.federation.router.store.serializer matches what the other routers use
- Restart the router once the State Store backend is healthy so record stores (including MountTableStore) register; the error clears on the next update cycle
- If multiple routers share the store, confirm at least one router can write and the store isn't in a failed/closed state
Defensive patterns
Strategy: retry
Validate before calling
// Probe state store health before the quota cycle needs it
StateStore store = router.getStateStore();
if (!store.isRunning() || store.getRegisteredRecordStore(MountTableStore.class) == null) {
LOG.warn("State store/MountTableStore unavailable; skipping quota update this cycle");
} Try / catch
try {
updateSchedule();
} catch (IOException e) {
if ("Mount table state store is not available.".equals(e.getMessage())) {
// transient store outage: log, let the periodic service retry on the next interval
LOG.warn("Quota cache update deferred: state store unavailable");
return;
}
throw e;
} Prevention
- Monitor State Store (ZK/JDBC) availability with dedicated alerts; most quota cache failures trace to it
- Keep the store driver, serializer, and connection settings identical across all routers
- Restart routers only after the state store backend is confirmed healthy so record stores register cleanly
When it happens
Trigger: The quota update service period fires (dfs.federation.router.quota.cache.update.interval) and its first touch of the mount table store finds router.getStateStore().getRegisteredRecordStore(MountTableStore.class) == null: state store driver (ZK/JDBC) never connected, state store marked unavailable, or MountTableStore registration skipped during store init.
Common situations: ZooKeeper down or unreachable when the router started; wrong dfs.federation.router.store.driver class or connection string; state store initialization failing silently earlier (check earlier router log lines); rolling upgrade where the store schema/driver version mismatches.
Related errors
- Router quota manager is not initialized.
- The NameSpace quota (directories and files) is exceeded: quo
- The DiskSpace quota is exceeded: quota = {} B = {} but disks
- No mount point for %s
- Rename of {} to {} is not allowed, no eligible destination i
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/dd9f66dcd222de69.
Report an issue: GitHub.