pentaho/pentaho-kettle · error · FileException
Error getting VFS locations. Check your credentials and for…
Error message
Error getting VFS locations. Check your credentials and for connectivity.
What it means
VFSFileProvider.getBuckets() resolves the VFS connection provider and asks it for the available locations (bucket roots). Any failure from getExistingProvider or getLocations (undefined provider, credential problems, network errors per BACKLOG-36560) is wrapped in this FileException telling the user to check credentials and connectivity.
Solutions
- Verify the VFS connection's credentials in the connection manager and re-authenticate
- Test network/VPN connectivity to the storage endpoint
- Confirm the provider plugin for this connection type is installed and enabled
- Re-open/re-save the connection details so getExistingProvider resolves a defined provider
- Inspect the wrapped cause `e` for the true backend error
Example fix
// before
FileConnectionRoot root = provider.getRoot(); // fails when offline
// after
try {
provider.testConnection( details ); // preflight
} catch ( FileException fe ) {
logError( "Check credentials/connectivity: " + fe.getCause() );
return;
} Defensive patterns
Strategy: try-catch
Validate before calling
// preflight
try {
List<Location> roots = vfsConnectionProvider.getLocations( details );
if ( roots == null || roots.isEmpty() ) throw new IllegalStateException( "No locations for connection" );
} catch ( Exception e ) { /* fix credentials/network before calling getFiles */ } Type guard
boolean providerResolvable = vfsConnectionManagerHelper.getExistingProvider( getConnectionManager( bowl ), details ) != null;
Try / catch
try { provider.getFiles( details ); } catch ( FileException fe ) {
Throwable cause = fe.getCause();
log.error( "VFS location lookup failed; check credentials/connectivity", cause );
} Prevention
- Validate connection credentials before browsing
- Test network access to the storage endpoint
- Confirm the provider plugin for the connection type is installed
When it happens
Trigger: getFiles() -> getBuckets() where vfsConnectionProvider.getLocations(details) throws a RuntimeException, or getExistingProvider cannot find a provider for the given connection details.
Common situations: Expired or wrong cloud credentials on a VFS connection; no network/VPN to the storage backend; a saved connection whose provider plugin is not installed (undefined provider); transient backend outages.
Related errors
- FileSystemException wrapping SdkClientException
- AbstractFileErrorHandler.Exception.CouldNotCreateFileErrorHandlerForFile
- Append file in repository is not possible
- [ + ArgList[0] + ] is not a file!
- [ + ArgList[0] + ] is not a folder!
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9763bb9a628f513f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/file-open-save-new/core/src/main/java/org/pentaho/di/plugins/fileopensave/providers/vfs/VFSFileProvider.java:266
VFSConnectionDetails details )
throws FileException {
if ( this.roots.containsKey( getKey( fileConnectionRoot ) ) ) {
return this.roots.get( getKey( fileConnectionRoot ) );
}
List<VFSFile> files = new ArrayList<>();
List<VFSRoot> bucketRoots;
try {
VFSConnectionProvider<VFSConnectionDetails> vfsConnectionProvider =
vfsConnectionManagerHelper.getExistingProvider( getConnectionManager( bowl ), details );
bucketRoots = vfsConnectionProvider.getLocations( details );
} catch ( Exception e ) {
// Catching either the very unlikely undefined provider for the given details,
// or a RuntimeException's possibly thrown by getLocations(.) (see BACKLOG-36560)
throw new FileException(
"Error getting VFS locations. Check your credentials and for connectivity.", e );
}
if ( bucketRoots == null || bucketRoots.isEmpty() ) {
throw new FileNotFoundException( fileConnectionRoot.getPath(), fileConnectionRoot.getProvider() );
}
for ( VFSRoot bucketRoot : bucketRoots ) {
// Assuming bucket names do not have special characters, which should be the case,
// given buckets take the domain position of provider URIs.
ConnectionFileName bucketFileName =
connectionRootFileName.createChildName( bucketRoot.getName(), FileType.FOLDER );
VFSDirectory vfsDirectory = new VFSDirectory();
vfsDirectory.setName( bucketRoot.getName() );
vfsDirectory.setDate( bucketRoot.getModifiedDate() );
vfsDirectory.setHasChildren( true );
vfsDirectory.setCanAddChildren( true );View on GitHub (pinned to f3058517a1)