pentaho/pentaho-kettle · error · KettleException

SelectValuesMeta.Exception.UnableToSaveStepInfoToRepository

Error message

SelectValuesMeta.Exception.UnableToSaveStepInfoToRepository

What it means

saveRep() wraps any exception while persisting SelectValues step attributes into a repository in a KettleException with key 'SelectValuesMeta.Exception.UnableToSaveStepInfoToRepository' plus the id_step. It means step configuration could not be written to the repository.

Solutions

  1. Verify the repository user has write privileges
  2. Check repository DB connectivity and free space, then retry the save
  3. Reconnect/re-login to the repository in Spoon and save again
  4. Inspect the cause for constraint errors and shorten/fix offending attribute values
Defensive patterns

Strategy: try-catch

Validate before calling

// before save
if (!repository.getSecurityProvider() != null /* or equivalent write check */) { /* verify user can write */ }
if (id_step == null) throw new IllegalStateException("id_step is null; step not registered");

Try / catch

try { meta.saveRep(rep, metaStore, transId, stepId); } catch (KettleException e) { logError("Repository save failed for id_step=" + stepId + ": " + e.getCause(), e); throw e; }

Prevention

When it happens

Trigger: Calling saveRep() when one of many rep.saveStepAttribute calls fails — read-only repository, lost DB connection, constraint violation, or attribute value too large for the column.

Common situations: Saving a transformation as a user without write permission; repository database disk full or connection dropped mid-save; migrating transformations between repositories with different schemas.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/selectvalues/SelectValuesMeta.java:624

            .getConversionMask() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_DATE_FORMAT_LENIENT" ), Boolean
            .toString( meta[i].isDateFormatLenient() ) );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_DATE_FORMAT_LOCALE" ), meta[i]
            .getDateFormatLocale() == null ? null : meta[i].getDateFormatLocale().toString() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_DATE_FORMAT_TIMEZONE" ), meta[i]
            .getDateFormatTimeZone() == null ? null : meta[i].getDateFormatTimeZone().toString() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_LENIENT_STRING_TO_NUMBER" ), Boolean
            .toString( meta[i].isLenientStringToNumber() ) );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_DECIMAL" ), meta[i]
            .getDecimalSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_GROUPING" ), meta[i]
            .getGroupingSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_CURRENCY" ), meta[i]
            .getCurrencySymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, getRepCode( "META_ENCODING" ), meta[i].getEncoding() );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG,
          "SelectValuesMeta.Exception.UnableToSaveStepInfoToRepository" ) + id_step, e );
    }

  }

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

    if ( prev != null && prev.size() > 0 ) {
      cr =
          new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString( PKG,
              "SelectValuesMeta.CheckResult.StepReceivingFields", prev.size() + "" ), stepMeta );
      remarks.add( cr );

      /*

View on GitHub (pinned to f3058517a1)