Skip to content

Commit 9cf40a7

Browse files
authored
Prevent auto-sharding for data streams in LOOKUP index mode (#131429) (#132073)
* Prevent auto-sharding for data streams in LOOKUP index mode * Update docs/changelog/131429.yaml * Reduce test duplication
1 parent 50859eb commit 9cf40a7

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

docs/changelog/131429.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 131429
2+
summary: Prevent auto-sharding for data streams in LOOKUP index mode
3+
area: Data streams
4+
type: bug
5+
issues: []

server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.elasticsearch.core.Nullable;
2727
import org.elasticsearch.core.TimeValue;
2828
import org.elasticsearch.index.Index;
29+
import org.elasticsearch.index.IndexMode;
2930
import org.elasticsearch.index.shard.IndexingStats;
3031

3132
import java.util.Arrays;
@@ -371,6 +372,7 @@ public String toString() {
371372
* there'll be no new auto sharding event)
372373
*/
373374
public AutoShardingResult calculate(ProjectState state, DataStream dataStream, @Nullable IndexStats writeIndexStats) {
375+
374376
if (isAutoShardingEnabled == false) {
375377
logger.debug("Data stream auto-sharding service is not enabled.");
376378
return NOT_APPLICABLE_RESULT;
@@ -385,6 +387,11 @@ public AutoShardingResult calculate(ProjectState state, DataStream dataStream, @
385387
return NOT_APPLICABLE_RESULT;
386388
}
387389

390+
if (dataStream.getIndexMode() == IndexMode.LOOKUP) {
391+
logger.debug("Data stream [{}] has indexing mode LOOKUP; auto-sharding is not applicable.", dataStream.getName());
392+
return NOT_APPLICABLE_RESULT;
393+
}
394+
388395
if (writeIndexStats == null) {
389396
logger.debug(
390397
"Data stream auto-sharding service cannot compute the optimal number of shards for data stream [{}] as the write index "

server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,4 +1343,46 @@ private static Decision.Inputs createDecisionInputsForPeriodLoggerTests(int writ
13431343
3
13441344
);
13451345
}
1346+
1347+
public void testCalculateReturnsNotApplicableForLookupIndexMode() {
1348+
var projectId = randomProjectIdOrDefault();
1349+
ProjectMetadata.Builder builder = ProjectMetadata.builder(projectId);
1350+
DataStream dataStream = createLookupModeDataStream(builder);
1351+
ClusterState state = createClusterStateWithDataStream(builder);
1352+
1353+
AutoShardingResult autoShardingResult = service.calculate(
1354+
state.projectState(projectId),
1355+
dataStream,
1356+
createIndexStats(1, 1.0, 1.0, 1.0)
1357+
);
1358+
assertThat(autoShardingResult, is(NOT_APPLICABLE_RESULT));
1359+
assertThat(decisionsLogged, hasSize(0));
1360+
}
1361+
1362+
public void testCalculateReturnsNotApplicableForLookupIndexModeWithNullStats() {
1363+
var projectId = randomProjectIdOrDefault();
1364+
ProjectMetadata.Builder builder = ProjectMetadata.builder(projectId);
1365+
DataStream dataStream = createLookupModeDataStream(builder);
1366+
ClusterState state = createClusterStateWithDataStream(builder);
1367+
1368+
AutoShardingResult autoShardingResult = service.calculate(state.projectState(projectId), dataStream, null);
1369+
assertThat(autoShardingResult, is(NOT_APPLICABLE_RESULT));
1370+
assertThat(decisionsLogged, hasSize(0));
1371+
}
1372+
1373+
private DataStream createLookupModeDataStream(ProjectMetadata.Builder builder) {
1374+
DataStream dataStream = DataStream.builder(dataStreamName, List.of(new Index("test-index", randomUUID())))
1375+
.setGeneration(1)
1376+
.setIndexMode(IndexMode.LOOKUP)
1377+
.build();
1378+
builder.put(dataStream);
1379+
return dataStream;
1380+
}
1381+
1382+
private ClusterState createClusterStateWithDataStream(ProjectMetadata.Builder builder) {
1383+
return ClusterState.builder(ClusterName.DEFAULT)
1384+
.nodes(DiscoveryNodes.builder().add(DiscoveryNodeUtils.create("n1")))
1385+
.putProjectMetadata(builder.build())
1386+
.build();
1387+
}
13461388
}

0 commit comments

Comments
 (0)