pentaho/pentaho-kettle · error · KettleException

DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo

DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo

Error message

DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo

What it means

DetectLastRowMeta.readRep wraps any exception while reading the step's attributes from a Kettle repository into a generic KettleException with this localized message. It indicates the repository read of resultfieldname (or other attributes) failed unexpectedly, with the cause chained.

Solutions

  1. Inspect the chained cause for the underlying repository/database error
  2. Verify repository connectivity and credentials
  3. Check that the step row and its attribute rows exist in the repository
  4. Re-create the step in Spoon and re-save if repository data is corrupted

Example fix

// before
} catch ( Exception e ) {
  throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
// after: log cause for diagnosis
} catch ( Exception e ) {
  logError( "Repository read failed for DetectLastRow step " + id_step, e );
  throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before loading from repository, verify connection
if ( repository == null || !repository.isConnected() ) {
  throw new KettleException("Repository not connected; cannot load transformation");
}

Try / catch

try {
  transMeta = TransMetaFactory.loadTransformation(rep, path, metaStore, true, variables);
} catch (KettleException e) {
  if (e.getMessage() != null && e.getMessage().contains("UnexpectedErrorReadingStepInfo")) {
    log.error("Repository read failed for DetectLastRow step; cause: " + e.getCause(), e);
  }
  throw e;
}

Prevention

When it happens

Trigger: Loading a transformation from a repository (StepMeta repository load path calls readRep) when rep.getStepAttributeString throws: repository connection failure, missing step row, or repository plugin error.

Common situations: Repository database unreachable during load; r_step_attribute rows missing or corrupted for the step; permission issues on repository tables; version mismatch between client and repository schema.

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/f209ee9495e4d75e. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/detectlastrow/DetectLastRowMeta.java:116

    StringBuilder retval = new StringBuilder();
    retval.append( "    " + XMLHandler.addTagValue( "resultfieldname", resultfieldname ) );
    return retval.toString();
  }

  private void readData( Node stepnode ) throws KettleXMLException {
    try {
      resultfieldname = XMLHandler.getTagValue( stepnode, "resultfieldname" );
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "DetectLastRowMeta.Exception.UnableToReadStepInfo" ), e );
    }
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {
      resultfieldname = rep.getStepAttributeString( id_step, "resultfieldname" );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "DetectLastRowMeta.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, "resultfieldname", resultfieldname );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString( PKG, "DetectLastRowMeta.Exception.UnableToSaveStepInfo" )
        + 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 ) {
    CheckResult cr;
    String error_message = "";

View on GitHub (pinned to f3058517a1)