pentaho/pentaho-kettle · error · KettleException
Unexpected error reading step information from the…
Error message
Unexpected error reading step information from the repository
What it means
The TextFileInputMeta(Repository, ...) constructor reads step attributes from a repository and wraps any failure in a KettleException 'Unexpected error reading step information from the repository'. This protects callers from partially initialized step metadata when the repository read fails mid-way.
Solutions
- Check repository connectivity (ping the DB, test login in Spoon's repository dialog).
- Verify the repository user has read permission on the transformation/step attributes.
- Inspect the chained cause for the concrete SQL/repository error and fix that (schema corruption → restore backup).
- Re-open the transformation after connectivity is restored; the read is not retried automatically.
- If a version upgrade broke the schema, run the repository upgrade/repair scripts for your PDI version.
Example fix
// before: constructing metadata with a stale repository connection
TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, stepId);
// after: verify repository is alive first
if (!rep.isConnected() && !rep.connect()) { throw new KettleException("Repository unavailable"); }
TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, stepId); Defensive patterns
Strategy: try-catch
Validate before calling
if (rep == null || !rep.isConnected()) {
throw new KettleException("Repository not connected before reading step metadata");
} Type guard
if (rep == null || id_step == null) return false; // cannot read from repository
Try / catch
try {
TextFileInputMeta meta = new TextFileInputMeta(rep, metaStore, transMeta, id_step);
} catch (KettleException e) {
log.logError("Repository read failed: " + e.getCause(), e);
// retry after reconnect or load from XML export instead
} Prevention
- Check repository connectivity before opening repository-based transformations.
- Grant repository users read access to required objects.
- Back up the repository DB and keep upgrade scripts current.
- Keep an XML export of critical transformations as a fallback source.
When it happens
Trigger: Loading a TextFileInput step definition from a repository database (getStepAttributeString calls) when the repository connection drops, the r_step_attribute table is unavailable/corrupt, or the repository API throws (permission, network, DB down).
Common situations: Repository DB restarted or network blip while opening a transformation; insufficient repository permissions for the user; corrupted repository schema after an upgrade; timeout on a slow DB link.
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
- ChangeFileEncodingMeta.Exception.UnexpectedErrorReadingStepInfo
- ChangeFileEncodingMeta.Exception.UnableToSaveStepInfo
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0fe67efc17cb9888.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/fileinput/text/TextFileInputMeta.java:986
content.dateFormatLenient = rep.getStepAttributeBoolean( id_step, 0, "date_format_lenient", true );
String dateLocale = rep.getStepAttributeString( id_step, 0, "date_format_locale" );
if ( dateLocale != null ) {
content.dateFormatLocale = EnvUtil.createLocale( dateLocale );
} else {
content.dateFormatLocale = Locale.getDefault();
}
additionalOutputFields.shortFilenameField = rep.getStepAttributeString( id_step, "shortFileFieldName" );
additionalOutputFields.pathField = rep.getStepAttributeString( id_step, "pathFieldName" );
additionalOutputFields.hiddenField = rep.getStepAttributeString( id_step, "hiddenFieldName" );
additionalOutputFields.lastModificationField =
rep.getStepAttributeString( id_step, "lastModificationTimeFieldName" );
additionalOutputFields.uriField = rep.getStepAttributeString( id_step, "uriNameFieldName" );
additionalOutputFields.rootUriField = rep.getStepAttributeString( id_step, "rootUriNameFieldName" );
additionalOutputFields.extensionField = rep.getStepAttributeString( id_step, "extensionFieldName" );
additionalOutputFields.sizeField = rep.getStepAttributeString( id_step, "sizeFieldName" );
} catch ( Exception e ) {
throw new KettleException( "Unexpected error reading step information from the repository", e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "accept_filenames", inputFiles.acceptingFilenames );
rep.saveStepAttribute( id_transformation, id_step, "passing_through_fields", inputFiles.passingThruFields );
rep.saveStepAttribute( id_transformation, id_step, "accept_field", inputFiles.acceptingField );
rep.saveStepAttribute( id_transformation, id_step, "accept_stepname", ( acceptingStep != null ? acceptingStep
.getName() : "" ) );
rep.saveStepAttribute( id_transformation, id_step, "separator", content.separator );
rep.saveStepAttribute( id_transformation, id_step, "enclosure", content.enclosure );
rep.saveStepAttribute( id_transformation, id_step, "enclosure_breaks", content.breakInEnclosureAllowed );
rep.saveStepAttribute( id_transformation, id_step, "escapechar", content.escapeCharacter );
rep.saveStepAttribute( id_transformation, id_step, "header", content.header );View on GitHub (pinned to f3058517a1)