4646import java .util .Optional ;
4747import java .util .Set ;
4848import java .util .concurrent .atomic .AtomicInteger ;
49+ import java .util .concurrent .atomic .AtomicReference ;
4950import java .util .function .Consumer ;
5051import java .util .stream .Collectors ;
5152
@@ -143,7 +144,17 @@ void gatherStatsForClosedJobs(GetJobsStatsAction.Request request, GetJobsStatsAc
143144 }
144145
145146 AtomicInteger counter = new AtomicInteger (closedJobIds .size ());
147+ AtomicReference <Exception > searchException = new AtomicReference <>();
146148 AtomicArray <GetJobsStatsAction .Response .JobStats > jobStats = new AtomicArray <>(closedJobIds .size ());
149+
150+ Consumer <Exception > errorHandler = e -> {
151+ // take the first error
152+ searchException .compareAndSet (null , e );
153+ if (counter .decrementAndGet () == 0 ) {
154+ listener .onFailure (e );
155+ }
156+ };
157+
147158 PersistentTasksCustomMetadata tasks = clusterService .state ().getMetadata ().custom (PersistentTasksCustomMetadata .TYPE );
148159 for (int i = 0 ; i < closedJobIds .size (); i ++) {
149160 int slot = i ;
@@ -159,14 +170,19 @@ void gatherStatsForClosedJobs(GetJobsStatsAction.Request request, GetJobsStatsAc
159170 jobStats .set (slot , new JobStats (jobId , dataCounts , modelSizeStats , forecastStats , jobState ,
160171 null , assignmentExplanation , null , timingStats ));
161172 if (counter .decrementAndGet () == 0 ) {
173+ if (searchException .get () != null ) {
174+ // there was an error
175+ listener .onFailure (searchException .get ());
176+ return ;
177+ }
162178 List <JobStats > results = response .getResponse ().results ();
163179 results .addAll (jobStats .asList ());
164180 Collections .sort (results , Comparator .comparing (GetJobsStatsAction .Response .JobStats ::getJobId ));
165181 listener .onResponse (new GetJobsStatsAction .Response (response .getTaskFailures (), response .getNodeFailures (),
166182 new QueryPage <>(results , results .size (), Job .RESULTS_FIELD )));
167183 }
168- }, listener :: onFailure );
169- }, listener :: onFailure );
184+ }, errorHandler );
185+ }, errorHandler );
170186 }
171187 }
172188
0 commit comments