{"record":{"id":"2d89be0e4bcee9c0","repo":"pentaho/pentaho-kettle","slug":"writetolog-error-unabletoloadfromrepository-label","errorCode":null,"errorMessage":"WriteToLog.Error.UnableToLoadFromRepository.Label","messagePattern":"WriteToLog\\.Error\\.UnableToLoadFromRepository\\.Label","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/writetolog/JobEntryWriteToLog.java","lineNumber":116,"sourceCode":"      super.loadXML( entrynode, databases, slaveServers );\n      logmessage = XMLHandler.getTagValue( entrynode, \"logmessage\" );\n      entryLogLevel = LogLevel.getLogLevelForCode( XMLHandler.getTagValue( entrynode, \"loglevel\" ) );\n      logsubject = XMLHandler.getTagValue( entrynode, \"logsubject\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"WriteToLog.Error.UnableToLoadFromXML.Label\" ), e );\n\n    }\n  }\n\n  @Override\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      logmessage = rep.getJobEntryAttributeString( id_jobentry, \"logmessage\" );\n      entryLogLevel = LogLevel.getLogLevelForCode( rep.getJobEntryAttributeString( id_jobentry, \"loglevel\" ) );\n      logsubject = rep.getJobEntryAttributeString( id_jobentry, \"logsubject\" );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"WriteToLog.Error.UnableToLoadFromRepository.Label\" )\n        + id_jobentry, dbe );\n\n    }\n  }\n\n  // Save the attributes of this job entry\n  //\n  @Override\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"logmessage\", logmessage );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"loglevel\", ( entryLogLevel != null ? entryLogLevel\n        .getCode() : \"\" ) );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"logsubject\", logsubject );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"WriteToLog.Error.UnableToSaveToRepository.Label\" )\n        + id_job, dbe );\n    }","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/writetolog/JobEntryWriteToLog.java#L98-L134","documentation":"JobEntryWriteToLog.loadRep() throws this KettleException when reading the entry's attributes (logmessage, loglevel, logsubject) from the repository fails with a KettleDatabaseException. The offending job entry ObjectId is appended to the message and the original database exception is kept as cause.","triggerScenarios":"Calling loadRep with a repository whose r_jobentry_attribute table is unavailable/corrupt, a bad connection, or an invalid id_jobentry ObjectId passed to rep.getJobEntryAttributeString.","commonSituations":"Database repository connection dropped mid-load; repository schema version mismatch after upgrade; referencing a deleted job entry id; DB permissions changed.","solutions":["Verify repository database connectivity and credentials","Check r_jobentry_attribute rows for the id_jobentry reported in the message","Run the repository upgrade/migration scripts matching your Pentaho version","Retry loading after fixing DB issues; inspect the cause (KettleDatabaseException) for SQL details"],"exampleFix":"// before: loading against a stale connection\njobEntry.loadRep( rep, metaStore, staleId, databases, slaveServers );\n// after: reconnect then load\nrep.disconnect(); rep.connect( user, password );\njobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );","handlingStrategy":"try-catch","validationCode":"// verify repository reachable and entry exists before loadRep\nif ( !rep.isConnected() ) rep.connect( user, pass );\nif ( rep.getJobEntry( id_jobentry ) == null ) throw new KettleException( \"Entry missing: \" + id_jobentry );","typeGuard":null,"tryCatchPattern":"try {\n  jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );\n} catch ( KettleException e ) {\n  if ( e.getCause() instanceof KettleDatabaseException ) {\n    logError( \"Repository DB error loading entry \" + id_jobentry, e );\n    rep.disconnect(); rep.connect( user, pass ); // reconnect and retry once\n  }\n}","preventionTips":["Monitor repository DB health and keep it on a supported version","Run repository upgrade scripts after PDI upgrades","Avoid sharing one repository connection across threads"],"tags":["database","repository","pdi","persistence"],"backgroundTag":"database-read-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"}