1414import org .elasticsearch .action .fieldcaps .FieldCapabilitiesFailure ;
1515import org .elasticsearch .action .search .ShardSearchFailure ;
1616import org .elasticsearch .action .support .SubscribableListener ;
17+ import org .elasticsearch .action .support .ThreadedActionListener ;
1718import org .elasticsearch .common .collect .Iterators ;
1819import org .elasticsearch .compute .data .Block ;
1920import org .elasticsearch .compute .data .BlockUtils ;
3435import org .elasticsearch .threadpool .ThreadPool ;
3536import org .elasticsearch .transport .RemoteClusterAware ;
3637import org .elasticsearch .transport .RemoteClusterService ;
37- import org .elasticsearch .transport .TcpTransport ;
3838import org .elasticsearch .xpack .esql .VerificationException ;
3939import org .elasticsearch .xpack .esql .action .EsqlExecutionInfo ;
4040import org .elasticsearch .xpack .esql .action .EsqlQueryRequest ;
7575import org .elasticsearch .xpack .esql .planner .premapper .PreMapper ;
7676import org .elasticsearch .xpack .esql .plugin .TransportActionServices ;
7777import org .elasticsearch .xpack .esql .telemetry .PlanTelemetry ;
78- import org .elasticsearch .xpack .ml .MachineLearning ;
7978
8079import java .util .ArrayList ;
8180import java .util .Collection ;
8281import java .util .HashMap ;
8382import java .util .List ;
8483import java .util .Map ;
8584import java .util .Set ;
85+ import java .util .concurrent .ExecutorService ;
8686import java .util .stream .Collectors ;
8787import java .util .stream .Stream ;
8888
@@ -114,13 +114,14 @@ public interface PlanRunner {
114114 private final LogicalPlanPreOptimizer logicalPlanPreOptimizer ;
115115 private final LogicalPlanOptimizer logicalPlanOptimizer ;
116116 private final PreMapper preMapper ;
117-
118117 private final Mapper mapper ;
119118 private final PhysicalPlanOptimizer physicalPlanOptimizer ;
119+
120120 private final PlanTelemetry planTelemetry ;
121121 private final IndicesExpressionGrouper indicesExpressionGrouper ;
122122 private final InferenceService inferenceService ;
123123 private final RemoteClusterService remoteClusterService ;
124+ private final ExecutorService optimizerExecutor ;
124125
125126 private boolean explainMode ;
126127 private String parsedPlanString ;
@@ -157,6 +158,7 @@ public EsqlSession(
157158 this .inferenceService = services .inferenceService ();
158159 this .preMapper = new PreMapper (services );
159160 this .remoteClusterService = services .transportService ().getRemoteClusterService ();
161+ this .optimizerExecutor = services .transportService ().getThreadPool ().executor (ThreadPool .Names .SEARCH );
160162 }
161163
162164 public String sessionId () {
@@ -180,7 +182,8 @@ public void execute(EsqlQueryRequest request, EsqlExecutionInfo executionInfo, P
180182 @ Override
181183 public void onResponse (LogicalPlan analyzedPlan ) {
182184 SubscribableListener .<LogicalPlan >newForked (l -> preOptimizedPlan (analyzedPlan , l ))
183- .<LogicalPlan >andThen ((l , p ) -> preMapper .preMapper (optimizedPlan (p ), l ))
185+ .andThenApply (p -> optimizedPlan (p ))
186+ .<LogicalPlan >andThen ((l , p ) -> preMapper .preMapper (p , new ThreadedActionListener <>(optimizerExecutor , l )))
184187 .<Result >andThen ((l , p ) -> executeOptimizedPlan (request , executionInfo , planRunner , p , l ))
185188 .addListener (listener );
186189 }
@@ -198,13 +201,7 @@ public void executeOptimizedPlan(
198201 LogicalPlan optimizedPlan ,
199202 ActionListener <Result > listener
200203 ) {
201- assert ThreadPool .assertCurrentThreadPool (
202- TcpTransport .TRANSPORT_WORKER_THREAD_NAME_PREFIX ,
203- ThreadPool .Names .SYSTEM_READ ,
204- ThreadPool .Names .SEARCH ,
205- ThreadPool .Names .SEARCH_COORDINATION ,
206- MachineLearning .NATIVE_INFERENCE_COMMS_THREAD_POOL_NAME
207- );
204+ assert ThreadPool .assertCurrentThreadPool (ThreadPool .Names .SEARCH );
208205 if (explainMode ) {// TODO: INLINESTATS come back to the explain mode branch and reevaluate
209206 PhysicalPlan physicalPlan = logicalPlanToPhysicalPlan (optimizedPlan , request );
210207 String physicalPlanString = physicalPlan .toString ();
@@ -760,7 +757,7 @@ public void preOptimizedPlan(LogicalPlan logicalPlan, ActionListener<LogicalPlan
760757 logicalPlanPreOptimizer .preOptimize (logicalPlan , listener );
761758 }
762759
763- public PhysicalPlan physicalPlan (LogicalPlan optimizedPlan ) {
760+ private PhysicalPlan physicalPlan (LogicalPlan optimizedPlan ) {
764761 if (optimizedPlan .optimized () == false ) {
765762 throw new IllegalStateException ("Expected optimized plan" );
766763 }
0 commit comments