pentaho/pentaho-kettle · error · KettleVFSFileSystemException
ConnectionFileSystem.ConnectionManagerGone
ConnectionFileSystem.ConnectionManagerGone
Error message
ConnectionFileSystem.ConnectionManagerGone
What it means
ConnectionFileSystem holds the ConnectionManager via a lazily-supplied reference (this.connectionManager.get()). When creating a file object, if the reference yields null the manager is 'gone' and the filesystem cannot resolve the pvfs:// name, so it throws. This guards the whole createFile path against a disposed/unset manager.
Solutions
- Ensure the ConnectionManager reference is set before resolving pvfs:// files
- Do not resolve pvfs:// files after the filesystem/connection layer has been closed
- Re-create or re-open the ConnectionFileSystem so the manager supplier is re-populated
- Check for concurrent shutdown threads clearing the manager reference
Example fix
// before: resolving after cleanup
closeConnections();
FileObject f = fs.resolveFile("pvfs://conn/x");
// after
FileObject f = fs.resolveFile("pvfs://conn/x");
closeConnections(); Defensive patterns
Strategy: try-catch
Validate before calling
if (connectionManagerRef.get() == null) { /* re-register or abort before resolving pvfs files */ } Type guard
boolean managerAvailable = connectionManagerRef.get() != null;
Try / catch
try { fo = fs.resolveFile(pvfsUrl); } catch (FileSystemException e) { /* re-open filesystem and retry once */ } Prevention
- Set the ConnectionManager supplier before first resolve
- Close filesystems only after all VFS work completes
- Avoid racing shutdown threads with VFS resolution
When it happens
Trigger: resolveFile -> createFile is invoked while connectionManager.get() returns null — the supplier-backed reference was never set or was cleared (filesystem closed/reset before use).
Common situations: Using a ConnectionFileSystem after shutdown/cleanup; a race where the filesystem is used concurrently with teardown; constructing the filesystem without wiring the ConnectionManager supplier.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Connection not found: " + name
- ConnectionFileProvider.FailedLoadConnectionManager
- Undefined connection provider for key
- AbstractFileErrorHandler.Exception.CouldNotCreateFileErrorHandlerForFile
- Append file in repository is not possible
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/bdb27f433ee15d72.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/connections/vfs/provider/ConnectionFileSystem.java:74
private final VFSConnectionManagerHelper vfsConnectionManagerHelper;
public ConnectionFileSystem( @NonNull FileName rootName,
@NonNull FileSystemOptions fileSystemOptions,
@NonNull ConnectionManager connectionManager,
@NonNull VFSConnectionManagerHelper vfsConnectionManagerHelper ) {
super( rootName, null, fileSystemOptions );
this.connectionManager = new WeakReference( Objects.requireNonNull( connectionManager ) );
this.vfsConnectionManagerHelper = Objects.requireNonNull( vfsConnectionManagerHelper );
}
@Override
protected FileObject createFile( AbstractFileName fileName ) throws Exception {
ConnectionFileName pvfsFileName = (ConnectionFileName) fileName;
ConnectionManager locConnMgr = this.connectionManager.get();
if ( locConnMgr == null ) {
throw new KettleVFSFileSystemException( "ConnectionFileSystem.ConnectionManagerGone" );
}
// 1. pvfs:// has no associated connection, so no provider file object.
String connectionName = pvfsFileName.getConnection();
if ( connectionName == null ) {
return new PvfsRootFileObject( pvfsFileName, this );
}
// 2. A file name that references a connection that does not exist.
VFSConnectionDetails details = locConnMgr.getDetails( connectionName );
if ( details == null ) {
return new UndefinedConnectionFileObject( pvfsFileName, this );
}
initializeVariableSpace( details );
// 3. Connections with buckets don't support degenerate root provider URIs (e.g. s3://).
// If using buckets, such URIs would be generated, if transformer were called.
if ( pvfsFileName.isConnectionRoot() && vfsConnectionManagerHelper.usesBuckets( details ) ) {View on GitHub (pinned to f3058517a1)