You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Dennis-Mircea Ciupitu (Jira)" <ji...@apache.org> on 2026/10/19 14:03:00 UTC

[jira] [Created] (FLINK-41030) Close operator-owned executors and metric reporters on operator shutdown

Dennis-Mircea Ciupitu created FLINK-41030:
---------------------------------------------

             Summary: Close operator-owned executors and metric reporters on operator shutdown
                 Key: FLINK-41030
                 URL: https://issues.apache.org/jira/browse/FLINK-41030
             Project: Flink
          Issue Type: Improvement
          Components: Kubernetes Operator
            Reporter: Dennis-Mircea Ciupitu


h1. Problem

The operator only stops two components on shutdown: the JOSDK {{Operator}} (via {{installShutdownHook}}) and {{OperatorHealthService}} (via its own shutdown hook, registered only in {{run()}}). {{FlinkOperator.stop()}} calls just {{operator.stop()}}.

Everything else the operator creates is never closed:

* {{FlinkConfigManager}}: a non-daemon scheduler for config cache cleanup and the dynamic config watcher
* {{CanaryResourceManager}}: a non-daemon scheduled pool per controller
* {{FlinkResourceContextFactory}}: the {{Flink-RestClusterClient-IO}} pool
* The operator {{MetricRegistry}} and its reporters

h1. Impact

* On pod termination, the config watcher and canary checks keep firing while JOSDK drains in-flight reconciliations. In-flight REST calls on the IO pool are cut off instead of drained. Metric reporters are never closed, so push-based reporters can lose their last flush.
* {{FlinkOperator.stop()}} leaves non-daemon threads running, so an embedded or test operator does not release its resources. In tests, every {{FlinkConfigManager}} leaks a scheduler thread that keeps the manager and its config cache reachable for the rest of the surefire fork.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)