From bb4089d0402fec0ab09dcadb6caeb0169141c9d5 Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Fri, 10 Apr 2026 01:11:13 +0000 Subject: [PATCH 1/2] Fix worker gone test failure in sandbox Signed-off-by: Craig Perkins --- .../be/datafusion/DataFusionJniBridgeTests.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DataFusionJniBridgeTests.java b/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DataFusionJniBridgeTests.java index 0e43d31264fdc..3befa199dc3cf 100644 --- a/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DataFusionJniBridgeTests.java +++ b/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DataFusionJniBridgeTests.java @@ -20,8 +20,13 @@ */ public class DataFusionJniBridgeTests extends OpenSearchTestCase { + // Note: initTokioRuntimeManager uses OnceLock and can only be initialized once per JVM. + // Do NOT call shutdownTokioRuntimeManager() here — it permanently kills the shared + // executor and other test classes (DatafusionSearchExecEngineTests, etc.) will fail + // with "Worker gone" if they run after this class. + public void testRuntimeLifecycle() { - // Init tokio runtime + // Init tokio runtime (no-op if already initialized by another test class) NativeBridge.initTokioRuntimeManager(2); // Create global runtime with small memory pool @@ -34,9 +39,8 @@ public void testRuntimeLifecycle() { ); assertTrue("Runtime pointer should be non-zero", runtimePtr != 0); - // Clean up + // Clean up the per-test runtime only NativeBridge.closeGlobalRuntime(runtimePtr); - NativeBridge.shutdownTokioRuntimeManager(); } public void testReaderLifecycle() throws Exception { @@ -53,10 +57,8 @@ public void testReaderLifecycle() throws Exception { long readerPtr = NativeBridge.createDatafusionReader(dataDir.toString(), new String[] { "test.parquet" }); assertTrue("Reader pointer should be non-zero", readerPtr != 0); - // Close reader + // Close reader and per-test runtime NativeBridge.closeDatafusionReader(readerPtr); - NativeBridge.closeGlobalRuntime(runtimePtr); - NativeBridge.shutdownTokioRuntimeManager(); } } From 64d145c3dc230c1d66f758a157118af3d2cb138b Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Fri, 17 Apr 2026 10:18:38 -0400 Subject: [PATCH 2/2] Fix flaky test Signed-off-by: Craig Perkins --- .../be/datafusion/DatafusionSearchExecEngineTests.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DatafusionSearchExecEngineTests.java b/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DatafusionSearchExecEngineTests.java index 1d7a45071ab0e..7b85058d42fe0 100644 --- a/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DatafusionSearchExecEngineTests.java +++ b/sandbox/plugins/analytics-backend-datafusion/src/test/java/org/opensearch/be/datafusion/DatafusionSearchExecEngineTests.java @@ -8,7 +8,6 @@ package org.opensearch.be.datafusion; -import org.apache.lucene.tests.util.LuceneTestCase.AwaitsFix; import org.opensearch.analytics.backend.EngineResultBatch; import org.opensearch.analytics.backend.EngineResultStream; import org.opensearch.be.datafusion.nativelib.NativeBridge; @@ -26,7 +25,6 @@ * DatafusionReader → DatafusionContext → DatafusionSearchExecEngine → EngineResultStream → EngineResultBatch. * Uses sqlToSubstrait to generate plan bytes, then exercises the real plugin classes. */ -@AwaitsFix(bugUrl = "https://github.com/opensearch-project/OpenSearch/issues/21195") public class DatafusionSearchExecEngineTests extends OpenSearchTestCase { private ReaderHandle readerHandle;