pentaho/pentaho-kettle · error · KettleException

Unable to save step of type 'get pop' to the repository for…

Error message

Unable to save step of type 'get pop' to the repository for id_step=

What it means

MailInputMeta.saveRep() wraps a KettleDatabaseException thrown while persisting the 'Get POP' (Mail Input) step's field attributes (field_name, field_column) to the repository. It signals the repository write failed and the step metadata could not be saved; the database exception is attached as the cause.

Solutions

  1. Check the nested KettleDatabaseException cause for the underlying SQL error
  2. Verify repository database connectivity (reconnect / test connection)
  3. Confirm the DB user has INSERT/UPDATE privileges on the step attribute tables
  4. Run the repository upgrade scripts if the schema is outdated, then retry the save
Defensive patterns

Strategy: try-catch

Try / catch

try {
  meta.saveRep( rep, metaStore, transMeta.getObjectId(), stepId );
} catch ( KettleException e ) {
  if ( e.getCause() instanceof KettleDatabaseException ) {
    // check DB connectivity/permissions before retrying
  }
}

Prevention

When it happens

Trigger: Calling saveRep() with a Repository whose saveStepAttribute() throws KettleDatabaseException — repository DB down, connection dropped, constraint violation, or insufficient permissions on R_STEP_ATTRIBUTE.

Common situations: Saving a transformation when the repository database connection has timed out, the DB user lacks write rights, or the repository schema is out of date after a Pentaho upgrade.

Related errors


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

Appendix: source

Thrown at plugins/email-messages/impl/src/main/java/org/pentaho/di/trans/steps/mailinput/MailInputMeta.java:476

      rep.saveStepAttribute( id_transformation, id_step, TAG_PROXY_USERNAME, proxyUserName );
      rep.saveStepAttribute( id_transformation, id_step, TAG_USE_DYNAMIC_FOLDER, useDynamicFolder );
      rep.saveStepAttribute( id_transformation, id_step, TAG_FOLDER_FIELD, folderField );
      rep.saveStepAttribute( id_transformation, id_step, TAG_ROW_LIMIT, rowLimit );

      rep.saveStepAttribute( id_transformation, id_step, TAG_USE_BATCH, useBatch );
      rep.saveStepAttribute( id_transformation, id_step, TAG_BATCH_SIZE, batchSize );
      rep.saveStepAttribute( id_transformation, id_step, TAG_START_MSG, start );
      rep.saveStepAttribute( id_transformation, id_step, TAG_END_MSG, end );
      rep.saveStepAttribute( id_transformation, id_step, TAG_STOP_ON_ERROR, stopOnError );

      for ( int i = 0; i < inputFields.length; i++ ) {
        MailInputField field = inputFields[i];

        rep.saveStepAttribute( id_transformation, id_step, i, "field_name", field.getName() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_column", field.getColumnCode() );
      }
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException(
        "Unable to save step of type 'get pop' to the repository for id_step=" + id_step, dbe );
    }
  }

  @Override
  public String getXML() {
    StringBuilder retval = new StringBuilder();
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_SERVERNAME, serverName ) );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_USERNAME, userName ) );
    retval.append( STR_6_SPACES ).append(
      XMLHandler.addTagValue( TAG_PASSWORD, Encr.encryptPasswordIfNotUsingVariables( password ) ) );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_USE_AUTH, usingAuthentication ) );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_USE_GRANT_TYPE, grant_type) );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_AUTH_CLIENT_ID, clientId ) );
    retval.append( STR_6_SPACES ).append(
            XMLHandler.addTagValue( TAG_AUTH_SECRET_KEY,  Encr.encryptPasswordIfNotUsingVariables( secretKey) )  );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_AUTH_SCOPE, scope ) );
    retval.append( STR_6_SPACES ).append( XMLHandler.addTagValue( TAG_AUTH_TOKEN_URL, tokenUrl ) );

View on GitHub (pinned to f3058517a1)