{"record":{"id":"aff1afad68913186","repo":"jenkinsci/jenkins","slug":"unimplemented","errorCode":null,"errorMessage":"unimplemented","messagePattern":"unimplemented","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/hudson/FileSystemProvisioner.java","lineNumber":64,"sourceCode":"    @Override\n    public Descriptor getDescriptor() {\n        return Jenkins.get().getDescriptorOrDie(getClass());\n    }\n\n    public static final FileSystemProvisioner DEFAULT = new Default();\n\n    public static final class Default extends FileSystemProvisioner {\n        @Override\n        public void prepareWorkspace(AbstractBuild<?, ?> build, FilePath ws, TaskListener listener) throws IOException, InterruptedException {\n        }\n\n        @Override\n        public void discardWorkspace(AbstractProject<?, ?> project, FilePath ws) throws IOException, InterruptedException {\n        }\n\n        @Override\n        public WorkspaceSnapshot snapshot(AbstractBuild<?, ?> build, FilePath ws, String glob, TaskListener listener) throws IOException, InterruptedException {\n            throw new IOException(\"unimplemented\");\n        }\n\n    }\n}\n","sourceCodeStart":46,"sourceCodeEnd":69,"githubUrl":"https://github.com/jenkinsci/jenkins/blob/2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc/core/src/main/java/hudson/FileSystemProvisioner.java#L46-L69","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nprovisioner.snapshot(build, ws, glob, listener);\n\n// after — guard against the unimplemented default\nif (provisioner instanceof FileSystemProvisioner.Default) {\n    listener.getLogger().println(\"Workspace snapshots not supported by this provisioner.\");\n} else {\n    provisioner.snapshot(build, ws, glob, listener);\n}","handlingStrategy":"validation","validationCode":"if (provisioner instanceof FileSystemProvisioner.Default) {\n    throw new UnsupportedOperationException(\"Workspace snapshots are not supported by the default FileSystemProvisioner.\");\n}","typeGuard":"public static boolean supportsSnapshot(FileSystemProvisioner p) {\n    return !(p instanceof FileSystemProvisioner.Default);\n}","tryCatchPattern":"try {\n    provisioner.snapshot(build, ws, glob, listener);\n} catch (IOException e) {\n    if (\"unimplemented\".equals(e.getMessage())) {\n        listener.getLogger().println(\"Snapshot not supported; skipping.\");\n    } else {\n        throw e;\n    }\n}","preventionTips":["Check the provisioner type before calling snapshot().","Install a cloud agent plugin that provides a real FileSystemProvisioner if snapshots are needed."],"tags":["filesystem","workspace","unimplemented","stub"],"backgroundTag":null,"analyzedSha":"2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc","analyzedAt":"2026-08-14T07:07:15.274Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}