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
- Populate backfillDateList with at least one valid date (format yyyy-MM-dd HH:mm:ss) before submitting.
- Fix the client so an empty complementScheduleDateList short-circuits the request with a friendlier error instead of sending it.
- Check for whitespace-only or malformed comma-separated date strings that parse to nothing.
- 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
- Require at least one date in the UI before allowing submission.
- Trim and verify comma-separated date strings before sending.
- Check date parsing didn't silently drop invalid entries.
- Unit-test request builders with empty and single-date lists.
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
- backfillParams is null
- expectedParallelismNumber should >= 0
- The execType should be START_PROCESS
- url can not be null
- 10001
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/d5a59a0e129900a9.
Report an issue: GitHub.