9
9
import org .elasticsearch .Version ;
10
10
import org .elasticsearch .action .ActionListener ;
11
11
import org .elasticsearch .action .support .ActionFilters ;
12
- import org .elasticsearch .cluster .ClusterState ;
13
12
import org .elasticsearch .cluster .metadata .IndexNameExpressionResolver ;
14
13
import org .elasticsearch .cluster .service .ClusterService ;
15
14
import org .elasticsearch .common .inject .Inject ;
@@ -42,15 +41,17 @@ public class TransportForecastJobAction extends TransportJobTaskAction<ForecastJ
42
41
private static final ByteSizeValue FORECAST_LOCAL_STORAGE_LIMIT = new ByteSizeValue (500 , ByteSizeUnit .MB );
43
42
44
43
private final JobResultsProvider jobResultsProvider ;
44
+ private final JobManager jobManager ;
45
45
@ Inject
46
46
public TransportForecastJobAction (Settings settings , TransportService transportService , ThreadPool threadPool ,
47
47
ClusterService clusterService , ActionFilters actionFilters ,
48
48
IndexNameExpressionResolver indexNameExpressionResolver , JobResultsProvider jobResultsProvider ,
49
- AutodetectProcessManager processManager ) {
49
+ JobManager jobManager , AutodetectProcessManager processManager ) {
50
50
super (settings , ForecastJobAction .NAME , threadPool , clusterService , transportService , actionFilters ,
51
51
indexNameExpressionResolver , ForecastJobAction .Request ::new , ForecastJobAction .Response ::new ,
52
52
ThreadPool .Names .SAME , processManager );
53
53
this .jobResultsProvider = jobResultsProvider ;
54
+ this .jobManager = jobManager ;
54
55
// ThreadPool.Names.SAME, because operations is executed by autodetect worker thread
55
56
}
56
57
@@ -64,57 +65,63 @@ protected ForecastJobAction.Response readTaskResponse(StreamInput in) throws IOE
64
65
@ Override
65
66
protected void taskOperation (ForecastJobAction .Request request , TransportOpenJobAction .JobTask task ,
66
67
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 );
70
71
71
- ForecastParams .Builder paramsBuilder = ForecastParams .builder ();
72
+ ForecastParams .Builder paramsBuilder = ForecastParams .builder ();
72
73
73
- if (request .getDuration () != null ) {
74
- paramsBuilder .duration (request .getDuration ());
75
- }
74
+ if (request .getDuration () != null ) {
75
+ paramsBuilder .duration (request .getDuration ());
76
+ }
76
77
77
- if (request .getExpiresIn () != null ) {
78
- paramsBuilder .expiresIn (request .getExpiresIn ());
79
- }
78
+ if (request .getExpiresIn () != null ) {
79
+ paramsBuilder .expiresIn (request .getExpiresIn ());
80
+ }
80
81
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
+ }
87
88
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 );
101
93
} 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 );
106
95
}
107
- } else {
108
- listener .onResponse (new ForecastJobAction .Response (true , params .getForecastId ()));
109
- }
110
- };
96
+ });
97
+ },
98
+ listener ::onFailure
99
+ ));
100
+ }
111
101
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
+ }
114
119
} else {
115
- listener .onFailure ( e );
120
+ listener .onResponse ( new ForecastJobAction . Response ( true , forecastId ) );
116
121
}
117
- });
122
+ };
123
+
124
+ jobResultsProvider .getForecastRequestStats (jobId , forecastId , forecastRequestStatsHandler , listener ::onFailure );
118
125
}
119
126
120
127
static void validate (Job job , ForecastJobAction .Request request ) {
0 commit comments