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

SecretKeyGeneratorMeta.saveRep throws KettleException with this message when saving the step's attributes to the repository fails via rep.saveStepAttribute calls. The id_step is included in the message for locating the failing row.

Solutions

  1. Check the wrapped cause for the JDBC error and fix connectivity/permissions
  2. Reconnect to the repository and retry the save
  3. Verify the R_STEP_ATTRIBUTE table is writable and not full (quota/disk)
  4. Verify repository schema is up to date for your Pentaho version

Example fix

// before: saving on a possibly stale connection
rep.saveStepAttribute(id_transformation, id_step, "secretKeyFieldName", secretKeyFieldName);
// after: ensure connection is alive first
rep.connect("user", "pass");
rep.saveStepAttribute(id_transformation, id_step, "secretKeyFieldName", secretKeyFieldName);
Defensive patterns

Strategy: try-catch

Validate before calling

// before saveRep
if (id_step == null) throw new KettleException("id_step required before saving step attributes");

Try / catch

try { meta.saveRep(rep, metaStore, id_transformation, id_step); } catch (KettleException e) { log.error("Save failed for step " + id_step + ": " + e.getCause(), e); }

Prevention

When it happens

Trigger: Calling saveRep(Repository, IMetaStore, ObjectId id_transformation, ObjectId id_step) when the repository connection drops, id_step is invalid, a constraint is violated, or the repository DB is read-only/full.

Common situations: Saving a transformation to a database repository with a stale connection; DB disk quota exceeded; permission revoked mid-session; saving to a repository created by an incompatible Kettle schema version.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/secretkeygenerator/SecretKeyGeneratorMeta.java:361

      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 {
      for ( int i = 0; i < algorithm.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "algorithm", algorithm[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "scheme", scheme[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "secretKeyLen", secretKeyLength[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "secretKeyCount", secretKeyCount[i] );
      }
      rep.saveStepAttribute( id_transformation, id_step, "secretKeyFieldName", secretKeyFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "secretKeyLengthFieldName", secretKeyLengthFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "algorithmFieldName", algorithmFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "outputKeyInBinary", outputKeyInBinary );
    } 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 ) {
    // See if we have input streams leading to this step!
    int nrRemarks = remarks.size();
    for ( int i = 0; i < algorithm.length; i++ ) {
      int len = Const.toInt( transMeta.environmentSubstitute( getSecretKeyLength()[i] ), -1 );
      if ( len < 0 ) {
        CheckResult cr =
          new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
            PKG, "SecretKeyGeneratorMeta.CheckResult.WrongLen", String.valueOf( i ) ), stepMeta );
        remarks.add( cr );
      }

View on GitHub (pinned to f3058517a1)