From 884443f4e1f3f07c5ac425464cc6010b45284fab Mon Sep 17 00:00:00 2001 From: Pooya Salehi Date: Tue, 17 Jun 2025 18:01:31 +0200 Subject: [PATCH 1/2] Integrate project global blocks into existing checks for cluster blocks (Part 2) --- .../TransportGetDataStreamSettingsAction.java | 2 +- .../action/TransportGetDataStreamsAction.java | 2 +- .../action/TransportMigrateToDataStreamAction.java | 2 +- .../action/TransportModifyDataStreamsAction.java | 2 +- .../TransportUpdateDataStreamSettingsAction.java | 2 +- ...TransportGetDataStreamLifecycleStatsAction.java | 2 +- .../TransportPutDataStreamLifecycleAction.java | 2 +- .../TransportGetDataStreamOptionsAction.java | 2 +- .../TransportPutDataStreamOptionsAction.java | 2 +- .../TransportGetStoredScriptAction.java | 9 +++++++-- .../TransportPutStoredScriptAction.java | 8 ++++++-- .../post/TransportSimulateIndexTemplateAction.java | 2 +- .../post/TransportSimulateTemplateAction.java | 2 +- .../put/TransportPutComponentTemplateAction.java | 2 +- .../TransportPutComposableIndexTemplateAction.java | 2 +- .../single/shard/TransportSingleShardAction.java | 4 ++++ .../action/TransportGetEnrichPolicyAction.java | 2 +- .../action/TransportPutEnrichPolicyAction.java | 2 +- .../TransportPutAnalyticsCollectionAction.java | 8 ++++++-- .../action/TransportPutInferenceModelAction.java | 8 ++++++-- .../TransportUpdateInferenceModelAction.java | 8 ++++++-- .../ml/action/TransportGetDatafeedsAction.java | 8 ++++++-- .../xpack/ml/action/TransportGetJobsAction.java | 8 ++++++-- .../TransportPutDataFrameAnalyticsAction.java | 8 ++++++-- .../ml/action/TransportPutDatafeedAction.java | 8 ++++++-- .../xpack/ml/action/TransportPutJobAction.java | 8 ++++++-- .../ml/action/TransportPutTrainedModelAction.java | 8 ++++++-- .../TransportPutTrainedModelAliasAction.java | 8 ++++++-- .../xpack/ml/action/TransportResetJobAction.java | 8 ++++++-- .../TransportStartDataFrameAnalyticsAction.java | 8 ++++++-- .../ml/action/TransportStartDatafeedAction.java | 8 ++++++-- ...TransportStartTrainedModelDeploymentAction.java | 8 ++++++-- .../ml/action/TransportUpdateDatafeedAction.java | 8 ++++++-- .../xpack/ml/action/TransportUpdateJobAction.java | 8 ++++++-- ...ransportUpdateTrainedModelDeploymentAction.java | 8 ++++++-- .../TransportPutTrainedModelActionTests.java | 4 +++- .../action/TransportPutTransformAction.java | 8 ++++++-- .../action/TransportResetTransformAction.java | 8 ++++++-- .../action/TransportStartTransformAction.java | 14 ++++++++++---- 39 files changed, 159 insertions(+), 62 deletions(-) diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamSettingsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamSettingsAction.java index 9dc272d137fa8..063295820877c 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamSettingsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamSettingsAction.java @@ -63,7 +63,7 @@ public TransportGetDataStreamSettingsAction( @Override protected ClusterBlockException checkBlock(GetDataStreamSettingsAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } @Override diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java index 021667f509965..4411f8f1ee4e6 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java @@ -410,6 +410,6 @@ static List getDataStreams(ProjectMetadata project, IndexNameExpress @Override protected ClusterBlockException checkBlock(GetDataStreamAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportMigrateToDataStreamAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportMigrateToDataStreamAction.java index 7090fbf595053..e3b952048a0f1 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportMigrateToDataStreamAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportMigrateToDataStreamAction.java @@ -77,6 +77,6 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(MigrateToDataStreamAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportModifyDataStreamsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportModifyDataStreamsAction.java index 1be4dce84284e..fce7ea833ae1e 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportModifyDataStreamsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportModifyDataStreamsAction.java @@ -67,7 +67,7 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(ModifyDataStreamsAction.Request request, ProjectState state) { - ClusterBlockException globalBlock = state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + ClusterBlockException globalBlock = state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); if (globalBlock != null) { return globalBlock; } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportUpdateDataStreamSettingsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportUpdateDataStreamSettingsAction.java index 9757fca2024ba..af9e848f11ffe 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportUpdateDataStreamSettingsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportUpdateDataStreamSettingsAction.java @@ -339,6 +339,6 @@ private void updateSettingsOnSingleIndex( @Override protected ClusterBlockException checkBlock(UpdateDataStreamSettingsAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsAction.java index c81666873920d..2311fef56087b 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsAction.java @@ -105,6 +105,6 @@ GetDataStreamLifecycleStatsAction.Response collectStats(ProjectMetadata project) @Override protected ClusterBlockException checkBlock(GetDataStreamLifecycleStatsAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportPutDataStreamLifecycleAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportPutDataStreamLifecycleAction.java index 0db8735bf7d20..6f1521199751d 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportPutDataStreamLifecycleAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/action/TransportPutDataStreamLifecycleAction.java @@ -94,6 +94,6 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(PutDataStreamLifecycleAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportGetDataStreamOptionsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportGetDataStreamOptionsAction.java index 3bb0907c5f43d..c57fdf66c9899 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportGetDataStreamOptionsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportGetDataStreamOptionsAction.java @@ -121,6 +121,6 @@ protected void localClusterStateOperation( @Override protected ClusterBlockException checkBlock(GetDataStreamOptionsAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportPutDataStreamOptionsAction.java b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportPutDataStreamOptionsAction.java index 7e79e634cfa5a..4794788b8d771 100644 --- a/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportPutDataStreamOptionsAction.java +++ b/modules/data-streams/src/main/java/org/elasticsearch/datastreams/options/action/TransportPutDataStreamOptionsAction.java @@ -93,6 +93,6 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(PutDataStreamOptionsAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java index c9c0886fabc9c..52cbfceaf00de 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportGetStoredScriptAction.java @@ -15,6 +15,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.injection.guice.Inject; @@ -25,12 +26,15 @@ public class TransportGetStoredScriptAction extends TransportMasterNodeReadAction { + private final ProjectResolver projectResolver; + @Inject public TransportGetStoredScriptAction( TransportService transportService, ClusterService clusterService, ThreadPool threadPool, - ActionFilters actionFilters + ActionFilters actionFilters, + ProjectResolver projectResolver ) { super( GetStoredScriptAction.NAME, @@ -42,6 +46,7 @@ public TransportGetStoredScriptAction( GetStoredScriptResponse::new, EsExecutors.DIRECT_EXECUTOR_SERVICE ); + this.projectResolver = projectResolver; } @Override @@ -56,7 +61,7 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(GetStoredScriptRequest request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java index 8976ed4b222a7..43e91e3c57d86 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/storedscripts/TransportPutStoredScriptAction.java @@ -17,6 +17,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.injection.guice.Inject; @@ -29,6 +30,7 @@ public class TransportPutStoredScriptAction extends AcknowledgedTransportMasterN public static final ActionType TYPE = new ActionType<>("cluster:admin/script/put"); private final ScriptService scriptService; + private final ProjectResolver projectResolver; @Inject public TransportPutStoredScriptAction( @@ -36,7 +38,8 @@ public TransportPutStoredScriptAction( ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters, - ScriptService scriptService + ScriptService scriptService, + ProjectResolver projectResolver ) { super( TYPE.name(), @@ -48,6 +51,7 @@ public TransportPutStoredScriptAction( EsExecutors.DIRECT_EXECUTOR_SERVICE ); this.scriptService = scriptService; + this.projectResolver = projectResolver; } @Override @@ -62,7 +66,7 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(PutStoredScriptRequest request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateAction.java index dc2af8809b7bc..ca0ce743799a1 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateIndexTemplateAction.java @@ -200,7 +200,7 @@ private static ProjectMetadata removeExistingAbstractions(ProjectMetadata projec @Override protected ClusterBlockException checkBlock(SimulateIndexTemplateRequest request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } /** diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateTemplateAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateTemplateAction.java index aa10bcdc04e9e..8fb0df63213ab 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateTemplateAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/post/TransportSimulateTemplateAction.java @@ -200,6 +200,6 @@ protected void localClusterStateOperation( @Override protected ClusterBlockException checkBlock(SimulateTemplateAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComponentTemplateAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComponentTemplateAction.java index 737923f982bc7..05d055dbf979c 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComponentTemplateAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComponentTemplateAction.java @@ -67,7 +67,7 @@ public TransportPutComponentTemplateAction( @Override protected ClusterBlockException checkBlock(PutComponentTemplateAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } public static ComponentTemplate normalizeComponentTemplate( diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComposableIndexTemplateAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComposableIndexTemplateAction.java index bcce6f5822f7e..a6fbd3db23e14 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComposableIndexTemplateAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/TransportPutComposableIndexTemplateAction.java @@ -75,7 +75,7 @@ public TransportPutComposableIndexTemplateAction( @Override protected ClusterBlockException checkBlock(Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java b/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java index 186be954b958a..a09c3d64622f2 100644 --- a/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java +++ b/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java @@ -31,6 +31,7 @@ import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.logging.LoggerMessageFormat; import org.elasticsearch.common.util.concurrent.EsExecutors; +import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.core.Nullable; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.tasks.Task; @@ -121,6 +122,9 @@ protected void asyncShardOperation(Request request, ShardId shardId, ActionListe protected abstract boolean resolveIndex(Request request); + @FixForMultiProject( + description = "Many actions extend TransportSingleShardAction, consider checking for project global blocks when applicable" + ) protected static ClusterBlockException checkGlobalBlock(ProjectState state) { return state.blocks().globalBlockedException(ClusterBlockLevel.READ); } diff --git a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportGetEnrichPolicyAction.java b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportGetEnrichPolicyAction.java index 99fb169f94524..45ecdd6eeea0e 100644 --- a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportGetEnrichPolicyAction.java +++ b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportGetEnrichPolicyAction.java @@ -91,6 +91,6 @@ protected void localClusterStateOperation( @Override protected ClusterBlockException checkBlock(GetEnrichPolicyAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportPutEnrichPolicyAction.java b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportPutEnrichPolicyAction.java index 6d62e4ec67f61..b24fdc79454ed 100644 --- a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportPutEnrichPolicyAction.java +++ b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/action/TransportPutEnrichPolicyAction.java @@ -124,6 +124,6 @@ private void putPolicy(ProjectId projectId, PutEnrichPolicyAction.Request reques @Override protected ClusterBlockException checkBlock(PutEnrichPolicyAction.Request request, ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/analytics/action/TransportPutAnalyticsCollectionAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/analytics/action/TransportPutAnalyticsCollectionAction.java index 1189fa188f3a8..d92d9936273b7 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/analytics/action/TransportPutAnalyticsCollectionAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/analytics/action/TransportPutAnalyticsCollectionAction.java @@ -13,6 +13,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.logging.DeprecationCategory; import org.elasticsearch.common.logging.DeprecationLogger; @@ -38,6 +39,7 @@ public class TransportPutAnalyticsCollectionAction extends TransportMasterNodeAc PutAnalyticsCollectionAction.Response> { private final AnalyticsCollectionService analyticsCollectionService; + private final ProjectResolver projectResolver; @Inject public TransportPutAnalyticsCollectionAction( @@ -46,7 +48,8 @@ public TransportPutAnalyticsCollectionAction( ThreadPool threadPool, ActionFilters actionFilters, AnalyticsCollectionService analyticsCollectionService, - FeatureService featureService + FeatureService featureService, + ProjectResolver projectResolver ) { super( PutAnalyticsCollectionAction.NAME, @@ -59,11 +62,12 @@ public TransportPutAnalyticsCollectionAction( EsExecutors.DIRECT_EXECUTOR_SERVICE ); this.analyticsCollectionService = analyticsCollectionService; + this.projectResolver = projectResolver; } @Override protected ClusterBlockException checkBlock(PutAnalyticsCollectionAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } @Override diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportPutInferenceModelAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportPutInferenceModelAction.java index bc9d87f43ada0..eb401354f8c14 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportPutInferenceModelAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportPutInferenceModelAction.java @@ -16,6 +16,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -65,6 +66,7 @@ public class TransportPutInferenceModelAction extends TransportMasterNodeAction< private final ModelRegistry modelRegistry; private final InferenceServiceRegistry serviceRegistry; private volatile boolean skipValidationAndStart; + private final ProjectResolver projectResolver; @Inject public TransportPutInferenceModelAction( @@ -75,7 +77,8 @@ public TransportPutInferenceModelAction( XPackLicenseState licenseState, ModelRegistry modelRegistry, InferenceServiceRegistry serviceRegistry, - Settings settings + Settings settings, + ProjectResolver projectResolver ) { super( PutInferenceModelAction.NAME, @@ -93,6 +96,7 @@ public TransportPutInferenceModelAction( this.skipValidationAndStart = InferencePlugin.SKIP_VALIDATE_AND_START.get(settings); clusterService.getClusterSettings() .addSettingsUpdateConsumer(InferencePlugin.SKIP_VALIDATE_AND_START, this::setSkipValidationAndStart); + this.projectResolver = projectResolver; } @Override @@ -251,7 +255,7 @@ private void setSkipValidationAndStart(boolean skipValidationAndStart) { @Override protected ClusterBlockException checkBlock(PutInferenceModelAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportUpdateInferenceModelAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportUpdateInferenceModelAction.java index 004739710b74b..48fefaa42fe13 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportUpdateInferenceModelAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportUpdateInferenceModelAction.java @@ -19,6 +19,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.Strings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -75,6 +76,7 @@ public class TransportUpdateInferenceModelAction extends TransportMasterNodeActi private final ModelRegistry modelRegistry; private final InferenceServiceRegistry serviceRegistry; private final Client client; + private final ProjectResolver projectResolver; @Inject public TransportUpdateInferenceModelAction( @@ -85,7 +87,8 @@ public TransportUpdateInferenceModelAction( XPackLicenseState licenseState, ModelRegistry modelRegistry, InferenceServiceRegistry serviceRegistry, - Client client + Client client, + ProjectResolver projectResolver ) { super( UpdateInferenceModelAction.NAME, @@ -101,6 +104,7 @@ public TransportUpdateInferenceModelAction( this.modelRegistry = modelRegistry; this.serviceRegistry = serviceRegistry; this.client = client; + this.projectResolver = projectResolver; } @Override @@ -345,7 +349,7 @@ private static XContentParser getParser(UpdateInferenceModelAction.Request reque @Override protected ClusterBlockException checkBlock(UpdateInferenceModelAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportGetDatafeedsAction.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportGetDatafeedsAction.java index 50d18c00d746c..9571095e4c10c 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportGetDatafeedsAction.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportGetDatafeedsAction.java @@ -14,6 +14,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.injection.guice.Inject; @@ -29,6 +30,7 @@ public class TransportGetDatafeedsAction extends TransportMasterNodeReadAction maxModelMemoryLimitSupplier; + private final ProjectResolver projectResolver; @Inject public TransportPutDataFrameAnalyticsAction( @@ -89,7 +91,8 @@ public TransportPutDataFrameAnalyticsAction( ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, DataFrameAnalyticsConfigProvider configProvider, - DataFrameAnalyticsAuditor auditor + DataFrameAnalyticsAuditor auditor, + ProjectResolver projectResolver ) { super( PutDataFrameAnalyticsAction.NAME, @@ -118,11 +121,12 @@ public TransportPutDataFrameAnalyticsAction( clusterService.getNodeName(), License.OperationMode.PLATINUM.description() ); + this.projectResolver = projectResolver; } @Override protected ClusterBlockException checkBlock(PutDataFrameAnalyticsAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } @Override diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportPutDatafeedAction.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportPutDatafeedAction.java index 2b74574d515d3..9c24ddd7183d2 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportPutDatafeedAction.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportPutDatafeedAction.java @@ -12,6 +12,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -33,6 +34,7 @@ public class TransportPutDatafeedAction extends TransportMasterNodeAction missingFields) { diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateDatafeedAction.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateDatafeedAction.java index 840772f2339b0..7f1a973fde793 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateDatafeedAction.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateDatafeedAction.java @@ -12,6 +12,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -29,6 +30,7 @@ public class TransportUpdateDatafeedAction extends TransportMasterNodeAction { private final JobManager jobManager; + private final ProjectResolver projectResolver; @Inject public TransportUpdateJobAction( @@ -32,7 +34,8 @@ public TransportUpdateJobAction( ClusterService clusterService, ThreadPool threadPool, ActionFilters actionFilters, - JobManager jobManager + JobManager jobManager, + ProjectResolver projectResolver ) { super( UpdateJobAction.NAME, @@ -45,6 +48,7 @@ public TransportUpdateJobAction( EsExecutors.DIRECT_EXECUTOR_SERVICE ); this.jobManager = jobManager; + this.projectResolver = projectResolver; } @Override @@ -59,6 +63,6 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(UpdateJobAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateTrainedModelDeploymentAction.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateTrainedModelDeploymentAction.java index 1bd93b63328a6..9862c82fcec6f 100644 --- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateTrainedModelDeploymentAction.java +++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/action/TransportUpdateTrainedModelDeploymentAction.java @@ -15,6 +15,7 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.injection.guice.Inject; @@ -39,6 +40,7 @@ public class TransportUpdateTrainedModelDeploymentAction extends TransportMaster private final TrainedModelAssignmentClusterService trainedModelAssignmentClusterService; private final InferenceAuditor auditor; + private final ProjectResolver projectResolver; @Inject public TransportUpdateTrainedModelDeploymentAction( @@ -47,7 +49,8 @@ public TransportUpdateTrainedModelDeploymentAction( ThreadPool threadPool, ActionFilters actionFilters, TrainedModelAssignmentClusterService trainedModelAssignmentClusterService, - InferenceAuditor auditor + InferenceAuditor auditor, + ProjectResolver projectResolver ) { super( UpdateTrainedModelDeploymentAction.NAME, @@ -61,6 +64,7 @@ public TransportUpdateTrainedModelDeploymentAction( ); this.trainedModelAssignmentClusterService = Objects.requireNonNull(trainedModelAssignmentClusterService); this.auditor = Objects.requireNonNull(auditor); + this.projectResolver = Objects.requireNonNull(projectResolver); } @Override @@ -95,6 +99,6 @@ protected void masterOperation( @Override protected ClusterBlockException checkBlock(UpdateTrainedModelDeploymentAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } } diff --git a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/action/TransportPutTrainedModelActionTests.java b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/action/TransportPutTrainedModelActionTests.java index d07e958ea2777..1e4442e2cd77a 100644 --- a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/action/TransportPutTrainedModelActionTests.java +++ b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/action/TransportPutTrainedModelActionTests.java @@ -16,6 +16,7 @@ import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.client.internal.Client; import org.elasticsearch.cluster.ClusterState; +import org.elasticsearch.cluster.project.TestProjectResolvers; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.XContentHelper; @@ -367,7 +368,8 @@ private TransportPutTrainedModelAction createTransportPutTrainedModelAction() { mockFilters, mockClient, null, - null + null, + TestProjectResolvers.DEFAULT_PROJECT_ONLY ); } diff --git a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportPutTransformAction.java b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportPutTransformAction.java index e878b6e300cf2..473049cb3775e 100644 --- a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportPutTransformAction.java +++ b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportPutTransformAction.java @@ -21,6 +21,7 @@ import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -65,6 +66,7 @@ public class TransportPutTransformAction extends AcknowledgedTransportMasterNode private final SecurityContext securityContext; private final TransformAuditor auditor; private final TransformConfigAutoMigration transformConfigAutoMigration; + private final ProjectResolver projectResolver; @Inject public TransportPutTransformAction( @@ -76,7 +78,8 @@ public TransportPutTransformAction( ClusterService clusterService, TransformServices transformServices, Client client, - TransformConfigAutoMigration transformConfigAutoMigration + TransformConfigAutoMigration transformConfigAutoMigration, + ProjectResolver projectResolver ) { super( PutTransformAction.NAME, @@ -96,6 +99,7 @@ public TransportPutTransformAction( : null; this.auditor = transformServices.auditor(); this.transformConfigAutoMigration = transformConfigAutoMigration; + this.projectResolver = projectResolver; } @Override @@ -183,7 +187,7 @@ protected void masterOperation(Task task, Request request, ClusterState clusterS @Override protected ClusterBlockException checkBlock(PutTransformAction.Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE); } private void putTransform(Request request, ActionListener listener) { diff --git a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportResetTransformAction.java b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportResetTransformAction.java index f5b907ca378ef..283b2a46e8de8 100644 --- a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportResetTransformAction.java +++ b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportResetTransformAction.java @@ -22,6 +22,7 @@ import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -63,6 +64,7 @@ public class TransportResetTransformAction extends AcknowledgedTransportMasterNo private final SecurityContext securityContext; private final Settings settings; private final Settings destIndexSettings; + private final ProjectResolver projectResolver; @Inject public TransportResetTransformAction( @@ -74,7 +76,8 @@ public TransportResetTransformAction( TransformServices transformServices, Client client, Settings settings, - TransformExtensionHolder transformExtensionHolder + TransformExtensionHolder transformExtensionHolder, + ProjectResolver projectResolver ) { super( ResetTransformAction.NAME, @@ -94,6 +97,7 @@ public TransportResetTransformAction( : null; this.settings = settings; this.destIndexSettings = transformExtensionHolder.getTransformExtension().getTransformDestinationIndexSettings(); + this.projectResolver = projectResolver; } @Override @@ -217,6 +221,6 @@ private void deleteDestinationIndexIfCreatedByTheTransform( @Override protected ClusterBlockException checkBlock(Request request, ClusterState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); + return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ); } } diff --git a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportStartTransformAction.java b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportStartTransformAction.java index 5979ea8940ac7..c4cdbf2f64984 100644 --- a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportStartTransformAction.java +++ b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/action/TransportStartTransformAction.java @@ -22,6 +22,7 @@ import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; +import org.elasticsearch.cluster.project.ProjectResolver; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.concurrent.EsExecutors; @@ -72,6 +73,7 @@ public class TransportStartTransformAction extends TransportMasterNodeAction onFailure) { From 3b4576dc0599e2cb765f7b4bc92eab3b97229315 Mon Sep 17 00:00:00 2001 From: Pooya Salehi Date: Wed, 18 Jun 2025 09:47:47 +0200 Subject: [PATCH 2/2] change TransportSingleShardAction --- .../support/single/shard/TransportSingleShardAction.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java b/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java index a09c3d64622f2..fd21c4b96f2d4 100644 --- a/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java +++ b/server/src/main/java/org/elasticsearch/action/support/single/shard/TransportSingleShardAction.java @@ -31,7 +31,6 @@ import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.logging.LoggerMessageFormat; import org.elasticsearch.common.util.concurrent.EsExecutors; -import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.core.Nullable; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.tasks.Task; @@ -122,11 +121,8 @@ protected void asyncShardOperation(Request request, ShardId shardId, ActionListe protected abstract boolean resolveIndex(Request request); - @FixForMultiProject( - description = "Many actions extend TransportSingleShardAction, consider checking for project global blocks when applicable" - ) protected static ClusterBlockException checkGlobalBlock(ProjectState state) { - return state.blocks().globalBlockedException(ClusterBlockLevel.READ); + return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.READ); } protected ClusterBlockException checkRequestBlock(ProjectState state, InternalRequest request) {