pentaho/pentaho-kettle · error · KettleException
AccessInputMeta.Exception.ErrorSavingToRepository
AccessInputMeta.Exception.ErrorSavingToRepository
Error message
AccessInputMeta.Exception.ErrorSavingToRepository
What it means
AccessInputMeta.saveRep wraps any failure while persisting the Access Input step's field-name attributes (filename, table, row-limit, output field names like uriNameFieldName, sizeFieldName, etc.) into a KettleException. It is thrown because one of the rep.saveStepAttribute calls failed, with the original cause attached.
Solutions
- Check the repository database is reachable and the connection is alive
- Verify the repository user has write (INSERT/UPDATE) privileges on step attribute tables
- Retry the save after reconnecting to the repository
- Inspect the wrapped cause (KettleException) for the actual JDBC error
- Run the repository repair/check tools if the schema is inconsistent
Example fix
// before
try {
transMeta.save(rep, metaDescription, null);
} catch (Exception e) { log.error("save failed", e); }
// after
try {
transMeta.save(rep, metaDescription, null);
} catch (KettleException e) {
if (e.getCause() != null) log.error("repository save failed", e.getCause());
// reconnect or re-login to the repository, then retry
repo.disconnect(); repo.connect(username, password);
transMeta.save(rep, metaDescription, null);
} Defensive patterns
Strategy: try-catch
Validate before calling
// before save
if (!repo.isConnected()) throw new IllegalStateException("Repository not connected");
transMeta.steps().forEach(s -> { if (s.getID() == null) log.warn("step not persisted yet: " + s.getName()); }); Try / catch
try {
transMeta.save(rep, comment, null);
} catch (KettleException e) {
Throwable cause = e.getCause();
log.error("Step save failed for id_step; cause=" + (cause != null ? cause.getMessage() : "?"), e);
// reconnect and retry
} Prevention
- Keep the repository connection alive before long editing sessions
- Grant repository users write privileges
- Monitor repository DB health and quota
- Retry saves with backoff on transient JDBC errors
When it happens
Trigger: Calling saveRep on a repository where the underlying JDBC write fails: broken DB connection, read-only repository, missing repository permissions, or corrupted r_step_attribute table while saving step id_step.
Common situations: Saving a transformation to a repository that went down mid-session; repository schema upgrade mismatch; user lacks write rights to the repository; network drop during save.
Related errors
- Unable to save step information to the repository for…
- Unexpected error reading step information from the…
- CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/082810c58fb775fb.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInputMeta.java:1092
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, i, "field_repeat", field.isRepeated() );
}
rep.saveStepAttribute( id_transformation, id_step, "shortFileFieldName", shortFileFieldName );
rep.saveStepAttribute( id_transformation, id_step, "pathFieldName", pathFieldName );
rep.saveStepAttribute( id_transformation, id_step, "hiddenFieldName", hiddenFieldName );
rep.saveStepAttribute(
id_transformation, id_step, "lastModificationTimeFieldName", lastModificationTimeFieldName );
rep.saveStepAttribute( id_transformation, id_step, "uriNameFieldName", uriNameFieldName );
rep.saveStepAttribute( id_transformation, id_step, "rootUriNameFieldName", rootUriNameFieldName );
rep.saveStepAttribute( id_transformation, id_step, "extensionFieldName", extensionFieldName );
rep.saveStepAttribute( id_transformation, id_step, "sizeFieldName", sizeFieldName );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "AccessInputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
}
}
public FileInputList getFiles( Bowl bowl, VariableSpace space ) {
return FileInputList.createFileList(
bowl, space, fileName, fileMask, excludeFileMask, 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;
}
View on GitHub (pinned to f3058517a1)