pentaho/pentaho-kettle · error · KettleException
Unable to save step information to the repository for…
Error message
Unable to save step information to the repository for id_step=
What it means
GetFileNamesMeta.saveRep() wraps any exception raised while persisting this step's attributes (file name, mask, exclude mask, required flag, include-subfolders flag) to the Kettle repository in a KettleException with this message and the id_step. It indicates the step's metadata could not be saved, so the transformation definition is incomplete in the repository.
Solutions
- Check repository connectivity and retry saving the transformation.
- Verify the repository user has write permission on the transformation/step tables.
- Inspect the wrapped cause (e.getCause()) for the underlying SQL/repository error.
- Shorten file mask/name values that exceed repository column lengths.
Example fix
// before rep.saveStepAttribute( id_transformation, id_step, i, "file_mask", fileMask[i] ); // NPE if fileMask[i] null // after rep.saveStepAttribute( id_transformation, id_step, i, "file_mask", fileMask[i] == null ? "" : fileMask[i] );
Defensive patterns
Strategy: try-catch
Validate before calling
if (transMeta.getRepository() != null && transMeta.getRepository().isConnected()) { transMeta.saveRep(repo.getRepositoryDirectory(), metaStore, "myTrans"); } Try / catch
try { transMeta.saveRep(dir, metaStore, name); } catch (KettleException e) { log.error("Step save failed for id_step=" + e.getMessage(), e.getCause()); /* retry or save to XML instead */ } Prevention
- Verify repository connectivity before saving
- Use a repository account with write permissions
- Keep file masks within repository column lengths
- Avoid concurrent edits of the same transformation
When it happens
Trigger: Calling saveRep() (via transformation save) when a rep.saveStepAttribute() call fails for any of the per-file attributes: repository connection loss, DB constraint violation, null array entries, or repository read-only.
Common situations: Repository database down or network dropped mid-save; saving a transformation whose Get File Names step table has a column size smaller than the mask value; concurrent modification of the same transformation by two designers.
Related errors
- GetFilesRowsCountMeta.Exception.ErrorSavingToRepository
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- AppendMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f29a8e745626966c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/getfilenames/GetFileNamesMeta.java:660
rep.saveStepAttribute( id_transformation, id_step, "isaddresult", isaddresult );
rep.saveStepAttribute( id_transformation, id_step, "filefield", filefield );
rep.saveStepAttribute( id_transformation, id_step, "filename_Field", dynamicFilenameField );
rep.saveStepAttribute( id_transformation, id_step, "wildcard_Field", dynamicWildcardField );
rep.saveStepAttribute( id_transformation, id_step, "exclude_wildcard_Field", dynamicExcludeWildcardField );
rep.saveStepAttribute( id_transformation, id_step, "dynamic_include_subfolders", dynamicIncludeSubFolders );
rep.saveStepAttribute( id_transformation, id_step, "rownum_field", rowNumberField );
rep.saveStepAttribute( id_transformation, id_step, "limit", rowLimit );
for ( int i = 0; i < fileName.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "file_name", fileName[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "file_mask", fileMask[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "exclude_file_mask", excludeFileMask[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "file_required", fileRequired[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "include_subfolders", includeSubFolders[i] );
}
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
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;
}
public String[] getIncludeSubFolders() {
return includeSubFolders;
}
private FileInputList.FileTypeFilter[] buildFileTypeFiltersArray( String[] fileName ) {
FileInputList.FileTypeFilter[] filters = new FileInputList.FileTypeFilter[fileName.length];View on GitHub (pinned to f3058517a1)