99import org .elasticsearch .Version ;
1010import org .elasticsearch .action .ActionListener ;
1111import org .elasticsearch .action .support .ActionFilters ;
12- import org .elasticsearch .cluster .ClusterState ;
1312import org .elasticsearch .cluster .metadata .IndexNameExpressionResolver ;
1413import org .elasticsearch .cluster .service .ClusterService ;
1514import org .elasticsearch .common .inject .Inject ;
@@ -42,15 +41,17 @@ public class TransportForecastJobAction extends TransportJobTaskAction<ForecastJ
4241 private static final ByteSizeValue FORECAST_LOCAL_STORAGE_LIMIT = new ByteSizeValue (500 , ByteSizeUnit .MB );
4342
4443 private final JobResultsProvider jobResultsProvider ;
44+ private final JobManager jobManager ;
4545 @ Inject
4646 public TransportForecastJobAction (Settings settings , TransportService transportService , ThreadPool threadPool ,
4747 ClusterService clusterService , ActionFilters actionFilters ,
4848 IndexNameExpressionResolver indexNameExpressionResolver , JobResultsProvider jobResultsProvider ,
49- AutodetectProcessManager processManager ) {
49+ JobManager jobManager , AutodetectProcessManager processManager ) {
5050 super (settings , ForecastJobAction .NAME , threadPool , clusterService , transportService , actionFilters ,
5151 indexNameExpressionResolver , ForecastJobAction .Request ::new , ForecastJobAction .Response ::new ,
5252 ThreadPool .Names .SAME , processManager );
5353 this .jobResultsProvider = jobResultsProvider ;
54+ this .jobManager = jobManager ;
5455 // ThreadPool.Names.SAME, because operations is executed by autodetect worker thread
5556 }
5657
@@ -64,57 +65,63 @@ protected ForecastJobAction.Response readTaskResponse(StreamInput in) throws IOE
6465 @ Override
6566 protected void taskOperation (ForecastJobAction .Request request , TransportOpenJobAction .JobTask task ,
6667 ActionListener <ForecastJobAction .Response > listener ) {
67- ClusterState state = clusterService . state ();
68- Job job = JobManager . getJobOrThrowIfUnknown ( task . getJobId (), state );
69- validate (job , request );
68+ jobManager . getJob ( task . getJobId (), ActionListener . wrap (
69+ job -> {
70+ validate (job , request );
7071
71- ForecastParams .Builder paramsBuilder = ForecastParams .builder ();
72+ ForecastParams .Builder paramsBuilder = ForecastParams .builder ();
7273
73- if (request .getDuration () != null ) {
74- paramsBuilder .duration (request .getDuration ());
75- }
74+ if (request .getDuration () != null ) {
75+ paramsBuilder .duration (request .getDuration ());
76+ }
7677
77- if (request .getExpiresIn () != null ) {
78- paramsBuilder .expiresIn (request .getExpiresIn ());
79- }
78+ if (request .getExpiresIn () != null ) {
79+ paramsBuilder .expiresIn (request .getExpiresIn ());
80+ }
8081
81- // tmp storage might be null, we do not log here, because it might not be
82- // required
83- Path tmpStorage = processManager .tryGetTmpStorage (task , FORECAST_LOCAL_STORAGE_LIMIT );
84- if (tmpStorage != null ) {
85- paramsBuilder .tmpStorage (tmpStorage .toString ());
86- }
82+ // tmp storage might be null, we do not log here, because it might not be
83+ // required
84+ Path tmpStorage = processManager .tryGetTmpStorage (task , FORECAST_LOCAL_STORAGE_LIMIT );
85+ if (tmpStorage != null ) {
86+ paramsBuilder .tmpStorage (tmpStorage .toString ());
87+ }
8788
88- ForecastParams params = paramsBuilder .build ();
89- processManager .forecastJob (task , params , e -> {
90- if (e == null ) {
91- Consumer <ForecastRequestStats > forecastRequestStatsHandler = forecastRequestStats -> {
92- if (forecastRequestStats == null ) {
93- // paranoia case, it should not happen that we do not retrieve a result
94- listener .onFailure (new ElasticsearchException (
95- "Cannot run forecast: internal error, please check the logs" ));
96- } else if (forecastRequestStats .getStatus () == ForecastRequestStats .ForecastRequestStatus .FAILED ) {
97- List <String > messages = forecastRequestStats .getMessages ();
98- if (messages .size () > 0 ) {
99- listener .onFailure (ExceptionsHelper .badRequestException ("Cannot run forecast: "
100- + messages .get (0 )));
89+ ForecastParams params = paramsBuilder .build ();
90+ processManager .forecastJob (task , params , e -> {
91+ if (e == null ) {
92+ ; getForecastRequestStats (request .getJobId (), params .getForecastId (), listener );
10193 } else {
102- // paranoia case, it should not be possible to have an empty message list
103- listener .onFailure (
104- new ElasticsearchException (
105- "Cannot run forecast: internal error, please check the logs" ));
94+ listener .onFailure (e );
10695 }
107- } else {
108- listener .onResponse (new ForecastJobAction .Response (true , params .getForecastId ()));
109- }
110- };
96+ });
97+ },
98+ listener ::onFailure
99+ ));
100+ }
111101
112- jobResultsProvider .getForecastRequestStats (request .getJobId (), params .getForecastId (),
113- forecastRequestStatsHandler , listener ::onFailure );
102+ private void getForecastRequestStats (String jobId , String forecastId , ActionListener <ForecastJobAction .Response > listener ) {
103+ Consumer <ForecastRequestStats > forecastRequestStatsHandler = forecastRequestStats -> {
104+ if (forecastRequestStats == null ) {
105+ // paranoia case, it should not happen that we do not retrieve a result
106+ listener .onFailure (new ElasticsearchException (
107+ "Cannot run forecast: internal error, please check the logs" ));
108+ } else if (forecastRequestStats .getStatus () == ForecastRequestStats .ForecastRequestStatus .FAILED ) {
109+ List <String > messages = forecastRequestStats .getMessages ();
110+ if (messages .size () > 0 ) {
111+ listener .onFailure (ExceptionsHelper .badRequestException ("Cannot run forecast: "
112+ + messages .get (0 )));
113+ } else {
114+ // paranoia case, it should not be possible to have an empty message list
115+ listener .onFailure (
116+ new ElasticsearchException (
117+ "Cannot run forecast: internal error, please check the logs" ));
118+ }
114119 } else {
115- listener .onFailure ( e );
120+ listener .onResponse ( new ForecastJobAction . Response ( true , forecastId ) );
116121 }
117- });
122+ };
123+
124+ jobResultsProvider .getForecastRequestStats (jobId , forecastId , forecastRequestStatsHandler , listener ::onFailure );
118125 }
119126
120127 static void validate (Job job , ForecastJobAction .Request request ) {
0 commit comments