This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 7390d6acfc4 Ensure DruidMeta is closed properly. (#18431)
7390d6acfc4 is described below
commit 7390d6acfc45e2a9a8440bb8ee0c9361d60758d3
Author: Gian Merlino <[email protected]>
AuthorDate: Mon Aug 25 09:18:27 2025 -0700
Ensure DruidMeta is closed properly. (#18431)
* Ensure DruidMeta is closed properly.
DruidMeta owns an executor service, which spawns a thread that retains
a reference to it. This service must be shut down for the DruidMeta to
be garbage-collectable, which is important when DruidAvaticaTestDriver
is closed. Otherwise, any segments retained by the DruidMeta will stick
around.
This fix includes a `@LifecycleStop` so the same shutdown happens when
an actual server is shutting down. It seems like good hygiene.
* Add LifecycleModule.
---
.../org/apache/druid/sql/avatica/DruidMeta.java | 16 ++++++++++++++--
.../druid/quidem/DruidAvaticaTestDriver.java | 22 +---------------------
.../druid/sql/avatica/DruidAvaticaHandlerTest.java | 2 ++
3 files changed, 17 insertions(+), 23 deletions(-)
diff --git a/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java
b/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java
index efe367958fc..0410326687b 100644
--- a/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java
+++ b/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java
@@ -36,11 +36,12 @@ import org.apache.calcite.avatica.QueryState;
import org.apache.calcite.avatica.remote.AvaticaRuntimeException;
import org.apache.calcite.avatica.remote.Service.ErrorResponse;
import org.apache.calcite.avatica.remote.TypedValue;
-import org.apache.druid.guice.LazySingleton;
+import org.apache.druid.guice.ManageLifecycle;
import org.apache.druid.guice.annotations.NativeQuery;
import org.apache.druid.java.util.common.DateTimes;
import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.UOE;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.query.DefaultQueryConfig;
import org.apache.druid.query.QueryContexts;
@@ -70,9 +71,11 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
-@LazySingleton
+@ManageLifecycle
public class DruidMeta extends MetaImpl
{
+ private static final Logger log = new Logger(DruidMeta.class);
+
/**
* Logs any throwable and string format message with args at the error level.
*
@@ -189,6 +192,15 @@ public class DruidMeta extends MetaImpl
this.fetcherFactory = fetcherFactory;
}
+ @LifecycleStop
+ public void stop() throws InterruptedException
+ {
+ exec.shutdownNow();
+ if (!exec.awaitTermination(1, TimeUnit.MINUTES)) {
+ log.warn("Timed out waiting for executor to shut down.");
+ }
+ }
+
@Override
public void openConnection(final ConnectionHandle ch, final Map<String,
String> info)
{
diff --git
a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java
b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java
index 85a86863046..f832ec80655 100644
--- a/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java
+++ b/sql/src/test/java/org/apache/druid/quidem/DruidAvaticaTestDriver.java
@@ -27,7 +27,6 @@ import com.google.inject.name.Named;
import org.apache.calcite.avatica.server.AbstractAvaticaHandler;
import org.apache.druid.guice.LazySingleton;
import org.apache.druid.initialization.DruidModule;
-import org.apache.druid.java.util.common.FileUtils;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.io.Closer;
import org.apache.druid.server.DruidNode;
@@ -46,7 +45,6 @@ import org.apache.http.client.utils.URIBuilder;
import org.eclipse.jetty.server.Server;
import java.io.Closeable;
-import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.sql.Connection;
@@ -179,6 +177,7 @@ public class DruidAvaticaTestDriver implements Driver
{
druidMeta.closeAllConnections();
try {
+ druidMeta.stop();
server.stop();
}
catch (Exception e) {
@@ -223,25 +222,6 @@ public class DruidAvaticaTestDriver implements Driver
}
}
- protected File createTempFolder(String prefix)
- {
- File tempDir = FileUtils.createTempDir(prefix);
- Runtime.getRuntime().addShutdownHook(new Thread()
- {
- @Override
- public void run()
- {
- try {
- FileUtils.deleteDirectory(tempDir);
- }
- catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- });
- return tempDir;
- }
-
private void register()
{
try {
diff --git
a/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java
b/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java
index 0aa4193c89a..287f216d3aa 100644
---
a/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java
+++
b/sql/src/test/java/org/apache/druid/sql/avatica/DruidAvaticaHandlerTest.java
@@ -41,6 +41,7 @@ import org.apache.calcite.avatica.MissingResultsException;
import org.apache.calcite.avatica.NoSuchStatementException;
import org.apache.calcite.avatica.server.AbstractAvaticaHandler;
import org.apache.druid.guice.LazySingleton;
+import org.apache.druid.guice.LifecycleModule;
import org.apache.druid.guice.StartupInjectorBuilder;
import org.apache.druid.guice.security.PolicyModule;
import org.apache.druid.initialization.CoreInjectorBuilder;
@@ -269,6 +270,7 @@ public class DruidAvaticaHandlerTest extends CalciteTestBase
testRequestLogger = new TestRequestLogger();
injector = new CoreInjectorBuilder(new StartupInjectorBuilder().build())
+ .addModule(new LifecycleModule())
.addModule(
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]