apache/seatunnel · warning
Found unassigned metric entries for table ' ' metric ' '…
Error message
Found {} unassigned metric entries for table '{}' metric '{}', using table name key only for these entries What it means
During per-table metric aggregation, some raw metric entries could not be mapped to any known vertex identifier (unassignedMetrics). processMetric() logs this warning with the count, table, and metric name, and stores these entries under the plain table-name key so the data is not lost, at the cost of losing per-vertex attribution.
Solutions
- Compare the unassigned metric identifiers in raw job metrics against the vertexIdentifiers the REST service derives to spot naming drift.
- Ensure all nodes run the same SeaTunnel version (metric identifier formats changed across versions).
- Check for leftover metrics from a previous run of the same job ID and clean/ignore stale metrics.
- Accept the fallback if table-level totals suffice; data is preserved under the table-name key.
Defensive patterns
Strategy: fallback
Validate before calling
// reconcile raw metric identifiers against derived vertex identifiers
Set<String> unknown = rawIds.stream().filter(id -> !vertexIdentifiers.contains(id)).collect(toSet());
if (!unknown.isEmpty()) { handle or log before aggregation; } Prevention
- Run uniform SeaTunnel versions so metric identifier formats match
- Clean stale metrics after job restarts with changed parallelism
- Compare raw metric IDs to DAG vertex identifiers when drift is suspected
- Use table-level keys when per-vertex attribution is optional
When it happens
Trigger: Metric payload contains entries whose identifiers don't match the computed vertexIdentifiers for the table — e.g. identifiers from vertices not in the current DAG config, or naming/format drift between the metrics store and the service's identifier construction.
Common situations: Engine version mismatch between the node writing metrics and the REST service parsing them; job restarted with different parallelism so old identifier entries remain; dynamic table/vertex naming changes.
Related errors
- Cannot reliably determine vertex assignment for table
- Failed to load finished job metrics for job
- Metric array size mismatch for table
- Metric array size mismatch for table
- Some vertices may not be reporting metrics yet for table
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/f0157234c7bf1eb8.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/BaseService.java:879
metricName,
identifier + "." + tableName,
metricsByIdentifier.get(identifier),
tableMetricsMaps);
});
if (vertexIdentifiers.size() > 1
&& metricsByIdentifier.size() < vertexIdentifiers.size()) {
log.warn(
"Some vertices may not be reporting metrics yet for table '{}': expected {} vertices {}, but only received metrics for {} vertices {}",
tableName,
vertexIdentifiers.size(),
vertexIdentifiers,
metricsByIdentifier.size(),
metricsByIdentifier.keySet());
}
if (unassignedMetrics != null && unassignedMetrics.size() > 0) {
log.warn(
"Found {} unassigned metric entries for table '{}' metric '{}', using table name key only for these entries",
unassignedMetrics.size(),
tableName,
metricName);
putMetricToMap(metricName, tableName, unassignedMetrics, tableMetricsMaps);
}
return;
}
// Fallback for legacy/simplified metric nodes without tags (mainly in tests or older
// outputs).
int arraySize = metricNode.size();
if (vertexIdentifiers.size() > 1) {
if (arraySize == vertexIdentifiers.size()) {
for (int i = 0; i < arraySize; i++) {
String identifier = vertexIdentifiers.get(i);
String metricKey = identifier + "." + tableName;
JsonNode element = metricNode.get(i);View on GitHub (pinned to cf67b549a7)