Browse Source

Prevent auto-sharding for data streams in LOOKUP index mode (#131429) (#132080)

* Prevent auto-sharding for data streams in LOOKUP index mode

* Update docs/changelog/131429.yaml

* Reduce test duplication

(cherry picked from commit ea22dffb31740e4a5c8aa9a2717b2a79c498eb59)

# Conflicts:
#	server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java
#	server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java
Luke Whiting 2 months ago
parent
commit
847dbdcd2b

+ 5 - 0
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: []

+ 6 - 0
server/src/main/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingService.java

@@ -26,6 +26,7 @@ import org.elasticsearch.core.TimeValue;
 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 class DataStreamAutoShardingService {
             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 "

+ 33 - 0
server/src/test/java/org/elasticsearch/action/datastreams/autosharding/DataStreamAutoShardingServiceTests.java

@@ -819,4 +819,37 @@ public class DataStreamAutoShardingServiceTests extends ESTestCase {
         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();
+    }
 }