1111import org .elasticsearch .action .support .master .AcknowledgedResponse ;
1212import org .elasticsearch .action .support .master .TransportMasterNodeAction ;
1313import org .elasticsearch .client .Client ;
14- import org .elasticsearch .cluster .AckedClusterStateUpdateTask ;
1514import org .elasticsearch .cluster .ClusterState ;
1615import org .elasticsearch .cluster .block .ClusterBlockException ;
1716import org .elasticsearch .cluster .block .ClusterBlockLevel ;
1817import org .elasticsearch .cluster .metadata .IndexNameExpressionResolver ;
19- import org .elasticsearch .cluster .metadata .MetaData ;
2018import org .elasticsearch .cluster .service .ClusterService ;
2119import org .elasticsearch .common .inject .Inject ;
2220import org .elasticsearch .common .settings .Settings ;
2321import org .elasticsearch .persistent .PersistentTasksCustomMetaData ;
2422import org .elasticsearch .persistent .PersistentTasksService ;
23+ import org .elasticsearch .common .xcontent .NamedXContentRegistry ;
2524import org .elasticsearch .threadpool .ThreadPool ;
2625import org .elasticsearch .transport .TransportService ;
27- import org .elasticsearch .xpack .core .XPackPlugin ;
28- import org .elasticsearch .xpack .core .ml .MlMetadata ;
2926import org .elasticsearch .xpack .core .ml .MlTasks ;
3027import org .elasticsearch .xpack .core .ml .action .DeleteDatafeedAction ;
3128import org .elasticsearch .xpack .core .ml .action .IsolateDatafeedAction ;
29+ import org .elasticsearch .xpack .core .ml .datafeed .DatafeedState ;
30+ import org .elasticsearch .xpack .core .ml .job .messages .Messages ;
31+ import org .elasticsearch .xpack .core .ml .utils .ExceptionsHelper ;
32+ import org .elasticsearch .xpack .ml .datafeed .persistence .DatafeedConfigProvider ;
3233
3334import static org .elasticsearch .xpack .core .ClientHelper .ML_ORIGIN ;
3435import static org .elasticsearch .xpack .core .ClientHelper .executeAsyncWithOrigin ;
3536
3637public class TransportDeleteDatafeedAction extends TransportMasterNodeAction <DeleteDatafeedAction .Request , AcknowledgedResponse > {
3738
38- private Client client ;
39- private PersistentTasksService persistentTasksService ;
39+ private final Client client ;
40+ private final DatafeedConfigProvider datafeedConfigProvider ;
41+ private final ClusterService clusterService ;
42+ private final PersistentTasksService persistentTasksService ;
4043
4144 @ Inject
4245 public TransportDeleteDatafeedAction (Settings settings , TransportService transportService , ClusterService clusterService ,
4346 ThreadPool threadPool , ActionFilters actionFilters ,
4447 IndexNameExpressionResolver indexNameExpressionResolver ,
45- Client client , PersistentTasksService persistentTasksService ) {
48+ Client client , PersistentTasksService persistentTasksService ,
49+ NamedXContentRegistry xContentRegistry ) {
4650 super (settings , DeleteDatafeedAction .NAME , transportService , clusterService , threadPool , actionFilters ,
4751 indexNameExpressionResolver , DeleteDatafeedAction .Request ::new );
4852 this .client = client ;
53+ this .datafeedConfigProvider = new DatafeedConfigProvider (client , settings , xContentRegistry );
4954 this .persistentTasksService = persistentTasksService ;
55+ this .clusterService = clusterService ;
5056 }
5157
5258 @ Override
@@ -65,14 +71,14 @@ protected void masterOperation(DeleteDatafeedAction.Request request, ClusterStat
6571 if (request .isForce ()) {
6672 forceDeleteDatafeed (request , state , listener );
6773 } else {
68- deleteDatafeedFromMetadata (request , listener );
74+ deleteDatafeedConfig (request , listener );
6975 }
7076 }
7177
7278 private void forceDeleteDatafeed (DeleteDatafeedAction .Request request , ClusterState state ,
7379 ActionListener <AcknowledgedResponse > listener ) {
7480 ActionListener <Boolean > finalListener = ActionListener .wrap (
75- response -> deleteDatafeedFromMetadata (request , listener ),
81+ response -> deleteDatafeedConfig (request , listener ),
7682 listener ::onFailure
7783 );
7884
@@ -111,28 +117,19 @@ public void onFailure(Exception e) {
111117 }
112118 }
113119
114- private void deleteDatafeedFromMetadata (DeleteDatafeedAction .Request request , ActionListener <AcknowledgedResponse > listener ) {
115- clusterService .submitStateUpdateTask ("delete-datafeed-" + request .getDatafeedId (),
116- new AckedClusterStateUpdateTask <AcknowledgedResponse >(request , listener ) {
117-
118- @ Override
119- protected AcknowledgedResponse newResponse (boolean acknowledged ) {
120- return new AcknowledgedResponse (acknowledged );
121- }
122-
123- @ Override
124- public ClusterState execute (ClusterState currentState ) {
125- XPackPlugin .checkReadyForXPackCustomMetadata (currentState );
126- MlMetadata currentMetadata = MlMetadata .getMlMetadata (currentState );
127- PersistentTasksCustomMetaData persistentTasks =
128- currentState .getMetaData ().custom (PersistentTasksCustomMetaData .TYPE );
129- MlMetadata newMetadata = new MlMetadata .Builder (currentMetadata )
130- .removeDatafeed (request .getDatafeedId (), persistentTasks ).build ();
131- return ClusterState .builder (currentState ).metaData (
132- MetaData .builder (currentState .getMetaData ()).putCustom (MlMetadata .TYPE , newMetadata ).build ())
133- .build ();
134- }
135- });
120+ private void deleteDatafeedConfig (DeleteDatafeedAction .Request request , ActionListener <AcknowledgedResponse > listener ) {
121+ // Check datafeed is stopped
122+ PersistentTasksCustomMetaData tasks = clusterService .state ().getMetaData ().custom (PersistentTasksCustomMetaData .TYPE );
123+ if (MlTasks .getDatafeedTask (request .getDatafeedId (), tasks ) != null ) {
124+ listener .onFailure (ExceptionsHelper .conflictStatusException (
125+ Messages .getMessage (Messages .DATAFEED_CANNOT_DELETE_IN_CURRENT_STATE , request .getDatafeedId (), DatafeedState .STARTED )));
126+ return ;
127+ }
128+
129+ datafeedConfigProvider .deleteDatafeedConfig (request .getDatafeedId (), ActionListener .wrap (
130+ deleteResponse -> listener .onResponse (new AcknowledgedResponse (true )),
131+ listener ::onFailure
132+ ));
136133 }
137134
138135 @ Override
0 commit comments