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

  1. Ensure the ConnectionManager reference is set before resolving pvfs:// files
  2. Do not resolve pvfs:// files after the filesystem/connection layer has been closed
  3. Re-create or re-open the ConnectionFileSystem so the manager supplier is re-populated
  4. 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

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


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)