pentaho/pentaho-kettle · error · KettleException

GetSequenceMeta.Exception.UnableToSaveStepInfo

Error message

GetSequenceMeta.Exception.UnableToSaveStepInfo

What it means

GetSlaveSequenceMeta.saveRep throws KettleException with 'UnableToSaveStepInfo' (plus id_step) when saving the step's attributes (valuename, slave, seqname, increment) to a repository fails. The original exception is wrapped as the cause. It indicates the repository refused or failed the saveStepAttribute calls.

Solutions

  1. Check repository DB connectivity and retry the save.
  2. Grant the repository user INSERT/UPDATE on r_step_attribute.
  3. Verify the repository schema version matches your PDI release.
  4. Check DB disk space and server error logs for the underlying failure.
Defensive patterns

Strategy: try-catch

Validate before calling

// Check repository is writable before saving
if ( rep.isReadOnly() ) throw new IllegalStateException( "Repository is read-only; cannot save transformation" );

Try / catch

try {
  transMeta.saveRep( rep, metaStore, null, null );
} catch ( KettleException e ) {
  if ( e.getMessage().contains( "UnableToSaveStepInfo" ) ) {
    // inspect e.getCause() for DB error; check permissions/disk, then retry save
  } else throw e;
}

Prevention

When it happens

Trigger: Saving a transformation to a database repository; rep.saveStepAttribute throws due to connection failure, read-only DB user, or constraint/schema mismatch on r_step_attribute.

Common situations: Repository DB in read-only mode; user lacks INSERT/UPDATE rights; repository schema out of date after PDI upgrade; database disk full or connection dropped mid-save.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/getslavesequence/GetSlaveSequenceMeta.java:129

      valuename = rep.getStepAttributeString( id_step, "valuename" );
      slaveServerName = rep.getStepAttributeString( id_step, "slave" );
      sequenceName = rep.getStepAttributeString( id_step, "seqname" );
      increment = rep.getStepAttributeString( id_step, "increment" );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "GetSequenceMeta.Exception.UnableToReadStepInfo" )
        + id_step, e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "valuename", valuename );
      rep.saveStepAttribute( id_transformation, id_step, "slave", slaveServerName );
      rep.saveStepAttribute( id_transformation, id_step, "seqname", sequenceName );
      rep.saveStepAttribute( id_transformation, id_step, "increment", increment );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "GetSequenceMeta.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;

    if ( input.length > 0 ) {
      cr =
        new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString(
          PKG, "GetSequenceMeta.CheckResult.StepIsReceving.Title" ), stepMeta );
      remarks.add( cr );
    } else {
      cr =
        new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, BaseMessages.getString(

View on GitHub (pinned to f3058517a1)