pentaho/pentaho-kettle · error · KettleException

LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository

LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository

Error message

LucidDBStreamingLoaderMeta.Exception.UnableToSaveStepInfoToRepository

What it means

saveRep() persists the step's settings to the repository. Any failure while writing step attributes or inserting the step-database relationship (rep.insertStepDatabase) is wrapped in a KettleException with this message plus the step id.

Solutions

  1. Save the database connection (databaseMeta) to the repository first so it has a valid ObjectId before saving the step.
  2. Check repository DB connectivity and that the user has write permissions.
  3. Look at the nested cause exception for the underlying SQL error (constraint, disk full, read-only).
  4. Run repository upgrade/repair scripts if the schema is out of date.

Example fix

// before: step references an unsaved connection
transMeta.addDatabase(metaOfUnsavedDb);
// after: ensure the connection is defined/persisted before saving
if (meta.getDatabaseMeta() != null && meta.getDatabaseMeta().getObjectId() == null) {
  repository.save(meta.getDatabaseMeta(), null, null);
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (meta.getDatabaseMeta() != null && meta.getDatabaseMeta().getObjectId() == null) {
  repository.save(meta.getDatabaseMeta(), null, null); // persist connection first
}

Try / catch

try {
  repository.save(transMeta, versionComment, null);
} catch (KettleException e) {
  logError("Save to repository failed for step " + id_step, e.getCause());
  throw e;
}

Prevention

When it happens

Trigger: Saving a transformation to a repository: saveRep(rep, metaStore, id_transformation, id_step) throws when inserting r_step_attribute values or the step-database link fails — e.g. repository DB read-only, constraint violation, or the referenced databaseMeta has no ObjectId (database not yet saved).

Common situations: Repository DB is read-only or disk full; the shared database connection used by the step has never been saved to the repository so its ObjectId is null; repository schema version mismatch.

Related errors


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

Appendix: source

Thrown at plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoaderMeta.java:376

      }

      for ( int i = 0; i < fieldTableForFields.length; i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, "field_field_name", fieldTableForFields[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_stream_name", fieldStreamForFields[i] );
        rep.saveStepAttribute( id_transformation, id_step, i, "insert_or_update_flag", insOrUptFlag[i] );
      }

      for ( int i = 0; i < tabIsEnable.length; i++ ) {

        rep.saveStepAttribute( id_transformation, id_step, i, "tab_is_enable", tabIsEnable[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, "LucidDBStreamingLoaderMeta.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
  }

  // TODO: In future, we need to implement it to do double-check.
  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
    Repository repository, IMetaStore metaStore ) {

  }

View on GitHub (pinned to f3058517a1)