pentaho/pentaho-kettle · error · KettleException

ElasticSearchBulkMeta.Exception.ErrorSavingToRepository

ElasticSearchBulkMeta.Exception.ErrorSavingToRepository

Error message

ElasticSearchBulkMeta.Exception.ErrorSavingToRepository

What it means

ElasticSearchBulkMeta.saveRep() persists each setting as a numbered step attribute; any failure is wrapped in a KettleException keyed 'ElasticSearchBulkMeta.Exception.ErrorSavingToRepository' with the id_step appended. It means the step's configuration could not be written to the repository.

Solutions

  1. Verify repository DB is writable and the connection is alive, then retry the save
  2. Check r_step_attribute for constraint/data issues (e.g. column length) blocking the write
  3. As a workaround, save the transformation as XML instead of the repository
Defensive patterns

Strategy: retry

Validate before calling

// before saving: confirm repository is writable
SELECT 1; -- connectivity probe
// ensure user has INSERT/UPDATE rights on r_step_attribute

Try / catch

try { saveRep(rep, metaStore, idTrans, idStep); } catch (KettleException e) {
  log.error("Repository save failed for id_step=" + idStep + ": " + e.getMessage(), e);
  // retry once after reconnect, else export to XML
}

Prevention

When it happens

Trigger: saveRep (public) called when saving a transformation: rep.saveStepAttribute throws due to repository connection loss, transaction failure, or constraint violation on the attribute rows.

Common situations: Repository DB read-only or out of space, connection dropped mid-save, saving a very large settings list into r_step_attribute.

Related errors


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

Appendix: source

Thrown at plugins/elasticsearch-bulk-insert/core/src/main/java/org/pentaho/di/trans/steps/elasticsearchbulk/ElasticSearchBulkMeta.java:698

      // Servers
      for ( int i = 0; i < servers.size(); i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, joinRepAttr( Dom.TAG_SERVER, Dom.TAG_SERVER_ADDRESS ),
                servers.get( i ).address );
        rep.saveStepAttribute( id_transformation, id_step, i, joinRepAttr( Dom.TAG_SERVER, Dom.TAG_SERVER_PORT ),
                servers.get( i ).port );
      }

      // Settings
      for ( int i = 0; i < settings.size(); i++ ) {
        rep.saveStepAttribute( id_transformation, id_step, i, joinRepAttr( Dom.TAG_SETTING, Dom.TAG_SETTING_NAME ),
                settings.get( i ).setting );
        rep.saveStepAttribute( id_transformation, id_step, i, joinRepAttr( Dom.TAG_SETTING, Dom.TAG_SETTING_VALUE ),
                settings.get( i ).value );
      }

    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG,
              "ElasticSearchBulkMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
    }
  }

  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta, RowMetaInterface prev,
                     String[] input, String[] output, RowMetaInterface info, VariableSpace space, Repository repository,
                     IMetaStore metaStore ) {

    checkBasicRequiredFields( remarks, stepMeta );

    checkInputFields( remarks, prev, stepMeta );

  }

  private void checkBasicRequiredFields( List<CheckResultInterface> remarks, StepMeta stepMeta ) {
    checkRequiredString( remarks, stepMeta, getIndex(), BaseMessages.getString( PKG,
            "ElasticSearchBulkDialog.Index.Label" ) );
    checkRequiredString( remarks, stepMeta, getType(), BaseMessages.getString( PKG,

View on GitHub (pinned to f3058517a1)