apache/beam · error · IllegalArgumentException

Unknown %s: %s

Error message

Unknown %s: %s

What it means

convertTimestampTransform translates a RunnerApi.TimestampTransform into its Java Trigger timestamp-transform equivalent. If the TimestampTransformCase is neither TRUNCATE nor ALIGNTO, the case is unknown and an IllegalArgumentException is thrown.

Source

Thrown at sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/TriggerTranslation.java:198

    private RunnerApi.TimestampTransform convertTimestampTransform(TimestampTransform transform) {
      if (transform instanceof TimestampTransform.Delay) {
        return RunnerApi.TimestampTransform.newBuilder()
            .setDelay(
                RunnerApi.TimestampTransform.Delay.newBuilder()
                    .setDelayMillis(((TimestampTransform.Delay) transform).getDelay().getMillis()))
            .build();
      } else if (transform instanceof TimestampTransform.AlignTo) {
        TimestampTransform.AlignTo alignTo = (TimestampTransform.AlignTo) transform;
        return RunnerApi.TimestampTransform.newBuilder()
            .setAlignTo(
                RunnerApi.TimestampTransform.AlignTo.newBuilder()
                    .setPeriod(alignTo.getPeriod().getMillis())
                    .setOffset(alignTo.getOffset().getMillis()))
            .build();

      } else {
        throw new IllegalArgumentException(
            String.format("Unknown %s: %s", TimestampTransform.class.getSimpleName(), transform));
      }
    }
  }

  public static Trigger fromProto(RunnerApi.Trigger triggerProto) {
    switch (triggerProto.getTriggerCase()) {
      case AFTER_ALL:
        return AfterAll.of(protosToTriggers(triggerProto.getAfterAll().getSubtriggersList()));
      case AFTER_ANY:
        return AfterFirst.of(protosToTriggers(triggerProto.getAfterAny().getSubtriggersList()));
      case AFTER_EACH:
        return AfterEach.inOrder(
            protosToTriggers(triggerProto.getAfterEach().getSubtriggersList()));
      case AFTER_END_OF_WINDOW:
        RunnerApi.Trigger.AfterEndOfWindow eowProto = triggerProto.getAfterEndOfWindow();

        if (!eowProto.hasEarlyFirings() && !eowProto.hasLateFirings()) {

View on GitHub (pinned to 12126d8942)

Solutions

  1. Use an SDK version that supports the timestamp transform case in the pipeline proto
  2. Regenerate the pipeline with a compatible Beam version so only TRUNCATE/ALIGNTO cases are emitted
  3. Inspect the proto to confirm which case was set and fix the pipeline construction code

Example fix

// before: proto set TIMESTAMP_TRANSFORM case NEW_CASE
// after: emit only supported cases:
// TimestampTransform.newBuilder().setAlignTo(AlignTo...).build();
Defensive patterns

Strategy: type-guard

Validate before calling

if (transform.getTimestampTransformCase() != TimestampTransform.TimestampTransformCase.TRUNCATE
    && transform.getTimestampTransformCase() != TimestampTransform.TimestampTransformCase.ALIGNTO) {
  throw new IllegalStateException("Unsupported timestamp transform case: " + transform.getTimestampTransformCase());
}

Type guard

boolean isSupported(TimestampTransform t) {
  return t.getTimestampTransformCase() == TimestampTransformCase.TRUNCATE
      || t.getTimestampTransformCase() == TimestampTransformCase.ALIGNTO;
}

Try / catch

try {
  TriggerTranslation.fromProto(triggerProto);
} catch (IllegalArgumentException e) {
  // handle unsupported timestamp transform case
}

Prevention

When it happens

Trigger: Visiting a windowing/trigger payload whose timestamp_transform field holds a case not handled by this SDK version (e.g. a newer proto case from a higher Beam version).

Common situations: Pipeline proto generated by a newer Beam version and read by an older SDK; corrupted/generated protos with unsupported enum values.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/2e7184d21d3c5f3e. Report an issue: GitHub.