pentaho/pentaho-kettle · error · KettleRepositoryNotFoundException
ExecuteJobServlet.Error.UnableToFindRepository
ExecuteJobServlet.Error.UnableToFindRepository
Error message
ExecuteJobServlet.Error.UnableToFindRepository
What it means
KettleRepositoryNotFoundException thrown by ExecuteJobServlet.openRepository when repositoriesMeta.findRepository(repositoryName) returns null — the repository name supplied in the request does not exist among the repositories defined in the local repositories.xml (or .kettle/repositories.xml). The servlet cannot open a repository by that name.
Solutions
- Add or correct the repository definition in ~/.kettle/repositories.xml on the Carte server
- Fix the rep parameter in the request to match the repository name exactly
- Verify Carte's KETTLE_HOME / user home points at the directory containing repositories.xml
- Restart Carte after editing repositories.xml
- Compare repository names via Spoon's repository connection dialog on the same host
Example fix
// before String url = "...&rep=prod_repo&user=u&pass=p&..."; // not in repositories.xml // after // add to ~/.kettle/repositories.xml: // <repository><id>1</id><name>prod_repo</name>...</repository> String url = "...&rep=prod_repo&user=u&pass=p&...";
Defensive patterns
Strategy: validation
Validate before calling
RepositoriesMeta meta = new RepositoriesMeta();
meta.readData();
if ( meta.findRepository( repositoryName ) == null ) {
throw new IllegalStateException( "Repository not defined: " + repositoryName );
} Try / catch
try {
// executeJob request
} catch ( KettleRepositoryNotFoundException e ) {
LOG.error( "Unknown repository '" + repName + "'; check ~/.kettle/repositories.xml on server", e );
} Prevention
- Keep repositories.xml in sync across Carte nodes via config management
- Confirm KETTLE_HOME points where repositories.xml lives
- Match rep parameter exactly to the repository name in the XML
- Restart Carte after repository definition changes
When it happens
Trigger: HTTP GET /kettle/executeJob/ with a rep parameter naming a repository absent from RepositoriesMeta.readData() results — i.e. not defined in the Carte server's .kettle/repositories.xml.
Common situations: repositories.xml missing on the Carte server host; repository renamed in the XML; typo in rep parameter; Carte running under a different user/home dir so .kettle/repositories.xml isn't found; multi-node setup where only some nodes have the repo defined.
Understand the failure class
Background: "Config file not found": what it means and how to fix it in docker-sync, Maven, Vagrant, Turborepo and other tools — this error's family across 60 libraries.
Related errors
- Unable to find repository: " + repositoryName
- ExecuteJobServlet.Error.DirectoryPathNotFoundInRepository
- ExecuteJobServlet.Error.JobNotFoundInDirectory
- Repository required.
- TransExecutorDialog.Exception.UnableToFindRepositoryDirector…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/a5365acb8c6968bd.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/www/ExecuteJobServlet.java:382
}
JobMeta jobMeta = repository.loadJob( jobID, null, parentVariableSpace );
return jobMeta;
}
}
@VisibleForTesting
Repository openRepository( String repositoryName, String user, String pass ) throws KettleException {
if ( Utils.isEmpty( repositoryName ) ) {
return null;
}
RepositoriesMeta repositoriesMeta = new RepositoriesMeta();
repositoriesMeta.readData();
RepositoryMeta repositoryMeta = repositoriesMeta.findRepository( repositoryName );
if ( repositoryMeta == null ) {
String message = BaseMessages.getString( PKG, "ExecuteJobServlet.Error.UnableToFindRepository", repositoryName );
throw new KettleRepositoryNotFoundException( message );
}
PluginRegistry registry = PluginRegistry.getInstance();
Repository repository = registry.loadClass( RepositoryPluginType.class, repositoryMeta, Repository.class );
repository.init( repositoryMeta );
repository.connect( user, pass );
return repository;
}
public String toString() {
return "Start job";
}
public String getService() {
return CONTEXT_PATH + " (" + toString() + ")";
}
protected void runJob( Job job ) {
// Execute the job...View on GitHub (pinned to f3058517a1)