pentaho/pentaho-kettle · error · KettleException
CloneRowMeta.Exception.UnexpectedErrorSavingStepInfo
Error message
CloneRowMeta.Exception.UnexpectedErrorSavingStepInfo
What it means
CloneRowMeta.saveRep persists the Clone Row step's settings to the Pentaho Repository via saveStepAttribute calls. If any repository write fails, the catch block rethrows as a KettleException with this message. It indicates the step metadata could not be saved.
Solutions
- Check repository DB connectivity and user write privileges
- Verify database disk space and that tables are not read-only
- Retry saving; if it persists, save as XML file instead
- Inspect repository DB error logs for the underlying failure
Defensive patterns
Strategy: try-catch
Validate before calling
// Java: verify repository is writable before save
if (repository.isReadOnly()) throw new IllegalStateException("Repository is read-only"); Try / catch
try {
transMeta.save(rep, metaStore, comment);
} catch (KettleException e) {
log.error("Step save failed; exporting to XML fallback", e);
transMeta.exportResources();
} Prevention
- Grant DB user INSERT/UPDATE privileges
- Monitor DB disk space
- Save frequently to catch failures early
When it happens
Trigger: Saving a transformation to the repository when rep.saveStepAttribute throws — repository DB write failure, constraint violation, or read-only connection.
Common situations: Repository database disk full or read-only, transaction rollback on save, insufficient DB user privileges to insert into R_STEP_ATTRIBUTE.
Related errors
- Unable to save step information to the repository for…
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorSavingToRepository
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/bf4d6d553aa71c3a.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/clonerow/CloneRowMeta.java:222
throw new KettleException( BaseMessages.getString(
PKG, "CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "nrclones", nrclones );
rep.saveStepAttribute( id_transformation, id_step, "addcloneflag", addcloneflag );
rep.saveStepAttribute( id_transformation, id_step, "cloneflagfield", cloneflagfield );
rep.saveStepAttribute( id_transformation, id_step, "nrcloneinfield", nrcloneinfield );
rep.saveStepAttribute( id_transformation, id_step, "nrclonefield", nrclonefield );
rep.saveStepAttribute( id_transformation, id_step, "addclonenum", addclonenum );
rep.saveStepAttribute( id_transformation, id_step, "clonenumfield", clonenumfield );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "CloneRowMeta.Exception.UnexpectedErrorSavingStepInfo" ), e );
}
}
@Override
public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
// Output field (boolean) ?
if ( addcloneflag ) {
String realfieldValue = space.environmentSubstitute( cloneflagfield );
if ( !Utils.isEmpty( realfieldValue ) ) {
ValueMetaInterface v = new ValueMetaBoolean( realfieldValue );
v.setOrigin( origin );
rowMeta.addValueMeta( v );
}
}
// Output clone row number
if ( addclonenum ) {View on GitHub (pinned to f3058517a1)