From 03b8cd9e9c670fbcb48b9903e1c2a0236e66b4d4 Mon Sep 17 00:00:00 2001 From: Shang Ma Date: Thu, 13 Feb 2025 19:50:18 -0800 Subject: [PATCH] Make event loop thread number configurable --- .../presto/execution/QueryManagerConfig.java | 2 +- .../remotetask/HttpRemoteTaskFactory.java | 19 ++++++++++--------- .../execution/TestQueryManagerConfig.java | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/presto-main/src/main/java/com/facebook/presto/execution/QueryManagerConfig.java b/presto-main/src/main/java/com/facebook/presto/execution/QueryManagerConfig.java index 1ce3742f48c2a..5d73177e47a3f 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/QueryManagerConfig.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/QueryManagerConfig.java @@ -70,7 +70,7 @@ public class QueryManagerConfig private int queryManagerExecutorPoolSize = 5; private Duration remoteTaskMaxErrorDuration = new Duration(5, TimeUnit.MINUTES); - private int remoteTaskMaxCallbackThreads = 1000; + private int remoteTaskMaxCallbackThreads = Runtime.getRuntime().availableProcessors(); private String queryExecutionPolicy = "all-at-once"; private Duration queryMaxRunTime = new Duration(100, TimeUnit.DAYS); diff --git a/presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTaskFactory.java b/presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTaskFactory.java index 0131ac2b04507..c665473be923d 100644 --- a/presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTaskFactory.java +++ b/presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTaskFactory.java @@ -95,15 +95,7 @@ public class HttpRemoteTaskFactory private final QueryManager queryManager; private final DecayCounter taskUpdateRequestSize; private final boolean taskUpdateSizeTrackingEnabled; - private final EventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(Runtime.getRuntime().availableProcessors(), - new ThreadFactoryBuilder().setNameFormat("task-event-loop-%s").setDaemon(true).build()) - { - @Override - protected EventLoop newChild(Executor executor, Object... args) - { - return new SafeEventLoop(this, executor); - } - }; + private final EventLoopGroup eventLoopGroup; @Inject public HttpRemoteTaskFactory( @@ -182,6 +174,15 @@ else if (binaryTransportEnabled) { this.taskUpdateRequestSize = new DecayCounter(ExponentialDecay.oneMinute()); this.taskUpdateSizeTrackingEnabled = taskConfig.isTaskUpdateSizeTrackingEnabled(); + this.eventLoopGroup = new DefaultEventLoopGroup(config.getRemoteTaskMaxCallbackThreads(), + new ThreadFactoryBuilder().setNameFormat("task-event-loop-%s").setDaemon(true).build()) + { + @Override + protected EventLoop newChild(Executor executor, Object... args) + { + return new SafeEventLoop(this, executor); + } + }; } @Managed diff --git a/presto-main/src/test/java/com/facebook/presto/execution/TestQueryManagerConfig.java b/presto-main/src/test/java/com/facebook/presto/execution/TestQueryManagerConfig.java index f4f92c137538a..e12ff24827996 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/TestQueryManagerConfig.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/TestQueryManagerConfig.java @@ -59,7 +59,7 @@ public void testDefaults() .setQueryManagerExecutorPoolSize(5) .setRemoteTaskMinErrorDuration(new Duration(5, TimeUnit.MINUTES)) .setRemoteTaskMaxErrorDuration(new Duration(5, TimeUnit.MINUTES)) - .setRemoteTaskMaxCallbackThreads(1000) + .setRemoteTaskMaxCallbackThreads(Runtime.getRuntime().availableProcessors()) .setQueryExecutionPolicy("all-at-once") .setQueryMaxRunTime(new Duration(100, TimeUnit.DAYS)) .setQueryMaxExecutionTime(new Duration(100, TimeUnit.DAYS))