apache/dolphinscheduler · error · IllegalArgumentException

Unsupported startup script name:

Error message

Unsupported startup script name:

What it means

SeatunnelTaskChannel.createTask() dispatches to SeatunnelFlinkTask or SeatunnelEngineTask based on the startupScript string; when it matches neither STARTUP_SCRIPT_FLINK nor STARTUP_SCRIPT_SEATUNNEL it throws IllegalArgumentException("Unsupported startup script name:..."). It is a fail-fast guard against an unknown SeaTunnel engine variant.

Source

Thrown at dolphinscheduler-task-plugin/dolphinscheduler-task-seatunnel/src/main/java/org/apache/dolphinscheduler/plugin/task/seatunnel/SeatunnelTaskChannel.java:49

public class SeatunnelTaskChannel implements TaskChannel {

    @Override
    public SeatunnelTask createTask(TaskExecutionContext taskRequest) {
        SeatunnelParameters seatunnelParameters =
                JSONUtils.parseObject(taskRequest.getTaskParams(), SeatunnelParameters.class);
        assert seatunnelParameters != null;
        String startupScript = seatunnelParameters.getStartupScript();
        if (startupScript.contains(STARTUP_SCRIPT_SPARK)) {
            return new SeatunnelSparkTask(taskRequest);
        }
        if (startupScript.contains(STARTUP_SCRIPT_FLINK)) {
            return new SeatunnelFlinkTask(taskRequest);
        }
        if (startupScript.contains(STARTUP_SCRIPT_SEATUNNEL)) {
            return new SeatunnelEngineTask(taskRequest);
        }
        throw new IllegalArgumentException("Unsupported startup script name:" + seatunnelParameters.getStartupScript());
    }

    @Override
    public AbstractParameters parseParameters(String taskParams) {
        return JSONUtils.parseObject(taskParams, SeatunnelParameters.class);
    }

}

View on GitHub (pinned to 02eac45a1b)

Solutions

  1. Set the task's startup script to one of the supported values: 'flink' or 'seatunnel.sh' (Zeta engine).
  2. If you intend to run Spark, upgrade the dolphinscheduler-task-seatunnel plugin/worker to a version that registers the Spark task type.
  3. Keep worker and master plugin versions in sync so the UI's options match what the worker recognizes.
  4. Check for whitespace/case mistakes in the stored startupScript value.

Example fix

// before
{"startupScript":"spark"} // unsupported by installed plugin
// after
{"startupScript":"seatunnel.sh"}
Defensive patterns

Strategy: validation

Validate before calling

Set<String> supported = Set.of("flink", "seatunnel");
String script = seatunnelParameters.getStartupScript();
if (script == null || supported.stream().noneMatch(script::contains)) {
    throw new IllegalArgumentException("startupScript must contain 'flink' or 'seatunnel', got: " + script);
}

Try / catch

try {
    Task t = channel.createTask(taskRequest);
} catch (IllegalArgumentException e) {
    log.error("Unsupported SeaTunnel startup script; use flink or seatunnel.sh", e);
}

Prevention

When it happens

Trigger: Task params carry a startupScript value other than flink/run/seatunnel (or any string containing the recognized constants) — e.g. 'spark' on a build without the spark task class, empty string, or a custom script name.

Common situations: Users choose the Spark engine in the UI while the deployed plugin only supports flink and seatunnel(zeta), task params edited by hand, or version drift where newer UI writes a startup script the older worker plugin doesn't recognize.

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/dolphinscheduler@02eac45a1b (2026-09-06). Data as JSON: /api/errors/44574d15eaa04be6. Report an issue: GitHub.