pentaho/pentaho-kettle · error · KettleException
WriteToLog.Error.UnableToLoadFromRepository.Label
Error message
WriteToLog.Error.UnableToLoadFromRepository.Label
What it means
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.
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
Example fix
// before: loading against a stale connection jobEntry.loadRep( rep, metaStore, staleId, databases, slaveServers ); // after: reconnect then load rep.disconnect(); rep.connect( user, password ); jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );
Defensive patterns
Strategy: try-catch
Validate before calling
// verify repository reachable and entry exists before loadRep if ( !rep.isConnected() ) rep.connect( user, pass ); if ( rep.getJobEntry( id_jobentry ) == null ) throw new KettleException( "Entry missing: " + id_jobentry );
Try / catch
try {
jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );
} catch ( KettleException e ) {
if ( e.getCause() instanceof KettleDatabaseException ) {
logError( "Repository DB error loading entry " + id_jobentry, e );
rep.disconnect(); rep.connect( user, pass ); // reconnect and retry once
}
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: Database repository connection dropped mid-load; repository schema version mismatch after upgrade; referencing a deleted job entry id; DB permissions changed.
Related errors
- Edi2Xml.Exception.UnableToSaveStepInfoToRepository
- error reading step with id_step=
- JobEntryZipFile.UnableLoadJobEntryRep
- JobEntryZipFile.UnableSaveJobEntryRep
- ScriptMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/2d89be0e4bcee9c0.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/writetolog/JobEntryWriteToLog.java:116
super.loadXML( entrynode, databases, slaveServers );
logmessage = XMLHandler.getTagValue( entrynode, "logmessage" );
entryLogLevel = LogLevel.getLogLevelForCode( XMLHandler.getTagValue( entrynode, "loglevel" ) );
logsubject = XMLHandler.getTagValue( entrynode, "logsubject" );
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString( PKG, "WriteToLog.Error.UnableToLoadFromXML.Label" ), e );
}
}
@Override
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
logmessage = rep.getJobEntryAttributeString( id_jobentry, "logmessage" );
entryLogLevel = LogLevel.getLogLevelForCode( rep.getJobEntryAttributeString( id_jobentry, "loglevel" ) );
logsubject = rep.getJobEntryAttributeString( id_jobentry, "logsubject" );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "WriteToLog.Error.UnableToLoadFromRepository.Label" )
+ id_jobentry, dbe );
}
}
// Save the attributes of this job entry
//
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "logmessage", logmessage );
rep.saveJobEntryAttribute( id_job, getObjectId(), "loglevel", ( entryLogLevel != null ? entryLogLevel
.getCode() : "" ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "logsubject", logsubject );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "WriteToLog.Error.UnableToSaveToRepository.Label" )
+ id_job, dbe );
}View on GitHub (pinned to f3058517a1)