2828import org .elasticsearch .common .io .stream .StreamInput ;
2929import org .elasticsearch .common .io .stream .StreamOutput ;
3030import org .elasticsearch .common .lucene .uid .Versions ;
31- import org .elasticsearch .common .util .concurrent .EsExecutors ;
3231import org .elasticsearch .index .VersionType ;
3332import org .elasticsearch .index .engine .Engine ;
3433import org .elasticsearch .index .mapper .LuceneDocument ;
3938import org .elasticsearch .indices .IndicesService ;
4039import org .elasticsearch .injection .guice .Inject ;
4140import org .elasticsearch .tasks .Task ;
41+ import org .elasticsearch .threadpool .ThreadPool ;
4242import org .elasticsearch .transport .TransportService ;
4343import org .elasticsearch .xcontent .XContentType ;
4444
@@ -62,11 +62,12 @@ public class MetricsTransportAction extends HandledTransportAction<
6262 public MetricsTransportAction (
6363 TransportService transportService ,
6464 ActionFilters actionFilters ,
65+ ThreadPool threadPool ,
6566 ClusterService clusterService ,
6667 ProjectResolver projectResolver ,
6768 IndicesService indicesService
6869 ) {
69- super (NAME , transportService , actionFilters , MetricsRequest ::new , EsExecutors . DIRECT_EXECUTOR_SERVICE );
70+ super (NAME , transportService , actionFilters , MetricsRequest ::new , threadPool . executor ( ThreadPool . Names . WRITE ) );
7071 this .clusterService = clusterService ;
7172 this .projectResolver = projectResolver ;
7273 this .indicesService = indicesService ;
@@ -95,7 +96,9 @@ protected void doExecute(Task task, MetricsRequest request, ActionListener<Metri
9596 // We receive a batch so there will be multiple documents as a result of processing it.
9697 var documents = createLuceneDocuments (metricsServiceRequest );
9798
98- // TODO thread pool for writing
99+ // This loop is similar to TransportShardBulkAction, we fork the processing of the entire request
100+ // to ThreadPool.Names.WRITE but we perform all writes on the same thread.
101+ // We expect concurrency to come from a client submitting concurrent requests.
99102 for (var luceneDocument : documents ) {
100103 var id = UUIDs .randomBase64UUID ();
101104
0 commit comments