Integrate project global blocks into existing checks for cluster blocks (Part 2) (#129570)

Relates https://github.com/elastic/elasticsearch/pull/129467
Resolves ES-11209
This commit is contained in:
Pooya Salehi 2025-06-18 11:51:40 +02:00 committed by GitHub
parent f62fce9ae9
commit a229c8d932
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 156 additions and 63 deletions

View file

@ -63,7 +63,7 @@ public class TransportGetDataStreamSettingsAction extends TransportLocalProjectM
@Override @Override
protected ClusterBlockException checkBlock(GetDataStreamSettingsAction.Request request, ProjectState state) { 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 @Override

View file

@ -410,6 +410,6 @@ public class TransportGetDataStreamsAction extends TransportLocalProjectMetadata
@Override @Override
protected ClusterBlockException checkBlock(GetDataStreamAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(GetDataStreamAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -77,6 +77,6 @@ public class TransportMigrateToDataStreamAction extends AcknowledgedTransportMas
@Override @Override
protected ClusterBlockException checkBlock(MigrateToDataStreamAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(MigrateToDataStreamAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -67,7 +67,7 @@ public class TransportModifyDataStreamsAction extends AcknowledgedTransportMaste
@Override @Override
protected ClusterBlockException checkBlock(ModifyDataStreamsAction.Request request, ProjectState state) { 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) { if (globalBlock != null) {
return globalBlock; return globalBlock;
} }

View file

@ -339,6 +339,6 @@ public class TransportUpdateDataStreamSettingsAction extends TransportMasterNode
@Override @Override
protected ClusterBlockException checkBlock(UpdateDataStreamSettingsAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(UpdateDataStreamSettingsAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -105,6 +105,6 @@ public class TransportGetDataStreamLifecycleStatsAction extends TransportMasterN
@Override @Override
protected ClusterBlockException checkBlock(GetDataStreamLifecycleStatsAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(GetDataStreamLifecycleStatsAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -94,6 +94,6 @@ public class TransportPutDataStreamLifecycleAction extends AcknowledgedTransport
@Override @Override
protected ClusterBlockException checkBlock(PutDataStreamLifecycleAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(PutDataStreamLifecycleAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -121,6 +121,6 @@ public class TransportGetDataStreamOptionsAction extends TransportLocalProjectMe
@Override @Override
protected ClusterBlockException checkBlock(GetDataStreamOptionsAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(GetDataStreamOptionsAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -93,6 +93,6 @@ public class TransportPutDataStreamOptionsAction extends AcknowledgedTransportMa
@Override @Override
protected ClusterBlockException checkBlock(PutDataStreamOptionsAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(PutDataStreamOptionsAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -15,6 +15,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -25,12 +26,15 @@ import org.elasticsearch.transport.TransportService;
public class TransportGetStoredScriptAction extends TransportMasterNodeReadAction<GetStoredScriptRequest, GetStoredScriptResponse> { public class TransportGetStoredScriptAction extends TransportMasterNodeReadAction<GetStoredScriptRequest, GetStoredScriptResponse> {
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportGetStoredScriptAction( public TransportGetStoredScriptAction(
TransportService transportService, TransportService transportService,
ClusterService clusterService, ClusterService clusterService,
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters ActionFilters actionFilters,
ProjectResolver projectResolver
) { ) {
super( super(
GetStoredScriptAction.NAME, GetStoredScriptAction.NAME,
@ -42,6 +46,7 @@ public class TransportGetStoredScriptAction extends TransportMasterNodeReadActio
GetStoredScriptResponse::new, GetStoredScriptResponse::new,
EsExecutors.DIRECT_EXECUTOR_SERVICE EsExecutors.DIRECT_EXECUTOR_SERVICE
); );
this.projectResolver = projectResolver;
} }
@Override @Override
@ -56,7 +61,7 @@ public class TransportGetStoredScriptAction extends TransportMasterNodeReadActio
@Override @Override
protected ClusterBlockException checkBlock(GetStoredScriptRequest request, ClusterState state) { protected ClusterBlockException checkBlock(GetStoredScriptRequest request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -17,6 +17,7 @@ import org.elasticsearch.action.support.master.AcknowledgedTransportMasterNodeAc
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -29,6 +30,7 @@ public class TransportPutStoredScriptAction extends AcknowledgedTransportMasterN
public static final ActionType<AcknowledgedResponse> TYPE = new ActionType<>("cluster:admin/script/put"); public static final ActionType<AcknowledgedResponse> TYPE = new ActionType<>("cluster:admin/script/put");
private final ScriptService scriptService; private final ScriptService scriptService;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutStoredScriptAction( public TransportPutStoredScriptAction(
@ -36,7 +38,8 @@ public class TransportPutStoredScriptAction extends AcknowledgedTransportMasterN
ClusterService clusterService, ClusterService clusterService,
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
ScriptService scriptService ScriptService scriptService,
ProjectResolver projectResolver
) { ) {
super( super(
TYPE.name(), TYPE.name(),
@ -48,6 +51,7 @@ public class TransportPutStoredScriptAction extends AcknowledgedTransportMasterN
EsExecutors.DIRECT_EXECUTOR_SERVICE EsExecutors.DIRECT_EXECUTOR_SERVICE
); );
this.scriptService = scriptService; this.scriptService = scriptService;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -62,7 +66,7 @@ public class TransportPutStoredScriptAction extends AcknowledgedTransportMasterN
@Override @Override
protected ClusterBlockException checkBlock(PutStoredScriptRequest request, ClusterState state) { protected ClusterBlockException checkBlock(PutStoredScriptRequest request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -200,7 +200,7 @@ public class TransportSimulateIndexTemplateAction extends TransportLocalProjectM
@Override @Override
protected ClusterBlockException checkBlock(SimulateIndexTemplateRequest request, ProjectState state) { protected ClusterBlockException checkBlock(SimulateIndexTemplateRequest request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ);
} }
/** /**

View file

@ -200,6 +200,6 @@ public class TransportSimulateTemplateAction extends TransportLocalProjectMetada
@Override @Override
protected ClusterBlockException checkBlock(SimulateTemplateAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(SimulateTemplateAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -67,7 +67,7 @@ public class TransportPutComponentTemplateAction extends AcknowledgedTransportMa
@Override @Override
protected ClusterBlockException checkBlock(PutComponentTemplateAction.Request request, ClusterState state) { 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( public static ComponentTemplate normalizeComponentTemplate(

View file

@ -75,7 +75,7 @@ public class TransportPutComposableIndexTemplateAction extends AcknowledgedTrans
@Override @Override
protected ClusterBlockException checkBlock(Request request, ClusterState state) { protected ClusterBlockException checkBlock(Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
@Override @Override

View file

@ -122,7 +122,7 @@ public abstract class TransportSingleShardAction<Request extends SingleShardRequ
protected abstract boolean resolveIndex(Request request); protected abstract boolean resolveIndex(Request request);
protected static ClusterBlockException checkGlobalBlock(ProjectState state) { 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) { protected ClusterBlockException checkRequestBlock(ProjectState state, InternalRequest request) {

View file

@ -91,6 +91,6 @@ public class TransportGetEnrichPolicyAction extends TransportLocalProjectMetadat
@Override @Override
protected ClusterBlockException checkBlock(GetEnrichPolicyAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(GetEnrichPolicyAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -124,6 +124,6 @@ public class TransportPutEnrichPolicyAction extends AcknowledgedTransportMasterN
@Override @Override
protected ClusterBlockException checkBlock(PutEnrichPolicyAction.Request request, ProjectState state) { protected ClusterBlockException checkBlock(PutEnrichPolicyAction.Request request, ProjectState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(state.projectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -13,6 +13,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.logging.DeprecationCategory; import org.elasticsearch.common.logging.DeprecationCategory;
import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.logging.DeprecationLogger;
@ -38,6 +39,7 @@ public class TransportPutAnalyticsCollectionAction extends TransportMasterNodeAc
PutAnalyticsCollectionAction.Response> { PutAnalyticsCollectionAction.Response> {
private final AnalyticsCollectionService analyticsCollectionService; private final AnalyticsCollectionService analyticsCollectionService;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutAnalyticsCollectionAction( public TransportPutAnalyticsCollectionAction(
@ -46,7 +48,8 @@ public class TransportPutAnalyticsCollectionAction extends TransportMasterNodeAc
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
AnalyticsCollectionService analyticsCollectionService, AnalyticsCollectionService analyticsCollectionService,
FeatureService featureService FeatureService featureService,
ProjectResolver projectResolver
) { ) {
super( super(
PutAnalyticsCollectionAction.NAME, PutAnalyticsCollectionAction.NAME,
@ -59,11 +62,12 @@ public class TransportPutAnalyticsCollectionAction extends TransportMasterNodeAc
EsExecutors.DIRECT_EXECUTOR_SERVICE EsExecutors.DIRECT_EXECUTOR_SERVICE
); );
this.analyticsCollectionService = analyticsCollectionService; this.analyticsCollectionService = analyticsCollectionService;
this.projectResolver = projectResolver;
} }
@Override @Override
protected ClusterBlockException checkBlock(PutAnalyticsCollectionAction.Request request, ClusterState state) { 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 @Override

View file

@ -16,6 +16,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -65,6 +66,7 @@ public class TransportPutInferenceModelAction extends TransportMasterNodeAction<
private final ModelRegistry modelRegistry; private final ModelRegistry modelRegistry;
private final InferenceServiceRegistry serviceRegistry; private final InferenceServiceRegistry serviceRegistry;
private volatile boolean skipValidationAndStart; private volatile boolean skipValidationAndStart;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutInferenceModelAction( public TransportPutInferenceModelAction(
@ -75,7 +77,8 @@ public class TransportPutInferenceModelAction extends TransportMasterNodeAction<
XPackLicenseState licenseState, XPackLicenseState licenseState,
ModelRegistry modelRegistry, ModelRegistry modelRegistry,
InferenceServiceRegistry serviceRegistry, InferenceServiceRegistry serviceRegistry,
Settings settings Settings settings,
ProjectResolver projectResolver
) { ) {
super( super(
PutInferenceModelAction.NAME, PutInferenceModelAction.NAME,
@ -93,6 +96,7 @@ public class TransportPutInferenceModelAction extends TransportMasterNodeAction<
this.skipValidationAndStart = InferencePlugin.SKIP_VALIDATE_AND_START.get(settings); this.skipValidationAndStart = InferencePlugin.SKIP_VALIDATE_AND_START.get(settings);
clusterService.getClusterSettings() clusterService.getClusterSettings()
.addSettingsUpdateConsumer(InferencePlugin.SKIP_VALIDATE_AND_START, this::setSkipValidationAndStart); .addSettingsUpdateConsumer(InferencePlugin.SKIP_VALIDATE_AND_START, this::setSkipValidationAndStart);
this.projectResolver = projectResolver;
} }
@Override @Override
@ -251,7 +255,7 @@ public class TransportPutInferenceModelAction extends TransportMasterNodeAction<
@Override @Override
protected ClusterBlockException checkBlock(PutInferenceModelAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(PutInferenceModelAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -19,6 +19,7 @@ import org.elasticsearch.client.internal.Client;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -75,6 +76,7 @@ public class TransportUpdateInferenceModelAction extends TransportMasterNodeActi
private final ModelRegistry modelRegistry; private final ModelRegistry modelRegistry;
private final InferenceServiceRegistry serviceRegistry; private final InferenceServiceRegistry serviceRegistry;
private final Client client; private final Client client;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportUpdateInferenceModelAction( public TransportUpdateInferenceModelAction(
@ -85,7 +87,8 @@ public class TransportUpdateInferenceModelAction extends TransportMasterNodeActi
XPackLicenseState licenseState, XPackLicenseState licenseState,
ModelRegistry modelRegistry, ModelRegistry modelRegistry,
InferenceServiceRegistry serviceRegistry, InferenceServiceRegistry serviceRegistry,
Client client Client client,
ProjectResolver projectResolver
) { ) {
super( super(
UpdateInferenceModelAction.NAME, UpdateInferenceModelAction.NAME,
@ -101,6 +104,7 @@ public class TransportUpdateInferenceModelAction extends TransportMasterNodeActi
this.modelRegistry = modelRegistry; this.modelRegistry = modelRegistry;
this.serviceRegistry = serviceRegistry; this.serviceRegistry = serviceRegistry;
this.client = client; this.client = client;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -345,7 +349,7 @@ public class TransportUpdateInferenceModelAction extends TransportMasterNodeActi
@Override @Override
protected ClusterBlockException checkBlock(UpdateInferenceModelAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(UpdateInferenceModelAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -14,6 +14,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -29,6 +30,7 @@ public class TransportGetDatafeedsAction extends TransportMasterNodeReadAction<G
private static final Logger logger = LogManager.getLogger(TransportGetDatafeedsAction.class); private static final Logger logger = LogManager.getLogger(TransportGetDatafeedsAction.class);
private final DatafeedManager datafeedManager; private final DatafeedManager datafeedManager;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportGetDatafeedsAction( public TransportGetDatafeedsAction(
@ -36,7 +38,8 @@ public class TransportGetDatafeedsAction extends TransportMasterNodeReadAction<G
ClusterService clusterService, ClusterService clusterService,
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
DatafeedManager datafeedManager DatafeedManager datafeedManager,
ProjectResolver projectResolver
) { ) {
super( super(
GetDatafeedsAction.NAME, GetDatafeedsAction.NAME,
@ -50,6 +53,7 @@ public class TransportGetDatafeedsAction extends TransportMasterNodeReadAction<G
); );
this.datafeedManager = datafeedManager; this.datafeedManager = datafeedManager;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -71,6 +75,6 @@ public class TransportGetDatafeedsAction extends TransportMasterNodeReadAction<G
@Override @Override
protected ClusterBlockException checkBlock(GetDatafeedsAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(GetDatafeedsAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -14,6 +14,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -36,6 +37,7 @@ public class TransportGetJobsAction extends TransportMasterNodeReadAction<GetJob
private final JobManager jobManager; private final JobManager jobManager;
private final DatafeedManager datafeedManager; private final DatafeedManager datafeedManager;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportGetJobsAction( public TransportGetJobsAction(
@ -44,7 +46,8 @@ public class TransportGetJobsAction extends TransportMasterNodeReadAction<GetJob
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
JobManager jobManager, JobManager jobManager,
DatafeedManager datafeedManager DatafeedManager datafeedManager,
ProjectResolver projectResolver
) { ) {
super( super(
GetJobsAction.NAME, GetJobsAction.NAME,
@ -58,6 +61,7 @@ public class TransportGetJobsAction extends TransportMasterNodeReadAction<GetJob
); );
this.jobManager = jobManager; this.jobManager = jobManager;
this.datafeedManager = datafeedManager; this.datafeedManager = datafeedManager;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -92,6 +96,6 @@ public class TransportGetJobsAction extends TransportMasterNodeReadAction<GetJob
@Override @Override
protected ClusterBlockException checkBlock(GetJobsAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(GetJobsAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -16,6 +16,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
@ -77,6 +78,7 @@ public class TransportPutDataFrameAnalyticsAction extends TransportMasterNodeAct
private final DataFrameAnalyticsAuditor auditor; private final DataFrameAnalyticsAuditor auditor;
private final SourceDestValidator sourceDestValidator; private final SourceDestValidator sourceDestValidator;
private final Supplier<ByteSizeValue> maxModelMemoryLimitSupplier; private final Supplier<ByteSizeValue> maxModelMemoryLimitSupplier;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutDataFrameAnalyticsAction( public TransportPutDataFrameAnalyticsAction(
@ -89,7 +91,8 @@ public class TransportPutDataFrameAnalyticsAction extends TransportMasterNodeAct
ClusterService clusterService, ClusterService clusterService,
IndexNameExpressionResolver indexNameExpressionResolver, IndexNameExpressionResolver indexNameExpressionResolver,
DataFrameAnalyticsConfigProvider configProvider, DataFrameAnalyticsConfigProvider configProvider,
DataFrameAnalyticsAuditor auditor DataFrameAnalyticsAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
PutDataFrameAnalyticsAction.NAME, PutDataFrameAnalyticsAction.NAME,
@ -118,11 +121,12 @@ public class TransportPutDataFrameAnalyticsAction extends TransportMasterNodeAct
clusterService.getNodeName(), clusterService.getNodeName(),
License.OperationMode.PLATINUM.description() License.OperationMode.PLATINUM.description()
); );
this.projectResolver = projectResolver;
} }
@Override @Override
protected ClusterBlockException checkBlock(PutDataFrameAnalyticsAction.Request request, ClusterState state) { 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 @Override

View file

@ -12,6 +12,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -33,6 +34,7 @@ public class TransportPutDatafeedAction extends TransportMasterNodeAction<PutDat
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final DatafeedManager datafeedManager; private final DatafeedManager datafeedManager;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutDatafeedAction( public TransportPutDatafeedAction(
@ -42,7 +44,8 @@ public class TransportPutDatafeedAction extends TransportMasterNodeAction<PutDat
ThreadPool threadPool, ThreadPool threadPool,
XPackLicenseState licenseState, XPackLicenseState licenseState,
ActionFilters actionFilters, ActionFilters actionFilters,
DatafeedManager datafeedManager DatafeedManager datafeedManager,
ProjectResolver projectResolver
) { ) {
super( super(
PutDatafeedAction.NAME, PutDatafeedAction.NAME,
@ -59,6 +62,7 @@ public class TransportPutDatafeedAction extends TransportMasterNodeAction<PutDat
? new SecurityContext(settings, threadPool.getThreadContext()) ? new SecurityContext(settings, threadPool.getThreadContext())
: null; : null;
this.datafeedManager = datafeedManager; this.datafeedManager = datafeedManager;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -73,7 +77,7 @@ public class TransportPutDatafeedAction extends TransportMasterNodeAction<PutDat
@Override @Override
protected ClusterBlockException checkBlock(PutDatafeedAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(PutDatafeedAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
@Override @Override

View file

@ -15,6 +15,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -48,6 +49,7 @@ public class TransportPutJobAction extends TransportMasterNodeAction<PutJobActio
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final AnalysisRegistry analysisRegistry; private final AnalysisRegistry analysisRegistry;
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutJobAction( public TransportPutJobAction(
@ -59,7 +61,8 @@ public class TransportPutJobAction extends TransportMasterNodeAction<PutJobActio
ActionFilters actionFilters, ActionFilters actionFilters,
JobManager jobManager, JobManager jobManager,
DatafeedManager datafeedManager, DatafeedManager datafeedManager,
AnalysisRegistry analysisRegistry AnalysisRegistry analysisRegistry,
ProjectResolver projectResolver
) { ) {
super( super(
PutJobAction.NAME, PutJobAction.NAME,
@ -78,6 +81,7 @@ public class TransportPutJobAction extends TransportMasterNodeAction<PutJobActio
this.securityContext = XPackSettings.SECURITY_ENABLED.get(settings) this.securityContext = XPackSettings.SECURITY_ENABLED.get(settings)
? new SecurityContext(settings, threadPool.getThreadContext()) ? new SecurityContext(settings, threadPool.getThreadContext())
: null; : null;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -133,7 +137,7 @@ public class TransportPutJobAction extends TransportMasterNodeAction<PutJobActio
@Override @Override
protected ClusterBlockException checkBlock(PutJobAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(PutJobAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
@Override @Override

View file

@ -22,6 +22,7 @@ import org.elasticsearch.client.internal.OriginSettingClient;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.ValidationException; import org.elasticsearch.common.ValidationException;
import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.bytes.BytesReference;
@ -92,6 +93,7 @@ public class TransportPutTrainedModelAction extends TransportMasterNodeAction<Re
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final NamedXContentRegistry xContentRegistry; private final NamedXContentRegistry xContentRegistry;
private final OriginSettingClient client; private final OriginSettingClient client;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutTrainedModelAction( public TransportPutTrainedModelAction(
@ -102,7 +104,8 @@ public class TransportPutTrainedModelAction extends TransportMasterNodeAction<Re
ActionFilters actionFilters, ActionFilters actionFilters,
Client client, Client client,
TrainedModelProvider trainedModelProvider, TrainedModelProvider trainedModelProvider,
NamedXContentRegistry xContentRegistry NamedXContentRegistry xContentRegistry,
ProjectResolver projectResolver
) { ) {
super( super(
PutTrainedModelAction.NAME, PutTrainedModelAction.NAME,
@ -118,6 +121,7 @@ public class TransportPutTrainedModelAction extends TransportMasterNodeAction<Re
this.trainedModelProvider = trainedModelProvider; this.trainedModelProvider = trainedModelProvider;
this.xContentRegistry = xContentRegistry; this.xContentRegistry = xContentRegistry;
this.client = new OriginSettingClient(client, ML_ORIGIN); this.client = new OriginSettingClient(client, ML_ORIGIN);
this.projectResolver = projectResolver;
} }
@Override @Override
@ -533,7 +537,7 @@ public class TransportPutTrainedModelAction extends TransportMasterNodeAction<Re
@Override @Override
protected ClusterBlockException checkBlock(Request request, ClusterState state) { protected ClusterBlockException checkBlock(Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
@Override @Override

View file

@ -18,6 +18,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.ClusterStateUpdateTask; import org.elasticsearch.cluster.ClusterStateUpdateTask;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.logging.HeaderWarning; import org.elasticsearch.common.logging.HeaderWarning;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -63,6 +64,7 @@ public class TransportPutTrainedModelAliasAction extends AcknowledgedTransportMa
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final TrainedModelProvider trainedModelProvider; private final TrainedModelProvider trainedModelProvider;
private final InferenceAuditor auditor; private final InferenceAuditor auditor;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutTrainedModelAliasAction( public TransportPutTrainedModelAliasAction(
@ -72,7 +74,8 @@ public class TransportPutTrainedModelAliasAction extends AcknowledgedTransportMa
ThreadPool threadPool, ThreadPool threadPool,
XPackLicenseState licenseState, XPackLicenseState licenseState,
ActionFilters actionFilters, ActionFilters actionFilters,
InferenceAuditor auditor InferenceAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
PutTrainedModelAliasAction.NAME, PutTrainedModelAliasAction.NAME,
@ -86,6 +89,7 @@ public class TransportPutTrainedModelAliasAction extends AcknowledgedTransportMa
this.licenseState = licenseState; this.licenseState = licenseState;
this.trainedModelProvider = trainedModelProvider; this.trainedModelProvider = trainedModelProvider;
this.auditor = auditor; this.auditor = auditor;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -277,6 +281,6 @@ public class TransportPutTrainedModelAliasAction extends AcknowledgedTransportMa
@Override @Override
protected ClusterBlockException checkBlock(PutTrainedModelAliasAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(PutTrainedModelAliasAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -22,6 +22,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -62,6 +63,7 @@ public class TransportResetJobAction extends AcknowledgedTransportMasterNodeActi
private final JobConfigProvider jobConfigProvider; private final JobConfigProvider jobConfigProvider;
private final JobResultsProvider jobResultsProvider; private final JobResultsProvider jobResultsProvider;
private final AnomalyDetectionAuditor auditor; private final AnomalyDetectionAuditor auditor;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportResetJobAction( public TransportResetJobAction(
@ -73,7 +75,8 @@ public class TransportResetJobAction extends AcknowledgedTransportMasterNodeActi
Client client, Client client,
JobConfigProvider jobConfigProvider, JobConfigProvider jobConfigProvider,
JobResultsProvider jobResultsProvider, JobResultsProvider jobResultsProvider,
AnomalyDetectionAuditor auditor AnomalyDetectionAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
ResetJobAction.NAME, ResetJobAction.NAME,
@ -89,6 +92,7 @@ public class TransportResetJobAction extends AcknowledgedTransportMasterNodeActi
this.jobConfigProvider = Objects.requireNonNull(jobConfigProvider); this.jobConfigProvider = Objects.requireNonNull(jobConfigProvider);
this.jobResultsProvider = Objects.requireNonNull(jobResultsProvider); this.jobResultsProvider = Objects.requireNonNull(jobResultsProvider);
this.auditor = Objects.requireNonNull(auditor); this.auditor = Objects.requireNonNull(auditor);
this.projectResolver = Objects.requireNonNull(projectResolver);
} }
@Override @Override
@ -275,6 +279,6 @@ public class TransportResetJobAction extends AcknowledgedTransportMasterNodeActi
@Override @Override
protected ClusterBlockException checkBlock(ResetJobAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(ResetJobAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -23,6 +23,7 @@ import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.logging.HeaderWarning; import org.elasticsearch.common.logging.HeaderWarning;
@ -114,6 +115,7 @@ public class TransportStartDataFrameAnalyticsAction extends TransportMasterNodeA
private final MlMemoryTracker memoryTracker; private final MlMemoryTracker memoryTracker;
private final DataFrameAnalyticsAuditor auditor; private final DataFrameAnalyticsAuditor auditor;
private final SourceDestValidator sourceDestValidator; private final SourceDestValidator sourceDestValidator;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportStartDataFrameAnalyticsAction( public TransportStartDataFrameAnalyticsAction(
@ -127,7 +129,8 @@ public class TransportStartDataFrameAnalyticsAction extends TransportMasterNodeA
PersistentTasksService persistentTasksService, PersistentTasksService persistentTasksService,
DataFrameAnalyticsConfigProvider configProvider, DataFrameAnalyticsConfigProvider configProvider,
MlMemoryTracker memoryTracker, MlMemoryTracker memoryTracker,
DataFrameAnalyticsAuditor auditor DataFrameAnalyticsAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
StartDataFrameAnalyticsAction.NAME, StartDataFrameAnalyticsAction.NAME,
@ -154,6 +157,7 @@ public class TransportStartDataFrameAnalyticsAction extends TransportMasterNodeA
clusterService.getNodeName(), clusterService.getNodeName(),
License.OperationMode.PLATINUM.description() License.OperationMode.PLATINUM.description()
); );
this.projectResolver = projectResolver;
} }
@Override @Override
@ -161,7 +165,7 @@ public class TransportStartDataFrameAnalyticsAction extends TransportMasterNodeA
// We only delegate here to PersistentTasksService, but if there is a metadata writeblock, // We only delegate here to PersistentTasksService, but if there is a metadata writeblock,
// then delegating to PersistentTasksService doesn't make a whole lot of sense, // then delegating to PersistentTasksService doesn't make a whole lot of sense,
// because PersistentTasksService will then fail. // because PersistentTasksService will then fail.
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
@Override @Override

View file

@ -22,6 +22,7 @@ import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
@ -103,6 +104,7 @@ public class TransportStartDatafeedAction extends TransportMasterNodeAction<Star
private final AnomalyDetectionAuditor auditor; private final AnomalyDetectionAuditor auditor;
private final NamedXContentRegistry xContentRegistry; private final NamedXContentRegistry xContentRegistry;
private final boolean remoteClusterClient; private final boolean remoteClusterClient;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportStartDatafeedAction( public TransportStartDatafeedAction(
@ -117,7 +119,8 @@ public class TransportStartDatafeedAction extends TransportMasterNodeAction<Star
JobConfigProvider jobConfigProvider, JobConfigProvider jobConfigProvider,
DatafeedConfigProvider datafeedConfigProvider, DatafeedConfigProvider datafeedConfigProvider,
AnomalyDetectionAuditor auditor, AnomalyDetectionAuditor auditor,
NamedXContentRegistry xContentRegistry NamedXContentRegistry xContentRegistry,
ProjectResolver projectResolver
) { ) {
super( super(
StartDatafeedAction.NAME, StartDatafeedAction.NAME,
@ -137,6 +140,7 @@ public class TransportStartDatafeedAction extends TransportMasterNodeAction<Star
this.auditor = auditor; this.auditor = auditor;
this.xContentRegistry = xContentRegistry; this.xContentRegistry = xContentRegistry;
this.remoteClusterClient = DiscoveryNode.isRemoteClusterClient(settings); this.remoteClusterClient = DiscoveryNode.isRemoteClusterClient(settings);
this.projectResolver = projectResolver;
} }
static void validate( static void validate(
@ -356,7 +360,7 @@ public class TransportStartDatafeedAction extends TransportMasterNodeAction<Star
// We only delegate here to PersistentTasksService, but if there is a metadata writeblock, // We only delegate here to PersistentTasksService, but if there is a metadata writeblock,
// then delagating to PersistentTasksService doesn't make a whole lot of sense, // then delagating to PersistentTasksService doesn't make a whole lot of sense,
// because PersistentTasksService will then fail. // because PersistentTasksService will then fail.
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
private void waitForDatafeedStarted( private void waitForDatafeedStarted(

View file

@ -24,6 +24,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.document.DocumentField; import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.common.unit.ByteSizeValue;
@ -100,6 +101,7 @@ public class TransportStartTrainedModelDeploymentAction extends TransportMasterN
private final TrainedModelAssignmentService trainedModelAssignmentService; private final TrainedModelAssignmentService trainedModelAssignmentService;
private final MlMemoryTracker memoryTracker; private final MlMemoryTracker memoryTracker;
private final InferenceAuditor auditor; private final InferenceAuditor auditor;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportStartTrainedModelDeploymentAction( public TransportStartTrainedModelDeploymentAction(
@ -111,7 +113,8 @@ public class TransportStartTrainedModelDeploymentAction extends TransportMasterN
XPackLicenseState licenseState, XPackLicenseState licenseState,
TrainedModelAssignmentService trainedModelAssignmentService, TrainedModelAssignmentService trainedModelAssignmentService,
MlMemoryTracker memoryTracker, MlMemoryTracker memoryTracker,
InferenceAuditor auditor InferenceAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
StartTrainedModelDeploymentAction.NAME, StartTrainedModelDeploymentAction.NAME,
@ -128,6 +131,7 @@ public class TransportStartTrainedModelDeploymentAction extends TransportMasterN
this.memoryTracker = Objects.requireNonNull(memoryTracker); this.memoryTracker = Objects.requireNonNull(memoryTracker);
this.trainedModelAssignmentService = Objects.requireNonNull(trainedModelAssignmentService); this.trainedModelAssignmentService = Objects.requireNonNull(trainedModelAssignmentService);
this.auditor = Objects.requireNonNull(auditor); this.auditor = Objects.requireNonNull(auditor);
this.projectResolver = Objects.requireNonNull(projectResolver);
} }
@Override @Override
@ -642,7 +646,7 @@ public class TransportStartTrainedModelDeploymentAction extends TransportMasterN
// We only delegate here to PersistentTasksService, but if there is a metadata writeblock, // We only delegate here to PersistentTasksService, but if there is a metadata writeblock,
// then delegating to PersistentTasksService doesn't make a whole lot of sense, // then delegating to PersistentTasksService doesn't make a whole lot of sense,
// because PersistentTasksService will then fail. // because PersistentTasksService will then fail.
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
private static ElasticsearchStatusException missingFieldsError(String modelId, String hitId, Collection<String> missingFields) { private static ElasticsearchStatusException missingFieldsError(String modelId, String hitId, Collection<String> missingFields) {

View file

@ -12,6 +12,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -29,6 +30,7 @@ public class TransportUpdateDatafeedAction extends TransportMasterNodeAction<Upd
private final DatafeedManager datafeedManager; private final DatafeedManager datafeedManager;
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportUpdateDatafeedAction( public TransportUpdateDatafeedAction(
@ -37,7 +39,8 @@ public class TransportUpdateDatafeedAction extends TransportMasterNodeAction<Upd
ClusterService clusterService, ClusterService clusterService,
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
DatafeedManager datafeedManager DatafeedManager datafeedManager,
ProjectResolver projectResolver
) { ) {
super( super(
UpdateDatafeedAction.NAME, UpdateDatafeedAction.NAME,
@ -54,6 +57,7 @@ public class TransportUpdateDatafeedAction extends TransportMasterNodeAction<Upd
this.securityContext = XPackSettings.SECURITY_ENABLED.get(settings) this.securityContext = XPackSettings.SECURITY_ENABLED.get(settings)
? new SecurityContext(settings, threadPool.getThreadContext()) ? new SecurityContext(settings, threadPool.getThreadContext())
: null; : null;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -69,6 +73,6 @@ public class TransportUpdateDatafeedAction extends TransportMasterNodeAction<Upd
@Override @Override
protected ClusterBlockException checkBlock(UpdateDatafeedAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(UpdateDatafeedAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -12,6 +12,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -25,6 +26,7 @@ import org.elasticsearch.xpack.ml.job.JobManager;
public class TransportUpdateJobAction extends TransportMasterNodeAction<UpdateJobAction.Request, PutJobAction.Response> { public class TransportUpdateJobAction extends TransportMasterNodeAction<UpdateJobAction.Request, PutJobAction.Response> {
private final JobManager jobManager; private final JobManager jobManager;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportUpdateJobAction( public TransportUpdateJobAction(
@ -32,7 +34,8 @@ public class TransportUpdateJobAction extends TransportMasterNodeAction<UpdateJo
ClusterService clusterService, ClusterService clusterService,
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
JobManager jobManager JobManager jobManager,
ProjectResolver projectResolver
) { ) {
super( super(
UpdateJobAction.NAME, UpdateJobAction.NAME,
@ -45,6 +48,7 @@ public class TransportUpdateJobAction extends TransportMasterNodeAction<UpdateJo
EsExecutors.DIRECT_EXECUTOR_SERVICE EsExecutors.DIRECT_EXECUTOR_SERVICE
); );
this.jobManager = jobManager; this.jobManager = jobManager;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -59,6 +63,6 @@ public class TransportUpdateJobAction extends TransportMasterNodeAction<UpdateJo
@Override @Override
protected ClusterBlockException checkBlock(UpdateJobAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(UpdateJobAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -15,6 +15,7 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.injection.guice.Inject;
@ -39,6 +40,7 @@ public class TransportUpdateTrainedModelDeploymentAction extends TransportMaster
private final TrainedModelAssignmentClusterService trainedModelAssignmentClusterService; private final TrainedModelAssignmentClusterService trainedModelAssignmentClusterService;
private final InferenceAuditor auditor; private final InferenceAuditor auditor;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportUpdateTrainedModelDeploymentAction( public TransportUpdateTrainedModelDeploymentAction(
@ -47,7 +49,8 @@ public class TransportUpdateTrainedModelDeploymentAction extends TransportMaster
ThreadPool threadPool, ThreadPool threadPool,
ActionFilters actionFilters, ActionFilters actionFilters,
TrainedModelAssignmentClusterService trainedModelAssignmentClusterService, TrainedModelAssignmentClusterService trainedModelAssignmentClusterService,
InferenceAuditor auditor InferenceAuditor auditor,
ProjectResolver projectResolver
) { ) {
super( super(
UpdateTrainedModelDeploymentAction.NAME, UpdateTrainedModelDeploymentAction.NAME,
@ -61,6 +64,7 @@ public class TransportUpdateTrainedModelDeploymentAction extends TransportMaster
); );
this.trainedModelAssignmentClusterService = Objects.requireNonNull(trainedModelAssignmentClusterService); this.trainedModelAssignmentClusterService = Objects.requireNonNull(trainedModelAssignmentClusterService);
this.auditor = Objects.requireNonNull(auditor); this.auditor = Objects.requireNonNull(auditor);
this.projectResolver = Objects.requireNonNull(projectResolver);
} }
@Override @Override
@ -95,6 +99,6 @@ public class TransportUpdateTrainedModelDeploymentAction extends TransportMaster
@Override @Override
protected ClusterBlockException checkBlock(UpdateTrainedModelDeploymentAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(UpdateTrainedModelDeploymentAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
} }

View file

@ -16,6 +16,7 @@ import org.elasticsearch.action.support.ActionFilters;
import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.action.support.PlainActionFuture;
import org.elasticsearch.client.internal.Client; import org.elasticsearch.client.internal.Client;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.project.TestProjectResolvers;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentHelper;
@ -367,7 +368,8 @@ public class TransportPutTrainedModelActionTests extends ESTestCase {
mockFilters, mockFilters,
mockClient, mockClient,
null, null,
null null,
TestProjectResolvers.DEFAULT_PROJECT_ONLY
); );
} }

View file

@ -21,6 +21,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -65,6 +66,7 @@ public class TransportPutTransformAction extends AcknowledgedTransportMasterNode
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final TransformAuditor auditor; private final TransformAuditor auditor;
private final TransformConfigAutoMigration transformConfigAutoMigration; private final TransformConfigAutoMigration transformConfigAutoMigration;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportPutTransformAction( public TransportPutTransformAction(
@ -76,7 +78,8 @@ public class TransportPutTransformAction extends AcknowledgedTransportMasterNode
ClusterService clusterService, ClusterService clusterService,
TransformServices transformServices, TransformServices transformServices,
Client client, Client client,
TransformConfigAutoMigration transformConfigAutoMigration TransformConfigAutoMigration transformConfigAutoMigration,
ProjectResolver projectResolver
) { ) {
super( super(
PutTransformAction.NAME, PutTransformAction.NAME,
@ -96,6 +99,7 @@ public class TransportPutTransformAction extends AcknowledgedTransportMasterNode
: null; : null;
this.auditor = transformServices.auditor(); this.auditor = transformServices.auditor();
this.transformConfigAutoMigration = transformConfigAutoMigration; this.transformConfigAutoMigration = transformConfigAutoMigration;
this.projectResolver = projectResolver;
} }
@Override @Override
@ -183,7 +187,7 @@ public class TransportPutTransformAction extends AcknowledgedTransportMasterNode
@Override @Override
protected ClusterBlockException checkBlock(PutTransformAction.Request request, ClusterState state) { 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<AcknowledgedResponse> listener) { private void putTransform(Request request, ActionListener<AcknowledgedResponse> listener) {

View file

@ -22,6 +22,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -63,6 +64,7 @@ public class TransportResetTransformAction extends AcknowledgedTransportMasterNo
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final Settings settings; private final Settings settings;
private final Settings destIndexSettings; private final Settings destIndexSettings;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportResetTransformAction( public TransportResetTransformAction(
@ -74,7 +76,8 @@ public class TransportResetTransformAction extends AcknowledgedTransportMasterNo
TransformServices transformServices, TransformServices transformServices,
Client client, Client client,
Settings settings, Settings settings,
TransformExtensionHolder transformExtensionHolder TransformExtensionHolder transformExtensionHolder,
ProjectResolver projectResolver
) { ) {
super( super(
ResetTransformAction.NAME, ResetTransformAction.NAME,
@ -94,6 +97,7 @@ public class TransportResetTransformAction extends AcknowledgedTransportMasterNo
: null; : null;
this.settings = settings; this.settings = settings;
this.destIndexSettings = transformExtensionHolder.getTransformExtension().getTransformDestinationIndexSettings(); this.destIndexSettings = transformExtensionHolder.getTransformExtension().getTransformDestinationIndexSettings();
this.projectResolver = projectResolver;
} }
@Override @Override
@ -217,6 +221,6 @@ public class TransportResetTransformAction extends AcknowledgedTransportMasterNo
@Override @Override
protected ClusterBlockException checkBlock(Request request, ClusterState state) { protected ClusterBlockException checkBlock(Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_READ);
} }
} }

View file

@ -22,6 +22,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel; import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.project.ProjectResolver;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
@ -72,6 +73,7 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
private final Client client; private final Client client;
private final TransformAuditor auditor; private final TransformAuditor auditor;
private final Settings destIndexSettings; private final Settings destIndexSettings;
private final ProjectResolver projectResolver;
@Inject @Inject
public TransportStartTransformAction( public TransportStartTransformAction(
@ -83,7 +85,8 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
TransformServices transformServices, TransformServices transformServices,
PersistentTasksService persistentTasksService, PersistentTasksService persistentTasksService,
Client client, Client client,
TransformExtensionHolder transformExtensionHolder TransformExtensionHolder transformExtensionHolder,
ProjectResolver projectResolver
) { ) {
this( this(
StartTransformAction.NAME, StartTransformAction.NAME,
@ -95,7 +98,8 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
transformServices, transformServices,
persistentTasksService, persistentTasksService,
client, client,
transformExtensionHolder transformExtensionHolder,
projectResolver
); );
} }
@ -109,7 +113,8 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
TransformServices transformServices, TransformServices transformServices,
PersistentTasksService persistentTasksService, PersistentTasksService persistentTasksService,
Client client, Client client,
TransformExtensionHolder transformExtensionHolder TransformExtensionHolder transformExtensionHolder,
ProjectResolver projectResolver
) { ) {
super( super(
name, name,
@ -127,6 +132,7 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
this.client = client; this.client = client;
this.auditor = transformServices.auditor(); this.auditor = transformServices.auditor();
this.destIndexSettings = transformExtensionHolder.getTransformExtension().getTransformDestinationIndexSettings(); this.destIndexSettings = transformExtensionHolder.getTransformExtension().getTransformDestinationIndexSettings();
this.projectResolver = projectResolver;
} }
@Override @Override
@ -300,7 +306,7 @@ public class TransportStartTransformAction extends TransportMasterNodeAction<Sta
@Override @Override
protected ClusterBlockException checkBlock(StartTransformAction.Request request, ClusterState state) { protected ClusterBlockException checkBlock(StartTransformAction.Request request, ClusterState state) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE); return state.blocks().globalBlockedException(projectResolver.getProjectId(), ClusterBlockLevel.METADATA_WRITE);
} }
private void cancelTransformTask(String taskId, String transformId, Exception exception, Consumer<Exception> onFailure) { private void cancelTransformTask(String taskId, String transformId, Exception exception, Consumer<Exception> onFailure) {