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=

What it means

MondrianInputMeta.saveRep persists the step configuration (connection link, sql, catalog, role, variables_active) to the repository. Any exception during the save is wrapped in a KettleException that includes the failing id_step. It means the step's settings could not be written, so the transformation is not fully persisted.

Solutions

  1. Check repository connectivity and that the account has write permissions
  2. Verify the referenced databaseMeta connection still exists in the repository (valid object id)
  3. Retry the save after resolving the root cause shown in the wrapped exception
  4. Repair/upgrade the repository schema if tables are missing columns for newer attributes
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-check write access and connection existence before saving
if (databaseMeta != null && rep.searchDatabaseMeta(databaseMeta.getName()) == null) {
  throw new IllegalStateException("Connection '" + databaseMeta.getName() + "' not in repository; save it first");
}

Type guard

null

Try / catch

try {
  transMeta.saveRep(rep, metaStore, directoryId, transName);
} catch (KettleException e) {
  if (e.getMessage().startsWith("Unable to save step information to the repository")) {
    logError("Step save failed (transformation NOT persisted): " + e.getMessage(), e);
  }
}

Prevention

When it happens

Trigger: saveRep is called when saving a transformation and the repository rejects a write (connection lost, insertStepDatabase constraint violation on the connection id, read-only repository).

Common situations: Repository database read-only or out of space; broken databaseMeta reference with an invalid object id; concurrent save conflicts; repository schema mismatch after upgrade.

Related errors


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

Appendix: source

Thrown at plugins/mondrianinput/impl/src/main/java/org/pentaho/di/trans/steps/mondrianinput/MondrianInputMeta.java:225

    } catch ( Exception e ) {
      throw new KettleException( "Unexpected error reading step information from the repository", e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
      rep.saveStepAttribute( id_transformation, id_step, "sql", sql );
      rep.saveStepAttribute( id_transformation, id_step, "catalog", catalog );
      rep.saveStepAttribute( id_transformation, id_step, "role", role );
      rep.saveStepAttribute( id_transformation, id_step, "variables_active", variableReplacementActive );

      // Also, save the step-database relationship!
      if ( databaseMeta != null ) {
        rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
      }
    } catch ( Exception e ) {
      throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
    }
  }

  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;

    if ( databaseMeta != null ) {
      cr = new CheckResult( CheckResultInterface.TYPE_RESULT_OK, "Connection exists", stepMeta );
      remarks.add( cr );

      // TODO: perform lookup to see if it all works fine.
    } else {
      cr =
        new CheckResult(
          CheckResultInterface.TYPE_RESULT_ERROR, "Please select or create a connection to use", stepMeta );
      remarks.add( cr );

View on GitHub (pinned to f3058517a1)