pentaho/pentaho-kettle · critical · KettleException
Repository.NoRepositoryExists.Messages
Repository.NoRepositoryExists.Messages
Error message
Repository.NoRepositoryExists.Messages
What it means
KettleException with the localized message Repository.NoRepositoryExists.Messages thrown by verifyVersion when reading the repository version rows fails with an unexpected Exception, indicating the connected database is not a valid/initialized Kettle repository (version table missing or unreadable). This catches databases that exist but were never initialized as repositories.
Solutions
- Run the repository creation/upgrade wizard (or RepositoryConnectController / SQL scripts) to initialize the repository tables
- Verify you connected to the correct database that actually hosts the Kettle repository
- Restore the R_VERSION table from backup if it was dropped
- Check the database user has SELECT permission on R_VERSION
Example fix
// before
KettleDatabaseRepository repo = ...;
repo.connect("user", "pass"); // throws NoRepositoryExists
// after
// initialize first, e.g. via Spoon's repository create dialog or SQL scripts,
// then connect and guard:
try {
repo.connect("user", "pass");
} catch (KettleException e) {
log.error("Repository not initialized; run upgrade scripts", e);
} Defensive patterns
Strategy: validation
Validate before calling
Database db = new Database(meta); db.connect(); ResultSet rs = db.openQuery("SELECT COUNT(*) FROM R_VERSION"); // throws if table missing -> repository not initialized Type guard
boolean isInitializedRepo = versionTableExists && versionRowCount > 0;
Try / catch
try { repository.connect(u, p); } catch (KettleException e) { if (String.valueOf(e.getMessage()).contains("NoRepositoryExists")) { initializeRepositorySchema(); repository.connect(u, p); } else { throw e; } } Prevention
- Only point Kettle at databases initialized as Kettle repositories
- Run repository creation scripts before first connect
- Verify R_VERSION exists and is readable by the connect user
- Restore version tables from backup after manual cleanup
When it happens
Trigger: Connecting to a database where R_VERSION does not exist or its contents cannot be read (empty result set from the version lookup) during connect(..., ignoreVersion=false).
Common situations: Pointing Kettle at a plain/empty database instead of a repository, connecting after manual deletion of R_VERSION, or a pre-2.x/foreign schema that doesn't match expected tables.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- Error initialize repo:// VFS
- Unable to get the list of repository objects from the…
- Unable to obtain a IUnifiedRepository instance
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9b1fe99c4f3aca95.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryConnectionDelegate.java:207
callRead( () -> database.getOneRow( "SELECT * FROM " + userTable ) );
// Still here? That means we have a repository...
//
// If we can't retrieve the last available upgrade date:
// this means the R_VERSION table doesn't exist.
// This table was introduced in version 2.3.0
//
if ( log.isBasic() ) {
log.logBasic( BaseMessages.getString( PKG, "Repository.Error.GettingInfoVersionTable", versionTable ) );
log.logBasic( BaseMessages.getString( PKG, "Repository.Error.NewTable" ) );
log.logBasic( "Stack trace: " + Const.getStackTracker( e ) );
}
majorVersion = 2;
minorVersion = 2;
lastUpgrade = null;
} catch ( Exception ex ) {
throw new KettleException( BaseMessages.getString( PKG, "Repository.NoRepositoryExists.Messages" ) );
}
}
if ( lastUpgrade != null ) {
majorVersion = (int) lastUpgrade.getInteger( KettleDatabaseRepository.FIELD_VERSION_MAJOR_VERSION, -1 );
minorVersion = (int) lastUpgrade.getInteger( KettleDatabaseRepository.FIELD_VERSION_MINOR_VERSION, -1 );
}
if ( majorVersion < REQUIRED_MAJOR_VERSION
|| ( majorVersion == REQUIRED_MAJOR_VERSION && minorVersion < REQUIRED_MINOR_VERSION ) ) {
throw new KettleException( BaseMessages.getString(
PKG, "Repository.UpgradeRequired.Message", getVersion(), getRequiredVersion() ) );
}
if ( majorVersion == 3 && minorVersion == 0 ) {
// The exception: someone upgraded the repository to version 3.0.0
// In that version, one column got named incorrectly.
// Another upgrade to 3.0.1 or later will fix that.View on GitHub (pinned to f3058517a1)