19
19
import org .elasticsearch .common .settings .Settings ;
20
20
import org .elasticsearch .common .unit .TimeValue ;
21
21
import org .elasticsearch .common .util .concurrent .AtomicArray ;
22
+ import org .elasticsearch .persistent .PersistentTasksCustomMetaData ;
22
23
import org .elasticsearch .tasks .Task ;
23
24
import org .elasticsearch .threadpool .ThreadPool ;
24
25
import org .elasticsearch .transport .TransportService ;
25
- import org .elasticsearch .xpack .core .ml .MlMetadata ;
26
26
import org .elasticsearch .xpack .core .ml .MlTasks ;
27
27
import org .elasticsearch .xpack .core .ml .action .GetJobsStatsAction ;
28
28
import org .elasticsearch .xpack .core .ml .action .util .QueryPage ;
31
31
import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .DataCounts ;
32
32
import org .elasticsearch .xpack .core .ml .job .process .autodetect .state .ModelSizeStats ;
33
33
import org .elasticsearch .xpack .core .ml .stats .ForecastStats ;
34
- import org .elasticsearch .persistent . PersistentTasksCustomMetaData ;
34
+ import org .elasticsearch .xpack . ml . job . persistence . JobConfigProvider ;
35
35
import org .elasticsearch .xpack .ml .job .persistence .JobResultsProvider ;
36
36
import org .elasticsearch .xpack .ml .job .process .autodetect .AutodetectProcessManager ;
37
37
@@ -53,27 +53,35 @@ public class TransportGetJobsStatsAction extends TransportTasksAction<TransportO
53
53
private final ClusterService clusterService ;
54
54
private final AutodetectProcessManager processManager ;
55
55
private final JobResultsProvider jobResultsProvider ;
56
+ private final JobConfigProvider jobConfigProvider ;
56
57
57
58
@ Inject
58
59
public TransportGetJobsStatsAction (Settings settings , TransportService transportService ,
59
60
ActionFilters actionFilters , ClusterService clusterService ,
60
- AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ) {
61
+ AutodetectProcessManager processManager , JobResultsProvider jobResultsProvider ,
62
+ JobConfigProvider jobConfigProvider ) {
61
63
super (settings , GetJobsStatsAction .NAME , clusterService , transportService , actionFilters ,
62
- GetJobsStatsAction .Request ::new , GetJobsStatsAction .Response ::new ,
63
- ThreadPool .Names .MANAGEMENT );
64
+ GetJobsStatsAction .Request ::new , GetJobsStatsAction .Response ::new , ThreadPool .Names .MANAGEMENT );
64
65
this .clusterService = clusterService ;
65
66
this .processManager = processManager ;
66
67
this .jobResultsProvider = jobResultsProvider ;
68
+ this .jobConfigProvider = jobConfigProvider ;
67
69
}
68
70
69
71
@ Override
70
- protected void doExecute (Task task , GetJobsStatsAction .Request request , ActionListener <GetJobsStatsAction .Response > listener ) {
71
- MlMetadata mlMetadata = MlMetadata .getMlMetadata (clusterService .state ());
72
- request .setExpandedJobsIds (new ArrayList <>(mlMetadata .expandJobIds (request .getJobId (), request .allowNoJobs ())));
73
- ActionListener <GetJobsStatsAction .Response > finalListener = listener ;
74
- listener = ActionListener .wrap (response -> gatherStatsForClosedJobs (mlMetadata ,
75
- request , response , finalListener ), listener ::onFailure );
76
- super .doExecute (task , request , listener );
72
+ protected void doExecute (Task task , GetJobsStatsAction .Request request , ActionListener <GetJobsStatsAction .Response > finalListener ) {
73
+
74
+ jobConfigProvider .expandJobsIds (request .getJobId (), request .allowNoJobs (), true , ActionListener .wrap (
75
+ expandedIds -> {
76
+ request .setExpandedJobsIds (new ArrayList <>(expandedIds ));
77
+ ActionListener <GetJobsStatsAction .Response > jobStatsListener = ActionListener .wrap (
78
+ response -> gatherStatsForClosedJobs (request , response , finalListener ),
79
+ finalListener ::onFailure
80
+ );
81
+ super .doExecute (task , request , jobStatsListener );
82
+ },
83
+ finalListener ::onFailure
84
+ ));
77
85
}
78
86
79
87
@ Override
@@ -121,21 +129,20 @@ protected void taskOperation(GetJobsStatsAction.Request request, TransportOpenJo
121
129
122
130
// Up until now we gathered the stats for jobs that were open,
123
131
// This method will fetch the stats for missing jobs, that was stored in the jobs index
124
- void gatherStatsForClosedJobs (MlMetadata mlMetadata , GetJobsStatsAction .Request request , GetJobsStatsAction .Response response ,
132
+ void gatherStatsForClosedJobs (GetJobsStatsAction .Request request , GetJobsStatsAction .Response response ,
125
133
ActionListener <GetJobsStatsAction .Response > listener ) {
126
- List <String > jobIds = determineNonDeletedJobIdsWithoutLiveStats (mlMetadata ,
127
- request .getExpandedJobsIds (), response .getResponse ().results ());
128
- if (jobIds .isEmpty ()) {
134
+ List <String > closedJobIds = determineJobIdsWithoutLiveStats (request .getExpandedJobsIds (), response .getResponse ().results ());
135
+ if (closedJobIds .isEmpty ()) {
129
136
listener .onResponse (response );
130
137
return ;
131
138
}
132
139
133
- AtomicInteger counter = new AtomicInteger (jobIds .size ());
134
- AtomicArray <GetJobsStatsAction .Response .JobStats > jobStats = new AtomicArray <>(jobIds .size ());
140
+ AtomicInteger counter = new AtomicInteger (closedJobIds .size ());
141
+ AtomicArray <GetJobsStatsAction .Response .JobStats > jobStats = new AtomicArray <>(closedJobIds .size ());
135
142
PersistentTasksCustomMetaData tasks = clusterService .state ().getMetaData ().custom (PersistentTasksCustomMetaData .TYPE );
136
- for (int i = 0 ; i < jobIds .size (); i ++) {
143
+ for (int i = 0 ; i < closedJobIds .size (); i ++) {
137
144
int slot = i ;
138
- String jobId = jobIds .get (i );
145
+ String jobId = closedJobIds .get (i );
139
146
gatherForecastStats (jobId , forecastStats -> {
140
147
gatherDataCountsAndModelSizeStats (jobId , (dataCounts , modelSizeStats ) -> {
141
148
JobState jobState = MlTasks .getJobState (jobId , tasks );
@@ -178,11 +185,9 @@ static TimeValue durationToTimeValue(Optional<Duration> duration) {
178
185
}
179
186
}
180
187
181
- static List <String > determineNonDeletedJobIdsWithoutLiveStats (MlMetadata mlMetadata ,
182
- List <String > requestedJobIds ,
183
- List <GetJobsStatsAction .Response .JobStats > stats ) {
188
+ static List <String > determineJobIdsWithoutLiveStats (List <String > requestedJobIds ,
189
+ List <GetJobsStatsAction .Response .JobStats > stats ) {
184
190
Set <String > excludeJobIds = stats .stream ().map (GetJobsStatsAction .Response .JobStats ::getJobId ).collect (Collectors .toSet ());
185
- return requestedJobIds .stream ().filter (jobId -> !excludeJobIds .contains (jobId ) &&
186
- !mlMetadata .isJobDeleting (jobId )).collect (Collectors .toList ());
191
+ return requestedJobIds .stream ().filter (jobId -> !excludeJobIds .contains (jobId )).collect (Collectors .toList ());
187
192
}
188
193
}
0 commit comments