pentaho/pentaho-kettle · error · KettleException

JobFoldersCompare.Meta.UnableSaveRep

Error message

JobFoldersCompare.Meta.UnableSaveRep

What it means

Thrown by JobEntryFoldersCompare.saveRep when persisting the entry's attributes (compareonly, wildcard, filename1, filename2) fails with a KettleDatabaseException. The message is a localized bundle key formatted with id_job and the cause's message. It means the 'Compare Folders' entry state could not be saved to the repository.

Solutions

  1. Read dbe.getMessage() in the wrapped exception for the root SQL error and fix the repository DB issue.
  2. Confirm write permissions on the repository tables for the connecting user.
  3. Retry the save after restoring connectivity; alternatively save the job as XML.
  4. Check for DB locks or quota issues on the repository host.

Example fix

// before
entry.saveRep(rep, metaStore, idJob);
// after
try {
  entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
  logError("FoldersCompare save failed: " + e.getMessage());
  // check repository connection, retry
}
Defensive patterns

Strategy: try-catch

Validate before calling

// check write access before saving
if (!rep.getConnection().isReadOnly() == false) {
  throw new KettleException("Repository is read-only");
}

Try / catch

try {
  entry.saveRep(rep, metaStore, idJob);
} catch (KettleException e) {
  logError("Save failed: " + e.getMessage());
  // inspect SQL cause, fix DB, then retry
}

Prevention

When it happens

Trigger: Calling saveRep on JobEntryFoldersCompare when rep.saveJobEntryAttribute throws KettleDatabaseException — DB down, constraint violation, read-only repository, transaction failure while saving the job.

Common situations: Repository database connection dropped mid-save; storage quota exceeded; saving with insufficient DB permissions; upgrade-induced schema mismatch on r_jobentry_attribute.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/folderscompare/JobEntryFoldersCompare.java:171

      filename2 = rep.getJobEntryAttributeString( id_jobentry, "filename2" );
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobFoldersCompare.Meta.UnableLoadRep", ""
        + id_jobentry, dbe.getMessage() ) );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "include_subfolders", includesubfolders );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "compare_filecontent", comparefilecontent );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "compare_filesize", comparefilesize );

      rep.saveJobEntryAttribute( id_job, getObjectId(), "compareonly", compareonly );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "filename1", filename1 );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "filename2", filename2 );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "JobFoldersCompare.Meta.UnableSaveRep", "" + id_job, dbe.getMessage() ) );
    }
  }

  public void setIncludeSubfolders( boolean includeSubfolders ) {
    this.includesubfolders = includeSubfolders;
  }

  public boolean isIncludeSubfolders() {
    return includesubfolders;
  }

  public void setCompareFileContent( boolean comparefilecontent ) {
    this.comparefilecontent = comparefilecontent;
  }

  public boolean isCompareFileContent() {
    return comparefilecontent;

View on GitHub (pinned to f3058517a1)