apache/flink · error · FlinkException
Failed to trigger a savepoint for the job {}.
Error message
Failed to trigger a savepoint for the job {}. What it means
Thrown from NestedPrimitiveColumnReader.fillColumnVector when the column's LogicalType.getTypeRoot() matches no case in the vector-materialization switch — the reader successfully decoded values but cannot build a result vector for that type root. This is the materialization-stage sibling of the read/decode switches; the message names the type.
Source
Thrown at flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java:876
SavepointFormatType formatType,
Duration clientTimeout)
throws FlinkException {
logAndSysout("Triggering savepoint for job " + jobId + '.');
CompletableFuture<String> savepointPathFuture =
clusterClient.triggerSavepoint(jobId, savepointDirectory, formatType);
logAndSysout("Waiting for response...");
try {
final String savepointPath =
savepointPathFuture.get(clientTimeout.toMillis(), TimeUnit.MILLISECONDS);
logAndSysout("Savepoint completed. Path: " + savepointPath);
logAndSysout("You can resume your program from this savepoint with the run command.");
} catch (Exception e) {
Throwable cause = ExceptionUtils.stripExecutionException(e);
throw new FlinkException(
"Failed to trigger a savepoint for the job " + jobId + ".", cause);
}
}
/** Sends a SavepointTriggerMessage to the job manager in detached mode. */
private void triggerDetachedSavepoint(
ClusterClient<?> clusterClient,
JobID jobId,
String savepointDirectory,
SavepointFormatType formatType,
Duration clientTimeout)
throws FlinkException {
logAndSysout("Triggering savepoint in detached mode for job " + jobId + '.');
try {
final String triggerId =
clusterClient
.triggerDetachedSavepoint(jobId, savepointDirectory, formatType)View on GitHub (pinned to 2f3c205e92)
Solutions
- Identify the type from the message and confirm it is absent from fillColumnVector's switch in your Flink version
- Avoid or transform the column: project it out, or convert the file so the nested element type is one Flink materializes (INT/DOUBLE/VARCHAR/BINARY/TIMESTAMP/DECIMAL cases)
- Flatten the nested structure at write time if possible
- Report/upgrade: this is a reader capability gap, fixed only by adding a case
Defensive patterns
Strategy: type-guard
Validate before calling
// Before the read, ensure the nested column's type root is one fillColumnVector materializes
if (!NESTED_SUPPORTED.contains(logicalType.getTypeRoot())) {
throw new IllegalArgumentException(
"Nested column '" + name + "' of type " + logicalType
+ " cannot be materialized by the Parquet vectorized reader");
} Type guard
static boolean materializableNestedRoot(LogicalTypeRoot r) {
return NESTED_SUPPORTED.contains(r) || r == LogicalTypeRoot.DECIMAL;
} Try / catch
try {
reader.readAndNewVector(...);
} catch (RuntimeException e) {
if (String.valueOf(e.getMessage()).startsWith("Unsupported type in the list")) {
failJobWithSchemaHint(schema); // deterministic schema/read mismatch
} else throw e;
} Prevention
- Validate nested element types against the reader's materialization matrix during schema registration
- Prefer flat (non-nested) layouts for scalar types outside the supported set
- Re-run nested-schema compatibility checks after Flink upgrades
When it happens
Trigger: A nested column whose type root is not in fillColumnVector's cases (e.g. TIME, DATE, BOOLEAN, or newer type roots); adding a logical type to the reader without extending fillColumnVector.
Common situations: Lists/maps of scalar types the nested reader never learned to materialize; reading files after a Flink upgrade that widened type support in some switches but not this one.
Related errors
- Could not stop with a savepoint job "{}".
- Could not stop with a detached savepoint job "{}".
- Missing JobID. Specify a Job ID to trigger a savepoint.
- Triggering a detached savepoint for the job {} failed.
- Failed to dispose the savepoint '{}'.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/ac577c9a6076a412.
Report an issue: GitHub.