pentaho/pentaho-kettle · error · KettleException
PropertyInputMeta.Exception.ErrorReadingRepository
Error message
PropertyInputMeta.Exception.ErrorReadingRepository
What it means
The PropertyInputMeta constructor that reads step settings from a repository wraps any exception in a KettleException with this localized message. It means the step's attributes could not be read back from the repository database.
Solutions
- Verify repository database connectivity and retry loading
- Upgrade/repair the repository schema to match your PDI version
- Check the wrapped cause (getCause()) for the root SQL/JDBC error
- Re-save the transformation from a working copy to rewrite its attributes
- Fall back to loading the transformation from an XML file export
Example fix
// before
TransMeta tm = new TransMeta(repo, transObjectId, metaStore); // fails reading PropertyInput step
// after: guard and fall back
try {
tm = new TransMeta(repo, transObjectId, metaStore);
} catch (KettleException e) {
logError("Repository load failed: " + e.getCause());
tm = new TransMeta("/backup/trans.ktr"); // XML fallback
} Defensive patterns
Strategy: try-catch
Validate before calling
if (repo == null || !repo.isConnected()) throw new IllegalStateException("Repository not connected");
// verify step attributes exist:
if (rep.countStepAttributeString(idStep, "filename") == 0) logError("No stored attributes for step"); Try / catch
try {
TransMeta tm = new TransMeta(repo, idTrans, metaStore);
} catch (KettleException e) {
logError("Repository read failed: " + e.getCause());
// retry connection or fall back to XML export
} Prevention
- Upgrade the repository schema after every PDI version change
- Monitor repository DB connectivity before batch loads
- Re-save transformations from a known-good copy if attributes are corrupt
- Keep XML exports as a recovery path for repository-hosted transformations
When it happens
Trigger: Loading a transformation from a repository database when the attribute read fails — repository connection dropped, missing/corrupt rows in r_step_attribute, or schema incompatibility after a version migration.
Common situations: Repository schema not upgraded after a PDI upgrade; corrupted repository rows; network/DB outage mid-load; insufficient read permissions on repository tables.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- GetTableNamesMeta.Exception.UnableToSaveStepInfo
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFro…
- GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository
- GPBulkLoaderMeta.Exception.UnableToSaveStepInfoToRepository
- InsertUpdateMeta.Exception.UnexpectedErrorReadingStepInfoFro…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0c5ab19c1f7ee56a.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInputMeta.java:1102
field.setGroupSymbol( rep.getStepAttributeString( idSstep, i, TAG_FIELD_GROUP ) );
field.setLength( (int) rep.getStepAttributeInteger( idSstep, i, TAG_FIELD_LENGTH ) );
field.setPrecision( (int) rep.getStepAttributeInteger( idSstep, i, TAG_FIELD_PRECISION ) );
field.setTrimType(
PropertyInputField.getTrimTypeByCode( rep.getStepAttributeString( idSstep, i, TAG_FIELD_TRIM_TYPE ) ) );
field.setRepeated( rep.getStepAttributeBoolean( idSstep, i, TAG_FIELD_REPEAT ) );
inputFields[i] = field;
}
shortFileFieldName = rep.getStepAttributeString( idSstep, TAG_SHORT_FILE_FIELD_NAME );
pathFieldName = rep.getStepAttributeString( idSstep, TAG_PATH_FIELD_NAME );
hiddenFieldName = rep.getStepAttributeString( idSstep, TAG_HIDDEN_FIELD_NAME );
lastModificationTimeFieldName = rep.getStepAttributeString( idSstep, TAG_LAST_MODIFICATION_TIME_FIELD_NAME );
uriNameFieldName = rep.getStepAttributeString( idSstep, TAG_URI_NAME_FIELD_NAME );
rootUriNameFieldName = rep.getStepAttributeString( idSstep, TAG_ROOT_URI_NAME_FIELD_NAME );
extensionFieldName = rep.getStepAttributeString( idSstep, TAG_EXTENSION_FIELD_NAME );
sizeFieldName = rep.getStepAttributeString( idSstep, TAG_SIZE_FIELD_NAME );
} catch ( Exception e ) {
throw new KettleException( BaseMessages
.getString( PKG, "PropertyInputMeta.Exception.ErrorReadingRepository" ), e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idTransformation, ObjectId idStep ) throws KettleException {
try {
rep.saveStepAttribute( idTransformation, idStep, TAG_FILE_TYPE, fileType );
rep.saveStepAttribute( idTransformation, idStep, TAG_SECTION, section );
rep.saveStepAttribute( idTransformation, idStep, TAG_ENCODING, encoding );
rep.saveStepAttribute( idTransformation, idStep, TAG_INI_SECTION, includeIniSection );
rep.saveStepAttribute( idTransformation, idStep, TAG_INI_SECTION_FIELD, iniSectionField );
rep.saveStepAttribute( idTransformation, idStep, TAG_INCLUDE, includeFilename );
rep.saveStepAttribute( idTransformation, idStep, TAG_INCLUDE_FIELD, filenameField );
rep.saveStepAttribute( idTransformation, idStep, TAG_ROWNUM, includeRowNumber );
rep.saveStepAttribute( idTransformation, idStep, TAG_IS_ADD_RESULT, isAddResult );
rep.saveStepAttribute( idTransformation, idStep, TAG_FILE_FIELD, fileField );
rep.saveStepAttribute( idTransformation, idStep, TAG_FILENAME_FIELD, dynamicFilenameField );View on GitHub (pinned to f3058517a1)