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 2eed45e5afa6d..ed9826a0c1e50 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 @@ -24,6 +24,7 @@ import org.elasticsearch.core.Nullable; import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.Index; +import org.elasticsearch.index.IndexMode; import java.util.List; import java.util.Objects; @@ -166,6 +167,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 14ecf85b3aa7e..6f2e26fe92dd2 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 @@ -692,4 +692,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(); + } + }