apache/dolphinscheduler · error · IllegalArgumentException

backfillDateList is empty

Error message

backfillDateList is empty

What it means

BackfillWorkflowDTOValidator.validate requires backfillParams.backfillDateList to be non-empty, since a backfill must reference at least one date to complement. When CollectionUtils.isEmpty(backfillParams.getBackfillDateList()) is true, it throws IllegalArgumentException('backfillDateList is empty').

Source

Thrown at dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java:53

    private final TenantExistValidator tenantExistValidator;

    private final StartParamListValidator startParamListValidator;

    public BackfillWorkflowDTOValidator(TenantExistValidator tenantExistValidator,
                                        StartParamListValidator startParamListValidator) {
        this.tenantExistValidator = tenantExistValidator;
        this.startParamListValidator = startParamListValidator;
    }

    @Override
    public void validate(final BackfillWorkflowDTO backfillWorkflowDTO) {
        final BackfillWorkflowDTO.BackfillParamsDTO backfillParams = backfillWorkflowDTO.getBackfillParams();
        if (backfillParams == null) {
            throw new IllegalArgumentException("backfillParams is null");
        }
        if (CollectionUtils.isEmpty(backfillParams.getBackfillDateList())) {
            throw new IllegalArgumentException("backfillDateList is empty");
        }
        if (backfillParams.getExpectedParallelismNumber() < 0) {
            throw new IllegalArgumentException("expectedParallelismNumber should >= 0");
        }
        if (backfillWorkflowDTO.getExecType() != CommandType.COMPLEMENT_DATA) {
            throw new IllegalArgumentException("The execType should be START_PROCESS");
        }
        if (backfillWorkflowDTO.getWorkflowDefinition() == null) {
            throw new IllegalArgumentException("The workflowDefinition should not be null");
        }
        if (backfillWorkflowDTO.getWorkflowDefinition().getReleaseState() != ReleaseState.ONLINE) {
            throw new IllegalStateException("The workflowDefinition should be online");
        }

        tenantExistValidator.validate(backfillWorkflowDTO.getTenantCode());

        startParamListValidator.validate(backfillWorkflowDTO.getStartParamList());
    }

View on GitHub (pinned to 02eac45a1b)

Solutions

  1. Populate backfillDateList with at least one valid date (format yyyy-MM-dd HH:mm:ss) before submitting.
  2. Fix the client so an empty complementScheduleDateList short-circuits the request with a friendlier error instead of sending it.
  3. Check for whitespace-only or malformed comma-separated date strings that parse to nothing.
  4. If triggering programmatically, ensure List.isNotEmpty(backfillDateList) in a pre-check.

Example fix

// before
params.setBackfillDateList(Collections.emptyList());
// after
params.setBackfillDateList(Arrays.asList("2026-01-01 00:00:00", "2026-01-02 00:00:00"));
Defensive patterns

Strategy: validation

Validate before calling

if (!params.backfillDateList || params.backfillDateList.length === 0) {
  throw new Error('backfillDateList must contain at least one date');
}

Type guard

function hasDates(params) {
  return Array.isArray(params?.backfillDateList) && params.backfillDateList.length > 0;
}

Try / catch

try {
  backfill(dto);
} catch (IllegalArgumentException e) {
  if (e.getMessage().contains("backfillDateList is empty")) {
    // prompt user to pick a date range
  }
}

Prevention

When it happens

Trigger: A backfill request where backfillParams is provided but its backfillDateList is null or an empty list, e.g. complementScheduleDateList was an empty string or the date-parsing step produced no entries before building the DTO.

Common situations: UI sending an empty date range after invalid date input; comma-separated date list trimmed to empty string; timezone/locale parsing dropping all values; copy-pasted request template with dates left blank.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06). Data as JSON: /api/errors/d5a59a0e129900a9. Report an issue: GitHub.