pentaho/pentaho-kettle · error · KettleXMLException
JobEntryDeleteResultFilenames.CanNotSaveToRep
Error message
JobEntryDeleteResultFilenames.CanNotSaveToRep
What it means
Thrown when persisting a 'Delete Result Filenames' job entry's attributes to the repository fails. saveRep() catches KettleDatabaseException from rep.saveJobEntryAttribute() and wraps it in a KettleXMLException with the job id and DB message. The repository write failed, so the entry's metadata is not saved.
Solutions
- Read dbe.getMessage() in the thrown KettleXMLException for the SQL-level cause
- Verify DB connectivity and that r_jobentry_attribute exists with the correct schema
- Ensure the repository user has write grants on repository tables
- Retry the save; trim values that exceed column lengths
Example fix
// before
entry.saveRep(rep, metaStore, idJob); // fails without clear job id context
// after
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleXMLException e) {
logError("Save to rep failed for job " + idJob + ": " + e.getMessage());
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check attribute lengths against typical column limits
if (foldername != null && foldername.length() > 255) {
throw new IllegalArgumentException("foldername exceeds repository column size");
} Try / catch
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleXMLException e) {
// KettleDatabaseException message is embedded via dbe.getMessage()
logError("Save failed for job " + idJob + ": " + e.getMessage());
throw e;
} Prevention
- Verify DB write access before repository saves
- Keep attribute values within column size limits
- Run one save transaction at a time per job to avoid deadlocks
- Upgrade the repository schema after Pentaho version changes
When it happens
Trigger: Calling saveRep() (directly or through JobMeta.save) when any of the four saveJobEntryAttribute calls fails: DB outage, locked table, missing schema, value overflow.
Common situations: Repository database down during save; repository tables missing after install; write permissions revoked; too-long foldername/wildcard values for column size; transaction deadlocks from concurrent saves.
Related errors
- JobDosToUnix.Error.Exception.UnableLoadRep
- JobDosToUnix.Error.Exception.UnableSaveRep
- JobEntryDeleteFiles.UnableToSaveToRepo
- JobEntryDeleteFolders.UnableToLoadFromRepo
- JobEntryDeleteFolders.UnableToSaveToRepo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/10d8e1792101116c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/deleteresultfilenames/JobEntryDeleteResultFilenames.java:127
try {
foldername = rep.getJobEntryAttributeString( id_jobentry, "foldername" );
specifywildcard = rep.getJobEntryAttributeBoolean( id_jobentry, "specify_wildcard" );
wildcard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
wildcardexclude = rep.getJobEntryAttributeString( id_jobentry, "wildcardexclude" );
} catch ( KettleException dbe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryDeleteResultFilenames.CanNotLoadFromRep", "" + id_jobentry, dbe.getMessage() ) );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "foldername", foldername );
rep.saveJobEntryAttribute( id_job, getObjectId(), "specify_wildcard", specifywildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", wildcardexclude );
} catch ( KettleDatabaseException dbe ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryDeleteResultFilenames.CanNotSaveToRep", "" + id_job, dbe.getMessage() ) );
}
}
public void setSpecifyWildcard( boolean specifywildcard ) {
this.specifywildcard = specifywildcard;
}
public boolean isSpecifyWildcard() {
return specifywildcard;
}
public void setFoldername( String foldername ) {
this.foldername = foldername;
}
public String getFoldername() {
return foldername;View on GitHub (pinned to f3058517a1)