2121import org .elasticsearch .cluster .block .ClusterBlockException ;
2222import org .elasticsearch .cluster .block .ClusterBlockLevel ;
2323import org .elasticsearch .cluster .metadata .DataStream ;
24- import org .elasticsearch .cluster .metadata .Metadata ;
24+ import org .elasticsearch .cluster .metadata .ProjectMetadata ;
25+ import org .elasticsearch .cluster .project .ProjectResolver ;
2526import org .elasticsearch .cluster .service .ClusterService ;
2627import org .elasticsearch .common .Priority ;
2728import org .elasticsearch .common .logging .HeaderWarning ;
@@ -41,14 +42,16 @@ public class TransportPromoteDataStreamAction extends AcknowledgedTransportMaste
4142 private static final Logger logger = LogManager .getLogger (TransportPromoteDataStreamAction .class );
4243
4344 private final SystemIndices systemIndices ;
45+ private final ProjectResolver projectResolver ;
4446
4547 @ Inject
4648 public TransportPromoteDataStreamAction (
4749 TransportService transportService ,
4850 ClusterService clusterService ,
4951 ThreadPool threadPool ,
5052 ActionFilters actionFilters ,
51- SystemIndices systemIndices
53+ SystemIndices systemIndices ,
54+ ProjectResolver projectResolver
5255 ) {
5356 super (
5457 PromoteDataStreamAction .NAME ,
@@ -60,6 +63,7 @@ public TransportPromoteDataStreamAction(
6063 EsExecutors .DIRECT_EXECUTOR_SERVICE
6164 );
6265 this .systemIndices = systemIndices ;
66+ this .projectResolver = projectResolver ;
6367 }
6468
6569 @ Override
@@ -70,6 +74,7 @@ protected void masterOperation(
7074 ActionListener <AcknowledgedResponse > listener
7175 ) throws Exception {
7276 systemIndices .validateDataStreamAccess (request .getName (), threadPool .getThreadContext ());
77+ final var projectId = projectResolver .getProjectId ();
7378 submitUnbatchedTask (
7479 "promote-data-stream [" + request .getName () + "]" ,
7580 new ClusterStateUpdateTask (Priority .HIGH , request .masterNodeTimeout ()) {
@@ -81,7 +86,9 @@ public void onFailure(Exception e) {
8186
8287 @ Override
8388 public ClusterState execute (ClusterState currentState ) {
84- return promoteDataStream (currentState , request );
89+ final var currentProject = currentState .metadata ().getProject (projectId );
90+ final var updatedProject = promoteDataStream (currentProject , request );
91+ return ClusterState .builder (currentState ).putProjectMetadata (updatedProject ).build ();
8592 }
8693
8794 @ Override
@@ -97,27 +104,23 @@ private void submitUnbatchedTask(@SuppressWarnings("SameParameterValue") String
97104 clusterService .submitUnbatchedStateUpdateTask (source , task );
98105 }
99106
100- static ClusterState promoteDataStream (ClusterState currentState , PromoteDataStreamAction .Request request ) {
101- DataStream dataStream = currentState . getMetadata (). getProject () .dataStreams ().get (request .getName ());
107+ static ProjectMetadata promoteDataStream (ProjectMetadata project , PromoteDataStreamAction .Request request ) {
108+ DataStream dataStream = project .dataStreams ().get (request .getName ());
102109
103110 if (dataStream == null ) {
104111 throw new ResourceNotFoundException ("data stream [" + request .getName () + "] does not exist" );
105112 }
106113
107- warnIfTemplateMissingForDatastream (dataStream , currentState );
114+ warnIfTemplateMissingForDatastream (dataStream , project );
108115
109116 DataStream promotedDataStream = dataStream .promoteDataStream ();
110- Metadata .Builder metadata = Metadata .builder (currentState .metadata ());
111- metadata .put (promotedDataStream );
112- return ClusterState .builder (currentState ).metadata (metadata ).build ();
117+ return ProjectMetadata .builder (project ).put (promotedDataStream ).build ();
113118 }
114119
115- private static void warnIfTemplateMissingForDatastream (DataStream dataStream , ClusterState currentState ) {
120+ private static void warnIfTemplateMissingForDatastream (DataStream dataStream , ProjectMetadata project ) {
116121 var datastreamName = dataStream .getName ();
117122
118- var matchingIndex = currentState .metadata ()
119- .getProject ()
120- .templatesV2 ()
123+ var matchingIndex = project .templatesV2 ()
121124 .values ()
122125 .stream ()
123126 .filter (cit -> cit .getDataStreamTemplate () != null )
0 commit comments