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=

What it means

Thrown by PaloCubeDelete.saveRep when persisting the job entry's settings (database connection and cube name) to the Kettle repository fails with a KettleDatabaseException. The message text ('file exists') is a copy-paste bug — the actual entry type is a Palo cube delete job entry. The underlying KettleDatabaseException is chained as the cause.

Solutions

  1. Check the chained KettleDatabaseException cause for the real repository failure (connectivity, schema, permissions).
  2. Verify the Kettle repository is reachable and the user has write permissions on job entry attribute tables.
  3. Re-save or recreate the job entry; verify getObjectId() is valid before saving.
  4. Fix the copy-pasted message text to reference the Palo cube delete type for accurate diagnostics.

Example fix

// before
throw new KettleException(
  "unable to save jobentry of type 'file exists' to the repository for id_job=" + id_job, dbe );
// after
throw new KettleException(
  "unable to save jobentry of type 'palo cube delete' to the repository for id_job=" + id_job, dbe );
Defensive patterns

Strategy: try-catch

Validate before calling

if (jobEntry.getObjectId() == null || id_job < 0) { throw new IllegalStateException("job entry not initialized before save"); }

Try / catch

try { jobMeta.saveRep(...) } catch (KettleException e) { log.error("repository save failed", e.getCause()); /* retry or surface to user */ }

Prevention

When it happens

Trigger: Calling saveRep (during job save) when rep.saveDatabaseMetaJobEntryAttribute or rep.saveStepAttribute for 'cubeName' throws KettleDatabaseException, e.g. repository DB down, schema mismatch, or missing id_job/object id.

Common situations: Repository database unavailable or connection dropped mid-save; corrupt repository metadata tables; saving a job whose entry was never fully initialized (null ObjectId); repository permission problems.

Related errors


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

Appendix: source

Thrown at plugins/palo/core/src/main/java/org/pentaho/di/job/entries/palo/JobEntryCubeDelete/PaloCubeDelete.java:116

    try {
      this.databaseMeta =
          rep.loadDatabaseMetaFromJobEntryAttribute( id_jobentry, "connection", "id_database", databases );
      this.setCubeName( rep.getStepAttributeString( id_jobentry, "cubeName" ) );

    } catch ( KettleException dbe ) {
      throw new KettleException( "Unable to load job entry for type file exists from the repository for id_jobentry="
          + id_jobentry, dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {

      rep.saveDatabaseMetaJobEntryAttribute( id_job, getObjectId(), "connection", "id_database", databaseMeta );
      rep.saveStepAttribute( id_job, getObjectId(), "cubeName", this.getCubeName() );

    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException(
          "unable to save jobentry of type 'file exists' to the repository for id_job=" + id_job, dbe );
    }
  }

  public Result execute( Result prevResult, int nr ) throws KettleException {

    Result result = new Result( nr );
    result.setResult( false );

    logDetailed( toString(), "Start of processing" );

    // String substitution..
    String realCubeName = environmentSubstitute( getCubeName() );

    PaloHelper database = new PaloHelper( this.getDatabaseMeta(), getLogLevel() );
    try {
      database.connect();
      int cubesremoved = database.removeCube( realCubeName );

View on GitHub (pinned to f3058517a1)