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
- Inspect the wrapped cause for the underlying repository DB error
- Verify the repository user has INSERT/UPDATE rights on step attribute tables
- Reconnect the repository and retry the save
- Check tablespace/disk space on the repository database
- 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
- Ensure the repository account has INSERT/UPDATE grants
- Avoid simultaneous saves by multiple users
- Monitor repository DB tablespace/disk space
- Snapshot work to a local file before saving
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
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- CreditCardValidatorMeta.Exception.UnableToSaveStepInfo
- CubeInputMeta.Exception.UnableToSaveStepInfo
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)