Details
-
Bug
-
Status: Open
-
Critical
-
Resolution: Unresolved
-
1.18.1
Description
MemoryExecutionGraphInfoStore registers a ShutdownHook upon construction and deregisters it within its close() method.
public MemoryExecutionGraphInfoStore(...) { ... this.shutdownHook = ShutdownHookUtil.addShutdownHook(this, getClass().getSimpleName(), LOG); } @Override public void close() throws IOException { ... // Remove shutdown hook to prevent resource leaks ShutdownHookUtil.removeShutdownHook(shutdownHook, getClass().getSimpleName(), LOG); }
Currently, MiniCluster instantiates a MemoryExecutionGraphInfoStore object but doesn't retain a reference to it, nor does it call close() during its own shutdown process.
final DispatcherResourceManagerComponent dispatcherResourceManagerComponent = dispatcherResourceManagerComponentFactory.create( ... new MemoryExecutionGraphInfoStore(), // -> new ...);
This behavior leads to an accumulation of ShutdownHooks when running multiple Flink jobs within the same local JVM. These accumulating hooks, along with their associated references, contribute to a memory leak.
This patch addresses the issue by ensuring that MemoryExecutionGraphInfoStore's close() method is invoked during MiniCluster shutdown.
Attachments
Issue Links
- links to