{"record":{"id":"4a34e768ede67179","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-wait-for-file-from-the","errorCode":null,"errorMessage":"Unable to load job entry of type 'wait for file' from the repository for id_jobentry=","messagePattern":"Unable to load job entry of type 'wait for file' from the repository for id_jobentry=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/waitforfile/JobEntryWaitForFile.java","lineNumber":129,"sourceCode":"      successOnTimeout = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"success_on_timeout\" ) );\n      fileSizeCheck = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"file_size_check\" ) );\n      addFilenameToResult = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, \"add_filename_result\" ) );\n    } catch ( KettleXMLException xe ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'wait for file' from XML node\", xe );\n    }\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      filename = rep.getJobEntryAttributeString( id_jobentry, \"filename\" );\n      maximumTimeout = rep.getJobEntryAttributeString( id_jobentry, \"maximum_timeout\" );\n      checkCycleTime = rep.getJobEntryAttributeString( id_jobentry, \"check_cycle_time\" );\n      successOnTimeout = rep.getJobEntryAttributeBoolean( id_jobentry, \"success_on_timeout\" );\n      fileSizeCheck = rep.getJobEntryAttributeBoolean( id_jobentry, \"file_size_check\" );\n      addFilenameToResult = rep.getJobEntryAttributeBoolean( id_jobentry, \"add_filename_result\" );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n        \"Unable to load job entry of type 'wait for file' from the repository for id_jobentry=\" + id_jobentry,\n        dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"filename\", filename );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"maximum_timeout\", maximumTimeout );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"check_cycle_time\", checkCycleTime );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"success_on_timeout\", successOnTimeout );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"file_size_check\", fileSizeCheck );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"add_filename_result\", addFilenameToResult );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'wait for file' to the repository for id_job=\"\n        + id_job, dbe );\n    }\n  }","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/waitforfile/JobEntryWaitForFile.java#L111-L147","documentation":"JobEntryWaitForFile.loadRep() wraps a KettleException from repository attribute reads into a KettleException with message \"Unable to load job entry of type 'wait for file' from the repository for id_jobentry=\" plus the id. The stored wait-for-file settings could not be read from the repository.","triggerScenarios":"Calling loadRep(rep, metaStore, id_jobentry, ...) when the repository throws while reading 'maximum_timeout', 'check_cycle_time', 'success_on_timeout', 'file_size_check' or 'add_filename_result' attributes — DB failure or missing rows.","commonSituations":"Repository database unreachable; attribute rows for the id_jobentry deleted or never saved; schema drift after Pentaho upgrades.","solutions":["Verify repository connectivity and credentials, then reopen the job.","Check/rebuild R_JOBENTRY_ATTRIBUTE rows for the reported id_jobentry by re-saving from Spoon.","Run repository schema upgrade scripts.","Load the job from a .kjb file as a workaround."],"exampleFix":"// before\nJobMeta job = new JobMeta(log, rep, id_job, metaStore); // throws\n// after: detect unreadable repository first\nif ( !rep.isConnected() ) { rep.connect(user, pass); }\nJobMeta job = new JobMeta(log, rep, id_job, metaStore);","handlingStrategy":"try-catch","validationCode":"// Confirm repository session before loadRep\nif ( !rep.isConnected() ) throw new KettleException(\"Repository not connected\");\nif ( id_jobentry == null ) throw new KettleException(\"No repository id for wait-for-file entry\");","typeGuard":"boolean loadable(Repository rep, ObjectId id) {\n  return rep != null && rep.isConnected() && id != null;\n}","tryCatchPattern":"try {\n  jobEntry.loadRep(rep, metaStore, id_jobentry, databases, slaveServers);\n} catch ( KettleException e ) {\n  logError(\"Wait-for-file repo load failed (id=\" + id_jobentry + \"): \" + e.getCause(), e);\n  throw e; // or fall back to XML\n}","preventionTips":["Schedule DB health checks before batch job loads.","Re-save entries from Spoon after repository maintenance.","Apply schema upgrades consistently across environments.","Keep .kjb exports as fallback copies."],"tags":["database","repository","kettle","persistence"],"backgroundTag":"database-query-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"}