pentaho/pentaho-kettle · error · KettleException

JobPGPDecryptFiles.Error.Exception.UnableSaveRep

Error message

JobPGPDecryptFiles.Error.Exception.UnableSaveRep

What it means

Thrown by JobEntryPGPDecryptFiles.saveRep when saving the entry's per-file attributes (passphrase, destination_filefolder, wildcard) to the repository fails with a KettleDatabaseException. It identifies the entry by id_job and wraps the underlying DB error.

Solutions

  1. Retry the save after confirming repository DB connectivity.
  2. Check the wrapped KettleDatabaseException for the exact SQL error (constraint/size/lock).
  3. Shorten or split oversized attribute values (e.g. long wildcard lists).
  4. Upgrade the repository schema to match the Pentaho version.

Example fix

// before
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "wildcard", wildcard[i] );
// after: guard oversized values
String wc = wildcard[i] != null && wildcard[i].length() > 2000 ? wildcard[i].substring( 0, 2000 ) : wildcard[i];
rep.saveJobEntryAttribute( id_job, getObjectId(), i, "wildcard", wc );
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check oversized attribute values
for ( String wc : wildcard ) {
  if ( wc != null && wc.length() > 2000 ) throw new IllegalArgumentException( "Wildcard too long for repository column" );
}

Try / catch

try {
  jobEntry.saveRep( rep, metaStore, id_job );
} catch ( KettleException e ) {
  logError( "Repository save failed for PGP entry: " + e.getCause().getMessage(), e );
  // retry with backoff or warn user to shorten values
}

Prevention

When it happens

Trigger: rep.saveJobEntryAttribute(id_job, getObjectId(), i, ...) throws during saveRep — DB connection dropped, column length exceeded, transaction failed, or schema version mismatch.

Common situations: Repository database outage or network blip during job save; very long file lists or oversized values exceeding VALUE_STR column size; stale repository schema after upgrade; concurrent writes causing deadlock.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/f8b3b8e65957957b. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/pgpdecryptfiles/JobEntryPGPDecryptFiles.java:358

      rep
        .saveJobEntryAttribute(
          id_job, getObjectId(), "AddMovedDateBeforeExtension", AddMovedDateBeforeExtension );

      // 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, "passphrase", Encr
            .encryptPasswordIfNotUsingVariables( passphrase[i] ) );
          rep
            .saveJobEntryAttribute(
              id_job, getObjectId(), i, "destination_filefolder", destination_filefolder[i] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "wildcard", wildcard[i] );
        }
      }
    } catch ( KettleDatabaseException dbe ) {

      throw new KettleException( BaseMessages.getString( PKG, "JobPGPDecryptFiles.Error.Exception.UnableSaveRep" )
        + id_job, dbe );
    }
  }

  public Result execute( Result previousResult, int nr ) throws KettleException {
    try {
      Result result = previousResult;
      List<RowMetaAndData> rows = result.getRows();
      RowMetaAndData resultRow = null;
      result.setNrErrors( 1 );
      result.setResult( false );

      NrErrors = 0;
      NrSuccess = 0;
      successConditionBroken = false;
      successConditionBrokenExit = false;
      limitFiles = Const.toInt( environmentSubstitute( getNrErrorsLessThan() ), 10 );

View on GitHub (pinned to f3058517a1)