Skip to content

Commit b06c617

Browse files
authored
Preserve backing index ordering for data streams (#63749) (#63903)
1 parent 2ac3568 commit b06c617

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

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

-1
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,6 @@ private static void enrichIndexAbstraction(String indexAbstraction, SortedMap<St
579579
case DATA_STREAM:
580580
IndexAbstraction.DataStream dataStream = (IndexAbstraction.DataStream) ia;
581581
String[] backingIndices = dataStream.getIndices().stream().map(i -> i.getIndex().getName()).toArray(String[]::new);
582-
Arrays.sort(backingIndices);
583582
dataStreams.add(new ResolvedDataStream(
584583
dataStream.getName(),
585584
backingIndices,

server/src/test/java/org/elasticsearch/action/admin/indices/resolve/ResolveIndexTests.java

+24
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.util.stream.Collectors;
4848

4949
import static org.elasticsearch.cluster.DataStreamTestHelper.createTimestampField;
50+
import static org.hamcrest.Matchers.arrayContaining;
5051
import static org.hamcrest.Matchers.equalTo;
5152
import static org.hamcrest.Matchers.is;
5253
import static org.hamcrest.core.IsNull.notNullValue;
@@ -169,6 +170,29 @@ public void testResolveWithMultipleNames() {
169170
validateDataStreams(dataStreams, "logs-mysql-test");
170171
}
171172

173+
public void testResolvePreservesBackingIndexOrdering() {
174+
Metadata.Builder builder = Metadata.builder();
175+
String dataStreamName = "my-data-stream";
176+
String[] names = {"not-in-order-2", "not-in-order-1", DataStream.getDefaultBackingIndexName(dataStreamName, 3)};
177+
List<IndexMetadata> backingIndices = Arrays.stream(names).map(n -> createIndexMetadata(n, true)).collect(Collectors.toList());
178+
for (IndexMetadata index : backingIndices) {
179+
builder.put(index, false);
180+
}
181+
182+
DataStream ds = new DataStream(dataStreamName, createTimestampField("@timestamp"),
183+
backingIndices.stream().map(IndexMetadata::getIndex).collect(Collectors.toList()));
184+
builder.put(ds);
185+
186+
IndicesOptions indicesOptions = IndicesOptions.LENIENT_EXPAND_OPEN_CLOSED_HIDDEN;
187+
List<ResolvedIndex> indices = new ArrayList<>();
188+
List<ResolvedAlias> aliases = new ArrayList<>();
189+
List<ResolvedDataStream> dataStreams = new ArrayList<>();
190+
TransportAction.resolveIndices(new String[]{"*"}, indicesOptions, builder.build(), resolver, indices, aliases, dataStreams, true);
191+
192+
assertThat(dataStreams.size(), equalTo(1));
193+
assertThat(dataStreams.get(0).getBackingIndices(), arrayContaining(names));
194+
}
195+
172196
private void validateIndices(List<ResolvedIndex> resolvedIndices, String... expectedIndices) {
173197
assertThat(resolvedIndices.size(), equalTo(expectedIndices.length));
174198
for (int k = 0; k < resolvedIndices.size(); k++) {

0 commit comments

Comments
 (0)