diff --git a/docs/changelog/131429.yaml b/docs/changelog/131429.yaml new file mode 100644 index 0000000000000..8ffb7d2ffe100 --- /dev/null +++ b/docs/changelog/131429.yaml @@ -0,0 +1,5 @@ +pr: 131429 +summary: Prevent auto-sharding for data streams in LOOKUP index mode +area: Data streams +type: bug +issues: [] diff --git a/server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java b/server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java index 578b0a61aafde..61c9c5a5f174d 100644 --- a/server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java +++ b/server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java @@ -26,6 +26,7 @@ import org.elasticsearch.features.FeatureService; import org.elasticsearch.features.NodeFeature; import org.elasticsearch.index.Index; +import org.elasticsearch.index.IndexMode; import java.util.List; import java.util.Objects; @@ -186,6 +187,11 @@ public AutoShardingResult calculate(ClusterState state, DataStream dataStream, @ return NOT_APPLICABLE_RESULT; } + if (dataStream.getIndexMode() == IndexMode.LOOKUP) { + logger.debug("Data stream [{}] has indexing mode LOOKUP; auto-sharding is not applicable.", dataStream.getName()); + return NOT_APPLICABLE_RESULT; + } + if (writeIndexLoad == null) { logger.debug( "Data stream auto sharding service cannot compute the optimal number of shards for data stream [{}] as the write index " diff --git a/server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java b/server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java index 3a43a1df9bf88..ba7dbd906b5a0 100644 --- a/server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java +++ b/server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java @@ -819,4 +819,38 @@ private IndexWriteLoad getWriteLoad(int numberOfShards, double shardWriteLoad) { return builder.build(); } + public void testCalculateReturnsNotApplicableForLookupIndexMode() { + Metadata.Builder builder = Metadata.builder(); + DataStream dataStream = createLookupModeDataStream(builder); + ClusterState state = createClusterStateWithDataStream(builder); + + AutoShardingResult autoShardingResult = service.calculate(state, dataStream, 1.0); + assertThat(autoShardingResult, is(NOT_APPLICABLE_RESULT)); + } + + public void testCalculateReturnsNotApplicableForLookupIndexModeWithNullWriteLoad() { + Metadata.Builder builder = Metadata.builder(); + DataStream dataStream = createLookupModeDataStream(builder); + ClusterState state = createClusterStateWithDataStream(builder); + + AutoShardingResult autoShardingResult = service.calculate(state, dataStream, null); + assertThat(autoShardingResult, is(NOT_APPLICABLE_RESULT)); + } + + private DataStream createLookupModeDataStream(Metadata.Builder builder) { + DataStream dataStream = DataStream.builder(dataStreamName, List.of(new Index("test-index", randomUUID()))) + .setGeneration(1) + .setIndexMode(IndexMode.LOOKUP) + .build(); + builder.put(dataStream); + return dataStream; + } + + private ClusterState createClusterStateWithDataStream(Metadata.Builder builder) { + return ClusterState.builder(ClusterName.DEFAULT) + .nodes(DiscoveryNodes.builder().add(DiscoveryNodeUtils.create("n1"))) + .metadata(builder.build()) + .build(); + } + }