apache/flink · error · FlinkException
Could not stop with a savepoint job "{}".
Error message
Could not stop with a savepoint job "{}". What it means
Thrown from NestedPrimitiveColumnReader.readPrimitiveValue when the physical/logical type combination of a nested column value falls through the switch without matching — e.g. a type root not handled in the plain-read path (only numeric, string/binary, and timestamp cases are covered; DECIMAL-over-INT32/INT64 falls through the inner switch, and types like TIME or BOOLEAN in some paths hit default). The message names the offending type.
Source
Thrown at flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java:824
String targetDirectory,
SavepointFormatType formatType,
Duration clientTimeout)
throws FlinkException {
logAndSysout("Triggering stop-with-savepoint for job " + jobId + '.');
CompletableFuture<String> savepointPathFuture =
clusterClient.stopWithSavepoint(
jobId, advanceToEndOfEventTime, targetDirectory, formatType);
logAndSysout("Waiting for response...");
try {
final String savepointPath =
savepointPathFuture.get(clientTimeout.toMillis(), TimeUnit.MILLISECONDS);
logAndSysout("Savepoint completed. Path: " + savepointPath);
} catch (Exception e) {
throw new FlinkException("Could not stop with a savepoint job \"" + jobId + "\".", e);
}
}
/** Sends a SavepointTriggerMessage to the job manager in detached mode. */
private void stopWithDetachedSavepoint(
ClusterClient<?> clusterClient,
JobID jobId,
boolean advanceToEndOfEventTime,
String targetDirectory,
SavepointFormatType formatType,
Duration clientTimeout)
throws FlinkException {
logAndSysout("Triggering stop-with-savepoint in detached mode for job " + jobId + '.');
try {
final String triggerId =
clusterClient
.stopWithDetachedSavepoint(
jobId, advanceToEndOfEventTime, targetDirectory, formatType)View on GitHub (pinned to 2f3c205e92)
Solutions
- Identify the type in the message and check NestedPrimitiveColumnReader.readPrimitiveValue's switch — is that type root handled?
- Avoid the unsupported nested type: cast/restructure the column at the source (flatten the array, change the type) or project it out
- Read such columns through a non-nested path or convert the file (e.g. with Spark) to types Flink supports nested
- If the type should be supported, open a Flink JIRA (parquet component) — the switch likely needs a new case
Defensive patterns
Strategy: type-guard
Validate before calling
// Before reading, check nested element types against the supported set
static final Set<LogicalTypeRoot> NESTED_SUPPORTED = Set.of(
LogicalTypeRoot.CHAR, LogicalTypeRoot.VARCHAR, LogicalTypeRoot.BOOLEAN,
LogicalTypeRoot.BINARY, LogicalTypeRoot.VARBINARY, LogicalTypeRoot.TINYINT,
LogicalTypeRoot.SMALLINT, LogicalTypeRoot.INTEGER, LogicalTypeRoot.BIGINT,
LogicalTypeRoot.FLOAT, LogicalTypeRoot.DOUBLE,
LogicalTypeRoot.TIMESTAMP_WITHOUT_TIME_ZONE, LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE);
for (LogicalType child : ((ArrayType) colType).getChildren()) {
if (!NESTED_SUPPORTED.contains(child.getTypeRoot())) skipOrFlatten(colName);
} Type guard
static boolean nestedTypeSupported(LogicalType t) {
return NESTED_SUPPORTED.contains(t.getTypeRoot());
} Try / catch
try {
reader.readAndNewVector(...);
} catch (RuntimeException e) {
if (String.valueOf(e.getMessage()).startsWith("Unsupported type in the list")) {
// project out the column or convert the file
} else throw e;
} Prevention
- Keep nested element types to the well-supported set when writing files for Flink
- Add schema-compatibility tests when introducing new logical types to tables
- Flatten arrays of exotic scalar types into separate columns at write time
When it happens
Trigger: Nested list/array elements of a logical type not covered by readPrimitiveValue's switch (e.g. TIME, DATE in certain physical mappings, DECIMAL variants not matching the inner switch); new Flink logical types added without extending this legacy switch.
Common situations: Arrays of decimal, time, or boolean inside Parquet lists/maps; schema evolution introducing new type roots; reading files whose logical type annotations don't match Flink's expectations.
Related errors
- Could not stop with a detached savepoint job "{}".
- Failed to trigger a savepoint for the job {}.
- Could not get job jar and dependencies from JAR file: {}
- Failed to retrieve job list.
- Missing JobID. Specify a Job ID to trigger a savepoint.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/d8cb1c0ed2735819.
Report an issue: GitHub.