pentaho/pentaho-kettle · error · KettleException

Unexpected error reading step information from the…

Error message

Unexpected error reading step information from the repository

What it means

readRep wraps any exception while loading the step's settings from the repository into a KettleException 'Unexpected error reading step information from the repository'. It signals a repository read failure or unexpected attribute values for this step.

Solutions

  1. Check the wrapped cause for the repository error.
  2. Verify repository connectivity and that the transformation/step rows exist.
  3. Re-save the step metadata in Spoon to rewrite attributes.
  4. If an upgrade broke the schema, run repository upgrade scripts.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  readRep(rep, metaStore, id_step, databases);
} catch (KettleException e) {
  logError("Repository read failed: " + e.getCause(), e);
  throw e;
}

Prevention

When it happens

Trigger: Exception from rep.getStepAttributeString/getStepAttributeInteger calls in readRep — repository connection issues, missing step row, or type/number parse failures on stored attributes.

Common situations: Repository database unavailable or schema mismatch after Pentaho upgrade; step metadata rows missing/corrupted in r_step_attribute; concurrent modification.

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/0f2da8a05036c5ea. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/getfilenames/GetFileNamesMeta.java:632

      rowLimit = rep.getStepAttributeInteger( id_step, "limit" );

      allocate( nrfiles );

      for ( int i = 0; i < nrfiles; i++ ) {
        fileName[i] = rep.getStepAttributeString( id_step, i, "file_name" );
        fileMask[i] = rep.getStepAttributeString( id_step, i, "file_mask" );
        excludeFileMask[i] = rep.getStepAttributeString( id_step, i, "exclude_file_mask" );
        fileRequired[i] = rep.getStepAttributeString( id_step, i, "file_required" );
        if ( !YES.equalsIgnoreCase( fileRequired[i] ) ) {
          fileRequired[i] = NO;
        }
        includeSubFolders[i] = rep.getStepAttributeString( id_step, i, "include_subfolders" );
        if ( !YES.equalsIgnoreCase( includeSubFolders[i] ) ) {
          includeSubFolders[i] = NO;
        }
      }
    } catch ( Exception e ) {
      throw new KettleException( "Unexpected error reading step information from the repository", e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "filterfiletype", fileTypeFilter.toString() );
      rep.saveStepAttribute( id_transformation, id_step, "doNotFailIfNoFile", doNotFailIfNoFile );
      rep.saveStepAttribute( id_transformation, id_step, "rownum", includeRowNumber );
      rep.saveStepAttribute( id_transformation, id_step, "isaddresult", isaddresult );
      rep.saveStepAttribute( id_transformation, id_step, "filefield", filefield );
      rep.saveStepAttribute( id_transformation, id_step, "filename_Field", dynamicFilenameField );
      rep.saveStepAttribute( id_transformation, id_step, "wildcard_Field", dynamicWildcardField );
      rep.saveStepAttribute( id_transformation, id_step, "exclude_wildcard_Field", dynamicExcludeWildcardField );
      rep.saveStepAttribute( id_transformation, id_step, "dynamic_include_subfolders", dynamicIncludeSubFolders );

      rep.saveStepAttribute( id_transformation, id_step, "rownum_field", rowNumberField );
      rep.saveStepAttribute( id_transformation, id_step, "limit", rowLimit );

View on GitHub (pinned to f3058517a1)