{"record":{"id":"b5d2170f5df31b9b","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-jobentry-of-type-file-exists-to-the","errorCode":null,"errorMessage":"unable to save jobentry of type 'file exists' to the repository for id_job=<id_job>","messagePattern":"unable to save jobentry of type 'file exists' to the repository for id_job=<id_job>","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java","lineNumber":137,"sourceCode":"      targetDirectory = rep.getJobEntryAttributeString( id_jobentry, TARGETDIRECTORY );\n      wildcard = rep.getJobEntryAttributeString( id_jobentry, WILDCARD );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n          \"Unable to load job entry for type file exists from the repository for id_jobentry=\"\n              + id_jobentry, dbe );\n    }\n  }\n\n  @Override\n  public void saveRep( Repository rep, ObjectId id_job ) throws KettleException {\n    try {\n      super.saveRep( rep, id_job );\n\n      rep.saveJobEntryAttribute( id_job, getObjectId(), SOURCEDIRECTORY, sourceDirectory );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), TARGETDIRECTORY, targetDirectory );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), WILDCARD, wildcard );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException(\n          \"unable to save jobentry of type 'file exists' to the repository for id_job=\"\n              + id_job, dbe );\n    }\n  }\n\n  /**\n   * @return Returns the targetDirectory.\n   */\n  public String getTargetDirectory() {\n    return targetDirectory;\n  }\n\n  /**\n   * @param targetDirectory\n   *          The targetDirectory to set.\n   */\n  public void setTargetDirectory( String targetDirectory ) {\n    this.targetDirectory = targetDirectory;","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java#L119-L155","documentation":"saveRep persists the File Exists job entry's attributes to the Kettle repository via saveJobEntryAttribute calls. A KettleDatabaseException is caught and rethrown as a KettleException with this message. It means the repository write for this job entry failed.","triggerScenarios":"Calling saveRep when the repository connection is broken, the target table is locked/readonly, or an attribute value violates a DB constraint.","commonSituations":"Repository DB disk full or connection dropped mid-save; read-only DB account; concurrent job saves causing lock contention.","solutions":["Check the wrapped KettleDatabaseException cause for the SQL error","Verify DB connectivity, write permissions, and disk space on the repository","Retry the save after resolving lock contention from concurrent users","Re-open and re-save the job in Spoon to rebuild a consistent state"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { jobEntry.saveRep(rep, idJob); } catch (KettleException e) { logger.error(\"saveRep failed for id_job=\" + idJob, e); throw e; }","preventionTips":["Ensure repository accounts have write permissions and quota/disk space","Avoid concurrent saves of the same job","Check wrapped KettleDatabaseException cause for the SQL root cause"],"tags":["repository","database","pdi","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"}