pentaho/pentaho-kettle · error · KettleException

CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo

Error message

CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo

What it means

CloneRowMeta.readRep loads the Clone Row step's settings from the Pentaho Repository (getStepAttributeString/Boolean for id_step). Any exception from the repository layer (connection loss, invalid id_step, schema problems) is rethrown as a KettleException with this message. It means the step metadata could not be read from the repository.

Solutions

  1. Verify the repository database connection and retry loading
  2. Check R_STEP_ATTRIBUTE rows exist for the id_step
  3. Re-save the transformation from Spoon to regenerate repository rows
  4. Review repository database logs for the underlying SQL error
Defensive patterns

Strategy: try-catch

Validate before calling

// Java: check repository connectivity before load
if (!repository.isConnected()) repository.connect(user, pass);

Try / catch

try {
  stepMeta.readRep(repository, metaStore, idStep, databases, metaStore);
} catch (KettleException e) {
  log.error("Repository read failed for step " + idStep, e);
  // retry after reconnect
}

Prevention

When it happens

Trigger: Calling readRep while loading a transformation stored in a repository when rep.getStepAttributeString/Boolean throws — e.g. repository connection dropped or id_step references a missing/locked row.

Common situations: Repository DB restarted mid-load, network outage to the repository database, loading a transformation whose step rows were deleted or corrupted in R_STEP_ATTRIBUTE.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/clonerow/CloneRowMeta.java:204

    addcloneflag = false;
    addclonenum = false;
    clonenumfield = null;
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases )
    throws KettleException {
    try {
      nrclones = rep.getStepAttributeString( id_step, "nrclones" );
      addcloneflag = rep.getStepAttributeBoolean( id_step, "addcloneflag" );
      cloneflagfield = rep.getStepAttributeString( id_step, "cloneflagfield" );
      nrcloneinfield = rep.getStepAttributeBoolean( id_step, "nrcloneinfield" );
      nrclonefield = rep.getStepAttributeString( id_step, "nrclonefield" );
      addclonenum = rep.getStepAttributeBoolean( id_step, "addclonenum" );

      clonenumfield = rep.getStepAttributeString( id_step, "clonenumfield" );

    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )
    throws KettleException {
    try {
      rep.saveStepAttribute( id_transformation, id_step, "nrclones", nrclones );
      rep.saveStepAttribute( id_transformation, id_step, "addcloneflag", addcloneflag );
      rep.saveStepAttribute( id_transformation, id_step, "cloneflagfield", cloneflagfield );
      rep.saveStepAttribute( id_transformation, id_step, "nrcloneinfield", nrcloneinfield );
      rep.saveStepAttribute( id_transformation, id_step, "nrclonefield", nrclonefield );
      rep.saveStepAttribute( id_transformation, id_step, "addclonenum", addclonenum );

      rep.saveStepAttribute( id_transformation, id_step, "clonenumfield", clonenumfield );

    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(

View on GitHub (pinned to f3058517a1)