{"record":{"id":"9fa9435da3165dac","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-job-entry-of-type-create-folder-to-the","errorCode":null,"errorMessage":"Unable to save job entry of type 'create Folder' to the repository for id_job=${id_job}","messagePattern":"Unable to save job entry of type 'create Folder' to the repository for id_job=(.+?)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/createfolder/JobEntryCreateFolder.java","lineNumber":116,"sourceCode":"\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      foldername = rep.getJobEntryAttributeString( id_jobentry, \"foldername\" );\n      failOfFolderExists = rep.getJobEntryAttributeBoolean( id_jobentry, \"fail_of_folder_exists\" );\n    } catch ( KettleException dbe ) {\n      throw new KettleException(\n        \"Unable to load job entry of type 'create Folder' 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(), \"foldername\", foldername );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"fail_of_folder_exists\", failOfFolderExists );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'create Folder' to the repository for id_job=\"\n        + id_job, dbe );\n    }\n  }\n\n  public void setFoldername( String foldername ) {\n    this.foldername = foldername;\n  }\n\n  public String getFoldername() {\n    return foldername;\n  }\n\n  public String getRealFoldername() {\n    return environmentSubstitute( getFoldername() );\n  }\n\n  public Result execute( Result previousResult, int nr ) {\n    Result result = previousResult;","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/createfolder/JobEntryCreateFolder.java#L98-L134","documentation":"Kettle wraps any KettleDatabaseException raised while persisting a 'create Folder' job entry's attributes (foldername, fail_of_folder_exists) to the repository in this KettleException via saveRep. The database cause is preserved so the actual write failure can be diagnosed. It indicates the job entry's metadata could not be saved.","triggerScenarios":"Calling JobEntryCreateFolder.saveRep when saveJobEntryAttribute fails — repository connection lost, read-only repository account, constraint violation on r_jobentry_attribute, or getObjectId() is null/invalid so the attribute insert fails.","commonSituations":"Repository user lacks INSERT/UPDATE privileges; repository DB disk full; saving a job entry whose ObjectId is null (never persisted before) against a repository implementation that requires it; transient DB outage during job save.","solutions":["Inspect the cause exception for the underlying SQL error","Verify the repository user has write privileges and the DB is writable / has free space","Ensure the job entry has been assigned to a job (valid ObjectId) before saving","Retry the save after restoring repository connectivity"],"exampleFix":"// before\njobEntry.saveRep(rep, metaStore, idJob); // may throw 'Unable to save job entry...'\n// after\ntry {\n  jobEntry.saveRep(rep, metaStore, idJob);\n} catch (KettleException e) {\n  logError(\"Save failed: \" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));\n  // surface to user before job is stored\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"// before saveRep\nif (rep == null) throw new IllegalArgumentException(\"Repository required\");\nif (!rep.isReadOnly()) { /* proceed */ } else throw new IllegalStateException(\"Repository is read-only\");","typeGuard":"boolean isSaveFailure(KettleException e) {\n  return e.getMessage() != null && e.getMessage().contains(\"Unable to save job entry\");\n}","tryCatchPattern":"try {\n  jobEntry.saveRep(rep, metaStore, idJob);\n} catch (KettleException e) {\n  Throwable cause = e.getCause();\n  log.error(\"JobEntryCreateFolder save failed for id_job=\" + idJob, cause);\n  if (cause instanceof KettleDatabaseException) {\n    // check privileges/disk, fix ObjectId, retry save\n  }\n  throw e;\n}","preventionTips":["Grant the repository user write privileges","Monitor repository DB disk space and connection health","Ensure job entries have valid ObjectIds before saving","Wrap saves in transaction-safe retry logic"],"tags":["kettle","repository","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"}