Skip to content

Commit 07f629e

Browse files
committed
Remove ::* selector
1 parent d7db1f5 commit 07f629e

File tree

10 files changed

+120
-213
lines changed

10 files changed

+120
-213
lines changed

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ static TransportVersion def(int id) {
180180
public static final TransportVersion REMOVE_DESIRED_NODE_VERSION = def(9_004_0_00);
181181
public static final TransportVersion ESQL_DRIVER_TASK_DESCRIPTION = def(9_005_0_00);
182182
public static final TransportVersion ESQL_RETRY_ON_SHARD_LEVEL_FAILURE = def(9_006_0_00);
183+
public static final TransportVersion REMOVE_ALL_APPLICABLE_SELECTOR = def(9_007_0_00);
183184

184185
/*
185186
* STOP! READ THIS FIRST! No, really,

server/src/main/java/org/elasticsearch/action/admin/indices/resolve/ResolveIndexAction.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -646,10 +646,6 @@ private static void enrichIndexAbstraction(
646646
: switch (resolvedExpression.selector()) {
647647
case DATA -> dataStream.getDataComponent().getIndices().stream();
648648
case FAILURES -> dataStream.getFailureIndices().stream();
649-
case ALL_APPLICABLE -> Stream.concat(
650-
dataStream.getIndices().stream(),
651-
dataStream.getFailureIndices().stream()
652-
);
653649
};
654650
String[] backingIndices = dataStreamIndices.map(Index::getName).toArray(String[]::new);
655651
dataStreams.add(new ResolvedDataStream(dataStream.getName(), backingIndices, DataStream.TIMESTAMP_FIELD_NAME));
@@ -670,13 +666,6 @@ private static Stream<Index> getAliasIndexStream(ResolvedExpression resolvedExpr
670666
assert ia.isDataStreamRelated() : "Illegal selector [failures] used on non data stream alias";
671667
yield ia.getFailureIndices(metadata).stream();
672668
}
673-
case ALL_APPLICABLE -> {
674-
if (ia.isDataStreamRelated()) {
675-
yield Stream.concat(ia.getIndices().stream(), ia.getFailureIndices(metadata).stream());
676-
} else {
677-
yield ia.getIndices().stream();
678-
}
679-
}
680669
};
681670
}
682671
return aliasIndices;

server/src/main/java/org/elasticsearch/action/admin/indices/rollover/RolloverRequest.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@
1313
import org.elasticsearch.action.IndicesRequest;
1414
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
1515
import org.elasticsearch.action.support.ActiveShardCount;
16-
import org.elasticsearch.action.support.IndexComponentSelector;
1716
import org.elasticsearch.action.support.IndicesOptions;
1817
import org.elasticsearch.action.support.master.AcknowledgedRequest;
19-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2018
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.SelectorResolver;
2119
import org.elasticsearch.common.io.stream.StreamInput;
2220
import org.elasticsearch.common.io.stream.StreamOutput;
2321
import org.elasticsearch.index.mapper.MapperService;
22+
import org.elasticsearch.indices.InvalidIndexNameException;
2423
import org.elasticsearch.tasks.CancellableTask;
2524
import org.elasticsearch.tasks.Task;
2625
import org.elasticsearch.tasks.TaskId;
@@ -126,14 +125,12 @@ public ActionRequestValidationException validate() {
126125
);
127126
}
128127

128+
// Ensure we have a valid selector in the request
129129
if (rolloverTarget != null) {
130-
ResolvedExpression resolvedExpression = SelectorResolver.parseExpression(rolloverTarget, indicesOptions);
131-
IndexComponentSelector selector = resolvedExpression.selector();
132-
if (IndexComponentSelector.ALL_APPLICABLE.equals(selector)) {
133-
validationException = addValidationError(
134-
"rollover cannot be applied to both regular and failure indices at the same time",
135-
validationException
136-
);
130+
try {
131+
SelectorResolver.parseExpression(rolloverTarget, indicesOptions);
132+
} catch (InvalidIndexNameException exception) {
133+
validationException = addValidationError(exception.getMessage(), validationException);
137134
}
138135
}
139136

server/src/main/java/org/elasticsearch/action/support/IndexComponentSelector.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
package org.elasticsearch.action.support;
1111

12+
import org.elasticsearch.TransportVersions;
1213
import org.elasticsearch.common.io.stream.StreamInput;
1314
import org.elasticsearch.common.io.stream.StreamOutput;
1415
import org.elasticsearch.common.io.stream.Writeable;
@@ -23,14 +24,11 @@
2324
* We define as index components the two different sets of indices a data stream could consist of:
2425
* - DATA: represents the backing indices
2526
* - FAILURES: represent the failing indices
26-
* - ALL: represents all available in this expression components, meaning if it's a data stream both backing and failure indices and if it's
27-
* an index only the index itself.
2827
* Note: An index is its own DATA component, but it cannot have a FAILURE component.
2928
*/
3029
public enum IndexComponentSelector implements Writeable {
3130
DATA("data", (byte) 0),
32-
FAILURES("failures", (byte) 1),
33-
ALL_APPLICABLE("*", (byte) 2);
31+
FAILURES("failures", (byte) 1);
3432

3533
private final String key;
3634
private final byte id;
@@ -75,7 +73,13 @@ public static IndexComponentSelector getByKey(String key) {
7573
}
7674

7775
public static IndexComponentSelector read(StreamInput in) throws IOException {
78-
return getById(in.readByte());
76+
byte id = in.readByte();
77+
if (in.getTransportVersion().onOrAfter(TransportVersions.REMOVE_ALL_APPLICABLE_SELECTOR)) {
78+
return getById(id);
79+
} else {
80+
// Legacy value ::*
81+
return id == 2 ? DATA : getById(id);
82+
}
7983
}
8084

8185
// Visible for testing
@@ -95,10 +99,10 @@ public void writeTo(StreamOutput out) throws IOException {
9599
}
96100

97101
public boolean shouldIncludeData() {
98-
return this == ALL_APPLICABLE || this == DATA;
102+
return this == DATA;
99103
}
100104

101105
public boolean shouldIncludeFailures() {
102-
return this == ALL_APPLICABLE || this == FAILURES;
106+
return this == FAILURES;
103107
}
104108
}

server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -364,21 +364,9 @@ protected static Collection<ResolvedExpression> resolveExpressionsToResources(Co
364364
}
365365
} else {
366366
if (isExclusion) {
367-
if (IndexComponentSelector.ALL_APPLICABLE.equals(selector)) {
368-
resources.remove(new ResolvedExpression(baseExpression, IndexComponentSelector.DATA));
369-
resources.remove(new ResolvedExpression(baseExpression, IndexComponentSelector.FAILURES));
370-
} else {
371-
resources.remove(new ResolvedExpression(baseExpression, selector));
372-
}
367+
resources.remove(new ResolvedExpression(baseExpression, selector));
373368
} else if (ensureAliasOrIndexExists(context, baseExpression, selector)) {
374-
if (IndexComponentSelector.ALL_APPLICABLE.equals(selector)) {
375-
resources.add(new ResolvedExpression(baseExpression, IndexComponentSelector.DATA));
376-
if (context.getState().getMetadata().getIndicesLookup().get(baseExpression).isDataStreamRelated()) {
377-
resources.add(new ResolvedExpression(baseExpression, IndexComponentSelector.FAILURES));
378-
}
379-
} else {
380-
resources.add(new ResolvedExpression(baseExpression, selector));
381-
}
369+
resources.add(new ResolvedExpression(baseExpression, selector));
382370
}
383371
}
384372
}
@@ -1046,8 +1034,7 @@ public String[] indexAliases(
10461034

10471035
private static boolean resolvedExpressionsContainsAbstraction(Set<ResolvedExpression> resolvedExpressions, String abstractionName) {
10481036
return resolvedExpressions.contains(new ResolvedExpression(abstractionName))
1049-
|| resolvedExpressions.contains(new ResolvedExpression(abstractionName, IndexComponentSelector.DATA))
1050-
|| resolvedExpressions.contains(new ResolvedExpression(abstractionName, IndexComponentSelector.ALL_APPLICABLE));
1037+
|| resolvedExpressions.contains(new ResolvedExpression(abstractionName, IndexComponentSelector.DATA));
10511038
}
10521039

10531040
/**
@@ -1700,9 +1687,11 @@ private static Set<ResolvedExpression> expandToOpenClosed(
17001687
final IndexMetadata.State excludeState = excludeState(context.getOptions());
17011688
Set<ResolvedExpression> resources = new HashSet<>();
17021689
if (context.isPreserveAliases() && indexAbstraction.getType() == Type.ALIAS) {
1703-
expandToApplicableSelectors(indexAbstraction, selector, resources);
1690+
resources.add(new ResolvedExpression(indexAbstraction.getName(), selector));
1691+
// TODO-MARY expandToApplicableSelectors(indexAbstraction, selector, resources);
17041692
} else if (context.isPreserveDataStreams() && indexAbstraction.getType() == Type.DATA_STREAM) {
1705-
expandToApplicableSelectors(indexAbstraction, selector, resources);
1693+
resources.add(new ResolvedExpression(indexAbstraction.getName(), selector));
1694+
// TODO-MARY expandToApplicableSelectors(indexAbstraction, selector, resources);
17061695
} else {
17071696
if (shouldIncludeRegularIndices(context.getOptions(), selector)) {
17081697
for (int i = 0, n = indexAbstraction.getIndices().size(); i < n; i++) {
@@ -1731,9 +1720,7 @@ private static Set<ResolvedExpression> expandToOpenClosed(
17311720

17321721
/**
17331722
* Adds the abstraction and selector to the results when preserving data streams and aliases at wildcard resolution. If a selector
1734-
* is provided, the result is only added if the selector is applicable to the abstraction provided. If
1735-
* {@link IndexComponentSelector#ALL_APPLICABLE} is given, the selectors are expanded only to those which are applicable to the
1736-
* provided abstraction.
1723+
* is provided, the result is only added if the selector is applicable to the abstraction provided.
17371724
* @param indexAbstraction abstraction to add
17381725
* @param selector The selector to add
17391726
* @param resources Result collector which is updated with all applicable resolved expressions for a given abstraction and selector
@@ -1744,12 +1731,7 @@ private static void expandToApplicableSelectors(
17441731
IndexComponentSelector selector,
17451732
Set<ResolvedExpression> resources
17461733
) {
1747-
if (IndexComponentSelector.ALL_APPLICABLE.equals(selector)) {
1748-
resources.add(new ResolvedExpression(indexAbstraction.getName(), IndexComponentSelector.DATA));
1749-
if (indexAbstraction.isDataStreamRelated()) {
1750-
resources.add(new ResolvedExpression(indexAbstraction.getName(), IndexComponentSelector.FAILURES));
1751-
}
1752-
} else if (selector == null || indexAbstraction.isDataStreamRelated() || selector.shouldIncludeFailures() == false) {
1734+
if (selector == null || indexAbstraction.isDataStreamRelated() || selector.shouldIncludeFailures() == false) {
17531735
resources.add(new ResolvedExpression(indexAbstraction.getName(), selector));
17541736
}
17551737
}

server/src/test/java/org/elasticsearch/action/support/IndexComponentSelectorTests.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class IndexComponentSelectorTests extends ESTestCase {
2020
public void testIndexComponentSelectorFromKey() {
2121
assertThat(IndexComponentSelector.getByKey("data"), equalTo(IndexComponentSelector.DATA));
2222
assertThat(IndexComponentSelector.getByKey("failures"), equalTo(IndexComponentSelector.FAILURES));
23-
assertThat(IndexComponentSelector.getByKey("*"), equalTo(IndexComponentSelector.ALL_APPLICABLE));
23+
assertThat(IndexComponentSelector.getByKey("*"), nullValue());
2424
assertThat(IndexComponentSelector.getByKey("d*ta"), nullValue());
2525
assertThat(IndexComponentSelector.getByKey("_all"), nullValue());
2626
assertThat(IndexComponentSelector.getByKey("**"), nullValue());
@@ -30,11 +30,10 @@ public void testIndexComponentSelectorFromKey() {
3030
public void testIndexComponentSelectorFromId() {
3131
assertThat(IndexComponentSelector.getById((byte) 0), equalTo(IndexComponentSelector.DATA));
3232
assertThat(IndexComponentSelector.getById((byte) 1), equalTo(IndexComponentSelector.FAILURES));
33-
assertThat(IndexComponentSelector.getById((byte) 2), equalTo(IndexComponentSelector.ALL_APPLICABLE));
34-
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> IndexComponentSelector.getById((byte) 3));
33+
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class, () -> IndexComponentSelector.getById((byte) 2));
3534
assertThat(
3635
exception.getMessage(),
37-
containsString("Unknown id of index component selector [3], available options are: {0=DATA, 1=FAILURES, 2=ALL_APPLICABLE}")
36+
containsString("Unknown id of index component selector [2], available options are: {0=DATA, 1=FAILURES}")
3837
);
3938
}
4039

server/src/test/java/org/elasticsearch/cluster/metadata/IndexAbstractionResolverTests.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,8 @@ public void testResolveIndexAbstractions() {
7272
expectThrows(IllegalArgumentException.class, () -> resolveAbstractionsSelectorNotAllowed(List.of("index1::data")));
7373
// Selectors allowed, valid selector given, data selector stripped off in result since it is the default
7474
assertThat(resolveAbstractionsSelectorAllowed(List.of("index1::data")), contains("index1"));
75-
// Selectors allowed, wildcard selector provided, data selector stripped off in result since it is the default
76-
// ** only returns ::data since expression is an index
77-
assertThat(resolveAbstractionsSelectorAllowed(List.of("index1::*")), contains("index1"));
7875
// Selectors allowed, invalid selector given
79-
expectThrows(InvalidIndexNameException.class, () -> resolveAbstractionsSelectorAllowed(List.of("index1::custom")));
76+
expectThrows(InvalidIndexNameException.class, () -> resolveAbstractionsSelectorAllowed(List.of("index1::*")));
8077

8178
// == Single Date Math Expressions ==
8279

@@ -116,7 +113,7 @@ public void testResolveIndexAbstractions() {
116113
assertThat(resolveAbstractionsSelectorAllowed(List.of("index*::data")), containsInAnyOrder("index1", "index2"));
117114
// Selectors allowed, wildcard selector provided, data selector stripped off in result since it is the default
118115
// ** only returns ::data since expression is an index
119-
assertThat(resolveAbstractionsSelectorAllowed(List.of("index*::*")), containsInAnyOrder("index1", "index2"));
116+
assertThat(resolveAbstractionsSelectorAllowed(List.of("index*")), containsInAnyOrder("index1", "index2"));
120117
// Selectors allowed, invalid selector given
121118
expectThrows(InvalidIndexNameException.class, () -> resolveAbstractionsSelectorAllowed(List.of("index*::custom")));
122119

@@ -128,11 +125,9 @@ public void testResolveIndexAbstractions() {
128125
expectThrows(IllegalArgumentException.class, () -> resolveAbstractionsSelectorNotAllowed(List.of("data-stream1::data")));
129126
// Selectors allowed, valid selector given
130127
assertThat(resolveAbstractionsSelectorAllowed(List.of("data-stream1::failures")), contains("data-stream1::failures"));
131-
// Selectors allowed, wildcard selector provided
132-
// ** returns both ::data and ::failures since expression is a data stream
133-
// ** data selector stripped off in result since it is the default
128+
// Selectors allowed, data selector is not added in result since it is the default
134129
assertThat(
135-
resolveAbstractionsSelectorAllowed(List.of("data-stream1::*")),
130+
resolveAbstractionsSelectorAllowed(List.of("data-stream1", "data-stream1::failures")),
136131
containsInAnyOrder("data-stream1", "data-stream1::failures")
137132
);
138133
// Selectors allowed, invalid selector given
@@ -146,10 +141,9 @@ public void testResolveIndexAbstractions() {
146141
expectThrows(IllegalArgumentException.class, () -> resolveAbstractionsSelectorNotAllowed(List.of("data-stream*::data")));
147142
// Selectors allowed, valid selector given
148143
assertThat(resolveAbstractionsSelectorAllowed(List.of("data-stream*::failures")), contains("data-stream1::failures"));
149-
// Selectors allowed, wildcard selector provided
150-
// ** returns both ::data and ::failures since expression is a data stream
144+
// Selectors allowed, both ::data and ::failures are returned
151145
assertThat(
152-
resolveAbstractionsSelectorAllowed(List.of("data-stream*::*")),
146+
resolveAbstractionsSelectorAllowed(List.of("data-stream*", "data-stream*::failures")),
153147
containsInAnyOrder("data-stream1", "data-stream1::failures")
154148
);
155149
// Selectors allowed, invalid selector given
@@ -170,7 +164,7 @@ public void testResolveIndexAbstractions() {
170164
// Selectors allowed, wildcard selector provided
171165
// ** returns both ::data and ::failures for applicable abstractions
172166
assertThat(
173-
resolveAbstractionsSelectorAllowed(List.of("*::*")),
167+
resolveAbstractionsSelectorAllowed(List.of("*", "*::failures")),
174168
containsInAnyOrder("index1", "index2", "data-stream1", "data-stream1::failures")
175169
);
176170
// Selectors allowed, invalid selector given
@@ -185,11 +179,11 @@ public void testResolveIndexAbstractions() {
185179
// Selectors allowed, wildcard selector provided
186180
// ** returns both ::data and ::failures for applicable abstractions
187181
// ** limits the returned values based on selectors
188-
assertThat(resolveAbstractionsSelectorAllowed(List.of("*::*", "-*::data")), contains("data-stream1::failures"));
182+
assertThat(resolveAbstractionsSelectorAllowed(List.of("*", "*::failures", "-*::data")), contains("data-stream1::failures"));
189183
// Selectors allowed, wildcard selector provided
190184
// ** limits the returned values based on selectors
191185
assertThat(
192-
resolveAbstractionsSelectorAllowed(List.of("*::*", "-*::failures")),
186+
resolveAbstractionsSelectorAllowed(List.of("*", "*::failures", "-*::failures")),
193187
containsInAnyOrder("index1", "index2", "data-stream1")
194188
);
195189
// Selectors allowed, none given, default to both selectors

0 commit comments

Comments
 (0)