pentaho/pentaho-kettle · error · KettleException

SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository

SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository

Error message

SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository" + id_step

What it means

Thrown by SplitFieldToRowsMeta.saveRep when writing this step's attributes to the repository fails. Each saveStepAttribute call (newfield, rownum, reset_rownumber, rownum_field, delimiter_is_regex) is wrapped in a KettleException with the message key plus the id_step. Saving the transformation aborts with this error.

Solutions

  1. Inspect the wrapped cause for the underlying repository DB error
  2. Verify the repository user has INSERT/UPDATE rights on step attribute tables
  3. Reconnect the repository and retry the save
  4. Check tablespace/disk space on the repository database
  5. Save locally to a .ktr file as a fallback while repository issues are fixed

Example fix

// before
transMeta.saveRep(rep, metaStore, id_transformation);
// after
try {
  transMeta.saveRep(rep, metaStore, id_transformation);
} catch (KettleException e) {
  logError("Save to repository failed for step: " + e.getCause());
  transMeta.saveXml("local-backup.ktr"); // preserve work
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before saving
if (!rep.isConnected()) rep.connect();
// ensure repository user has write access: run a cheap write test if supported

Try / catch

try { transMeta.saveRep(rep, metaStore, idTransformation); } catch (KettleException e) { logError("Save failed for id_step: " + e.getCause()); transMeta.saveXml("backup.ktr"); }

Prevention

When it happens

Trigger: Calling saveRep (directly or via TransMeta save) when the repository insert/update of step attributes fails: DB connection lost, R_STEP_ATTRIBUTE table locked or read-only, constraint violation on saved values.

Common situations: Read-only repository account or missing write grants; repository DB maintenance window; transformation saved concurrently by another user causing lock contention; repository quota/full tablespace errors.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/splitfieldtorows/SplitFieldToRowsMeta.java:208

      resetRowNumber = rep.getStepAttributeBoolean( id_step, "reset_rownumber" );
      isDelimiterRegex = rep.getStepAttributeBoolean( id_step, 0, "delimiter_is_regex", false );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "SplitFieldToRowsMeta.Exception.UnexpectedErrorInReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "splitfield", splitField );
      rep.saveStepAttribute( id_transformation, id_step, "delimiter", delimiter );
      rep.saveStepAttribute( id_transformation, id_step, "newfield", newFieldname );
      rep.saveStepAttribute( id_transformation, id_step, "rownum", includeRowNumber );
      rep.saveStepAttribute( id_transformation, id_step, "reset_rownumber", resetRowNumber );
      rep.saveStepAttribute( id_transformation, id_step, "rownum_field", rowNumberField );
      rep.saveStepAttribute( id_transformation, id_step, "delimiter_is_regex", isDelimiterRegex );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "SplitFieldToRowsMeta.Exception.UnableToSaveStepInfoToRepository" )
        + 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 ) {
    String error_message = "";
    CheckResult cr;

    // Look up fields in the input stream <prev>
    if ( prev != null && prev.size() > 0 ) {
      cr =
        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
          PKG, "SplitFieldToRowsMeta.CheckResult.StepReceivingFields", prev.size() + "" ), stepMeta );
      remarks.add( cr );

View on GitHub (pinned to f3058517a1)