apache/seatunnel · warning
Reader {} is not registered. Pending splits {} are not assig
Error message
Reader {} is not registered. Pending splits {} are not assigned. What it means
IoTDBSourceSplitEnumerator (v1 connector) logs this warning in addSplitsBack when the returning reader's subtaskId is not registered with the coordinator; the splits are kept as pending and not immediately assigned. This is a failover/restore race guard; assignment happens once the reader registers.
Source
Thrown at seatunnel-connectors-v2/connector-iotdb/src/main/java/org/apache/seatunnel/connectors/seatunnel/iotdb/source/IoTDBSourceSplitEnumerator.java:195
query = query + " and ( " + sqlCondition + " ) ";
}
if (!Strings.isNullOrEmpty(sqlAlign)) {
query = query + " align by " + sqlAlign;
}
iotDBSourceSplits.add(new IoTDBSourceSplit(String.valueOf(query.hashCode()), query));
}
return iotDBSourceSplits;
}
@Override
public void addSplitsBack(List<IoTDBSourceSplit> splits, int subtaskId) {
log.debug("Add back splits {} to IoTDBSourceSplitEnumerator.", splits);
if (!splits.isEmpty()) {
addPendingSplit(splits, subtaskId);
if (context.registeredReaders().contains(subtaskId)) {
assignSplit(Collections.singletonList(subtaskId));
} else {
log.warn(
"Reader {} is not registered. Pending splits {} are not assigned.",
subtaskId,
splits);
}
}
}
@Override
public int currentUnassignedSplitSize() {
return pendingSplit.size();
}
@Override
public void registerReader(int subtaskId) {
log.debug("Register reader {} to IoTDBSourceSplitEnumerator.", subtaskId);
if (!pendingSplit.isEmpty()) {
assignSplit(Collections.singletonList(subtaskId));
}View on GitHub (pinned to cf67b549a7)
Solutions
- No action typically required — pending splits get assigned after registration
- If splits remain unassigned, verify reader startup and restart the job if needed
- Reduce reader failures by checking IoTDB connectivity/session limits
- Ensure the standard register-reader flow is used in any customized source code
Defensive patterns
Strategy: fallback
Prevention
- Expect this warning during reader failover; confirm splits reassign later
- Ensure IoTDB session limits/connectivity don't cause repeated reader deaths
- Verify checkpoint/restore ordering works for this source
- Keep cluster capacity sufficient to avoid frequent reader restarts
When it happens
Trigger: addSplitsBack(splits, subtaskId) with subtaskId absent from context.registeredReaders() — reader failed over or job was restored and the new reader hasn't registered yet.
Common situations: Task failure on IoTDB source readers; checkpoint restore ordering where enumerator starts before readers; dynamic scaling moving readers.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Reader {} is not registered. Pending splits {} are not assig
- CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION
- Reader {} is not registered. Pending splits {} are not assig
- Reader {} is not registered. Pending splits {} are not assig
- UNSUPPORTED_OPERATION
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/03f0ffda1f4b0ab3.
Report an issue: GitHub.