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

  1. Add or correct the repository definition in ~/.kettle/repositories.xml on the Carte server
  2. Fix the rep parameter in the request to match the repository name exactly
  3. Verify Carte's KETTLE_HOME / user home points at the directory containing repositories.xml
  4. Restart Carte after editing repositories.xml
  5. 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

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


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)