2020import org .elasticsearch .common .settings .Settings ;
2121import org .elasticsearch .common .unit .TimeValue ;
2222import org .elasticsearch .common .util .concurrent .AtomicArray ;
23+ import org .elasticsearch .persistent .PersistentTasksCustomMetaData ;
2324import org .elasticsearch .tasks .Task ;
2425import org .elasticsearch .threadpool .ThreadPool ;
2526import org .elasticsearch .transport .TransportService ;
26- import org .elasticsearch .xpack .core .ml .MlMetadata ;
2727import org .elasticsearch .xpack .core .ml .MlTasks ;
2828import org .elasticsearch .xpack .core .ml .action .GetJobsStatsAction ;
2929import org .elasticsearch .xpack .core .ml .action .util .QueryPage ;
3232import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .DataCounts ;
3333import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .ModelSizeStats ;
3434import org .elasticsearch .xpack .core .ml .stats .ForecastStats ;
35- import org .elasticsearch .persistent . PersistentTasksCustomMetaData ;
35+ import org .elasticsearch .xpack . ml . job . persistence . JobConfigProvider ;
3636import org .elasticsearch .xpack .ml .job .persistence .JobResultsProvider ;
3737import org .elasticsearch .xpack .ml .job .process .autodetect .AutodetectProcessManager ;
3838
@@ -54,28 +54,37 @@ public class TransportGetJobsStatsAction extends TransportTasksAction<TransportO
5454 private final ClusterService clusterService ;
5555 private final AutodetectProcessManager processManager ;
5656 private final JobResultsProvider jobResultsProvider ;
57+ private final JobConfigProvider jobConfigProvider ;
5758
5859 @ Inject
5960 public TransportGetJobsStatsAction (Settings settings , TransportService transportService , ThreadPool threadPool ,
6061 ActionFilters actionFilters , ClusterService clusterService ,
6162 IndexNameExpressionResolver indexNameExpressionResolver ,
62- AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ) {
63+ AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ,
64+ JobConfigProvider jobConfigProvider ) {
6365 super (settings , GetJobsStatsAction .NAME , threadPool , clusterService , transportService , actionFilters ,
6466 indexNameExpressionResolver , GetJobsStatsAction .Request ::new , GetJobsStatsAction .Response ::new ,
6567 ThreadPool .Names .MANAGEMENT );
6668 this .clusterService = clusterService ;
6769 this .processManager = processManager ;
6870 this .jobResultsProvider = jobResultsProvider ;
71+ this .jobConfigProvider = jobConfigProvider ;
6972 }
7073
7174 @ Override
72- protected void doExecute (Task task , GetJobsStatsAction .Request request , ActionListener <GetJobsStatsAction .Response > listener ) {
73- MlMetadata mlMetadata = MlMetadata .getMlMetadata (clusterService .state ());
74- request .setExpandedJobsIds (new ArrayList <>(mlMetadata .expandJobIds (request .getJobId (), request .allowNoJobs ())));
75- ActionListener <GetJobsStatsAction .Response > finalListener = listener ;
76- listener = ActionListener .wrap (response -> gatherStatsForClosedJobs (mlMetadata ,
77- request , response , finalListener ), listener ::onFailure );
78- super .doExecute (task , request , listener );
75+ protected void doExecute (Task task , GetJobsStatsAction .Request request , ActionListener <GetJobsStatsAction .Response > finalListener ) {
76+
77+ jobConfigProvider .expandJobsIds (request .getJobId (), request .allowNoJobs (), true , ActionListener .wrap (
78+ expandedIds -> {
79+ request .setExpandedJobsIds (new ArrayList <>(expandedIds ));
80+ ActionListener <GetJobsStatsAction .Response > jobStatsListener = ActionListener .wrap (
81+ response -> gatherStatsForClosedJobs (request , response , finalListener ),
82+ finalListener ::onFailure
83+ );
84+ super .doExecute (task , request , jobStatsListener );
85+ },
86+ finalListener ::onFailure
87+ ));
7988 }
8089
8190 @ Override
@@ -123,21 +132,20 @@ protected void taskOperation(GetJobsStatsAction.Request request, TransportOpenJo
123132
124133 // Up until now we gathered the stats for jobs that were open,
125134 // This method will fetch the stats for missing jobs, that was stored in the jobs index
126- void gatherStatsForClosedJobs (MlMetadata mlMetadata , GetJobsStatsAction .Request request , GetJobsStatsAction .Response response ,
135+ void gatherStatsForClosedJobs (GetJobsStatsAction .Request request , GetJobsStatsAction .Response response ,
127136 ActionListener <GetJobsStatsAction .Response > listener ) {
128- List <String > jobIds = determineNonDeletedJobIdsWithoutLiveStats (mlMetadata ,
129- request .getExpandedJobsIds (), response .getResponse ().results ());
130- if (jobIds .isEmpty ()) {
137+ List <String > closedJobIds = determineJobIdsWithoutLiveStats (request .getExpandedJobsIds (), response .getResponse ().results ());
138+ if (closedJobIds .isEmpty ()) {
131139 listener .onResponse (response );
132140 return ;
133141 }
134142
135- AtomicInteger counter = new AtomicInteger (jobIds .size ());
136- AtomicArray <GetJobsStatsAction .Response .JobStats > jobStats = new AtomicArray <>(jobIds .size ());
143+ AtomicInteger counter = new AtomicInteger (closedJobIds .size ());
144+ AtomicArray <GetJobsStatsAction .Response .JobStats > jobStats = new AtomicArray <>(closedJobIds .size ());
137145 PersistentTasksCustomMetaData tasks = clusterService .state ().getMetaData ().custom (PersistentTasksCustomMetaData .TYPE );
138- for (int i = 0 ; i < jobIds .size (); i ++) {
146+ for (int i = 0 ; i < closedJobIds .size (); i ++) {
139147 int slot = i ;
140- String jobId = jobIds .get (i );
148+ String jobId = closedJobIds .get (i );
141149 gatherForecastStats (jobId , forecastStats -> {
142150 gatherDataCountsAndModelSizeStats (jobId , (dataCounts , modelSizeStats ) -> {
143151 JobState jobState = MlTasks .getJobState (jobId , tasks );
@@ -180,11 +188,9 @@ static TimeValue durationToTimeValue(Optional<Duration> duration) {
180188 }
181189 }
182190
183- static List <String > determineNonDeletedJobIdsWithoutLiveStats (MlMetadata mlMetadata ,
184- List <String > requestedJobIds ,
185- List <GetJobsStatsAction .Response .JobStats > stats ) {
191+ static List <String > determineJobIdsWithoutLiveStats (List <String > requestedJobIds ,
192+ List <GetJobsStatsAction .Response .JobStats > stats ) {
186193 Set <String > excludeJobIds = stats .stream ().map (GetJobsStatsAction .Response .JobStats ::getJobId ).collect (Collectors .toSet ());
187- return requestedJobIds .stream ().filter (jobId -> !excludeJobIds .contains (jobId ) &&
188- !mlMetadata .isJobDeleting (jobId )).collect (Collectors .toList ());
194+ return requestedJobIds .stream ().filter (jobId -> !excludeJobIds .contains (jobId )).collect (Collectors .toList ());
189195 }
190196}
0 commit comments