{"record":{"id":"ff9739217e9c0571","repo":"apache/iceberg","slug":"failed-to-send-operator-s-coordinator-global-data","errorCode":null,"errorMessage":"Failed to send operator %s coordinator global data statistics for checkpoint %d","messagePattern":"Failed to send operator (.+?) coordinator global data statistics for checkpoint (.+?)","errorType":"exception","errorClass":"FlinkRuntimeException","httpStatus":null,"severity":"error","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/sink/shuffle/DataStatisticsCoordinator.java","lineNumber":158,"sourceCode":"    if (!coordinatorThreadFactory.isCurrentThreadCoordinatorThread()) {\n      try {\n        Callable<Void> guardedCallable =\n            () -> {\n              try {\n                return callable.call();\n              } catch (Throwable t) {\n                LOG.error(\n                    \"Uncaught Exception in data statistics coordinator: {} executor\",\n                    operatorName,\n                    t);\n                ExceptionUtils.rethrowException(t);\n                return null;\n              }\n            };\n\n        coordinatorExecutor.submit(guardedCallable).get();\n      } catch (InterruptedException | ExecutionException e) {\n        throw new FlinkRuntimeException(errorMessage, e);\n      }\n    } else {\n      try {\n        callable.call();\n      } catch (Throwable t) {\n        LOG.error(\n            \"Uncaught Exception in data statistics coordinator: {} executor\", operatorName, t);\n        throw new FlinkRuntimeException(errorMessage, t);\n      }\n    }\n  }\n\n  public void runInCoordinatorThread(Runnable runnable) {\n    this.coordinatorExecutor.execute(\n        new ThrowableCatchingRunnable(\n            throwable ->\n                this.coordinatorThreadFactory.uncaughtException(Thread.currentThread(), throwable),\n            runnable));","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/sink/shuffle/DataStatisticsCoordinator.java#L140-L176","documentation":"DataStatisticsCoordinator.callInCoordinatorThread runs a callable on the coordinator's single-threaded executor and waits for the result. When the callable that sends global data statistics for a checkpoint fails (the guardedFuture is completed exceptionally on the coordinator thread), the waiting thread wraps the failure in a FlinkRuntimeException with the formatted message 'Failed to send operator %s coordinator global data statistics for checkpoint %d'.","triggerScenarios":"An exception occurs on the coordinator executor while sending global data statistics for a checkpoint, and another thread is blocked in waitForCoordinatorToProcessActions waiting for that action to complete; the ExecutionException is rethrown as FlinkRuntimeException.","commonSituations":"Coordinator-side failures during checkpoint alignment such as serialization errors of the accumulated statistics, OOM on the JobManager, or a bug in the statistics aggregation running on the coordinator executor.","solutions":["Inspect the root cause in the exception chain (the cause of the FlinkRuntimeException) — the actual failure happened on the coordinator thread","Check JobManager memory and GC logs for OOM or long pauses during checkpoints","Reduce data statistics volume (larger checkpoint interval, fewer tracked keys) to lighten coordinator work","If the cause is a serialization/aggregation bug, upgrade Iceberg or report with the stack trace"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  coordinator.callInCoordinatorThread(callable, errorMessage, operatorName, checkpointId);\n} catch (FlinkRuntimeException e) {\n  LOG.error(\"Coordinator statistics send failed; cause: {}\", ExceptionUtils.stringifyException(ExceptionUtils.findThrowable(e, Throwable.class).orElse(e)));\n  throw e;\n}","preventionTips":["Monitor JobManager memory and checkpoint behavior","Keep data-statistics cardinality bounded (sort keys, partitions)","Always inspect the exception cause chain for the real coordinator-thread failure"],"tags":["flink","coordinator","checkpoint","data-statistics"],"backgroundTag":"api-error-response","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}