{"record":{"id":"f29a8e745626966c","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-for-id-f29a8e","errorCode":null,"errorMessage":"Unable to save step information to the repository for id_step=","messagePattern":"Unable to save step information to the repository for id_step=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/getfilenames/GetFileNamesMeta.java","lineNumber":660,"sourceCode":"      rep.saveStepAttribute( id_transformation, id_step, \"isaddresult\", isaddresult );\n      rep.saveStepAttribute( id_transformation, id_step, \"filefield\", filefield );\n      rep.saveStepAttribute( id_transformation, id_step, \"filename_Field\", dynamicFilenameField );\n      rep.saveStepAttribute( id_transformation, id_step, \"wildcard_Field\", dynamicWildcardField );\n      rep.saveStepAttribute( id_transformation, id_step, \"exclude_wildcard_Field\", dynamicExcludeWildcardField );\n      rep.saveStepAttribute( id_transformation, id_step, \"dynamic_include_subfolders\", dynamicIncludeSubFolders );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"rownum_field\", rowNumberField );\n      rep.saveStepAttribute( id_transformation, id_step, \"limit\", rowLimit );\n\n      for ( int i = 0; i < fileName.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"file_name\", fileName[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"file_mask\", fileMask[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"exclude_file_mask\", excludeFileMask[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"file_required\", fileRequired[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"include_subfolders\", includeSubFolders[i] );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to save step information to the repository for id_step=\" + id_step, e );\n    }\n  }\n\n  private boolean[] includeSubFolderBoolean() {\n    int len = fileName.length;\n    boolean[] includeSubFolderBoolean = new boolean[len];\n    for ( int i = 0; i < len; i++ ) {\n      includeSubFolderBoolean[i] = YES.equalsIgnoreCase( includeSubFolders[i] );\n    }\n    return includeSubFolderBoolean;\n  }\n\n  public String[] getIncludeSubFolders() {\n    return includeSubFolders;\n  }\n\n  private FileInputList.FileTypeFilter[] buildFileTypeFiltersArray( String[] fileName ) {\n    FileInputList.FileTypeFilter[] filters = new FileInputList.FileTypeFilter[fileName.length];","sourceCodeStart":642,"sourceCodeEnd":678,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/getfilenames/GetFileNamesMeta.java#L642-L678","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nrep.saveStepAttribute( id_transformation, id_step, i, \"file_mask\", fileMask[i] ); // NPE if fileMask[i] null\n// after\nrep.saveStepAttribute( id_transformation, id_step, i, \"file_mask\", fileMask[i] == null ? \"\" : fileMask[i] );","handlingStrategy":"try-catch","validationCode":"if (transMeta.getRepository() != null && transMeta.getRepository().isConnected()) { transMeta.saveRep(repo.getRepositoryDirectory(), metaStore, \"myTrans\"); }","typeGuard":null,"tryCatchPattern":"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 */ }","preventionTips":["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"],"tags":["kettle","repository","metadata-save","persistence"],"backgroundTag":"database-write-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}