1717import  org .elasticsearch .cluster .metadata .DataStream ;
1818import  org .elasticsearch .cluster .metadata .IndexAbstraction ;
1919import  org .elasticsearch .cluster .metadata .IndexMetadata ;
20- import  org .elasticsearch .cluster .metadata .Metadata ;
2120import  org .elasticsearch .cluster .metadata .MetadataDeleteIndexService ;
21+ import  org .elasticsearch .cluster .metadata .ProjectId ;
22+ import  org .elasticsearch .cluster .metadata .ProjectMetadata ;
2223import  org .elasticsearch .common .settings .Settings ;
2324import  org .elasticsearch .core .TimeValue ;
2425import  org .elasticsearch .index .IndexSettings ;
@@ -39,18 +40,21 @@ public class DeleteSourceAndAddDownsampleToDS implements ClusterStateTaskListene
3940    private  static  final  Logger  LOGGER  = LogManager .getLogger (DeleteSourceAndAddDownsampleToDS .class );
4041    private  final  Settings  settings ;
4142    private  ActionListener <Void > listener ;
43+     private  final  ProjectId  projectId ;
4244    private  final  String  dataStreamName ;
4345    private  final  String  sourceBackingIndex ;
4446    private  final  String  downsampleIndex ;
4547
4648    public  DeleteSourceAndAddDownsampleToDS (
4749        Settings  settings ,
50+         ProjectId  projectId ,
4851        String  dataStreamName ,
4952        String  sourceBackingIndex ,
5053        String  downsampleIndex ,
5154        ActionListener <Void > listener 
5255    ) {
5356        this .settings  = settings ;
57+         this .projectId  = projectId ;
5458        this .dataStreamName  = dataStreamName ;
5559        this .sourceBackingIndex  = sourceBackingIndex ;
5660        this .downsampleIndex  = downsampleIndex ;
@@ -64,7 +68,8 @@ ClusterState execute(ClusterState state) {
6468            downsampleIndex ,
6569            dataStreamName 
6670        );
67-         IndexMetadata  downsampleIndexMeta  = state .metadata ().getProject ().index (downsampleIndex );
71+         final  var  project  = state .metadata ().getProject (projectId );
72+         IndexMetadata  downsampleIndexMeta  = project .index (downsampleIndex );
6873        if  (downsampleIndexMeta  == null ) {
6974            // the downsample index doesn't exist anymore so nothing to replace here 
7075            LOGGER .trace (
@@ -77,9 +82,9 @@ ClusterState execute(ClusterState state) {
7782            );
7883            return  state ;
7984        }
80-         IndexAbstraction  sourceIndexAbstraction  = state . metadata (). getProject () .getIndicesLookup ().get (sourceBackingIndex );
85+         IndexAbstraction  sourceIndexAbstraction  = project .getIndicesLookup ().get (sourceBackingIndex );
8186        if  (sourceIndexAbstraction  == null ) {
82-             DataStream  dataStream  = state . metadata (). getProject () .dataStreams ().get (dataStreamName );
87+             DataStream  dataStream  = project .dataStreams ().get (dataStreamName );
8388            // index was deleted in the meantime, so let's check if we can make sure the downsample index ends up in the 
8489            // data stream (if not already there) 
8590            if  (dataStream  != null 
@@ -91,9 +96,9 @@ ClusterState execute(ClusterState state) {
9196                    downsampleIndex ,
9297                    dataStreamName 
9398                );
94-                 Metadata .Builder  newMetaData  = Metadata .builder (state . metadata () )
95-                     .put (dataStream .addBackingIndex (state . metadata (). getProject () , downsampleIndexMeta .getIndex ()));
96-                 return  ClusterState .builder (state ).metadata ( newMetaData ).build ();
99+                 ProjectMetadata .Builder  newProject  = ProjectMetadata .builder (project )
100+                     .put (dataStream .addBackingIndex (project , downsampleIndexMeta .getIndex ()));
101+                 return  ClusterState .builder (state ).putProjectMetadata ( newProject ).build ();
97102            }
98103        } else  {
99104            DataStream  sourceParentDataStream  = sourceIndexAbstraction .getParentDataStream ();
@@ -107,13 +112,13 @@ ClusterState execute(ClusterState state) {
107112                throw  new  IllegalStateException (errorMessage );
108113            }
109114
110-             IndexMetadata  sourceIndexMeta  = state . metadata (). getProject () .index (sourceBackingIndex );
115+             IndexMetadata  sourceIndexMeta  = project .index (sourceBackingIndex );
111116            assert  sourceIndexMeta  != null 
112117                : "the source index abstraction exists in the indices lookup, so the index metadata must " 
113118                    + "exist in the same cluster state metadata" ;
114119            // the source index exists so let's start by deleting it 
115-             state  = MetadataDeleteIndexService .deleteIndices (state , Set .of (sourceIndexMeta .getIndex ()), settings );
116-             DataStream  dataStream  = state .metadata ().getProject ().dataStreams ().get (dataStreamName );
120+             state  = MetadataDeleteIndexService .deleteIndices (state . projectState ( projectId ) , Set .of (sourceIndexMeta .getIndex ()), settings );
121+             DataStream  dataStream  = state .metadata ().getProject (projectId ).dataStreams ().get (dataStreamName );
117122            if  (sourceParentDataStream  != null ) {
118123                assert  sourceParentDataStream .getName ().equals (dataStreamName )
119124                    : "the backing index must be part of the provided data " 
@@ -142,13 +147,14 @@ ClusterState execute(ClusterState state) {
142147     * This method is private as it fits into the flow of this cluster state task - i.e. the source index has already been removed from 
143148     * the provided state. 
144149     */ 
145-     private  static   ClusterState  addDownsampleIndexToDataStream (
150+     private  ClusterState  addDownsampleIndexToDataStream (
146151        ClusterState  state ,
147152        DataStream  dataStream ,
148153        IndexMetadata  sourceIndexMeta ,
149154        IndexMetadata  downsampleIndexMeta 
150155    ) {
151-         Metadata .Builder  newMetaData  = Metadata .builder (state .getMetadata ());
156+         final  var  project  = state .metadata ().getProject (projectId );
157+         ProjectMetadata .Builder  newProject  = ProjectMetadata .builder (project );
152158        TimeValue  generationLifecycleDate  = dataStream .getGenerationLifecycleDate (sourceIndexMeta );
153159        // the generation lifecycle date is null only for the write index 
154160        // we fail already if attempting to delete/downsample the write index, so the following assertion just re-inforces that 
@@ -159,10 +165,10 @@ private static ClusterState addDownsampleIndexToDataStream(
159165            generationLifecycleDate .millis ()
160166        );
161167
162-         newMetaData .put (updatedDownsampleMetadata , true );
168+         newProject .put (updatedDownsampleMetadata , true );
163169        // we deleted the source already so let's add the downsample index to the data stream 
164-         newMetaData .put (dataStream .addBackingIndex (state . metadata (). getProject () , downsampleIndexMeta .getIndex ()));
165-         return  ClusterState .builder (state ).metadata ( newMetaData ).build ();
170+         newProject .put (dataStream .addBackingIndex (project , downsampleIndexMeta .getIndex ()));
171+         return  ClusterState .builder (state ).putProjectMetadata ( newProject ).build ();
166172    }
167173
168174    /** 
0 commit comments