pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'unzip' from the…
Error message
Unable to load job entry of type 'unzip' from the repository for id_jobentry=
What it means
JobEntryUnZip.loadRep() wraps a KettleException from repository attribute reads into a KettleException with message "Unable to load job entry of type 'unzip' from the repository for id_jobentry=" plus the id. It means the stored attributes of the unzip job entry could not be loaded from the repository.
Solutions
- Verify repository DB connectivity and re-open the job.
- Check R_JOBENTRY_ATTRIBUTE rows exist for the reported id_jobentry; re-save the entry from Spoon if missing.
- Run repository upgrade scripts for your Pentaho version.
- Load the job from a .kjb XML file instead to bypass the repository.
Example fix
// before: loading job straight from a broken repository
JobMeta job = new JobMeta(log, rep, id_job, metaStore);
// after: fall back to XML load on failure
JobMeta job;
try {
job = new JobMeta(log, rep, id_job, metaStore);
} catch ( KettleException e ) {
job = new JobMeta(log, jobFileUrl, metaStore); // load from .kjb fallback
} Defensive patterns
Strategy: fallback
Validate before calling
// Check repository session and persisted id before loadRep
if ( !rep.isConnected() ) throw new KettleException("Repository not connected");
if ( jobEntry.getObjectId() == null ) throw new KettleException("Entry has no repository id"); Type guard
boolean repositoryLoadPossible(Repository rep, ObjectId id_jobentry) {
return rep != null && rep.isConnected() && id_jobentry != null;
} Try / catch
try {
jobEntry.loadRep(rep, metaStore, id_jobentry, databases, slaveServers);
} catch ( KettleException e ) {
logBasic("Repository load failed, falling back to XML: " + e.getMessage());
jobEntry.loadXML(entrynode, databases, slaveServers, rep, metaStore); // fallback
} Prevention
- Test repository connectivity when scheduling unattended job loads.
- Keep R_JOBENTRY_ATTRIBUTE rows consistent (avoid manual SQL deletes).
- Upgrade repository schema before loading jobs written by newer versions.
- Maintain a .kjb export as a recovery copy of repository jobs.
When it happens
Trigger: Calling loadRep(rep, metaStore, id_jobentry, ...) when the repository read of attributes such as 'iffileexists', 'create_move_to_directory' or 'setOriginalModificationDate' throws — DB unavailable, missing rows, or schema mismatch.
Common situations: Repository database outage during job load; rows deleted or never written for that id_jobentry; upgrading Pentaho against an old repository schema.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- ERROR_0002
- HTTPMeta.Exception.UnableToSaveStepInfo
- JobEntryEval.UnableToSaveToRepo
- JobEntryEvalTableContent.UnableSaveRep
- JobEntrySimple.Error.Exception.UnableSaveRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/eb610f78757a01f7.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/unzip/JobEntryUnZip.java:269
isfromprevious = rep.getJobEntryAttributeBoolean( id_jobentry, "isfromprevious" );
adddate = rep.getJobEntryAttributeBoolean( id_jobentry, "adddate" );
addtime = rep.getJobEntryAttributeBoolean( id_jobentry, "addtime" );
addOriginalTimestamp = rep.getJobEntryAttributeBoolean( id_jobentry, "addOriginalTimestamp" );
SpecifyFormat = rep.getJobEntryAttributeBoolean( id_jobentry, "SpecifyFormat" );
date_time_format = rep.getJobEntryAttributeString( id_jobentry, "date_time_format" );
rootzip = rep.getJobEntryAttributeBoolean( id_jobentry, "rootzip" );
createfolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createfolder" );
nr_limit = rep.getJobEntryAttributeString( id_jobentry, "nr_limit" );
wildcardSource = rep.getJobEntryAttributeString( id_jobentry, "wildcardSource" );
success_condition = rep.getJobEntryAttributeString( id_jobentry, "success_condition" );
if ( Utils.isEmpty( success_condition ) ) {
success_condition = SUCCESS_IF_NO_ERRORS;
}
iffileexist = getIfFileExistsInt( rep.getJobEntryAttributeString( id_jobentry, "iffileexists" ) );
createMoveToDirectory = rep.getJobEntryAttributeBoolean( id_jobentry, "create_move_to_directory" );
setOriginalModificationDate = rep.getJobEntryAttributeBoolean( id_jobentry, "setOriginalModificationDate" );
} catch ( KettleException dbe ) {
throw new KettleException( "Unable to load job entry of type 'unzip' from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "zipfilename", zipFilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "afterunzip", afterunzip );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", wildcardexclude );
rep.saveJobEntryAttribute( id_job, getObjectId(), "targetdirectory", sourcedirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "movetodirectory", movetodirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addfiletoresult", addfiletoresult );
rep.saveJobEntryAttribute( id_job, getObjectId(), "isfromprevious", isfromprevious );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addtime", addtime );
rep.saveJobEntryAttribute( id_job, getObjectId(), "adddate", adddate );
rep.saveJobEntryAttribute( id_job, getObjectId(), "addOriginalTimestamp", addOriginalTimestamp );
rep.saveJobEntryAttribute( id_job, getObjectId(), "SpecifyFormat", SpecifyFormat );View on GitHub (pinned to f3058517a1)