Skip to content

Commit 4e9be6a

Browse files
[Backport 2.x] Add request parameter 'cluster_manager_timeout' as the alternative for 'master_timeout', and deprecate 'master_timeout' - in CAT APIs (#2716)
Apply the change of CAT Nodes API in PR #2435 to other applicable CAT APIs. - Deprecate the request parameter `master_timeout` that used in many CAT APIs. - Add alternative new request parameter `cluster_manager_timeout`. - Add unit tests. Signed-off-by: Tianli Feng <ftianli@amazon.com> (cherry picked from commit 78465b4)
1 parent dcfa3fb commit 4e9be6a

25 files changed

+346
-76
lines changed

rest-api-spec/src/main/resources/rest-api-spec/api/cat.allocation.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,15 @@
5555
},
5656
"master_timeout":{
5757
"type":"time",
58-
"description":"Explicit operation timeout for connection to master node"
58+
"description":"Explicit operation timeout for connection to master node",
59+
"deprecated":{
60+
"version":"2.0.0",
61+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
62+
}
63+
},
64+
"cluster_manager_timeout":{
65+
"type":"time",
66+
"description":"Explicit operation timeout for connection to cluster-manager node"
5967
},
6068
"h":{
6169
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.cluster_manager.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,15 @@
3636
},
3737
"master_timeout":{
3838
"type":"time",
39-
"description":"Explicit operation timeout for connection to master node"
39+
"description":"Explicit operation timeout for connection to master node",
40+
"deprecated":{
41+
"version":"2.0.0",
42+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
43+
}
44+
},
45+
"cluster_manager_timeout":{
46+
"type":"time",
47+
"description":"Explicit operation timeout for connection to cluster-manager node"
4048
},
4149
"h":{
4250
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.indices.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,15 @@
5555
},
5656
"master_timeout":{
5757
"type":"time",
58-
"description":"Explicit operation timeout for connection to master node"
58+
"description":"Explicit operation timeout for connection to master node",
59+
"deprecated":{
60+
"version":"2.0.0",
61+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
62+
}
63+
},
64+
"cluster_manager_timeout":{
65+
"type":"time",
66+
"description":"Explicit operation timeout for connection to cluster-manager node"
5967
},
6068
"h":{
6169
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.nodeattrs.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@
2626
},
2727
"master_timeout":{
2828
"type":"time",
29-
"description":"Explicit operation timeout for connection to master node"
29+
"description":"Explicit operation timeout for connection to master node",
30+
"deprecated":{
31+
"version":"2.0.0",
32+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
33+
}
34+
},
35+
"cluster_manager_timeout":{
36+
"type":"time",
37+
"description":"Explicit operation timeout for connection to cluster-manager node"
3038
},
3139
"h":{
3240
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.pending_tasks.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@
2626
},
2727
"master_timeout":{
2828
"type":"time",
29-
"description":"Explicit operation timeout for connection to master node"
29+
"description":"Explicit operation timeout for connection to master node",
30+
"deprecated":{
31+
"version":"2.0.0",
32+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
33+
}
34+
},
35+
"cluster_manager_timeout":{
36+
"type":"time",
37+
"description":"Explicit operation timeout for connection to cluster-manager node"
3038
},
3139
"h":{
3240
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.plugins.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@
2626
},
2727
"master_timeout":{
2828
"type":"time",
29-
"description":"Explicit operation timeout for connection to master node"
29+
"description":"Explicit operation timeout for connection to master node",
30+
"deprecated":{
31+
"version":"2.0.0",
32+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
33+
}
34+
},
35+
"cluster_manager_timeout":{
36+
"type":"time",
37+
"description":"Explicit operation timeout for connection to cluster-manager node"
3038
},
3139
"h":{
3240
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.repositories.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,15 @@
2727
},
2828
"master_timeout":{
2929
"type":"time",
30-
"description":"Explicit operation timeout for connection to master node"
30+
"description":"Explicit operation timeout for connection to master node",
31+
"deprecated":{
32+
"version":"2.0.0",
33+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
34+
}
35+
},
36+
"cluster_manager_timeout":{
37+
"type":"time",
38+
"description":"Explicit operation timeout for connection to cluster-manager node"
3139
},
3240
"h":{
3341
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.segments.json

+12
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@
4949
"pb"
5050
]
5151
},
52+
"master_timeout":{
53+
"type":"time",
54+
"description":"Explicit operation timeout for connection to master node",
55+
"deprecated":{
56+
"version":"2.0.0",
57+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
58+
}
59+
},
60+
"cluster_manager_timeout":{
61+
"type":"time",
62+
"description":"Explicit operation timeout for connection to cluster-manager node"
63+
},
5264
"h":{
5365
"type":"list",
5466
"description":"Comma-separated list of column names to display"

rest-api-spec/src/main/resources/rest-api-spec/api/cat.shards.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,15 @@
5555
},
5656
"master_timeout":{
5757
"type":"time",
58-
"description":"Explicit operation timeout for connection to master node"
58+
"description":"Explicit operation timeout for connection to master node",
59+
"deprecated":{
60+
"version":"2.0.0",
61+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
62+
}
63+
},
64+
"cluster_manager_timeout":{
65+
"type":"time",
66+
"description":"Explicit operation timeout for connection to cluster-manager node"
5967
},
6068
"h":{
6169
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.snapshots.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,15 @@
3939
},
4040
"master_timeout":{
4141
"type":"time",
42-
"description":"Explicit operation timeout for connection to master node"
42+
"description":"Explicit operation timeout for connection to master node",
43+
"deprecated":{
44+
"version":"2.0.0",
45+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
46+
}
47+
},
48+
"cluster_manager_timeout":{
49+
"type":"time",
50+
"description":"Explicit operation timeout for connection to cluster-manager node"
4351
},
4452
"h":{
4553
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.templates.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,15 @@
3838
},
3939
"master_timeout":{
4040
"type":"time",
41-
"description":"Explicit operation timeout for connection to master node"
41+
"description":"Explicit operation timeout for connection to master node",
42+
"deprecated":{
43+
"version":"2.0.0",
44+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
45+
}
46+
},
47+
"cluster_manager_timeout":{
48+
"type":"time",
49+
"description":"Explicit operation timeout for connection to cluster-manager node"
4250
},
4351
"h":{
4452
"type":"list",

rest-api-spec/src/main/resources/rest-api-spec/api/cat.thread_pool.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,15 @@
5454
},
5555
"master_timeout":{
5656
"type":"time",
57-
"description":"Explicit operation timeout for connection to master node"
57+
"description":"Explicit operation timeout for connection to master node",
58+
"deprecated":{
59+
"version":"2.0.0",
60+
"description":"To promote inclusive language, use 'cluster_manager_timeout' instead."
61+
}
62+
},
63+
"cluster_manager_timeout":{
64+
"type":"time",
65+
"description":"Explicit operation timeout for connection to cluster-manager node"
5866
},
5967
"h":{
6068
"type":"list",

server/src/main/java/org/opensearch/rest/action/cat/RestAllocationAction.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.opensearch.cluster.routing.ShardRouting;
4545
import org.opensearch.common.Strings;
4646
import org.opensearch.common.Table;
47+
import org.opensearch.common.logging.DeprecationLogger;
4748
import org.opensearch.common.unit.ByteSizeValue;
4849
import org.opensearch.rest.RestRequest;
4950
import org.opensearch.rest.RestResponse;
@@ -58,6 +59,8 @@
5859

5960
public class RestAllocationAction extends AbstractCatAction {
6061

62+
private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(RestAllocationAction.class);
63+
6164
@Override
6265
public List<Route> routes() {
6366
return unmodifiableList(asList(new Route(GET, "/_cat/allocation"), new Route(GET, "/_cat/allocation/{nodes}")));
@@ -79,7 +82,8 @@ public RestChannelConsumer doCatRequest(final RestRequest request, final NodeCli
7982
final ClusterStateRequest clusterStateRequest = new ClusterStateRequest();
8083
clusterStateRequest.clear().routingTable(true);
8184
clusterStateRequest.local(request.paramAsBoolean("local", clusterStateRequest.local()));
82-
clusterStateRequest.masterNodeTimeout(request.paramAsTime("master_timeout", clusterStateRequest.masterNodeTimeout()));
85+
clusterStateRequest.masterNodeTimeout(request.paramAsTime("cluster_manager_timeout", clusterStateRequest.masterNodeTimeout()));
86+
parseDeprecatedMasterTimeoutParameter(clusterStateRequest, request, deprecationLogger, getName());
8387

8488
return channel -> client.admin().cluster().state(clusterStateRequest, new RestActionListener<ClusterStateResponse>(channel) {
8589
@Override

server/src/main/java/org/opensearch/rest/action/cat/RestIndicesAction.java

+76-50
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
package org.opensearch.rest.action.cat;
3434

35+
import org.opensearch.OpenSearchParseException;
3536
import org.opensearch.action.ActionListener;
3637
import org.opensearch.action.ActionResponse;
3738
import org.opensearch.action.admin.cluster.health.ClusterHealthRequest;
@@ -52,6 +53,7 @@
5253
import org.opensearch.cluster.metadata.IndexMetadata;
5354
import org.opensearch.common.Strings;
5455
import org.opensearch.common.Table;
56+
import org.opensearch.common.logging.DeprecationLogger;
5557
import org.opensearch.common.settings.Settings;
5658
import org.opensearch.common.time.DateFormatter;
5759
import org.opensearch.common.unit.TimeValue;
@@ -82,6 +84,11 @@
8284
public class RestIndicesAction extends AbstractCatAction {
8385

8486
private static final DateFormatter STRICT_DATE_TIME_FORMATTER = DateFormatter.forPattern("strict_date_time");
87+
private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(RestIndicesAction.class);
88+
private static final String MASTER_TIMEOUT_DEPRECATED_MESSAGE =
89+
"Deprecated parameter [master_timeout] used. To promote inclusive language, please use [cluster_manager_timeout] instead. It will be unsupported in a future major version.";
90+
private static final String DUPLICATE_PARAMETER_ERROR_MESSAGE =
91+
"Please only use one of the request parameters [master_timeout, cluster_manager_timeout].";
8592

8693
@Override
8794
public List<Route> routes() {
@@ -109,7 +116,16 @@ public RestChannelConsumer doCatRequest(final RestRequest request, final NodeCli
109116
final String[] indices = Strings.splitStringByCommaToArray(request.param("index"));
110117
final IndicesOptions indicesOptions = IndicesOptions.fromRequest(request, IndicesOptions.strictExpand());
111118
final boolean local = request.paramAsBoolean("local", false);
112-
final TimeValue masterNodeTimeout = request.paramAsTime("master_timeout", DEFAULT_MASTER_NODE_TIMEOUT);
119+
TimeValue clusterManagerTimeout = request.paramAsTime("cluster_manager_timeout", DEFAULT_MASTER_NODE_TIMEOUT);
120+
// Remove the if condition and statements inside after removing MASTER_ROLE.
121+
if (request.hasParam("master_timeout")) {
122+
deprecationLogger.deprecate("cat_indices_master_timeout_parameter", MASTER_TIMEOUT_DEPRECATED_MESSAGE);
123+
if (request.hasParam("cluster_manager_timeout")) {
124+
throw new OpenSearchParseException(DUPLICATE_PARAMETER_ERROR_MESSAGE);
125+
}
126+
clusterManagerTimeout = request.paramAsTime("master_timeout", DEFAULT_MASTER_NODE_TIMEOUT);
127+
}
128+
final TimeValue clusterManagerNodeTimeout = clusterManagerTimeout;
113129
final boolean includeUnloadedSegments = request.paramAsBoolean("include_unloaded_segments", false);
114130

115131
return channel -> {
@@ -120,56 +136,66 @@ public RestResponse buildResponse(final Table table) throws Exception {
120136
}
121137
});
122138

123-
sendGetSettingsRequest(indices, indicesOptions, local, masterNodeTimeout, client, new ActionListener<GetSettingsResponse>() {
124-
@Override
125-
public void onResponse(final GetSettingsResponse getSettingsResponse) {
126-
final GroupedActionListener<ActionResponse> groupedListener = createGroupedListener(request, 4, listener);
127-
groupedListener.onResponse(getSettingsResponse);
128-
129-
// The list of indices that will be returned is determined by the indices returned from the Get Settings call.
130-
// All the other requests just provide additional detail, and wildcards may be resolved differently depending on the
131-
// type of request in the presence of security plugins (looking at you, ClusterHealthRequest), so
132-
// force the IndicesOptions for all the sub-requests to be as inclusive as possible.
133-
final IndicesOptions subRequestIndicesOptions = IndicesOptions.lenientExpandHidden();
134-
135-
// Indices that were successfully resolved during the get settings request might be deleted when the subsequent cluster
136-
// state, cluster health and indices stats requests execute. We have to distinguish two cases:
137-
// 1) the deleted index was explicitly passed as parameter to the /_cat/indices request. In this case we want the
138-
// subsequent requests to fail.
139-
// 2) the deleted index was resolved as part of a wildcard or _all. In this case, we want the subsequent requests not to
140-
// fail on the deleted index (as we want to ignore wildcards that cannot be resolved).
141-
// This behavior can be ensured by letting the cluster state, cluster health and indices stats requests re-resolve the
142-
// index names with the same indices options that we used for the initial cluster state request (strictExpand).
143-
sendIndicesStatsRequest(
144-
indices,
145-
subRequestIndicesOptions,
146-
includeUnloadedSegments,
147-
client,
148-
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
149-
);
150-
sendClusterStateRequest(
151-
indices,
152-
subRequestIndicesOptions,
153-
local,
154-
masterNodeTimeout,
155-
client,
156-
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
157-
);
158-
sendClusterHealthRequest(
159-
indices,
160-
subRequestIndicesOptions,
161-
local,
162-
masterNodeTimeout,
163-
client,
164-
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
165-
);
166-
}
167-
168-
@Override
169-
public void onFailure(final Exception e) {
170-
listener.onFailure(e);
139+
sendGetSettingsRequest(
140+
indices,
141+
indicesOptions,
142+
local,
143+
clusterManagerNodeTimeout,
144+
client,
145+
new ActionListener<GetSettingsResponse>() {
146+
@Override
147+
public void onResponse(final GetSettingsResponse getSettingsResponse) {
148+
final GroupedActionListener<ActionResponse> groupedListener = createGroupedListener(request, 4, listener);
149+
groupedListener.onResponse(getSettingsResponse);
150+
151+
// The list of indices that will be returned is determined by the indices returned from the Get Settings call.
152+
// All the other requests just provide additional detail, and wildcards may be resolved differently depending on the
153+
// type of request in the presence of security plugins (looking at you, ClusterHealthRequest), so
154+
// force the IndicesOptions for all the sub-requests to be as inclusive as possible.
155+
final IndicesOptions subRequestIndicesOptions = IndicesOptions.lenientExpandHidden();
156+
157+
// Indices that were successfully resolved during the get settings request might be deleted when the subsequent
158+
// cluster
159+
// state, cluster health and indices stats requests execute. We have to distinguish two cases:
160+
// 1) the deleted index was explicitly passed as parameter to the /_cat/indices request. In this case we want the
161+
// subsequent requests to fail.
162+
// 2) the deleted index was resolved as part of a wildcard or _all. In this case, we want the subsequent requests
163+
// not to
164+
// fail on the deleted index (as we want to ignore wildcards that cannot be resolved).
165+
// This behavior can be ensured by letting the cluster state, cluster health and indices stats requests re-resolve
166+
// the
167+
// index names with the same indices options that we used for the initial cluster state request (strictExpand).
168+
sendIndicesStatsRequest(
169+
indices,
170+
subRequestIndicesOptions,
171+
includeUnloadedSegments,
172+
client,
173+
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
174+
);
175+
sendClusterStateRequest(
176+
indices,
177+
subRequestIndicesOptions,
178+
local,
179+
clusterManagerNodeTimeout,
180+
client,
181+
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
182+
);
183+
sendClusterHealthRequest(
184+
indices,
185+
subRequestIndicesOptions,
186+
local,
187+
clusterManagerNodeTimeout,
188+
client,
189+
ActionListener.wrap(groupedListener::onResponse, groupedListener::onFailure)
190+
);
191+
}
192+
193+
@Override
194+
public void onFailure(final Exception e) {
195+
listener.onFailure(e);
196+
}
171197
}
172-
});
198+
);
173199
};
174200
}
175201

0 commit comments

Comments
 (0)