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

AccessOutputMeta.saveRep persists the step settings (filename, tablename, create_table, commit_size, add_to_result_filenames, do_not_open_newfile_init). Any exception in the saveStepAttribute calls is wrapped in KettleException("Unable to save step information to the repository for id_step="). It means the repository write for this step failed.

Solutions

  1. Verify the repository connection and reconnect if needed
  2. Confirm the repository user has INSERT/UPDATE rights
  3. Retry the save after fixing connectivity
  4. Inspect the wrapped cause for the actual JDBC error
  5. Check repository DB logs/disk space for storage failures

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repo.isConnected()) throw new IllegalStateException("Repository not connected before save");
// and confirm writable: run a small test saveStepAttribute or check user grants

Try / catch

try {
  transMeta.save(rep, comment, null);
} catch (KettleException e) {
  log.error("saveRep failed for id_step=" + e.getMessage(), e.getCause());
  repo.disconnect(); repo.connect(user, pass);
  transMeta.save(rep, comment, null); // retry once
}

Prevention

When it happens

Trigger: Saving a transformation when the repository connection is broken, the user lacks write permission, the repository is read-only, or a JDBC constraint/IO error occurs on r_step_attribute writes.

Common situations: Repository database restarted between opening and saving; insufficient DB grants; read-only standby repository; storage quota exceeded on the repository DB.

Related errors


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

Appendix: source

Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessoutput/AccessOutputMeta.java:212

    } 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.saveStepAttribute( id_transformation, id_step, "filename", filename );
      rep.saveStepAttribute( id_transformation, id_step, "table", tablename );
      rep.saveStepAttribute( id_transformation, id_step, "truncate", tableTruncated );
      rep.saveStepAttribute( id_transformation, id_step, "create_file", fileCreated );
      rep.saveStepAttribute( id_transformation, id_step, "create_table", tableCreated );
      rep.saveStepAttribute( id_transformation, id_step, "commit_size", commitSize );
      rep.saveStepAttribute( id_transformation, id_step, "add_to_result_filenames", addToResultFilenames );
      rep.saveStepAttribute( id_transformation, id_step, "do_not_open_newfile_init", doNotOpeNnewFileInit );

    } 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 ) {

    // TODO: add file checking in case we don't create a table.

    // See if we have input streams leading to this step!
    if ( input.length > 0 ) {
      CheckResult cr =
        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
          PKG, "AccessOutputMeta.CheckResult.ExpectedInputOk" ), stepMeta );
      remarks.add( cr );
    } else {
      CheckResult cr =
        new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(

View on GitHub (pinned to f3058517a1)