Skip to content

Commit 9d07229

Browse files
authored
Change cluster info actions to be able to resolve data streams. (#56878)
With this change the following APIs will be able to resolve data streams: get index, get mappings and ilm explain APIs. Relates to #53100
1 parent 3fc0d29 commit 9d07229

File tree

9 files changed

+127
-54
lines changed

9 files changed

+127
-54
lines changed

rest-api-spec/src/main/resources/rest-api-spec/test/indices.data_stream/20_unsupported_apis.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@
4040
indices.delete:
4141
index: logs-foobar
4242

43-
- do:
44-
catch: bad_request
45-
indices.get:
46-
index: logs-foobar
47-
4843
- do:
4944
catch: bad_request
5045
indices.put_settings:
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
setup:
3+
- skip:
4+
features: allowed_warnings
5+
- do:
6+
allowed_warnings:
7+
- "index template [logs_template] has index patterns [logs-foobar] matching patterns from existing older templates [global] with patterns (global => [*]); this template [logs_template] will take precedence during new index creation"
8+
indices.put_index_template:
9+
name: logs_template
10+
body:
11+
index_patterns: logs-foobar
12+
data_stream:
13+
timestamp_field: '@timestamp'
14+
15+
- do:
16+
indices.create_data_stream:
17+
name: logs-foobar
18+
19+
---
20+
teardown:
21+
- do:
22+
indices.delete_data_stream:
23+
name: logs-foobar
24+
25+
---
26+
"Verify get index api":
27+
- skip:
28+
version: " - 7.99.99"
29+
reason: "wait until backported"
30+
31+
- do:
32+
indices.get:
33+
index: logs-foobar
34+
- is_true: logs-foobar-000001
35+
- is_false: logs-foobar
36+
- match: { logs-foobar-000001.settings.index.number_of_shards: '1' }
37+
38+
---
39+
"Verify get mapping api":
40+
- skip:
41+
version: " - 7.99.99"
42+
reason: "wait until backported"
43+
44+
- do:
45+
indices.get_mapping:
46+
index: logs-foobar
47+
- is_true: logs-foobar-000001.mappings
48+
- is_false: logs-foobar.mappings

server/src/internalClusterTest/java/org/elasticsearch/indices/DataStreamIT.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,12 @@ public void testResolvabilityOfDataStreamsInAPIs() throws Exception {
234234
verifyResolvability(dataStreamName, client().admin().indices().prepareUpgradeStatus(dataStreamName), false);
235235
verifyResolvability(dataStreamName, getAliases(dataStreamName), true);
236236
verifyResolvability(dataStreamName, getFieldMapping(dataStreamName), true);
237-
verifyResolvability(dataStreamName, getMapping(dataStreamName), true);
237+
verifyResolvability(dataStreamName, getMapping(dataStreamName), false);
238238
verifyResolvability(dataStreamName, getSettings(dataStreamName), false);
239239
verifyResolvability(dataStreamName, health(dataStreamName), false);
240240
verifyResolvability(dataStreamName, client().admin().cluster().prepareState().setIndices(dataStreamName), false);
241241
verifyResolvability(dataStreamName, client().prepareFieldCaps(dataStreamName).setFields("*"), false);
242+
verifyResolvability(dataStreamName, client().admin().indices().prepareGetIndex().addIndices(dataStreamName), false);
242243

243244
request = new CreateDataStreamAction.Request("logs-barbaz");
244245
client().admin().indices().createDataStream(request).actionGet();
@@ -262,11 +263,12 @@ public void testResolvabilityOfDataStreamsInAPIs() throws Exception {
262263
verifyResolvability(wildcardExpression, client().admin().indices().prepareUpgradeStatus(wildcardExpression), false);
263264
verifyResolvability(wildcardExpression, getAliases(wildcardExpression), true);
264265
verifyResolvability(wildcardExpression, getFieldMapping(wildcardExpression), true);
265-
verifyResolvability(wildcardExpression, getMapping(wildcardExpression), true);
266+
verifyResolvability(wildcardExpression, getMapping(wildcardExpression), false);
266267
verifyResolvability(wildcardExpression, getSettings(wildcardExpression), false);
267268
verifyResolvability(wildcardExpression, health(wildcardExpression), false);
268269
verifyResolvability(wildcardExpression, client().admin().cluster().prepareState().setIndices(wildcardExpression), false);
269270
verifyResolvability(wildcardExpression, client().prepareFieldCaps(wildcardExpression).setFields("*"), false);
271+
verifyResolvability(wildcardExpression, client().admin().indices().prepareGetIndex().addIndices(wildcardExpression), false);
270272
}
271273

272274
private static void verifyResolvability(String dataStream, ActionRequestBuilder requestBuilder, boolean fail) {

server/src/main/java/org/elasticsearch/action/admin/indices/get/TransportGetIndexAction.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,11 @@
1919

2020
package org.elasticsearch.action.admin.indices.get;
2121

22-
2322
import org.elasticsearch.action.ActionListener;
2423
import org.elasticsearch.action.admin.indices.get.GetIndexRequest.Feature;
2524
import org.elasticsearch.action.support.ActionFilters;
2625
import org.elasticsearch.action.support.master.info.TransportClusterInfoAction;
2726
import org.elasticsearch.cluster.ClusterState;
28-
import org.elasticsearch.cluster.block.ClusterBlockException;
29-
import org.elasticsearch.cluster.block.ClusterBlockLevel;
3027
import org.elasticsearch.cluster.metadata.AliasMetadata;
3128
import org.elasticsearch.cluster.metadata.IndexMetadata;
3229
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
@@ -68,18 +65,6 @@ public TransportGetIndexAction(TransportService transportService, ClusterService
6865
this.indexScopedSettings = indexScopedSettings;
6966
}
7067

71-
@Override
72-
protected String executor() {
73-
// very lightweight operation, no need to fork
74-
return ThreadPool.Names.SAME;
75-
}
76-
77-
@Override
78-
protected ClusterBlockException checkBlock(GetIndexRequest request, ClusterState state) {
79-
return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ,
80-
indexNameExpressionResolver.concreteIndexNames(state, request));
81-
}
82-
8368
@Override
8469
protected GetIndexResponse read(StreamInput in) throws IOException {
8570
return new GetIndexResponse(in);

server/src/main/java/org/elasticsearch/action/admin/indices/mapping/get/TransportGetMappingsAction.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import org.elasticsearch.action.support.ActionFilters;
2626
import org.elasticsearch.action.support.master.info.TransportClusterInfoAction;
2727
import org.elasticsearch.cluster.ClusterState;
28-
import org.elasticsearch.cluster.block.ClusterBlockException;
29-
import org.elasticsearch.cluster.block.ClusterBlockLevel;
3028
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
3129
import org.elasticsearch.cluster.metadata.MappingMetadata;
3230
import org.elasticsearch.cluster.service.ClusterService;
@@ -54,18 +52,6 @@ public TransportGetMappingsAction(TransportService transportService, ClusterServ
5452
this.indicesService = indicesService;
5553
}
5654

57-
@Override
58-
protected String executor() {
59-
// very lightweight operation, no need to fork
60-
return ThreadPool.Names.SAME;
61-
}
62-
63-
@Override
64-
protected ClusterBlockException checkBlock(GetMappingsRequest request, ClusterState state) {
65-
return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ,
66-
indexNameExpressionResolver.concreteIndexNames(state, request));
67-
}
68-
6955
@Override
7056
protected GetMappingsResponse read(StreamInput in) throws IOException {
7157
return new GetMappingsResponse(in);

server/src/main/java/org/elasticsearch/action/support/master/info/TransportClusterInfoAction.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@
2323
import org.elasticsearch.action.support.ActionFilters;
2424
import org.elasticsearch.action.support.master.TransportMasterNodeReadAction;
2525
import org.elasticsearch.cluster.ClusterState;
26+
import org.elasticsearch.cluster.block.ClusterBlockException;
27+
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2628
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
2729
import org.elasticsearch.cluster.service.ClusterService;
2830
import org.elasticsearch.common.io.stream.Writeable;
2931
import org.elasticsearch.tasks.Task;
3032
import org.elasticsearch.threadpool.ThreadPool;
3133
import org.elasticsearch.transport.TransportService;
3234

33-
3435
public abstract class TransportClusterInfoAction<Request extends ClusterInfoRequest<Request>, Response extends ActionResponse>
3536
extends TransportMasterNodeReadAction<Request, Response> {
3637

@@ -46,10 +47,16 @@ protected String executor() {
4647
return ThreadPool.Names.SAME;
4748
}
4849

50+
@Override
51+
protected ClusterBlockException checkBlock(Request request, ClusterState state) {
52+
return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ,
53+
indexNameExpressionResolver.concreteIndexNames(state, request, true));
54+
}
55+
4956
@Override
5057
protected final void masterOperation(Task task, final Request request, final ClusterState state,
5158
final ActionListener<Response> listener) {
52-
String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(state, request);
59+
String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(state, request, true);
5360
doMasterOperation(request, concreteIndices, state, listener);
5461
}
5562

server/src/test/java/org/elasticsearch/action/admin/indices/get/GetIndexActionTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ protected void doMasterOperation(GetIndexRequest request, String[] concreteIndic
123123

124124
static class Resolver extends IndexNameExpressionResolver {
125125
@Override
126-
public String[] concreteIndexNames(ClusterState state, IndicesRequest request) {
126+
public String[] concreteIndexNames(ClusterState state, IndicesRequest request, boolean includeDataStreams) {
127127
return request.indices();
128128
}
129129

130130
@Override
131-
public Index[] concreteIndices(ClusterState state, IndicesRequest request) {
131+
public Index[] concreteIndices(ClusterState state, IndicesRequest request, boolean includeDataStreams) {
132132
Index[] out = new Index[request.indices().length];
133133
for (int x = 0; x < out.length; x++) {
134134
out[x] = new Index(request.indices()[x], "_na_");

x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/action/TransportExplainLifecycleAction.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import org.elasticsearch.action.support.ActionFilters;
1212
import org.elasticsearch.action.support.master.info.TransportClusterInfoAction;
1313
import org.elasticsearch.cluster.ClusterState;
14-
import org.elasticsearch.cluster.block.ClusterBlockException;
15-
import org.elasticsearch.cluster.block.ClusterBlockLevel;
1614
import org.elasticsearch.cluster.metadata.IndexMetadata;
1715
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
1816
import org.elasticsearch.cluster.service.ClusterService;
@@ -59,23 +57,11 @@ public TransportExplainLifecycleAction(TransportService transportService, Cluste
5957
this.indexLifecycleService = indexLifecycleService;
6058
}
6159

62-
@Override
63-
protected String executor() {
64-
// very lightweight operation, no need to fork
65-
return ThreadPool.Names.SAME;
66-
}
67-
6860
@Override
6961
protected ExplainLifecycleResponse read(StreamInput in) throws IOException {
7062
return new ExplainLifecycleResponse(in);
7163
}
7264

73-
@Override
74-
protected ClusterBlockException checkBlock(ExplainLifecycleRequest request, ClusterState state) {
75-
return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ,
76-
indexNameExpressionResolver.concreteIndexNames(state, request));
77-
}
78-
7965
@Override
8066
protected void doMasterOperation(ExplainLifecycleRequest request, String[] concreteIndices, ClusterState state,
8167
ActionListener<ExplainLifecycleResponse> listener) {

x-pack/plugin/src/test/resources/rest-api-spec/test/data_stream/10_data_stream_resolvability.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,67 @@
4545
indices.delete_data_stream:
4646
name: logs-foobar
4747
- is_true: acknowledged
48+
49+
---
50+
"Verify data stream resolvability in ilm explain api":
51+
- skip:
52+
version: " - 7.99.99"
53+
reason: "wait until backported"
54+
features: allowed_warnings
55+
56+
- do:
57+
ilm.put_lifecycle:
58+
policy: "my_lifecycle"
59+
body: |
60+
{
61+
"policy": {
62+
"phases": {
63+
"warm": {
64+
"min_age": "1000s",
65+
"actions": {
66+
"forcemerge": {
67+
"max_num_segments": 10000
68+
}
69+
}
70+
},
71+
"hot": {
72+
"min_age": "1000s",
73+
"actions": { }
74+
}
75+
}
76+
}
77+
}
78+
79+
- do:
80+
allowed_warnings:
81+
- "index template [generic_logs_template] has index patterns [logs-*] matching patterns from existing older templates [global] with patterns (global => [*]); this template [generic_logs_template] will take precedence during new index creation"
82+
indices.put_index_template:
83+
name: generic_logs_template
84+
body:
85+
index_patterns: logs-*
86+
data_stream:
87+
timestamp_field: '@timestamp'
88+
template:
89+
settings:
90+
index.lifecycle.name: "my_lifecycle"
91+
mappings:
92+
properties:
93+
'@timestamp':
94+
type: date
95+
96+
- do:
97+
index:
98+
index: logs-foobar
99+
refresh: true
100+
body: { foo: bar }
101+
102+
- do:
103+
ilm.explain_lifecycle:
104+
index: logs-foobar
105+
- is_false: indices.logs-foobar.managed
106+
- is_true: indices.logs-foobar-000001.managed
107+
108+
- do:
109+
indices.delete_data_stream:
110+
name: logs-foobar
111+
- is_true: acknowledged

0 commit comments

Comments
 (0)