Skip to content

Commit e098cd0

Browse files
samxbrkderusso
authored andcommitted
Make Watch transport actions project-aware (elastic#129612)
1 parent 1ddc931 commit e098cd0

File tree

5 files changed

+42
-17
lines changed

5 files changed

+42
-17
lines changed

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/transport/actions/TransportGetWatcherSettingsAction.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
import org.elasticsearch.action.ActionListener;
1111
import org.elasticsearch.action.support.ActionFilters;
1212
import org.elasticsearch.action.support.ChannelActionListener;
13-
import org.elasticsearch.action.support.local.TransportLocalClusterStateAction;
14-
import org.elasticsearch.cluster.ClusterState;
13+
import org.elasticsearch.action.support.local.TransportLocalProjectMetadataAction;
14+
import org.elasticsearch.cluster.ProjectState;
1515
import org.elasticsearch.cluster.block.ClusterBlockException;
1616
import org.elasticsearch.cluster.block.ClusterBlockLevel;
1717
import org.elasticsearch.cluster.metadata.IndexMetadata;
1818
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
19+
import org.elasticsearch.cluster.project.ProjectResolver;
1920
import org.elasticsearch.cluster.service.ClusterService;
2021
import org.elasticsearch.common.settings.Settings;
2122
import org.elasticsearch.common.util.concurrent.EsExecutors;
@@ -32,7 +33,7 @@
3233
import static org.elasticsearch.xpack.watcher.transport.actions.TransportUpdateWatcherSettingsAction.WATCHER_INDEX_NAME;
3334
import static org.elasticsearch.xpack.watcher.transport.actions.TransportUpdateWatcherSettingsAction.WATCHER_INDEX_REQUEST;
3435

35-
public class TransportGetWatcherSettingsAction extends TransportLocalClusterStateAction<
36+
public class TransportGetWatcherSettingsAction extends TransportLocalProjectMetadataAction<
3637
GetWatcherSettingsAction.Request,
3738
GetWatcherSettingsAction.Response> {
3839

@@ -49,14 +50,16 @@ public TransportGetWatcherSettingsAction(
4950
TransportService transportService,
5051
ClusterService clusterService,
5152
ActionFilters actionFilters,
52-
IndexNameExpressionResolver indexNameExpressionResolver
53+
IndexNameExpressionResolver indexNameExpressionResolver,
54+
ProjectResolver projectResolver
5355
) {
5456
super(
5557
GetWatcherSettingsAction.NAME,
5658
actionFilters,
5759
transportService.getTaskManager(),
5860
clusterService,
59-
EsExecutors.DIRECT_EXECUTOR_SERVICE
61+
EsExecutors.DIRECT_EXECUTOR_SERVICE,
62+
projectResolver
6063
);
6164
this.indexNameExpressionResolver = indexNameExpressionResolver;
6265

@@ -74,11 +77,11 @@ public TransportGetWatcherSettingsAction(
7477
protected void localClusterStateOperation(
7578
Task task,
7679
GetWatcherSettingsAction.Request request,
77-
ClusterState state,
80+
ProjectState state,
7881
ActionListener<GetWatcherSettingsAction.Response> listener
7982
) {
8083
((CancellableTask) task).ensureNotCancelled();
81-
IndexMetadata metadata = state.metadata().getProject().index(WATCHER_INDEX_NAME);
84+
IndexMetadata metadata = state.metadata().index(WATCHER_INDEX_NAME);
8285
if (metadata == null) {
8386
listener.onResponse(new GetWatcherSettingsAction.Response(Settings.EMPTY));
8487
} else {
@@ -103,15 +106,16 @@ private static Settings filterSettableSettings(Settings settings) {
103106
}
104107

105108
@Override
106-
protected ClusterBlockException checkBlock(GetWatcherSettingsAction.Request request, ClusterState state) {
109+
protected ClusterBlockException checkBlock(GetWatcherSettingsAction.Request request, ProjectState state) {
107110
ClusterBlockException globalBlock = state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ);
108111
if (globalBlock != null) {
109112
return globalBlock;
110113
}
111114
return state.blocks()
112115
.indicesBlockedException(
116+
state.projectId(),
113117
ClusterBlockLevel.METADATA_READ,
114-
indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(state, WATCHER_INDEX_REQUEST)
118+
indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(state.metadata(), WATCHER_INDEX_REQUEST)
115119
);
116120
}
117121
}

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/transport/actions/TransportUpdateWatcherSettingsAction.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
2323
import org.elasticsearch.cluster.metadata.Metadata;
2424
import org.elasticsearch.cluster.metadata.MetadataUpdateSettingsService;
25+
import org.elasticsearch.cluster.project.ProjectResolver;
2526
import org.elasticsearch.cluster.service.ClusterService;
2627
import org.elasticsearch.common.settings.Settings;
2728
import org.elasticsearch.common.util.concurrent.EsExecutors;
@@ -55,6 +56,7 @@ public IndicesOptions indicesOptions() {
5556
private static final Logger logger = LogManager.getLogger(TransportUpdateWatcherSettingsAction.class);
5657
private final MetadataUpdateSettingsService updateSettingsService;
5758
private final IndexNameExpressionResolver indexNameExpressionResolver;
59+
private final ProjectResolver projectResolver;
5860

5961
@Inject
6062
public TransportUpdateWatcherSettingsAction(
@@ -63,7 +65,8 @@ public TransportUpdateWatcherSettingsAction(
6365
ThreadPool threadPool,
6466
ActionFilters actionFilters,
6567
MetadataUpdateSettingsService updateSettingsService,
66-
IndexNameExpressionResolver indexNameExpressionResolver
68+
IndexNameExpressionResolver indexNameExpressionResolver,
69+
ProjectResolver projectResolver
6770
) {
6871
super(
6972
UpdateWatcherSettingsAction.NAME,
@@ -77,6 +80,7 @@ public TransportUpdateWatcherSettingsAction(
7780
);
7881
this.updateSettingsService = updateSettingsService;
7982
this.indexNameExpressionResolver = indexNameExpressionResolver;
83+
this.projectResolver = projectResolver;
8084
}
8185

8286
@FixForMultiProject(description = "Don't use default project id to update settings")
@@ -87,7 +91,7 @@ protected void masterOperation(
8791
ClusterState state,
8892
ActionListener<AcknowledgedResponse> listener
8993
) {
90-
final IndexMetadata watcherIndexMd = state.metadata().getProject().index(WATCHER_INDEX_NAME);
94+
final IndexMetadata watcherIndexMd = projectResolver.getProjectMetadata(state.metadata()).index(WATCHER_INDEX_NAME);
9195
if (watcherIndexMd == null) {
9296
// Index does not exist, so fail fast
9397
listener.onFailure(new ResourceNotFoundException("no Watches found on which to modify settings"));
@@ -131,6 +135,7 @@ protected ClusterBlockException checkBlock(UpdateWatcherSettingsAction.Request r
131135
}
132136
return state.blocks()
133137
.indicesBlockedException(
138+
projectResolver.getProjectId(),
134139
ClusterBlockLevel.METADATA_WRITE,
135140
indexNameExpressionResolver.concreteIndexNamesWithSystemIndexAccess(state, WATCHER_INDEX_REQUEST)
136141
);

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/transport/actions/TransportWatcherServiceAction.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.elasticsearch.cluster.ClusterStateUpdateTask;
1919
import org.elasticsearch.cluster.block.ClusterBlockException;
2020
import org.elasticsearch.cluster.block.ClusterBlockLevel;
21+
import org.elasticsearch.cluster.project.ProjectResolver;
2122
import org.elasticsearch.cluster.service.ClusterService;
2223
import org.elasticsearch.core.SuppressForbidden;
2324
import org.elasticsearch.injection.guice.Inject;
@@ -34,13 +35,15 @@
3435
public class TransportWatcherServiceAction extends AcknowledgedTransportMasterNodeAction<WatcherServiceRequest> {
3536

3637
private static final Logger logger = LogManager.getLogger(TransportWatcherServiceAction.class);
38+
private final ProjectResolver projectResolver;
3739

3840
@Inject
3941
public TransportWatcherServiceAction(
4042
TransportService transportService,
4143
ClusterService clusterService,
4244
ThreadPool threadPool,
43-
ActionFilters actionFilters
45+
ActionFilters actionFilters,
46+
ProjectResolver projectResolver
4447
) {
4548
super(
4649
WatcherServiceAction.NAME,
@@ -51,6 +54,7 @@ public TransportWatcherServiceAction(
5154
WatcherServiceRequest::new,
5255
threadPool.executor(ThreadPool.Names.MANAGEMENT)
5356
);
57+
this.projectResolver = projectResolver;
5458
}
5559

5660
@Override
@@ -73,7 +77,7 @@ public ClusterState execute(ClusterState clusterState) {
7377
XPackPlugin.checkReadyForXPackCustomMetadata(clusterState);
7478

7579
WatcherMetadata newWatcherMetadata = new WatcherMetadata(manuallyStopped);
76-
final var project = clusterState.metadata().getProject();
80+
final var project = projectResolver.getProjectMetadata(clusterState);
7781
WatcherMetadata currentMetadata = project.custom(WatcherMetadata.TYPE);
7882

7983
// adhere to the contract of returning the original state if nothing has changed

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/transport/actions/TransportWatcherStatsAction.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.elasticsearch.action.support.ActionFilters;
1111
import org.elasticsearch.action.support.nodes.TransportNodesAction;
1212
import org.elasticsearch.cluster.node.DiscoveryNode;
13+
import org.elasticsearch.cluster.project.ProjectResolver;
1314
import org.elasticsearch.cluster.service.ClusterService;
1415
import org.elasticsearch.common.io.stream.StreamInput;
1516
import org.elasticsearch.injection.guice.Inject;
@@ -42,6 +43,7 @@ public class TransportWatcherStatsAction extends TransportNodesAction<
4243
private final ExecutionService executionService;
4344
private final TriggerService triggerService;
4445
private final WatcherLifeCycleService lifeCycleService;
46+
private final ProjectResolver projectResolver;
4547

4648
@Inject
4749
public TransportWatcherStatsAction(
@@ -51,7 +53,8 @@ public TransportWatcherStatsAction(
5153
ActionFilters actionFilters,
5254
WatcherLifeCycleService lifeCycleService,
5355
ExecutionService executionService,
54-
TriggerService triggerService
56+
TriggerService triggerService,
57+
ProjectResolver projectResolver
5558
) {
5659
super(
5760
WatcherStatsAction.NAME,
@@ -64,6 +67,7 @@ public TransportWatcherStatsAction(
6467
this.lifeCycleService = lifeCycleService;
6568
this.executionService = executionService;
6669
this.triggerService = triggerService;
70+
this.projectResolver = projectResolver;
6771
}
6872

6973
@Override
@@ -106,7 +110,8 @@ protected WatcherStatsResponse.Node nodeOperation(WatcherStatsRequest.Node reque
106110
}
107111

108112
private WatcherMetadata getWatcherMetadata() {
109-
WatcherMetadata watcherMetadata = clusterService.state().getMetadata().getProject().custom(WatcherMetadata.TYPE);
113+
114+
WatcherMetadata watcherMetadata = projectResolver.getProjectMetadata(clusterService.state()).custom(WatcherMetadata.TYPE);
110115
if (watcherMetadata == null) {
111116
watcherMetadata = new WatcherMetadata(false);
112117
}

x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/transport/actions/TransportWatcherStatsActionTests.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
import org.elasticsearch.cluster.ClusterName;
1111
import org.elasticsearch.cluster.ClusterState;
1212
import org.elasticsearch.cluster.metadata.Metadata;
13+
import org.elasticsearch.cluster.metadata.ProjectId;
14+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1315
import org.elasticsearch.cluster.node.DiscoveryNode;
1416
import org.elasticsearch.cluster.node.DiscoveryNodeUtils;
17+
import org.elasticsearch.cluster.project.TestProjectResolvers;
1518
import org.elasticsearch.cluster.service.ClusterService;
1619
import org.elasticsearch.common.bytes.BytesReference;
1720
import org.elasticsearch.test.ESTestCase;
@@ -48,6 +51,7 @@ public class TransportWatcherStatsActionTests extends ESTestCase {
4851

4952
@Before
5053
public void setupTransportAction() {
54+
ProjectId projectId = randomProjectIdOrDefault();
5155
threadPool = new TestThreadPool("TransportWatcherStatsActionTests");
5256
TransportService transportService = mock(TransportService.class);
5357
when(transportService.getThreadPool()).thenReturn(threadPool);
@@ -60,8 +64,10 @@ public void setupTransportAction() {
6064
when(clusterService.getClusterName()).thenReturn(clusterName);
6165

6266
ClusterState clusterState = mock(ClusterState.class);
63-
when(clusterState.getMetadata()).thenReturn(Metadata.EMPTY_METADATA);
6467
when(clusterService.state()).thenReturn(clusterState);
68+
Metadata metadata = Metadata.builder().put(ProjectMetadata.builder(projectId).build()).build();
69+
when(clusterState.getMetadata()).thenReturn(metadata);
70+
when(clusterState.metadata()).thenReturn(metadata);
6571

6672
WatcherLifeCycleService watcherLifeCycleService = mock(WatcherLifeCycleService.class);
6773
when(watcherLifeCycleService.getState()).thenReturn(() -> WatcherState.STARTED);
@@ -91,7 +97,8 @@ public void setupTransportAction() {
9197
new ActionFilters(Collections.emptySet()),
9298
watcherLifeCycleService,
9399
executionService,
94-
triggerService
100+
triggerService,
101+
TestProjectResolvers.singleProject(projectId)
95102
);
96103
}
97104

0 commit comments

Comments
 (0)