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

  1. Check the wrapped KettleDatabaseException cause for the SQL error
  2. Verify DB connectivity, write permissions, and disk space on the repository
  3. Retry the save after resolving lock contention from concurrent users
  4. 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

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


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)