pentaho/pentaho-kettle · error · KettleException

GetJobStatusServlet.Error.LogStringIsTooLong

GetJobStatusServlet.Error.LogStringIsTooLong

Error message

GetJobStatusServlet.Error.LogStringIsTooLong

What it means

getLogText in GetJobStatusServlet converts the job's log channel buffer to a String; if that allocation causes an OutOfMemoryError, it is replaced by this KettleException. It signals the accumulated log text is too large to build in memory.

Solutions

  1. Increase JVM heap for the Carte server.
  2. Request fewer log lines (use tail-line parameters or a narrower startLineNr/lastLineNr range).
  3. Limit KettleLogStore buffer size (KETTLE_LOG_BUFFER_SIZE / setMaxNumberOfLines) so buffers stay bounded.
  4. Reduce log verbosity (log level) for the job channel.

Example fix

// before
String log = servlet.getLogText(job, 0, kettleLogStore.getLastBufferLineNr()); // full buffer -> OOM
// after
String log = servlet.getLogText(job, 0, kettleLogStore.getLastBufferLineNr(), 500); // tail 500 lines
Defensive patterns

Strategy: validation

Validate before calling

long approxBytes = KettleLogStore.getAppender().getBuffer(job.getLogChannelId(), false).length();
boolean safe = approxBytes < 50_000_000; // well under heap headroom

Prevention

When it happens

Trigger: GET /kettle/jobStatus/ (XML or HTML mode) on a job whose logging buffer grew so large that KettleLogStore.getAppender().getBuffer(...).toString() exhausts heap.

Common situations: Long-running jobs with verbose logging polled over Carte; small heap (-Xmx) on slave servers; startLineNr/lastLineNr spanning thousands of log lines; numberOfTailLines not used so the full buffer is stringified.

Understand the failure class

Background: payload too large / request exceeds maximum size: why libraries cap bytes and how to fix oversize payloads — this error's family across 50 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/www/GetJobStatusServlet.java:499

  public String toString() {
    return "Job Status Handler";
  }

  public String getService() {
    return CONTEXT_PATH + " (" + toString() + ")";
  }

  public String getContextPath() {
    return CONTEXT_PATH;
  }

  private String getLogText( Job job, int startLineNr, int lastLineNr, int numberOfTailLines ) throws KettleException {
    try {
      return KettleLogStore.getAppender().getBuffer(
        job.getLogChannel().getLogChannelId(), false, startLineNr, lastLineNr, numberOfTailLines ).toString();
    } catch ( OutOfMemoryError error ) {
      throw new KettleException( BaseMessages.getString( PKG, "GetJobStatusServlet.Error.LogStringIsTooLong" ) );
    }
  }
}

View on GitHub (pinned to f3058517a1)