1414import org .elasticsearch .action .ActionListener ;
1515import org .elasticsearch .action .ActionType ;
1616import org .elasticsearch .action .support .ActionFilters ;
17+ import org .elasticsearch .action .support .IndicesOptions ;
1718import org .elasticsearch .action .support .master .AcknowledgedResponse ;
1819import org .elasticsearch .action .support .master .AcknowledgedTransportMasterNodeAction ;
1920import org .elasticsearch .cluster .ClusterState ;
2021import org .elasticsearch .cluster .block .ClusterBlockException ;
2122import org .elasticsearch .cluster .block .ClusterBlockLevel ;
2223import org .elasticsearch .cluster .metadata .IndexMetadata ;
2324import org .elasticsearch .cluster .metadata .IndexNameExpressionResolver ;
25+ import org .elasticsearch .cluster .metadata .MetadataDataStreamsService ;
2426import org .elasticsearch .cluster .metadata .MetadataUpdateSettingsService ;
2527import org .elasticsearch .cluster .metadata .ProjectMetadata ;
2628import org .elasticsearch .cluster .project .ProjectResolver ;
@@ -55,6 +57,7 @@ public class TransportUpdateSettingsAction extends AcknowledgedTransportMasterNo
5557 private final ProjectResolver projectResolver ;
5658 private final IndexNameExpressionResolver indexNameExpressionResolver ;
5759 private final SystemIndices systemIndices ;
60+ private final MetadataDataStreamsService metadataDataStreamsService ;
5861
5962 @ Inject
6063 public TransportUpdateSettingsAction (
@@ -65,7 +68,8 @@ public TransportUpdateSettingsAction(
6568 ActionFilters actionFilters ,
6669 ProjectResolver projectResolver ,
6770 IndexNameExpressionResolver indexNameExpressionResolver ,
68- SystemIndices systemIndices
71+ SystemIndices systemIndices ,
72+ MetadataDataStreamsService metadataDataStreamsService
6973 ) {
7074 super (
7175 TYPE .name (),
@@ -80,6 +84,7 @@ public TransportUpdateSettingsAction(
8084 this .projectResolver = projectResolver ;
8185 this .indexNameExpressionResolver = indexNameExpressionResolver ;
8286 this .systemIndices = systemIndices ;
87+ this .metadataDataStreamsService = metadataDataStreamsService ;
8388 }
8489
8590 @ Override
@@ -100,7 +105,7 @@ protected ClusterBlockException checkBlock(UpdateSettingsRequest request, Cluste
100105 .indicesBlockedException (
101106 projectMetadata .id (),
102107 ClusterBlockLevel .METADATA_WRITE ,
103- indexNameExpressionResolver .concreteIndexNames (projectMetadata , request )
108+ indexNameExpressionResolver .concreteIndexNames (projectMetadata , request ) // TODO does not work with data streams
104109 );
105110 }
106111
@@ -134,26 +139,41 @@ protected void masterOperation(
134139 listener .onFailure (new IllegalStateException (message ));
135140 return ;
136141 }
142+ List <String > dataStreamNames = indexNameExpressionResolver .dataStreamNames (state , IndicesOptions .DEFAULT , request .indices ());
143+ metadataDataStreamsService .updateSettings (projectResolver , request , dataStreamNames , requestSettings , new ActionListener <>() {
144+ @ Override
145+ public void onResponse (AcknowledgedResponse acknowledgedResponse ) {
146+ updateSettingsService .updateSettings (
147+ new UpdateSettingsClusterStateUpdateRequest (
148+ projectResolver .getProjectId (),
149+ request .masterNodeTimeout (),
150+ request .ackTimeout (),
151+ requestSettings ,
152+ request .isPreserveExisting ()
153+ ? UpdateSettingsClusterStateUpdateRequest .OnExisting .PRESERVE
154+ : UpdateSettingsClusterStateUpdateRequest .OnExisting .OVERWRITE ,
155+ request .reopen ()
156+ ? UpdateSettingsClusterStateUpdateRequest .OnStaticSetting .REOPEN_INDICES
157+ : UpdateSettingsClusterStateUpdateRequest .OnStaticSetting .REJECT ,
158+ concreteIndices
159+ ),
160+ listener .delegateResponse ((l , e ) -> {
161+ logger .debug (() -> "failed to update settings on indices [" + Arrays .toString (concreteIndices ) + "]" , e );
162+ if (dataStreamNames .isEmpty () == false && e instanceof IllegalArgumentException ) {
163+ l .onResponse (AcknowledgedResponse .TRUE ); // TODO provide info about failures within successful response
164+ } else {
165+ l .onFailure (e );
166+ }
167+ })
168+ );
169+ }
170+
171+ @ Override
172+ public void onFailure (Exception e ) {
173+ listener .onFailure (e );
174+ }
175+ });
137176
138- updateSettingsService .updateSettings (
139- new UpdateSettingsClusterStateUpdateRequest (
140- projectResolver .getProjectId (),
141- request .masterNodeTimeout (),
142- request .ackTimeout (),
143- requestSettings ,
144- request .isPreserveExisting ()
145- ? UpdateSettingsClusterStateUpdateRequest .OnExisting .PRESERVE
146- : UpdateSettingsClusterStateUpdateRequest .OnExisting .OVERWRITE ,
147- request .reopen ()
148- ? UpdateSettingsClusterStateUpdateRequest .OnStaticSetting .REOPEN_INDICES
149- : UpdateSettingsClusterStateUpdateRequest .OnStaticSetting .REJECT ,
150- concreteIndices
151- ),
152- listener .delegateResponse ((l , e ) -> {
153- logger .debug (() -> "failed to update settings on indices [" + Arrays .toString (concreteIndices ) + "]" , e );
154- l .onFailure (e );
155- })
156- );
157177 }
158178
159179 /**
0 commit comments