pentaho/pentaho-kettle · error · KettleException

Unable to save job entry of type 'get pop' to the…

Error message

Unable to save job entry of type 'get pop' to the repository for id_job=<id_job>

What it means

JobEntryGetPOP.saveRep() writes the entry's attributes (after-get action, subfolders, proxy settings, etc.); a KettleDatabaseException is wrapped in 'Unable to save job entry of type 'get pop' to the repository for id_job=<id_job>'. It means persisting the job entry's configuration to the repository failed at the database level.

Solutions

  1. Confirm the repository database is writable and reachable, then retry saving
  2. Check r_jobentry_attribute for constraint or column-length violations caused by the values being saved
  3. As a workaround, export the job as XML (.kjb) instead of saving to the repository
Defensive patterns

Strategy: retry

Validate before calling

// before saving the job: check repository writability and row size limits
// ensure attribute values fit column lengths in r_jobentry_attribute

Try / catch

try { saveRep(rep, metaStore, idJob, databases, metaStore); } catch (KettleException e) {
  if (e.getCause() instanceof KettleDatabaseException) {
    log.warn("DB save failed, retrying after reconnect...");
    // reconnect and retry once, else export .kjb
  }
}

Prevention

When it happens

Trigger: JobEntryGetPOP (public saveRep) called while saving a job: rep.saveJobEntryAttribute throws KettleDatabaseException due to connection loss, transaction rollback, constraint violation, or read-only database.

Common situations: Repository DB read-only or out of space, connection dropped mid-save, overlong attribute values exceeding column sizes.

Related errors


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

Appendix: source

Thrown at plugins/email-messages/impl/src/main/java/org/pentaho/di/job/entries/getpop/JobEntryGetPOP.java:571

      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_BODY_SEARCH, bodySearch );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_NOT_TERM_BODY_SEARCH, notTermBodySearch );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_CONDITION_RECEIVED_DATE, MailConnectionMeta
        .getConditionDateCode( conditionReceivedDate ) );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_NOT_TERM_RECEIVED_DATE_SEARCH, notTermReceivedDateSearch );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_RECEIVED_DATE_1, receivedDate1 );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_RECEIVED_DATE_2, receivedDate2 );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_ACTION_TYPE, MailConnectionMeta
        .getActionTypeCode( actiontype ) );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_MOVE_TO_IMAP_FOLDER, moveToIMAPFolder );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_CREATE_MOVE_TO_FOLDER, createMoveToFolder );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_CREATE_LOCAL_FOLDER, createLocalFolder );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_AFTER_GET_IMAP, MailConnectionMeta
        .getAfterGetIMAPCode( aftergetimap ) );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_INCLUDE_SUBFOLDERS, includeSubfolders );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_USE_PROXY, useProxy );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_PROXY_USER_NAME, proxyUserName );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( "Unable to save job entry of type 'get pop' to the repository for id_job="
        + id_job, dbe );
    }
  }

  public String getPort() {
    return sslPort;
  }

  /**
   * @return Returns the usingAuthentication.
   */
  public String isUsingAuthentication() {
    return usingAuthentication;
  }

  /**
   * @param usingAuthentication
   *          The usingAuthentication to set.

View on GitHub (pinned to f3058517a1)