pentaho/pentaho-kettle · error · KettleException
JsonInputMeta.Exception.ErrorSavingToRepository
JsonInputMeta.Exception.ErrorSavingToRepository
Error message
JsonInputMeta.Exception.ErrorSavingToRepository
What it means
KettleException with message key JsonInputMeta.Exception.ErrorSavingToRepository (including the id_step), thrown by JsonInputMeta.saveRep when persisting the step's attributes to the repository fails. Any exception from the rep.saveStepAttribute calls (DB error, constraint violation, connection loss) is wrapped here.
Solutions
- Check the wrapped cause: fix repository DB connectivity or the reported DB error and retry the save.
- Verify the repository user has INSERT/UPDATE rights on R_STEP_ATTRIBUTE.
- Reconnect to the repository (right-click -> reconnect) if the session was stale, then save again.
- Coordinate with other users to avoid concurrent saves of the same transformation (version/lock the object).
Example fix
// before rep.save(new RepositoryDirectory(), transName, transMeta, monitor); // fails when DB down // after if (!rep.isConnected()) rep.connect(); rep.save(dir, transName, transMeta, monitor);
Defensive patterns
Strategy: retry
Validate before calling
// confirm write access before saving
if (!rep.testConnectionSuccess()) throw new IllegalStateException("Repository unreachable");
// and confirm user has save rights on the directory in your repository security model Try / catch
try { rep.save(dir, name, transMeta, monitor); }
catch (KettleException e) {
if (getRootCause(e) instanceof SQLException && isTransient(e)) { retrySaveWithBackoff(); }
else throw e;
} Prevention
- Save through a stable repository connection; reconnect after long idle sessions.
- Grant the repository user INSERT/UPDATE on R_STEP_ATTRIBUTE.
- Coordinate concurrent edits (one editor per transformation) to avoid lock conflicts.
- Keep attribute values within repository column size limits.
When it happens
Trigger: saveRep loop of rep.saveStepAttribute(...) throws: repository DB unavailable, transaction/lock conflict, value too long for the attribute column, or read-only repository connection.
Common situations: Saving a transformation while the repository database is down or network is flaky; two users saving the same transformation concurrently; repository user lacking write permissions; attribute values exceeding column size limits.
Related errors
- Unable to save step information to the repository for…
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/7b7540a750f69e17.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/json/core/src/main/java/org/pentaho/di/trans/steps/jsoninput/JsonInputMeta.java:995
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, i, "field_repeat", field.isRepeated() );
}
rep.saveStepAttribute( id_transformation, id_step, "IsInFields", inFields );
rep.saveStepAttribute( id_transformation, id_step, "IsAFile", isAFile );
rep.saveStepAttribute( id_transformation, id_step, "valueField", valueField );
rep.saveStepAttribute( id_transformation, id_step, "shortFileFieldName", getShortFileNameField() );
rep.saveStepAttribute( id_transformation, id_step, "pathFieldName", getPathField() );
rep.saveStepAttribute( id_transformation, id_step, "hiddenFieldName", isHiddenField() );
rep.saveStepAttribute(
id_transformation, id_step, "lastModificationTimeFieldName", getLastModificationDateField() );
rep.saveStepAttribute( id_transformation, id_step, "uriNameFieldName", getUriField() );
rep.saveStepAttribute( id_transformation, id_step, "rootUriNameFieldName", getRootUriField() );
rep.saveStepAttribute( id_transformation, id_step, "extensionFieldName", getExtensionField() );
rep.saveStepAttribute( id_transformation, id_step, "sizeFieldName", getSizeField() );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "JsonInputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
}
}
public FileInputList getFiles( Bowl bowl, VariableSpace space ) {
return FileInputList.createFileList(
bowl, space, getFileName(), getFileMask(), getExcludeFileMask(), getFileRequired(),
inputFiles.includeSubFolderBoolean() );
}
@Override
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta, RowMetaInterface prev,
String[] input, String[] output, RowMetaInterface info, VariableSpace space, Repository repository,
IMetaStore metaStore ) {
CheckResult cr;
if ( !isInFields() ) {
// See if we get input...View on GitHub (pinned to f3058517a1)