pentaho/pentaho-kettle · error · KettleException

Unable to save step information to the repository for…

Error message

Unable to save step information to the repository for id_step=" + id_step

What it means

PropertyOutputMeta.saveRep wraps any exception raised while persisting this step's attributes to the Kettle repository into a KettleException. It means the step configuration could not be written to the repository (r_step_attribute insert/update failed). The original cause is chained.

Solutions

  1. Inspect the chained cause to identify the repository failure
  2. Verify repository connection is alive and reconnect if needed
  3. Check the repository user has write privileges on r_step_attribute
  4. Re-save after fixing; if persistent, export the transformation to XML and re-import

Example fix

// before
transMeta.saveRep(repository, metastore, transObjectId);
// after
try {
  transMeta.saveRep(repository, metastore, transObjectId);
} catch (KettleException e) {
  if (e.getCause() instanceof SQLException) {
    repository.disconnect(); repository.connect(user, pass);
    transMeta.saveRep(repository, metastore, transObjectId); // retry once
  }
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repository.isConnected()) throw new KettleException("Repository connection required before saveRep");

Try / catch

try { meta.saveRep(rep, metaStore, transId, stepId); } catch (KettleException e) { logError("Repository save failed: " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage())); repository.disconnect(); throw e; }

Prevention

When it happens

Trigger: Calling saveRep() via TransMeta.saveStep or repository save when Repository.saveStepAttribute throws — DB connection lost, repository read-only, transaction rollback, or attribute value too large for the column.

Common situations: Saving a transformation to a database repository whose connection timed out; repository user lacking INSERT/UPDATE privileges on Pentaho repository tables; disk full on the database server.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java:454

      rep.saveStepAttribute( id_transformation, id_step, "keyfield", keyfield );
      rep.saveStepAttribute( id_transformation, id_step, "valuefield", valuefield );
      rep.saveStepAttribute( id_transformation, id_step, "comment", comment );

      rep.saveStepAttribute( id_transformation, id_step, "file_name", fileName );
      rep.saveStepAttribute( id_transformation, id_step, "file_extention", extension );
      rep.saveStepAttribute( id_transformation, id_step, "file_add_stepnr", stepNrInFilename );
      rep.saveStepAttribute( id_transformation, id_step, "file_add_partnr", partNrInFilename );
      rep.saveStepAttribute( id_transformation, id_step, "file_add_date", dateInFilename );
      rep.saveStepAttribute( id_transformation, id_step, "file_add_time", timeInFilename );

      rep.saveStepAttribute( id_transformation, id_step, "create_parent_folder", createparentfolder );
      rep.saveStepAttribute( id_transformation, id_step, "addtoresult", addToResult );
      rep.saveStepAttribute( id_transformation, id_step, "append", append );
      rep.saveStepAttribute( id_transformation, id_step, "fileNameInField", fileNameInField );
      rep.saveStepAttribute( id_transformation, id_step, "fileNameField", fileNameField );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
    }
  }

  @Override
  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
    Repository repository, IMetaStore metaStore ) {

    CheckResult cr;
    // Now see what we can find as previous step...
    if ( prev != null && prev.size() > 0 ) {
      cr =
        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
          PKG, "PropertyOutputMeta.CheckResult.FieldsReceived", "" + prev.size() ), stepMeta );
      remarks.add( cr );
    } else {
      cr =
        new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(

View on GitHub (pinned to f3058517a1)