20
20
import org .elasticsearch .common .settings .Settings ;
21
21
import org .elasticsearch .common .unit .TimeValue ;
22
22
import org .elasticsearch .common .util .concurrent .AtomicArray ;
23
+ import org .elasticsearch .persistent .PersistentTasksCustomMetaData ;
23
24
import org .elasticsearch .tasks .Task ;
24
25
import org .elasticsearch .threadpool .ThreadPool ;
25
26
import org .elasticsearch .transport .TransportService ;
26
- import org .elasticsearch .xpack .core .ml .MlMetadata ;
27
27
import org .elasticsearch .xpack .core .ml .MlTasks ;
28
28
import org .elasticsearch .xpack .core .ml .action .GetJobsStatsAction ;
29
29
import org .elasticsearch .xpack .core .ml .action .util .QueryPage ;
32
32
import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .DataCounts ;
33
33
import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .ModelSizeStats ;
34
34
import org .elasticsearch .xpack .core .ml .stats .ForecastStats ;
35
- import org .elasticsearch .persistent . PersistentTasksCustomMetaData ;
35
+ import org .elasticsearch .xpack . ml . job . persistence . JobConfigProvider ;
36
36
import org .elasticsearch .xpack .ml .job .persistence .JobResultsProvider ;
37
37
import org .elasticsearch .xpack .ml .job .process .autodetect .AutodetectProcessManager ;
38
38
@@ -54,28 +54,37 @@ public class TransportGetJobsStatsAction extends TransportTasksAction<TransportO
54
54
private final ClusterService clusterService ;
55
55
private final AutodetectProcessManager processManager ;
56
56
private final JobResultsProvider jobResultsProvider ;
57
+ private final JobConfigProvider jobConfigProvider ;
57
58
58
59
@ Inject
59
60
public TransportGetJobsStatsAction (Settings settings , TransportService transportService , ThreadPool threadPool ,
60
61
ActionFilters actionFilters , ClusterService clusterService ,
61
62
IndexNameExpressionResolver indexNameExpressionResolver ,
62
- AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ) {
63
+ AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ,
64
+ JobConfigProvider jobConfigProvider ) {
63
65
super (settings , GetJobsStatsAction .NAME , threadPool , clusterService , transportService , actionFilters ,
64
66
indexNameExpressionResolver , GetJobsStatsAction .Request ::new , GetJobsStatsAction .Response ::new ,
65
67
ThreadPool .Names .MANAGEMENT );
66
68
this .clusterService = clusterService ;
67
69
this .processManager = processManager ;
68
70
this .jobResultsProvider = jobResultsProvider ;
71
+ this .jobConfigProvider = jobConfigProvider ;
69
72
}
70
73
71
74
@ 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
+ ));
79
88
}
80
89
81
90
@ Override
@@ -123,21 +132,20 @@ protected void taskOperation(GetJobsStatsAction.Request request, TransportOpenJo
123
132
124
133
// Up until now we gathered the stats for jobs that were open,
125
134
// 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 ,
127
136
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 ()) {
131
139
listener .onResponse (response );
132
140
return ;
133
141
}
134
142
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 ());
137
145
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 ++) {
139
147
int slot = i ;
140
- String jobId = jobIds .get (i );
148
+ String jobId = closedJobIds .get (i );
141
149
gatherForecastStats (jobId , forecastStats -> {
142
150
gatherDataCountsAndModelSizeStats (jobId , (dataCounts , modelSizeStats ) -> {
143
151
JobState jobState = MlTasks .getJobState (jobId , tasks );
@@ -180,11 +188,9 @@ static TimeValue durationToTimeValue(Optional<Duration> duration) {
180
188
}
181
189
}
182
190
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 ) {
186
193
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 ());
189
195
}
190
196
}
0 commit comments