pentaho/pentaho-kettle · error · KettleException

JobEvalFilesMetrics.Error.Exception.UnableLoadRep

Error message

JobEvalFilesMetrics.Error.Exception.UnableLoadRep

What it means

JobEntryEvalFilesMetrics.loadRep() loads this entry's attributes (evaluation_type, scale, source_files, etc.) from the repository; any KettleException from the repository calls is rethrown as a KettleException with localized message 'JobEvalFilesMetrics.Error.Exception.UnableLoadRep' concatenated with the job entry id. It means the stored configuration for this entry could not be read from the repository.

Solutions

  1. Check the chained cause for the JDBC/database error details.
  2. Verify r_jobentry_attribute contains rows for the printed id_jobentry; re-save the entry to recreate them.
  3. Test and repair the repository connection; run repository upgrade scripts if the schema is outdated.
  4. Reload the job after restoring DB connectivity.
Defensive patterns

Strategy: try-catch

Validate before calling

if (!rep.connect()) {
  throw new IllegalStateException("Repository not reachable: " + rep.getName());
}

Try / catch

try {
  JobMeta meta = rep.loadJob(jobName, jobDir, null, null);
} catch (KettleException e) {
  logError("Repo load of EvalFilesMetrics failed for entry " + e.getMessage(), e);
  throw e;
}

Prevention

When it happens

Trigger: Loading a job from a repository where rep.getJobEntryAttributeString(...) for fields like 'evaluation_type' or 'scale' throws KettleDatabaseException (wrapped as KettleException).

Common situations: Missing rows in r_jobentry_attribute for the entry; repository DB connectivity problems; schema version mismatch; partial save left the entry's attributes incomplete.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/2e329c857878dea1. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/evalfilesmetrics/JobEntryEvalFilesMetrics.java:305

      ResultFieldFile = rep.getJobEntryAttributeString( id_jobentry, "result_field_file" );
      ResultFieldWildcard = rep.getJobEntryAttributeString( id_jobentry, "result_field_wild" );
      ResultFieldIncludesubFolders =
        rep.getJobEntryAttributeString( id_jobentry, "result_field_includesubfolders" );
      comparevalue = rep.getJobEntryAttributeString( id_jobentry, "comparevalue" );
      minvalue = rep.getJobEntryAttributeString( id_jobentry, "minvalue" );
      maxvalue = rep.getJobEntryAttributeString( id_jobentry, "maxvalue" );
      successConditionType =
        JobEntrySimpleEval.getSuccessNumberConditionByCode( Const.NVL( rep.getJobEntryAttributeString(
          id_jobentry, "successnumbercondition" ), "" ) );
      sourceFiles =
        getSourceFilesByCode( Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "source_files" ), "" ) );
      evaluationType =
        getEvaluationTypeByCode( Const
          .NVL( rep.getJobEntryAttributeString( id_jobentry, "evaluation_type" ), "" ) );
      scale = getScaleByCode( Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "scale" ), "" ) );
    } catch ( KettleException dbe ) {

      throw new KettleException( BaseMessages.getString( PKG, "JobEvalFilesMetrics.Error.Exception.UnableLoadRep" )
        + id_jobentry, dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {

      // save the arguments...
      if ( sourceFileFolder != null ) {
        for ( int i = 0; i < sourceFileFolder.length; i++ ) {
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "source_filefolder", sourceFileFolder[i] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "wildcard", sourceWildcard[i] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "include_subFolders", sourceIncludeSubfolders[i] );
        }
      }

      rep.saveJobEntryAttribute( id_job, getObjectId(), "result_filenames_wildcard", resultFilenamesWildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "result_field_file", ResultFieldFile );

View on GitHub (pinned to f3058517a1)