pentaho/pentaho-kettle · error · KettleException
JobPGPDecryptFiles.Error.Exception.UnableLoadRep
Error message
JobPGPDecryptFiles.Error.Exception.UnableLoadRep
What it means
Thrown by JobEntryPGPDecryptFiles.loadRep when loading the job entry's settings from the Kettle repository fails with a KettleException (KettleDatabaseException base). It wraps the cause and appends the id_jobentry, indicating the PGP decrypt entry could not be read from the repository.
Solutions
- Verify repository database connectivity and credentials.
- Check R_JOBENTRY_ATTRIBUTE rows exist for this id_jobentry; re-save the entry from Spoon if missing.
- Run repository repair/upgrade scripts for your Pentaho version.
- Inspect the wrapped cause for the specific SQL error.
Example fix
// before
// (no fallback on load)
// after: default values when attributes are absent
String pass = rep.getJobEntryAttributeString( id_jobentry, "passphrase" );
if ( pass == null ) {
logBasic( "passphrase attribute missing for entry " + id_jobentry + "; using default" );
pass = "";
} Defensive patterns
Strategy: try-catch
Validate before calling
// check repository connectivity before loading jobs
if ( !rep.getConnection().isAutoCommit() ) { /* connectivity test */ }
rep.getJobEntryAttributeString( id_jobentry, "name" ); // probe read Try / catch
try {
jobEntry.loadRep( rep, metaStore, id_jobentry, databases, slaveServers );
} catch ( KettleException e ) {
logError( "Cannot load PGP entry from repository (id=" + id_jobentry + "): " + e.getCause(), e );
// fall back to defaults or abort job setup
} Prevention
- Check repository DB health before opening jobs.
- Re-save entries after Pentaho upgrades.
- Verify R_JOBENTRY_ATTRIBUTE rows for critical entries.
- Grant sufficient DB read privileges to the repository user.
When it happens
Trigger: rep.getJobEntryAttributeString(id_jobentry, nr, "passphrase"/"destination_filefolder"/"wildcard") throws because the repository database is unreachable, the entry rows are missing, or the repository schema is broken.
Common situations: Repository DB connection failure while opening a job; entry saved by an incompatible plugin version so expected attribute rows don't exist; corrupted R_JOBENTRY_ATTRIBUTE rows; insufficient DB privileges.
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
- JobPGPDecryptFiles.Error.Exception.UnableSaveRep
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- Edi2Xml.Exception.UnableToSaveStepInfoToRepository
- ERROR_0002_Cannot_Load_Job_From_Repository
- ERROR_0002
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/0367b99fd59413ea.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/pgpdecryptfiles/JobEntryPGPDecryptFiles.java:311
add_moved_time = rep.getJobEntryAttributeBoolean( id_jobentry, "add_moved_time" );
SpecifyMoveFormat = rep.getJobEntryAttributeBoolean( id_jobentry, "SpecifyMoveFormat" );
// How many arguments?
int argnr = rep.countNrJobEntryAttributes( id_jobentry, "source_filefolder" );
allocate( argnr );
// Read them all...
for ( int a = 0; a < argnr; a++ ) {
source_filefolder[a] = rep.getJobEntryAttributeString( id_jobentry, a, "source_filefolder" );
passphrase[a] =
Encr
.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( id_jobentry, a, "passphrase" ) );
destination_filefolder[a] = rep.getJobEntryAttributeString( id_jobentry, a, "destination_filefolder" );
wildcard[a] = rep.getJobEntryAttributeString( id_jobentry, a, "wildcard" );
}
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobPGPDecryptFiles.Error.Exception.UnableLoadRep" )
+ id_jobentry, dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "gpglocation", gpglocation );
rep.saveJobEntryAttribute( id_job, getObjectId(), "arg_from_previous", arg_from_previous );
rep.saveJobEntryAttribute( id_job, getObjectId(), "include_subfolders", include_subfolders );
rep.saveJobEntryAttribute( id_job, getObjectId(), "add_result_filesname", add_result_filesname );
rep.saveJobEntryAttribute( id_job, getObjectId(), "destination_is_a_file", destination_is_a_file );
rep.saveJobEntryAttribute( id_job, getObjectId(), "create_destination_folder", create_destination_folder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nr_errors_less_than", nr_errors_less_than );
rep.saveJobEntryAttribute( id_job, getObjectId(), "success_condition", success_condition );
rep.saveJobEntryAttribute( id_job, getObjectId(), "add_date", add_date );
rep.saveJobEntryAttribute( id_job, getObjectId(), "add_time", add_time );
rep.saveJobEntryAttribute( id_job, getObjectId(), "SpecifyFormat", SpecifyFormat );
rep.saveJobEntryAttribute( id_job, getObjectId(), "date_time_format", date_time_format );View on GitHub (pinned to f3058517a1)