pentaho/pentaho-kettle · error · KettleException
unable to save jobentry of type 'file exists' to the…
Error message
unable to save jobentry of type 'file exists' to the repository for id_job=<id_job>
What it means
saveRep persists the File Exists job entry's attributes to the Kettle repository via saveJobEntryAttribute calls. A KettleDatabaseException is caught and rethrown as a KettleException with this message. It means the repository write for this job entry failed.
Solutions
- Check the wrapped KettleDatabaseException cause for the SQL error
- Verify DB connectivity, write permissions, and disk space on the repository
- Retry the save after resolving lock contention from concurrent users
- Re-open and re-save the job in Spoon to rebuild a consistent state
Defensive patterns
Strategy: try-catch
Try / catch
try { jobEntry.saveRep(rep, idJob); } catch (KettleException e) { logger.error("saveRep failed for id_job=" + idJob, e); throw e; } Prevention
- Ensure repository accounts have write permissions and quota/disk space
- Avoid concurrent saves of the same job
- Check wrapped KettleDatabaseException cause for the SQL root cause
When it happens
Trigger: Calling saveRep when the repository connection is broken, the target table is locked/readonly, or an attribute value violates a DB constraint.
Common situations: Repository DB disk full or connection dropped mid-save; read-only DB account; concurrent job saves causing lock contention.
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/b5d2170f5df31b9b.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java:137
targetDirectory = rep.getJobEntryAttributeString( id_jobentry, TARGETDIRECTORY );
wildcard = rep.getJobEntryAttributeString( id_jobentry, WILDCARD );
} catch ( KettleException dbe ) {
throw new KettleException(
"Unable to load job entry for type file exists from the repository for id_jobentry="
+ id_jobentry, dbe );
}
}
@Override
public void saveRep( Repository rep, ObjectId id_job ) throws KettleException {
try {
super.saveRep( rep, id_job );
rep.saveJobEntryAttribute( id_job, getObjectId(), SOURCEDIRECTORY, sourceDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), TARGETDIRECTORY, targetDirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), WILDCARD, wildcard );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException(
"unable to save jobentry of type 'file exists' to the repository for id_job="
+ id_job, dbe );
}
}
/**
* @return Returns the targetDirectory.
*/
public String getTargetDirectory() {
return targetDirectory;
}
/**
* @param targetDirectory
* The targetDirectory to set.
*/
public void setTargetDirectory( String targetDirectory ) {
this.targetDirectory = targetDirectory;View on GitHub (pinned to f3058517a1)