77
88package org .elasticsearch .xpack .ilm .action ;
99
10- import org .elasticsearch .ResourceNotFoundException ;
1110import org .elasticsearch .action .ActionListener ;
1211import org .elasticsearch .action .support .ActionFilters ;
1312import org .elasticsearch .action .support .master .AcknowledgedResponse ;
1413import org .elasticsearch .action .support .master .TransportMasterNodeAction ;
15- import org .elasticsearch .cluster .AckedClusterStateUpdateTask ;
1614import org .elasticsearch .cluster .ClusterState ;
17- import org .elasticsearch .cluster .ClusterStateUpdateTask ;
1815import org .elasticsearch .cluster .block .ClusterBlockException ;
1916import org .elasticsearch .cluster .block .ClusterBlockLevel ;
20- import org .elasticsearch .cluster .metadata .ProjectId ;
21- import org .elasticsearch .cluster .metadata .ProjectMetadata ;
22- import org .elasticsearch .cluster .project .ProjectResolver ;
2317import org .elasticsearch .cluster .service .ClusterService ;
2418import org .elasticsearch .common .util .concurrent .EsExecutors ;
25- import org .elasticsearch .core .SuppressForbidden ;
2619import org .elasticsearch .injection .guice .Inject ;
2720import org .elasticsearch .tasks .Task ;
2821import org .elasticsearch .threadpool .ThreadPool ;
2922import org .elasticsearch .transport .TransportService ;
30- import org .elasticsearch .xpack .core .ilm .IndexLifecycleMetadata ;
31- import org .elasticsearch .xpack .core .ilm .LifecyclePolicyMetadata ;
3223import org .elasticsearch .xpack .core .ilm .action .DeleteLifecycleAction ;
3324import org .elasticsearch .xpack .core .ilm .action .DeleteLifecycleAction .Request ;
25+ import org .elasticsearch .xpack .ilm .LifecycleMetadataService ;
3426
35- import java .util .List ;
3627import java .util .Optional ;
3728import java .util .Set ;
38- import java .util .SortedMap ;
39- import java .util .TreeMap ;
40-
41- import static org .elasticsearch .xpack .core .ilm .LifecycleOperationMetadata .currentILMMode ;
4229
4330public class TransportDeleteLifecycleAction extends TransportMasterNodeAction <Request , AcknowledgedResponse > {
4431
45- private final ProjectResolver projectResolver ;
32+ private final LifecycleMetadataService lifecycleMetadataService ;
4633
4734 @ Inject
4835 public TransportDeleteLifecycleAction (
4936 TransportService transportService ,
5037 ClusterService clusterService ,
5138 ThreadPool threadPool ,
5239 ActionFilters actionFilters ,
53- ProjectResolver projectResolver
40+ LifecycleMetadataService lifecycleMetadataService
5441 ) {
5542 super (
5643 DeleteLifecycleAction .NAME ,
@@ -62,56 +49,12 @@ public TransportDeleteLifecycleAction(
6249 AcknowledgedResponse ::readFrom ,
6350 EsExecutors .DIRECT_EXECUTOR_SERVICE
6451 );
65- this .projectResolver = projectResolver ;
52+ this .lifecycleMetadataService = lifecycleMetadataService ;
6653 }
6754
6855 @ Override
6956 protected void masterOperation (Task task , Request request , ClusterState state , ActionListener <AcknowledgedResponse > listener ) {
70- final var projectId = projectResolver .getProjectId ();
71- submitUnbatchedTask ("delete-lifecycle-" + request .getPolicyName (), new DeleteLifecyclePolicyTask (projectId , request , listener ));
72- }
73-
74- public static class DeleteLifecyclePolicyTask extends AckedClusterStateUpdateTask {
75- private final ProjectId projectId ;
76- private final Request request ;
77-
78- public DeleteLifecyclePolicyTask (ProjectId projectId , Request request , ActionListener <AcknowledgedResponse > listener ) {
79- super (request , listener );
80- this .projectId = projectId ;
81- this .request = request ;
82- }
83-
84- @ Override
85- public ClusterState execute (ClusterState currentState ) {
86- String policyToDelete = request .getPolicyName ();
87- ProjectMetadata projectMetadata = currentState .metadata ().getProject (projectId );
88- List <String > indicesUsingPolicy = projectMetadata .indices ()
89- .values ()
90- .stream ()
91- .filter (idxMeta -> policyToDelete .equals (idxMeta .getLifecyclePolicyName ()))
92- .map (idxMeta -> idxMeta .getIndex ().getName ())
93- .toList ();
94- if (indicesUsingPolicy .isEmpty () == false ) {
95- throw new IllegalArgumentException (
96- "Cannot delete policy [" + request .getPolicyName () + "]. It is in use by one or more indices: " + indicesUsingPolicy
97- );
98- }
99- IndexLifecycleMetadata currentMetadata = projectMetadata .custom (IndexLifecycleMetadata .TYPE );
100- if (currentMetadata == null || currentMetadata .getPolicyMetadatas ().containsKey (request .getPolicyName ()) == false ) {
101- throw new ResourceNotFoundException ("Lifecycle policy not found: {}" , request .getPolicyName ());
102- }
103- SortedMap <String , LifecyclePolicyMetadata > newPolicies = new TreeMap <>(currentMetadata .getPolicyMetadatas ());
104- newPolicies .remove (request .getPolicyName ());
105- IndexLifecycleMetadata newMetadata = new IndexLifecycleMetadata (newPolicies , currentILMMode (projectMetadata ));
106- ProjectMetadata .Builder newProjectMetadata = ProjectMetadata .builder (projectMetadata )
107- .putCustom (IndexLifecycleMetadata .TYPE , newMetadata );
108- return ClusterState .builder (currentState ).putProjectMetadata (newProjectMetadata ).build ();
109- }
110- }
111-
112- @ SuppressForbidden (reason = "legacy usage of unbatched task" ) // TODO add support for batching here
113- private void submitUnbatchedTask (@ SuppressWarnings ("SameParameterValue" ) String source , ClusterStateUpdateTask task ) {
114- clusterService .submitUnbatchedStateUpdateTask (source , task );
57+ lifecycleMetadataService .deleteLifecycle (request , listener );
11558 }
11659
11760 @ Override
0 commit comments