{"record":{"id":"e5275e2be215b1dc","repo":"pentaho/pentaho-kettle","slug":"jobentrycheckfileslocked-unabletosavetorepo","errorCode":null,"errorMessage":"JobEntryCheckFilesLocked.UnableToSaveToRepo","messagePattern":"JobEntryCheckFilesLocked\\.UnableToSaveToRepo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/checkfilelocked/JobEntryCheckFilesLocked.java","lineNumber":190,"sourceCode":"        PKG, \"JobEntryCheckFilesLocked.UnableToLoadFromRepo\", String.valueOf( idJobEntry ) ), dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId idJob ) throws KettleException {\n    try {\n\n      rep.saveJobEntryAttribute( idJob, getObjectId(), ARG_FROM_PREVIOUS_ATTR, argFromPrevious );\n      rep.saveJobEntryAttribute( idJob, getObjectId(), INCLUDE_SUBFOLDERS_ATTR, includeSubfolders );\n\n      // save the arguments...\n      if ( arguments != null ) {\n        for ( int i = 0; i < arguments.length; i++ ) {\n          rep.saveJobEntryAttribute( idJob, getObjectId(), i, NAME_ATTR, arguments[i] );\n          rep.saveJobEntryAttribute( idJob, getObjectId(), i, FILE_MASK_ATTR, filemasks[i] );\n        }\n      }\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"JobEntryCheckFilesLocked.UnableToSaveToRepo\", String.valueOf( idJob ) ), dbe );\n    }\n  }\n\n  public Result execute( Result previousResult, int nr ) {\n\n    Result result = previousResult;\n    List<RowMetaAndData> rows = result.getRows();\n\n    oneFileLocked = false;\n    result.setResult( true );\n\n    try {\n      if ( argFromPrevious  && isDetailed() ) {\n        logDetailed( BaseMessages.getString( PKG, \"JobEntryCheckFilesLocked.FoundPreviousRows\", String\n          .valueOf( ( rows != null ? rows.size() : 0 ) ) ) );\n      }\n","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/checkfilelocked/JobEntryCheckFilesLocked.java#L172-L208","documentation":"JobEntryCheckFilesLocked.saveRep wraps any KettleDatabaseException raised while saving the entry's per-row name/filemask attributes into the repository as this KettleException, identifying the target job by id_job.","triggerScenarios":"Calling saveRep when rep.saveJobEntryAttribute fails — repository DB down, constraint violation, transaction rollback, or connection dropped while writing r_jobentry_attribute rows.","commonSituations":"Repository database read-only or out of space; network blip during save; repository schema mismatch after PDI upgrade; duplicate key from a partially failed earlier save.","solutions":["Read the chained KettleDatabaseException for the SQL/root cause","Verify repository DB connectivity, write permissions and free space","Clean orphaned r_jobentry_attribute rows for the failing entry and re-save","Re-run repository upgrade scripts if the schema is out of date"],"exampleFix":"// before\ntry { entry.saveRep(rep, metaStore, idJob); } catch (Exception ignore) {}\n// after\ntry {\n  entry.saveRep(rep, metaStore, idJob);\n} catch (KettleException e) {\n  log.error(\"Save failed for job \" + idJob + \": \" + e.getCause(), e); // then retry after fixing DB\n}","handlingStrategy":"try-catch","validationCode":"// pre-check repository writability before saveRep\nif (!rep.isConnected()) throw new IllegalStateException(\"Repository not connected\");","typeGuard":null,"tryCatchPattern":"try {\n  entry.saveRep(rep, metaStore, idJob);\n} catch (KettleException e) {\n  log.error(\"Repo save failed for job \" + idJob + \": \" + e.getCause(), e);\n  // retry after fixing DB connectivity/permissions\n}","preventionTips":["Monitor repository DB disk space and read-only flags","Save jobs inside a repository transaction-aware session; retry once on transient DB errors","Run schema upgrade scripts after PDI upgrades"],"tags":["repository","database","job-entry","kettle"],"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"}