4646import  org .elasticsearch .common .xcontent .XContentHelper ;
4747import  org .elasticsearch .core .TimeValue ;
4848import  org .elasticsearch .core .Tuple ;
49+ import  org .elasticsearch .gateway .GatewayService ;
4950import  org .elasticsearch .index .engine .VersionConflictEngineException ;
5051import  org .elasticsearch .index .query .QueryBuilder ;
5152import  org .elasticsearch .index .query .QueryBuilders ;
@@ -627,8 +628,8 @@ public void storeModel(Model model, ActionListener<Boolean> listener, TimeValue
627628        storeModel (model , true , listener , timeout );
628629    }
629630
630-     private  void  storeModel (Model  model , boolean  addToClusterState , ActionListener <Boolean > listener , TimeValue  timeout ) {
631-         ActionListener <BulkResponse > bulkResponseActionListener  = getStoreIndexListener (model , addToClusterState , listener , timeout );
631+     private  void  storeModel (Model  model , boolean  updateClusterState , ActionListener <Boolean > listener , TimeValue  timeout ) {
632+         ActionListener <BulkResponse > bulkResponseActionListener  = getStoreIndexListener (model , updateClusterState , listener , timeout );
632633
633634        IndexRequest  configRequest  = createIndexRequest (
634635            Model .documentId (model .getConfigurations ().getInferenceEntityId ()),
@@ -653,7 +654,7 @@ private void storeModel(Model model, boolean addToClusterState, ActionListener<B
653654
654655    private  ActionListener <BulkResponse > getStoreIndexListener (
655656        Model  model ,
656-         boolean  addToClusterState ,
657+         boolean  updateClusterState ,
657658        ActionListener <Boolean > listener ,
658659        TimeValue  timeout 
659660    ) {
@@ -680,7 +681,7 @@ private ActionListener<BulkResponse> getStoreIndexListener(
680681            BulkItemResponse .Failure  failure  = getFirstBulkFailure (bulkItemResponses );
681682
682683            if  (failure  == null ) {
683-                 if  (addToClusterState ) {
684+                 if  (updateClusterState ) {
684685                    var  storeListener  = getStoreMetadataListener (inferenceEntityId , listener );
685686                    try  {
686687                        var  projectId  = clusterService .state ().projectState ().projectId ();
@@ -781,14 +782,19 @@ public synchronized void removeDefaultConfigs(Set<String> inferenceEntityIds, Ac
781782        }
782783
783784        defaultConfigIds .keySet ().removeAll (inferenceEntityIds );
784-         deleteModels (inferenceEntityIds , listener );
785+         // default models are not stored in the cluster state. 
786+         deleteModels (inferenceEntityIds , false , listener );
785787    }
786788
787789    public  void  deleteModel (String  inferenceEntityId , ActionListener <Boolean > listener ) {
788790        deleteModels (Set .of (inferenceEntityId ), listener );
789791    }
790792
791793    public  void  deleteModels (Set <String > inferenceEntityIds , ActionListener <Boolean > listener ) {
794+         deleteModels (inferenceEntityIds , true , listener );
795+     }
796+ 
797+     private  void  deleteModels (Set <String > inferenceEntityIds , boolean  updateClusterState , ActionListener <Boolean > listener ) {
792798        var  lockedInferenceIds  = new  HashSet <>(inferenceEntityIds );
793799        lockedInferenceIds .retainAll (preventDeletionLock );
794800
@@ -807,16 +813,25 @@ public void deleteModels(Set<String> inferenceEntityIds, ActionListener<Boolean>
807813        }
808814
809815        var  request  = createDeleteRequest (inferenceEntityIds );
810-         client .execute (DeleteByQueryAction .INSTANCE , request , getDeleteModelClusterStateListener (inferenceEntityIds , listener ));
816+         client .execute (
817+             DeleteByQueryAction .INSTANCE ,
818+             request ,
819+             getDeleteModelClusterStateListener (inferenceEntityIds , updateClusterState , listener )
820+         );
811821    }
812822
813823    private  ActionListener <BulkByScrollResponse > getDeleteModelClusterStateListener (
814824        Set <String > inferenceEntityIds ,
825+         boolean  updateClusterState ,
815826        ActionListener <Boolean > listener 
816827    ) {
817828        return  new  ActionListener <>() {
818829            @ Override 
819830            public  void  onResponse (BulkByScrollResponse  bulkByScrollResponse ) {
831+                 if  (updateClusterState  == false ) {
832+                     listener .onResponse (Boolean .TRUE );
833+                     return ;
834+                 }
820835                var  clusterStateListener  = new  ActionListener <AcknowledgedResponse >() {
821836                    @ Override 
822837                    public  void  onResponse (AcknowledgedResponse  acknowledgedResponse ) {
@@ -924,6 +939,11 @@ public void clusterChanged(ClusterChangedEvent event) {
924939            return ;
925940        }
926941
942+         // wait for the cluster state to be recovered 
943+         if  (event .state ().blocks ().hasGlobalBlock (GatewayService .STATE_NOT_RECOVERED_BLOCK )) {
944+             return ;
945+         }
946+ 
927947        if  (event .state ().metadata ().projects ().size () > 1 ) {
928948            // TODO: Add support to handle multi-projects 
929949            return ;
0 commit comments