pentaho/pentaho-kettle · error · KettleException
YamlInputMeta.Exception.ErrorSavingToRepository
Error message
YamlInputMeta.Exception.ErrorSavingToRepository
What it means
YamlInputMeta.saveRep wraps persistence of the step's attributes to the Kettle repository; any exception is rethrown as a KettleException with this message including the step's ObjectId. It indicates the step configuration could not be saved.
Solutions
- Inspect the attached cause for the underlying SQL error (permissions, space, constraint).
- Verify the repository user has INSERT/UPDATE rights on the step attribute tables.
- Check DB disk space and connectivity, then retry the save.
- As a workaround, save the transformation as a .ktr file locally and re-import to the repository later.
Example fix
// before: save fails with read-only DB user // grant write access: GRANT INSERT, UPDATE, DELETE ON r_step_attribute TO pdi_user;
Defensive patterns
Strategy: try-catch
Validate before calling
// check write access up front
if (!repository.isConnected()) { repository.connect(user, pass); }
// ensure repository user has write rights on step attribute tables before saving Try / catch
try { meta.saveRep(repository, metaStore, transObjectId, stepObjectId); }
catch (KettleException e) {
log.error("Save of YAML Input step failed (id_step=" + stepObjectId + ")", e);
// fallback: export the transformation to a .ktr file so work is not lost
transMeta.exportToFile(new File("backup.ktr"));
} Prevention
- Grant the PDI repository user INSERT/UPDATE/DELETE on repository tables.
- Monitor DB disk space and read-only states.
- Save locally as .ktr as a checkpoint before repository commits.
When it happens
Trigger: saveRep on this meta class: rep.saveStepAttribute(...) for any attribute (including IsInFields, IsAFile, YamlField) throws — repository write failure inside the try/catch that rethrows with this key.
Common situations: Repository database read-only or out of space, transaction rolled back due to constraint violation, network interruption while saving a transformation, saving to a repository after schema downgrade.
Related errors
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- AggregateRowsMeta.Exception.UnableToSaveStepInfo
- AnalyticQueryMeta.Exception.UnableToSaveStepInfoToRepository
- AppendMeta.Exception.UnableToSaveStepInfo
- CombinationLookupMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/93d752712ad47905.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/yaml-input/impl/src/main/java/org/pentaho/di/trans/steps/yamlinput/YamlInputMeta.java:702
YamlInputField field = inputFields[i];
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", field.getName() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_path", field.getPath() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_type", field.getTypeDesc() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_format", field.getFormat() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_currency", field.getCurrencySymbol() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_decimal", field.getDecimalSymbol() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_group", field.getGroupSymbol() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_length", field.getLength() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_precision", field.getPrecision() );
rep.saveStepAttribute( id_transformation, id_step, i, "field_trim_type", field.getTrimTypeCode() );
}
rep.saveStepAttribute( id_transformation, id_step, "IsInFields", inFields );
rep.saveStepAttribute( id_transformation, id_step, "IsAFile", IsAFile );
rep.saveStepAttribute( id_transformation, id_step, "YamlField", yamlField );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "YamlInputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
}
}
public FileInputList getFiles( Bowl bowl, VariableSpace space ) {
return FileInputList.createFileList( bowl, space, fileName, fileMask, fileRequired, includeSubFolderBoolean() );
}
private boolean[] includeSubFolderBoolean() {
int len = fileName.length;
boolean[] includeSubFolderBoolean = new boolean[len];
for ( int i = 0; i < len; i++ ) {
includeSubFolderBoolean[i] = YES.equalsIgnoreCase( includeSubFolders[i] );
}
return includeSubFolderBoolean;
}
@OverrideView on GitHub (pinned to f3058517a1)