{"record":{"id":"8f4f82c8742574cb","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-job-entry-of-type-special-to-the-repository","errorCode":null,"errorMessage":"Unable to save job entry of type 'special' to the repository with id_job=","messagePattern":"Unable to save job entry of type 'special' to the repository with id_job=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/special/JobEntrySpecial.java","lineNumber":152,"sourceCode":"    }\n  }\n\n  // Save the attributes of this job entry\n  //\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"start\", start );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dummy\", dummy );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"repeat\", repeat );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"schedulerType\", schedulerType );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"intervalSeconds\", intervalSeconds );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"intervalMinutes\", intervalMinutes );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"hour\", hour );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"minutes\", minutes );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"weekDay\", weekDay );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dayOfMonth\", dayOfMonth );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'special' to the repository with id_job=\"\n        + id_job, dbe );\n    }\n  }\n\n  public boolean isStart() {\n    return start;\n  }\n\n  public boolean isDummy() {\n    return dummy;\n  }\n\n  public Result execute( Result previousResult, int nr ) throws KettleJobException {\n    Result result = previousResult;\n\n    if ( isStart() ) {\n      try {\n        long sleepTime = getNextExecutionTime();","sourceCodeStart":134,"sourceCodeEnd":170,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/special/JobEntrySpecial.java#L134-L170","documentation":"KettleException thrown by JobEntrySpecial.saveRep when persisting the 'special' job entry's schedule attributes (intervalMinutes, hour, minutes, weekDay, dayOfMonth) to the repository fails with a KettleDatabaseException. The message includes id_job so the failed save can be traced back to the specific job.","triggerScenarios":"Calling saveRep for a 'special' job entry when saveJobEntryAttribute fails: repository connection lost, R_JOBENTRY_ATTRIBUTE insert/update violates constraints, read-only database, or getObjectId() refers to a stale/missing row.","commonSituations":"Repository DB in read-only mode or out of space; saving a job while the repository session expired; concurrent edits causing constraint violations; DB schema not upgraded to the current Kettle version.","solutions":["Check the wrapped KettleDatabaseException cause for the underlying SQL error.","Verify the repository database is writable and has free space.","Reconnect to the repository and retry saving the job.","Confirm the repository schema matches the Pentaho/Kettle version (run upgrade scripts)."],"exampleFix":"// before\njobEntrySpecial.saveRep(rep, metaStore, idJob, databases, slaveServers);\n// after\ntry {\n  jobEntrySpecial.saveRep(rep, metaStore, idJob, databases, slaveServers);\n} catch (KettleException e) {\n  logError(\"Save failed for job \" + idJob + \": \" + e.getCause(), e);\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"if (rep == null || idJob == null) throw new IllegalArgumentException(\"Repository and idJob are required for saveRep\");\n// verify writability early by performing a small test save if possible\n","typeGuard":null,"tryCatchPattern":"try {\n  special.saveRep(rep, metaStore, idJob, databases, slaveServers);\n} catch (KettleException e) {\n  logError(\"Save failed for id_job=\" + idJob + \" cause=\" + e.getCause(), e);\n}","preventionTips":["Ensure the repository DB is writable and has free space","Reconnect if the repository session expired","Avoid concurrent edits to the same job","Run schema upgrade scripts after version upgrades"],"tags":["repository","pdi","job-entry","database"],"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"}