pentaho/pentaho-kettle · error · KettleException

GPLoadMeta.Exception.UnableToSaveStepInfoToRepository

Error message

GPLoadMeta.Exception.UnableToSaveStepInfoToRepository

What it means

GPLoadMeta.saveRep() persists step settings to the repository; any exception (including insertStepDatabase for the linked database connection) is wrapped in a KettleException with this message plus id_step. The step's configuration was not saved.

Solutions

  1. Verify repository connection and retry saving the transformation
  2. Ensure the referenced database connection exists and is saved (it has an ObjectId) before saving the step
  3. Check the repository user has write permissions on the transformation's folders
  4. Inspect e.getCause() for the underlying SQL error and fix accordingly (constraints, schema)

Example fix

// before
// databaseMeta referenced by GPload step not saved -> insertStepDatabase(null objectId)
// after
// Save the database connection first (DatabaseMeta dialog -> Save), then save the transformation
Defensive patterns

Strategy: try-catch

Validate before calling

// before saveRep: ensure referenced DB connection is persisted
if (databaseMeta != null && (databaseMeta.getObjectId() == null)) {
  rep.save(databaseMeta, null, null); // persist connection first
}

Try / catch

try { saveTransformationToRepo(...) } catch (KettleException e) {
  if (e.getMessage().contains("UnableToSaveStepInfoToRepository")) {
    logError("Save failed for step " + id_step + ": " + e.getCause());
    /* retry after reconnecting the repository */
  }
  throw e;
}

Prevention

When it happens

Trigger: Repository writes during saveRep fail — repository connection dropped, constraint violations, missing id_step, databaseMeta.objectId null when inserting the step-database link, or read-only repository user.

Common situations: Network blip to the repository DB mid-save; saving a transformation whose step references a database connection that was never saved (null ObjectId); repository in read-only mode; version/lock conflicts.

Related errors


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

Appendix: source

Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoadMeta.java:537

      for ( int i = 0; i < localHosts.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "local_host", localHosts[i] );
      }

      for ( int i = 0; i < fieldTable.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "stream_name", fieldTable[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", fieldStream[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "date_mask", dateMask[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "match_column", matchColumn[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "update_column", updateColumn[i] );
      }

      // Also, save the step-database relationship!
      if ( databaseMeta != null ) {
        rep.insertStepDatabase( id_transformation, id_step, databaseMeta.getObjectId() );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "GPLoadMeta.Exception.UnableToSaveStepInfoToRepository" )
          + id_step, e );
    }
  }

  @Override
  public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,
      VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
    // Default: nothing changes to rowMeta
  }

  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;
    String error_message = "";

    if ( databaseMeta != null ) {
      Database db = new Database( loggingObject, databaseMeta );

View on GitHub (pinned to f3058517a1)