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

The TextFileInputMeta(Repository, ...) constructor reads step attributes from a repository and wraps any failure in a KettleException 'Unexpected error reading step information from the repository'. This protects callers from partially initialized step metadata when the repository read fails mid-way.

Solutions

  1. Check repository connectivity (ping the DB, test login in Spoon's repository dialog).
  2. Verify the repository user has read permission on the transformation/step attributes.
  3. Inspect the chained cause for the concrete SQL/repository error and fix that (schema corruption → restore backup).
  4. Re-open the transformation after connectivity is restored; the read is not retried automatically.
  5. If a version upgrade broke the schema, run the repository upgrade/repair scripts for your PDI version.

Example fix

// before: constructing metadata with a stale repository connection
TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, stepId);
// after: verify repository is alive first
if (!rep.isConnected() && !rep.connect()) { throw new KettleException("Repository unavailable"); }
TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, stepId);
Defensive patterns

Strategy: try-catch

Validate before calling

if (rep == null || !rep.isConnected()) {
  throw new KettleException("Repository not connected before reading step metadata");
}

Type guard

if (rep == null || id_step == null) return false; // cannot read from repository

Try / catch

try {
  TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, id_step);
} catch (KettleException e) {
  log.logError("Repository read failed: " + e.getCause(), e);
  // retry after reconnect or load from XML export instead
}

Prevention

When it happens

Trigger: Loading a TextFileInput step definition from a repository database (getStepAttributeString calls) when the repository connection drops, the r_step_attribute table is unavailable/corrupt, or the repository API throws (permission, network, DB down).

Common situations: Repository DB restarted or network blip while opening a transformation; insufficient repository permissions for the user; corrupted repository schema after an upgrade; timeout on a slow DB link.

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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/fileinput/text/TextFileInputMeta.java:986

      content.dateFormatLenient = rep.getStepAttributeBoolean( id_step, 0, "date_format_lenient", true );

      String dateLocale = rep.getStepAttributeString( id_step, 0, "date_format_locale" );
      if ( dateLocale != null ) {
        content.dateFormatLocale = EnvUtil.createLocale( dateLocale );
      } else {
        content.dateFormatLocale = Locale.getDefault();
      }
      additionalOutputFields.shortFilenameField = rep.getStepAttributeString( id_step, "shortFileFieldName" );
      additionalOutputFields.pathField = rep.getStepAttributeString( id_step, "pathFieldName" );
      additionalOutputFields.hiddenField = rep.getStepAttributeString( id_step, "hiddenFieldName" );
      additionalOutputFields.lastModificationField =
          rep.getStepAttributeString( id_step, "lastModificationTimeFieldName" );
      additionalOutputFields.uriField = rep.getStepAttributeString( id_step, "uriNameFieldName" );
      additionalOutputFields.rootUriField = rep.getStepAttributeString( id_step, "rootUriNameFieldName" );
      additionalOutputFields.extensionField = rep.getStepAttributeString( id_step, "extensionFieldName" );
      additionalOutputFields.sizeField = rep.getStepAttributeString( id_step, "sizeFieldName" );
    } 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, "accept_filenames", inputFiles.acceptingFilenames );
      rep.saveStepAttribute( id_transformation, id_step, "passing_through_fields", inputFiles.passingThruFields );
      rep.saveStepAttribute( id_transformation, id_step, "accept_field", inputFiles.acceptingField );
      rep.saveStepAttribute( id_transformation, id_step, "accept_stepname", ( acceptingStep != null ? acceptingStep
          .getName() : "" ) );

      rep.saveStepAttribute( id_transformation, id_step, "separator", content.separator );
      rep.saveStepAttribute( id_transformation, id_step, "enclosure", content.enclosure );
      rep.saveStepAttribute( id_transformation, id_step, "enclosure_breaks", content.breakInEnclosureAllowed );
      rep.saveStepAttribute( id_transformation, id_step, "escapechar", content.escapeCharacter );
      rep.saveStepAttribute( id_transformation, id_step, "header", content.header );

View on GitHub (pinned to f3058517a1)