Skip to content

Commit 2c63c9a

Browse files
authored
TransportGetBasicStatusAction runs on local (#137567)
* TransportGetBasicStatusAction runs on local It only relies on cluster state. Also, replace GetBasicStatusAction with inline instance of ActionType. * Handle BwC in TransportGetBasicStatusAction We need to register a request handler for TransportGetBasicStatusAction and make it possible for requests to be read from transport layer in order to support old versions sending GetBasicStatusRequest to us. * Update docs/changelog/137567.yaml * Use client() instead of clusterAdmin() in test
1 parent 184c51b commit 2c63c9a

File tree

8 files changed

+39
-56
lines changed

8 files changed

+39
-56
lines changed

docs/changelog/137567.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 137567
2+
summary: '`TransportGetBasicStatusAction` runs on local'
3+
area: Distributed
4+
type: enhancement
5+
issues: []

x-pack/plugin/core/src/main/java/org/elasticsearch/license/GetBasicStatusAction.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

x-pack/plugin/core/src/main/java/org/elasticsearch/license/GetBasicStatusRequest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@
66
*/
77
package org.elasticsearch.license;
88

9-
import org.elasticsearch.action.ActionRequestValidationException;
10-
import org.elasticsearch.action.support.master.MasterNodeReadRequest;
9+
import org.elasticsearch.action.support.local.LocalClusterStateRequest;
1110
import org.elasticsearch.common.io.stream.StreamInput;
1211
import org.elasticsearch.core.TimeValue;
12+
import org.elasticsearch.core.UpdateForV10;
1313

1414
import java.io.IOException;
1515

16-
public class GetBasicStatusRequest extends MasterNodeReadRequest<GetBasicStatusRequest> {
16+
public class GetBasicStatusRequest extends LocalClusterStateRequest {
1717

1818
public GetBasicStatusRequest(TimeValue masterNodeTimeout) {
1919
super(masterNodeTimeout);
2020
}
2121

22+
/**
23+
* Prior to 9.3 TransportGetBasicStatusAction was a TransportMasterNodeReadAction so for BwC we need to be
24+
* able to read this from the transport layer until we no longer need to support calling this action remotely.
25+
*/
26+
@UpdateForV10(owner = UpdateForV10.Owner.DISTRIBUTED_COORDINATION)
2227
public GetBasicStatusRequest(StreamInput in) throws IOException {
2328
super(in);
2429
}
25-
26-
@Override
27-
public ActionRequestValidationException validate() {
28-
return null;
29-
}
3030
}

x-pack/plugin/core/src/main/java/org/elasticsearch/license/GetBasicStatusResponse.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package org.elasticsearch.license;
88

99
import org.elasticsearch.action.ActionResponse;
10-
import org.elasticsearch.common.io.stream.StreamInput;
1110
import org.elasticsearch.common.io.stream.StreamOutput;
1211
import org.elasticsearch.xcontent.ToXContentObject;
1312
import org.elasticsearch.xcontent.XContentBuilder;
@@ -19,10 +18,6 @@ public class GetBasicStatusResponse extends ActionResponse implements ToXContent
1918

2019
private final boolean eligibleToStartBasic;
2120

22-
GetBasicStatusResponse(StreamInput in) throws IOException {
23-
eligibleToStartBasic = in.readBoolean();
24-
}
25-
2621
public GetBasicStatusResponse(boolean eligibleToStartBasic) {
2722
this.eligibleToStartBasic = eligibleToStartBasic;
2823
}

x-pack/plugin/core/src/main/java/org/elasticsearch/license/RestGetBasicStatus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public List<Route> routes() {
2929
@Override
3030
protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) {
3131
final var request = new GetBasicStatusRequest(RestUtils.getMasterNodeTimeout(restRequest));
32-
return channel -> client.execute(GetBasicStatusAction.INSTANCE, request, new RestToXContentListener<>(channel));
32+
return channel -> client.execute(TransportGetBasicStatusAction.TYPE, request, new RestToXContentListener<>(channel));
3333
}
3434

3535
@Override

x-pack/plugin/core/src/main/java/org/elasticsearch/license/TransportGetBasicStatusAction.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,45 @@
77
package org.elasticsearch.license;
88

99
import org.elasticsearch.action.ActionListener;
10+
import org.elasticsearch.action.ActionType;
1011
import org.elasticsearch.action.support.ActionFilters;
11-
import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
12+
import org.elasticsearch.action.support.ChannelActionListener;
13+
import org.elasticsearch.action.support.local.TransportLocalClusterStateAction;
1214
import org.elasticsearch.cluster.ClusterState;
1315
import org.elasticsearch.cluster.block.ClusterBlockException;
1416
import org.elasticsearch.cluster.block.ClusterBlockLevel;
1517
import org.elasticsearch.cluster.service.ClusterService;
1618
import org.elasticsearch.common.util.concurrent.EsExecutors;
19+
import org.elasticsearch.core.UpdateForV10;
1720
import org.elasticsearch.injection.guice.Inject;
1821
import org.elasticsearch.tasks.Task;
19-
import org.elasticsearch.threadpool.ThreadPool;
2022
import org.elasticsearch.transport.TransportService;
2123

22-
public class TransportGetBasicStatusAction extends TransportMasterNodeReadAction<GetBasicStatusRequest, GetBasicStatusResponse> {
24+
public class TransportGetBasicStatusAction extends TransportLocalClusterStateAction<GetBasicStatusRequest, GetBasicStatusResponse> {
25+
public static final ActionType<GetBasicStatusResponse> TYPE = new ActionType<>("cluster:admin/xpack/license/basic_status");
2326

27+
/**
28+
* Prior to 9.3 this was a TransportMasterNodeReadAction so for BwC it must be registered with the TransportService until
29+
* we no longer need to support calling this action remotely.
30+
*/
31+
@UpdateForV10(owner = UpdateForV10.Owner.DISTRIBUTED_COORDINATION)
32+
@SuppressWarnings("this-escape")
2433
@Inject
25-
public TransportGetBasicStatusAction(
26-
TransportService transportService,
27-
ClusterService clusterService,
28-
ThreadPool threadPool,
29-
ActionFilters actionFilters
30-
) {
31-
super(
32-
GetBasicStatusAction.NAME,
33-
transportService,
34-
clusterService,
35-
threadPool,
36-
actionFilters,
34+
public TransportGetBasicStatusAction(TransportService transportService, ClusterService clusterService, ActionFilters actionFilters) {
35+
super(TYPE.name(), actionFilters, transportService.getTaskManager(), clusterService, EsExecutors.DIRECT_EXECUTOR_SERVICE);
36+
37+
transportService.registerRequestHandler(
38+
actionName,
39+
executor,
40+
false,
41+
true,
3742
GetBasicStatusRequest::new,
38-
GetBasicStatusResponse::new,
39-
EsExecutors.DIRECT_EXECUTOR_SERVICE
43+
(request, channel, task) -> executeDirect(task, request, new ChannelActionListener<>(channel))
4044
);
4145
}
4246

4347
@Override
44-
protected void masterOperation(
48+
protected void localClusterStateOperation(
4549
Task task,
4650
GetBasicStatusRequest request,
4751
ClusterState state,
@@ -54,7 +58,6 @@ protected void masterOperation(
5458
License license = licensesMetadata.getLicense();
5559
listener.onResponse(new GetBasicStatusResponse(license == null || License.LicenseType.isBasic(license.type()) == false));
5660
}
57-
5861
}
5962

6063
@Override

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackPlugin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.elasticsearch.index.mapper.MetadataFieldMapper;
3939
import org.elasticsearch.indices.recovery.RecoverySettings;
4040
import org.elasticsearch.license.ClusterStateLicenseService;
41-
import org.elasticsearch.license.GetBasicStatusAction;
4241
import org.elasticsearch.license.GetLicenseAction;
4342
import org.elasticsearch.license.GetTrialStatusAction;
4443
import org.elasticsearch.license.License;
@@ -365,7 +364,7 @@ public List<ActionHandler> getActions() {
365364
actions.add(new ActionHandler(PostStartTrialAction.INSTANCE, TransportPostStartTrialAction.class));
366365
actions.add(new ActionHandler(GetTrialStatusAction.INSTANCE, TransportGetTrialStatusAction.class));
367366
actions.add(new ActionHandler(PostStartBasicAction.INSTANCE, TransportPostStartBasicAction.class));
368-
actions.add(new ActionHandler(GetBasicStatusAction.INSTANCE, TransportGetBasicStatusAction.class));
367+
actions.add(new ActionHandler(TransportGetBasicStatusAction.TYPE, TransportGetBasicStatusAction.class));
369368
actions.add(new ActionHandler(TransportGetFeatureUsageAction.TYPE, TransportGetFeatureUsageAction.class));
370369
actions.add(new ActionHandler(TermsEnumAction.INSTANCE, TransportTermsEnumAction.class));
371370
actions.add(new ActionHandler(TransportDeleteAsyncResultAction.TYPE, TransportDeleteAsyncResultAction.class));

x-pack/plugin/core/src/test/java/org/elasticsearch/license/StartBasicLicenseTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ public void testUnacknowledgedStartBasicLicense() throws Exception {
8585
}
8686

8787
private static GetBasicStatusResponse getBasicStatus() {
88-
return safeGet(clusterAdmin().execute(GetBasicStatusAction.INSTANCE, new GetBasicStatusRequest(TEST_REQUEST_TIMEOUT)));
88+
return safeGet(client().execute(TransportGetBasicStatusAction.TYPE, new GetBasicStatusRequest(TEST_REQUEST_TIMEOUT)));
8989
}
9090

9191
private static PostStartBasicResponse startBasic(boolean acknowledged) {
9292
return safeGet(
93-
clusterAdmin().execute(
93+
client().execute(
9494
PostStartBasicAction.INSTANCE,
9595
new PostStartBasicRequest(TEST_REQUEST_TIMEOUT, TEST_REQUEST_TIMEOUT).acknowledge(acknowledged)
9696
)

0 commit comments

Comments
 (0)