apache/hadoop · error · UnsupportedOperationException
No DFS available in child file systems.
Error message
No DFS available in child file systems.
What it means
ViewDistributedFileSystem.modifyCacheDirective(info) fans the call out to all child filesystems. If none is a DistributedFileSystem it throws UnsupportedOperationException("No DFS available in child file systems."); if some children are DFS but their calls fail, failures are aggregated into MultipleIOException.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/ViewDistributedFileSystem.java:1260
// No path available in CacheDirectiveInfo, Let's shoot to all child fs.
List<IOException> failedExceptions = new ArrayList<>();
boolean isDFSExistsInChilds = false;
for (FileSystem fs : getChildFileSystems()) {
if (!(fs instanceof DistributedFileSystem)) {
continue;
}
isDFSExistsInChilds = true;
DistributedFileSystem dfs = (DistributedFileSystem) fs;
try {
dfs.modifyCacheDirective(info);
} catch (IOException ioe) {
failedExceptions.add(ioe);
}
}
if (!isDFSExistsInChilds) {
throw new UnsupportedOperationException(
"No DFS available in child file systems.");
}
if (failedExceptions.size() > 0) {
throw MultipleIOException.createIOException(failedExceptions);
}
}
@Override
public void modifyCacheDirective(CacheDirectiveInfo info,
EnumSet<CacheFlag> flags) throws IOException {
if (this.vfs == null) {
super.modifyCacheDirective(info, flags);
return;
}
if (info.getPath() != null) {
ViewFileSystemOverloadScheme.MountPathInfo<FileSystem> mountPathInfo =
this.vfs.getMountPathInfo(info.getPath(), getConf());
checkDFS(mountPathInfo.getTargetFs(), "modifyCacheDirective");View on GitHub (pinned to 2add963021)
Solutions
- Invoke modifyCacheDirective on the concrete DistributedFileSystem of the target cluster
- Ensure at least one HDFS mount exists if the view-level cache API must work
- Catch UnsupportedOperationException to detect a DFS-less view configuration early
Defensive patterns
Strategy: validation
Validate before calling
DistributedFileSystem dfs = findChildDfs(vfs);
if (dfs == null) {
throw new UnsupportedOperationException(
"no HDFS child; call modifyCacheDirective on the target cluster");
}
dfs.modifyCacheDirective(info); Type guard
static boolean hasDfsChild(FileSystem fs) {
return fs instanceof DistributedFileSystem
|| (fs instanceof ViewDistributedFileSystem
&& ((ViewDistributedFileSystem) fs).getChildFileSystems().stream()
.anyMatch(c -> c instanceof DistributedFileSystem));
} Try / catch
try {
vfs.modifyCacheDirective(info);
} catch (UnsupportedOperationException e) {
if ("No DFS available in child file systems.".equals(e.getMessage())) {
dfs.modifyCacheDirective(info); // route to concrete cluster
} else {
throw e;
}
} Prevention
- Run cache directive APIs on concrete DistributedFileSystem instances, not views
- Verify the view has HDFS children before adopting view-level caching workflows
When it happens
Trigger: Calling modifyCacheDirective on a ViewHDFS instance whose mounts are all non-HDFS (object stores or local filesystem), so getChildFileSystems() yields no DistributedFileSystem.
Common situations: Centralized caching scripts run against a viewfs URI with no HDFS mounts; mixed mount tables where admins expect cache APIs to work on a non-DFS default.
Related errors
- No DFS found in child fs. This API can't be supported in non
- createSymlink is not supported in ViewHDFS
- No more elements
- Not able to initialize fs in getDefaultBlockSize for path <
- Not able to initialize fs in getDefaultReplication for path
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/99021bd82ab24c6e.
Report an issue: GitHub.