pentaho/pentaho-kettle · error · KettleXMLException

DelayMeta.Exception.UnableToReadStepInfo

DelayMeta.Exception.UnableToReadStepInfo

Error message

DelayMeta.Exception.UnableToReadStepInfo

What it means

DelayMeta.readData reads the Delay step's XML (timeout, scaletime tags) during loadXML. Any exception is wrapped in a KettleXMLException with 'DelayMeta.Exception.UnableToReadStepInfo'. It means the Delay step's XML definition could not be parsed; note transformations before 3.1.1 may lack scaletime, which is normalized for compatibility.

Solutions

  1. Inspect the Delay step XML in the .ktr and ensure <timeout> and <scaletime> tags exist inside a well-formed step node.
  2. Re-add the Delay step in Spoon and re-save the transformation.
  3. Restore the transformation file from backup/version control.
  4. If migrating from pre-3.1.1 PDI, re-save the transformation once with a compatible PDI version.

Example fix

// before: missing tags
<step><name>Delay</name><type>Delay</type></step>
// after
<step><name>Delay</name><type>Delay</type>
  <timeout>1000</timeout>
  <scaletime>milliseconds</scaletime>
</step>
Defensive patterns

Strategy: validation

Validate before calling

// Check the Delay step XML before load
String timeout = XMLHandler.getTagValue(stepNode, "timeout");
String scaletime = XMLHandler.getTagValue(stepNode, "scaletime");
if (timeout == null || scaletime == null) {
  throw new KettleException("Delay step XML missing timeout/scaletime tags");
}

Try / catch

try { transMeta = new TransMeta(ktrPath); } catch (KettleXMLException e) { logError("Delay step unreadable: " + e.getMessage(), e); // re-create or restore the transformation
transMeta = restoreOrRebuild(ktrPath); }

Prevention

When it happens

Trigger: loadXML on a step node where XMLHandler.getTagValue throws due to malformed XML, or where a required tag structure is absent so parsing fails.

Common situations: Corrupted or hand-edited .ktr files; transformations exported by very old PDI versions (pre-3.1.1) with unexpected tag layout; truncated file transfers; XML generated by third-party tools missing Delay tags.

Understand the failure class

Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/delay/DelayMeta.java:133

    } else if ( scaletime.equals( ScaleTimeCode[2] ) ) {
      retval = 2;
    } else if ( scaletime.equals( ScaleTimeCode[3] ) ) {
      retval = 3;
    }

    return retval;
  }

  private void readData( Node stepnode ) throws KettleXMLException {
    try {
      timeout = XMLHandler.getTagValue( stepnode, "timeout" );
      scaletime = XMLHandler.getTagValue( stepnode, "scaletime" );
      // set all unknown values to seconds
      setScaleTimeCode( getScaleTimeCode() ); // compatibility reasons for transformations before 3.1.1, see PDI-1850,
                                              // PDI-1532

    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString( PKG, "DelayMeta.Exception.UnableToReadStepInfo" ), e );
    }
  }

  public void setDefault() {
    timeout = "1"; // default one second
    scaletime = DEFAULT_SCALE_TIME; // defaults to "seconds"
  }

  public String getTimeOut() {
    return timeout;
  }

  public void setTimeOut( String timeout ) {
    this.timeout = timeout;
  }

  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
    try {

View on GitHub (pinned to f3058517a1)