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

  1. Run the repository creation/upgrade wizard (or RepositoryConnectController / SQL scripts) to initialize the repository tables
  2. Verify you connected to the correct database that actually hosts the Kettle repository
  3. Restore the R_VERSION table from backup if it was dropped
  4. 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

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


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)