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 idStep=

What it means

Thrown by PaloCellInputMeta.saveRep when persisting the step's attributes (connection, cube, and per-field dimensionname/fieldname/fieldtype) to the Kettle repository fails. The failure cause is chained in the KettleException.

Solutions

  1. Inspect the chained cause exception for the underlying repository error.
  2. Verify repository connectivity and write permissions for the current Kettle user.
  3. Retry the save after confirming the repository schema matches the plugin version.
  4. Check that idStep/idTransformation ObjectIds are valid (step was added to the transformation before save).

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

if (rep == null || idStep == null) { throw new IllegalStateException("repository/idStep must be set before saveRep"); }

Try / catch

try { transMeta.saveRep(rep, metaStore, idTrans, null); } catch (KettleException e) { log.error("save failed", e.getCause()); /* retry after connectivity check */ }

Prevention

When it happens

Trigger: saveRep called during transformation save when any rep.saveStepAttribute call throws — repository down, schema mismatch, invalid idTransformation/idStep, or field list containing unexpected values.

Common situations: Repository database outage or connection drop during save; insufficient repository write permissions; saving to an old repository schema that lacks the plugin's attribute conventions.

Related errors


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

Appendix: source

Thrown at plugins/palo/core/src/main/java/org/pentaho/di/trans/steps/palo/cellinput/PaloCellInputMeta.java:211

  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idTransformation, ObjectId idStep )
    throws KettleException {
    try {
      rep.saveDatabaseMetaStepAttribute( idTransformation, idStep, "connection", databaseMeta );
      rep.saveStepAttribute( idTransformation, idStep, "cube", this.cube );
      rep.saveStepAttribute( idTransformation, idStep, "cubemeasurename", this.cubeMeasure.getFieldName() );
      rep.saveStepAttribute( idTransformation, idStep, "cubemeasuretype", this.cubeMeasure.getFieldType() );

      for ( int i = 0; i < this.fields.size(); i++ ) {
        rep.saveStepAttribute( idTransformation, idStep, i, "dimensionname", this.fields.get( i ).getDimensionName() );
        rep.saveStepAttribute( idTransformation, idStep, i, "fieldname", this.fields.get( i ).getFieldName() );
        rep.saveStepAttribute( idTransformation, idStep, i, "fieldtype", this.fields.get( i ).getFieldType() );
      }

    } catch ( Exception e ) {
      throw new KettleException( "Unable to save step information to the repository for idStep=" + idStep, e );
    }
  }

  @Override
  public void check( final List<CheckResultInterface> remarks, final TransMeta transMeta, final StepMeta stepMeta,
      final RowMetaInterface prev, final String[] input, final String[] output, final 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 );

      final PaloHelper helper = new PaloHelper( databaseMeta, DefaultLogLevel.getLogLevel() );
      try {
        helper.connect();
        cr = new CheckResult( CheckResultInterface.TYPE_RESULT_OK, "Connection to database OK", stepMeta );
        remarks.add( cr );

View on GitHub (pinned to f3058517a1)