pentaho/pentaho-kettle · error · KettleException

CombinationLookupMeta.Exception.UnableToSaveStepInfo

Error message

CombinationLookupMeta.Exception.UnableToSaveStepInfo

What it means

Generic KettleException thrown by CombinationLookupMeta.saveRep when persisting the step configuration to the repository fails. The localized message 'Unable to save step information to the repository ... id_step=' is concatenated with the step id, and the original exception is attached as cause.

Solutions

  1. Check the wrapped cause; if it points at insertStepDatabase, save the database connection first so its ObjectId is not null.
  2. Verify repository write permissions and that the repository isn't locked or read-only.
  3. Run repository upgrade scripts if the schema predates your PDI version.
  4. Retry the save after resolving contention (another open transformation holding locks).

Example fix

// before: step references an unsaved shared connection -> insertStepDatabase(null id)
// after: save the DatabaseMeta first
//   rep.save(databaseMeta, id_transformation, null);
//   stepMeta.setDatabaseMeta(databaseMeta);
//   rep.saveStepAttribute(...) // then save the transformation
Defensive patterns

Strategy: try-catch

Validate before calling

// before save: ensure the referenced connection is persisted
// if (meta.getDatabaseMeta() != null && meta.getDatabaseMeta().getObjectId() == null)
//   rep.save(meta.getDatabaseMeta(), id_transformation, null);

Try / catch

try {
  repository.save(transMeta, "comment", null);
} catch (KettleException e) {
  log.error("Save of step to repository failed for id_step=" + e.getCause(), e);
}

Prevention

When it happens

Trigger: saveRep throws while writing step attributes or while rep.insertStepDatabase(id_transformation, id_step, databaseMeta.getObjectId()) is called after saving the main attributes.

Common situations: Repository read-only or out of quota; transaction locked by another user/session; foreign key issues when databaseMeta.getObjectId() is null (connection not yet saved); repository schema mismatch after upgrade.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/combinationlookup/CombinationLookupMeta.java:604

        rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_name", keyField[ i ] );
        rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_field", keyLookup[ i ] );
      }

      rep.saveStepAttribute( id_transformation, id_step, "return_name", technicalKeyField );
      rep.saveStepAttribute( id_transformation, id_step, "sequence", sequenceFrom );
      rep.saveStepAttribute( id_transformation, id_step, "creation_method", techKeyCreation );

      // For the moment still save 'use_autoinc' for backwards compatibility (Sven Boden).
      rep.saveStepAttribute( id_transformation, id_step, "use_autoinc", useAutoinc );

      rep.saveStepAttribute( id_transformation, id_step, "last_update_field", lastUpdateField );

      // Also, save the step-database relationship!
      if ( databaseMeta != null ) {
        rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "CombinationLookupMeta.Exception.UnableToSaveStepInfo" )
        + 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;
    String error_message = "";

    if ( databaseMeta != null ) {
      Database db = new Database( loggingObject, databaseMeta );
      try {
        db.connect();

        if ( !Utils.isEmpty( tablename ) ) {

View on GitHub (pinned to f3058517a1)