-
Notifications
You must be signed in to change notification settings - Fork 155
Description
Describe the bug
When running the Issue363 series tests (e.g., Issue363SF1Test) with the number of iterations set to 5 (or any value greater than 1), the test fails at the second iteration with the error message "Shutdown in progress".
This occurs because the QueryTester.execute() method calls environment.shutdown() in the finally block after each execution, which triggers the JVM's shutdown hooks. When the test loop proceeds to the second iteration and attempts to create a new Environment, the component initialization code (AbstractComponent.init()) tries to register a new shutdown hook. However, since the JVM is already in the shutdown process, an IllegalStateException is thrown.
Expected behavior
The test should complete all configured iterations (e.g., 5 iterations) successfully to properly collect and calculate performance statistics. Multiple iterations should not be affected by the environment shutdown of the previous iteration, or the test should support reusing the same environment instance across multiple iterations.
Additional context
Error Flow:
First iteration → QueryTester.execute() → environment.shutdown()
Triggers JVM shutdown hooks → ClusterMetaStore.close()
Second iteration → new Environment → AbstractComponent.init()
Runtime.getRuntime().addShutdownHook() → Throws IllegalStateException: Shutdown in progress
Root Cause: This issue is specific to the test pattern where QueryTester.build().execute() is called in a loop within a single @Test method. This leads to repeated creation and destruction of the environment, conflicting with the one-time nature of JVM shutdown hooks.
Key Files:
- AbstractComponent.java: Line 74 (Attempts to add a shutdown hook on each initialization)
- QueryTester.java: Lines 155-157 (Forces environment shutdown after execution)
Recommended Fix: Modify QueryTester to support reusing an existing Environment via a withEnvironment() method, thereby avoiding repeated triggering of the JVM shutdown process in loops.