pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'SFTPPUT' to the…
Error message
Unable to load job entry of type 'SFTPPUT' to the repository for id_job=
What it means
In JobEntrySFTPPUT.saveRep, when any of the saveJobEntryAttribute calls fails at the database level, the KettleDatabaseException is wrapped in a KettleException with this message (the message text says 'load' but the code is actually saving — a copy-paste mislabel in this legacy entry). The repository write for the SFTP PUT job entry attributes could not be persisted.
Solutions
- Check the repository database connection and retry the save
- Verify the DB user has write privileges on the kettle attribute tables
- Inspect the wrapped KettleDatabaseException cause for the exact SQL failure
- Repair/upgrade the repository schema (r_job_entry_attribute) if it is missing columns
Example fix
// before
rep.saveJobEntryAttribute( id_job, getObjectId(), "destinationfolder", destinationfolder );
// after — ensure a live repository first
if ( rep == null || getObjectId() == null ) {
throw new KettleException( "No repository connection or object id; cannot save SFTPPUT entry" );
}
rep.saveJobEntryAttribute( id_job, getObjectId(), "destinationfolder", destinationfolder ); Defensive patterns
Strategy: try-catch
Validate before calling
// Java if ( rep == null ) throw new KettleException( "Repository is null; connect before saving" ); if ( getObjectId() == null ) throw new KettleException( "Job entry not persisted yet; id is null" );
Try / catch
try {
jobEntry.saveRep( rep, metaStore, id_job );
} catch ( KettleException e ) {
logError( "Repository save failed: " + e.getCause(), e );
throw e;
} Prevention
- Verify repository connectivity before saving metadata
- Ensure DB account has write access to kettle attribute tables
- Keep repository schema up to date with the PDI version
When it happens
Trigger: Calling saveRep on a JobEntrySFTPPUT while the repository connection is broken, the r_job_entry_attribute table is missing/corrupt, a constraint is violated, or the id_job/objectId is invalid.
Common situations: Saving a job whose repository connection dropped mid-save; DB user lacking INSERT/UPDATE rights on kettle attribute tables; migrating metadata between repositories with schema drift.
Related errors
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- AnalyticQueryMeta.Exception.UnexpectedErrorInReadingStepInfo…
- AppendMeta.Exception.UnableToSaveStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f6eb1477cf96dc67.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/put-file-sftp/impl/src/main/java/org/pentaho/di/job/entries/sftpput/JobEntrySFTPPUT.java:351
rep.saveJobEntryAttribute( id_job, getObjectId(), "keyfilename", keyfilename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "keyfilepass", Encr
.encryptPasswordIfNotUsingVariables( keyfilepass ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "compression", compression );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyType", proxyType );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyHost", proxyHost );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyPort", proxyPort );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyUsername", proxyUsername );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyPassword", Encr
.encryptPasswordIfNotUsingVariables( proxyPassword ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "aftersftpput", getAfterSFTPPutCode( getAfterFTPS() ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createRemoteFolder", createRemoteFolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "destinationfolder", destinationfolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createdestinationfolder", createDestinationFolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "successWhenNoFile", successWhenNoFile );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to load job entry of type 'SFTPPUT' to the repository for id_job="
+ id_job, dbe );
}
}
/**
* @param createDestinationFolder
* The create destination folder flag to set.
*/
public void setCreateDestinationFolder( boolean createDestinationFolder ) {
this.createDestinationFolder = createDestinationFolder;
}
/**
* @return Returns the create destination folder flag
*/
public boolean isCreateDestinationFolder() {
return createDestinationFolder;
}View on GitHub (pinned to f3058517a1)