pentaho/pentaho-kettle · error · KettleException
No repository
Error message
No repository
What it means
ClientRepositoryLoader.getRepository connects to the named repository using the repo name, user, and password from PurFileSystemConfig; connectToRepository returned null (no repository could be connected), so this KettleException is thrown. The VFS layer has no repository to operate on.
Solutions
- Verify PurFileSystemConfig values (repo name, user, password) in your VFS FileSystemOptions
- Confirm the repository plugin for that metadata type is installed and loadable
- Check logs around connectToRepository for the underlying connection failure
- Re-register the repository in Kettle's repository metadata (repositories.xml)
Example fix
// before
FileSystemOptions opts = new FileSystemOptions();
// after — set all required config before resolving pur:// URIs
FileSystemOptions opts = new FileSystemOptions();
PurFileSystemConfig cfg = PurFileSystemConfig.getInstance(opts);
cfg.setRepositoryName("myPurRepo");
cfg.setUser("admin");
cfg.setPass("password"); Defensive patterns
Strategy: validation
Validate before calling
// Java — before resolving pur:// URIs
PurFileSystemConfig cfg = PurFileSystemConfig.getInstance( opts );
if ( cfg.getRepoName().isEmpty() || cfg.getUser().isEmpty() || cfg.getPass().isEmpty() ) {
throw new IllegalStateException( "PurFileSystemConfig requires repo name, user and password" );
} Try / catch
try {
Repository repo = loader.getRepository( opts );
} catch ( KettleException e ) {
logError( "VFS repository load failed: " + e.getMessage(), e );
throw e;
} Prevention
- Set all PurFileSystemConfig fields on FileSystemOptions before use
- Install the repository plugin matching your metadata type
- Check connectToRepository logs for silent nulls
When it happens
Trigger: getRepository(opts) runs after 'No repository name/user/password' checks pass, but connectToRepository yields null — e.g. the named repository exists in metadata yet fails to load/produce an instance.
Common situations: PurFileSystemConfig missing or having invalid values in FileSystemOptions; repository metadata present but plugin for that repository type not installed; connection silently failing and returning null upstream.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Repository not connected
- Append file in repository is not possible
- ConnectionFileSystem.FailedTransformProviderFilename
- Could not execute specified in a repository since we're not…
- Error connecting to the repository!
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/03bb3b829b576ee7.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/repo-vfs/repo-vfs-pdi/src/main/java/org/pentaho/di/repovfs/plugin/client/ClientRepositoryLoader.java:76
var bowl = cfg.getBowl();
if ( bowl.isPresent() && bowl.get() instanceof RepositoryBowl repoBowl ) {
log.debug( "Using repository from bowl" );
return repoBowl.getRepository();
}
Spoon spoon = Spoon.getInstance();
if ( spoon != null ) {
log.debug( "Using spoon repository" );
return spoon.getRepository();
}
// there is no spoon
log.debug( "Connecting to repository" );
var repository = connectToRepository(
cfg.getRepoName().orElseThrow( () -> new KettleException( "No repository name" ) ),
cfg.getUser().orElseThrow( () -> new KettleException( "No user name" ) ),
cfg.getPass().orElseThrow( () -> new KettleException( "No password" ) ) );
if ( repository == null ) {
throw new KettleException( "No repository" );
}
return repository;
}
private Repository connectToRepository( String repositoryName, String user, String password )
throws KettleException {
var repositories = repositoriesLoader.get();
var repoMeta = repositories.findRepository( repositoryName );
if ( repoMeta == null ) {
throw new KettleException( "Repository not found: " + repositoryName );
}
var repo = PluginRegistry.getInstance().loadClass( RepositoryPluginType.class, repoMeta, Repository.class );
repo.init( repoMeta );
repo.connect( user, password );
return repo;
}
View on GitHub (pinned to f3058517a1)