jenkinsci/jenkins · error · IOException
unimplemented
Error message
unimplemented
What it means
The Default FileSystemProvisioner.snapshot() method is a stub that always throws IOException("unimplemented"). The Default implementation provides no-ops for prepareWorkspace and discardWorkspace but explicitly refuses workspace snapshotting. This signals that workspace snapshotting requires a real FileSystemProvisioner implementation (typically provided by a cloud agent plugin).
Source
Thrown at core/src/main/java/hudson/FileSystemProvisioner.java:64
@Override
public Descriptor getDescriptor() {
return Jenkins.get().getDescriptorOrDie(getClass());
}
public static final FileSystemProvisioner DEFAULT = new Default();
public static final class Default extends FileSystemProvisioner {
@Override
public void prepareWorkspace(AbstractBuild<?, ?> build, FilePath ws, TaskListener listener) throws IOException, InterruptedException {
}
@Override
public void discardWorkspace(AbstractProject<?, ?> project, FilePath ws) throws IOException, InterruptedException {
}
@Override
public WorkspaceSnapshot snapshot(AbstractBuild<?, ?> build, FilePath ws, String glob, TaskListener listener) throws IOException, InterruptedException {
throw new IOException("unimplemented");
}
}
}
View on GitHub (pinned to 2e228ff40b)
Solutions
- Install or configure a FileSystemProvisioner implementation that supports snapshots (e.g., a cloud agent plugin that overrides snapshot).
- If you wrote the calling code, check FileSystemProvisioner capabilities before invoking snapshot().
- Avoid the snapshot code path entirely for local/default provisioner setups.
Example fix
// before
provisioner.snapshot(build, ws, glob, listener);
// after — guard against the unimplemented default
if (provisioner instanceof FileSystemProvisioner.Default) {
listener.getLogger().println("Workspace snapshots not supported by this provisioner.");
} else {
provisioner.snapshot(build, ws, glob, listener);
} Defensive patterns
Strategy: validation
Validate before calling
if (provisioner instanceof FileSystemProvisioner.Default) {
throw new UnsupportedOperationException("Workspace snapshots are not supported by the default FileSystemProvisioner.");
} Type guard
public static boolean supportsSnapshot(FileSystemProvisioner p) {
return !(p instanceof FileSystemProvisioner.Default);
} Try / catch
try {
provisioner.snapshot(build, ws, glob, listener);
} catch (IOException e) {
if ("unimplemented".equals(e.getMessage())) {
listener.getLogger().println("Snapshot not supported; skipping.");
} else {
throw e;
}
} Prevention
- Check the provisioner type before calling snapshot().
- Install a cloud agent plugin that provides a real FileSystemProvisioner if snapshots are needed.
When it happens
Trigger: Calling FileSystemProvisioner.Default.snapshot() — i.e., Jenkins is using the built-in default provisioner and something (a plugin, a build wrapper, or an API consumer) requests a workspace snapshot via FilePath or AbstractBuild APIs.
Common situations: A plugin that relies on workspace snapshotting (e.g., for artifact caching, workspace reuse, or pre-build checkpointing) running against a Jenkins instance without a cloud/agent plugin that provides a real FileSystemProvisioner.
Related errors
- Failed to load {}. The file does not exist
- Failed to load {}. It is not a file
- Failed to mkdirs: ${remote}
- Failed to create a temp file on ${remote}
- Failed to create a temporary directory in ${dir}
AI-assisted analysis of jenkinsci/jenkins@2e228ff40b (2026-08-14).
Data as JSON: /api/errors/aff1afad68913186.
Report an issue: GitHub.