pentaho/pentaho-kettle · error · KettleException
JobDosToUnix.Error.Exception.UnableSaveRep
Error message
JobDosToUnix.Error.Exception.UnableSaveRep
What it means
Thrown when saving a 'DOS to Unix' job entry's attributes (including ConversionType codes) to the repository fails. saveRep() wraps the KettleDatabaseException in a KettleException with this message plus the job id and the cause chained. The entry's metadata was not persisted.
Solutions
- Read the chained KettleDatabaseException cause for the concrete SQL error
- Confirm repository tables exist and are up to date (run upgrade scripts)
- Grant the repository user write privileges on repository tables
- Retry the save after resolving DB connectivity/locks
Example fix
// before
entry.saveRep(rep, metaStore, idJob); // throws with message + id only
// after
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
logError("UnableSaveRep job " + idJob + " cause: " + e.getCause());
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
if (rep instanceof KettleDatabaseRepository
&& !((KettleDatabaseRepository) rep).isConnected()) {
throw new IllegalStateException("Repository not connected; save aborted");
} Try / catch
try {
entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
logError("UnableSaveRep job=" + idJob + " cause=" + e.getCause());
throw e;
} Prevention
- Check repository connectivity before save operations
- Keep the repository schema at the correct Pentaho version
- Grant write privileges on repository tables to the runtime user
- Avoid concurrent saves of the same job entry
When it happens
Trigger: Calling saveRep() (via JobMeta.save) when rep.saveJobEntryAttribute() throws: DB down, table locked/missing, write permission denied, or value overflow mid-loop.
Common situations: Repository database outage during save; schema not installed/upgraded; DB user lacking INSERT/UPDATE grants; concurrent saves causing lock timeouts.
Related errors
- JobDosToUnix.Error.Exception.UnableLoadRep
- JobEntryDeleteFiles.UnableToSaveToRepo
- JobEntryDeleteFolders.UnableToLoadFromRepo
- JobEntryDeleteFolders.UnableToSaveToRepo
- JobEntryDeleteResultFilenames.CanNotLoadFromRep
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/a569bfabd19c82f0.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/dostounix/JobEntryDosToUnix.java:296
try {
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(), "nr_errors_less_than", nr_errors_less_than );
rep.saveJobEntryAttribute( id_job, getObjectId(), "success_condition", success_condition );
rep.saveJobEntryAttribute( id_job, getObjectId(), "resultfilenames", resultfilenames );
// save the arguments...
if ( source_filefolder != null ) {
for ( int i = 0; i < source_filefolder.length; i++ ) {
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "source_filefolder", source_filefolder[i] );
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "wildcard", wildcard[i] );
rep.saveJobEntryAttribute(
id_job, getObjectId(), "ConversionType", getConversionTypeCode( conversionTypes[i] ) );
}
}
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobDosToUnix.Error.Exception.UnableSaveRep" )
+ id_job, dbe );
}
}
public Result execute( Result previousResult, int nr ) throws KettleException {
Result result = previousResult;
result.setNrErrors( 1 );
result.setResult( false );
List<RowMetaAndData> rows = previousResult.getRows();
RowMetaAndData resultRow = null;
nrErrors = 0;
nrProcessedFiles = 0;
nrErrorFiles = 0;
limitFiles = Const.toInt( environmentSubstitute( getNrErrorsLessThan() ), 10 );
successConditionBroken = false;
successConditionBrokenExit = false;View on GitHub (pinned to f3058517a1)