From 17f2738ed2cef9c7875e62c167ab90fe28d4ebf8 Mon Sep 17 00:00:00 2001 From: gmarouli Date: Tue, 8 Apr 2025 20:43:59 +0300 Subject: [PATCH 1/5] Create dedicated factory methods for data lifecycle --- .../datastreams/DataStreamIT.java | 4 +- .../lifecycle/CrudDataStreamLifecycleIT.java | 4 +- .../CrudSystemDataStreamLifecycleIT.java | 2 +- .../DataStreamLifecycleServiceIT.java | 13 +++--- .../ExplainDataStreamLifecycleIT.java | 2 +- .../action/GetDataStreamsResponseTests.java | 2 +- .../DataStreamLifecycleServiceTests.java | 34 +++++++------- ...etDataStreamLifecycleStatsActionTests.java | 4 +- ...DeleteSourceAndAddDownsampleToDSTests.java | 12 ++--- .../PutDataStreamLifecycleAction.java | 2 +- .../cluster/metadata/DataStreamLifecycle.java | 44 +++++++++++-------- .../cluster/metadata/Template.java | 4 +- .../datastreams/GetDataStreamActionTests.java | 2 +- .../ExplainIndexDataStreamLifecycleTests.java | 2 +- .../GetDataStreamLifecycleActionTests.java | 2 +- .../DataStreamLifecycleTemplateTests.java | 12 ++--- .../metadata/DataStreamLifecycleTests.java | 22 +++++----- ...amLifecycleWithRetentionWarningsTests.java | 10 ++--- .../cluster/metadata/DataStreamTests.java | 12 ++--- .../MetadataDataStreamsServiceTests.java | 2 +- .../MetadataIndexTemplateServiceTests.java | 23 ++++++---- .../metadata/DataStreamTestHelper.java | 2 +- ...StreamLifecycleUsageTransportActionIT.java | 4 +- ...taStreamLifecycleFeatureSetUsageTests.java | 6 +-- ...StreamLifecycleDownsampleDisruptionIT.java | 2 +- .../DataStreamLifecycleDownsampleIT.java | 8 ++-- ...ataStreamAndIndexLifecycleMixingTests.java | 4 +- ...StreamLifecycleDownsamplingSecurityIT.java | 4 +- ...reamLifecycleServiceRuntimeSecurityIT.java | 4 +- 29 files changed, 136 insertions(+), 112 deletions(-) diff --git a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamIT.java b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamIT.java index 7c0ccbfc116a9..968aab2dceab6 100644 --- a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamIT.java +++ b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/DataStreamIT.java @@ -1384,7 +1384,9 @@ public void testSearchAllResolvesDataStreams() throws Exception { public void testGetDataStream() throws Exception { Settings settings = Settings.builder().put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, maximumNumberOfReplicas() + 2).build(); - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder().dataRetention(randomPositiveTimeValue()).buildTemplate(); + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder() + .dataRetention(randomPositiveTimeValue()) + .buildTemplate(); putComposableIndexTemplate("template_for_foo", null, List.of("metrics-foo*"), settings, null, null, lifecycle, false); int numDocsFoo = randomIntBetween(2, 16); indexDocs("metrics-foo", numDocsFoo); diff --git a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudDataStreamLifecycleIT.java b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudDataStreamLifecycleIT.java index 7ab58163f0a2f..0ddea0bc0652a 100644 --- a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudDataStreamLifecycleIT.java +++ b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudDataStreamLifecycleIT.java @@ -226,7 +226,9 @@ public void testPutLifecycle() throws Exception { } public void testDeleteLifecycle() throws Exception { - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder().dataRetention(randomPositiveTimeValue()).buildTemplate(); + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder() + .dataRetention(randomPositiveTimeValue()) + .buildTemplate(); putComposableIndexTemplate("id1", null, List.of("with-lifecycle*"), null, null, lifecycle); putComposableIndexTemplate("id2", null, List.of("without-lifecycle*"), null, null, null); { diff --git a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudSystemDataStreamLifecycleIT.java b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudSystemDataStreamLifecycleIT.java index aeba15563b991..aee3e49857d4f 100644 --- a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudSystemDataStreamLifecycleIT.java +++ b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/CrudSystemDataStreamLifecycleIT.java @@ -207,7 +207,7 @@ public Collection getSystemDataStreamDescriptors() { Template.builder() .settings(Settings.EMPTY) .mappings(mappings) - .lifecycle(DataStreamLifecycle.builder().dataRetention(randomPositiveTimeValue())) + .lifecycle(DataStreamLifecycle.dataLifecycleBuilder().dataRetention(randomPositiveTimeValue())) ) .dataStreamTemplate(new DataStreamTemplate()) .build(), diff --git a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceIT.java b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceIT.java index 6890fbc21975a..f95bf34f09f87 100644 --- a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceIT.java +++ b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceIT.java @@ -168,7 +168,7 @@ public void testRolloverLifecycle() throws Exception { } public void testRolloverAndRetention() throws Exception { - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder().dataRetention(TimeValue.ZERO).buildTemplate(); + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.ZERO).buildTemplate(); putComposableIndexTemplate("id1", null, List.of("metrics-foo*"), null, null, lifecycle, false); @@ -290,7 +290,9 @@ public void testOriginationDate() throws Exception { * days ago, and one with an origination date 1 day ago. After data stream lifecycle runs, we expect the one with the old * origination date to have been deleted, and the one with the newer origination date to remain. */ - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(7)).buildTemplate(); + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder() + .dataRetention(TimeValue.timeValueDays(7)) + .buildTemplate(); putComposableIndexTemplate("id1", null, List.of("metrics-foo*"), null, null, lifecycle, false); @@ -836,7 +838,7 @@ public void testDataLifecycleServiceConfiguresTheMergePolicy() throws Exception public void testReenableDataStreamLifecycle() throws Exception { // start with a lifecycle that's not enabled - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder().enabled(false).buildTemplate(); + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder().enabled(false).buildTemplate(); putComposableIndexTemplate("id1", null, List.of("metrics-foo*"), null, null, lifecycle, false); String dataStreamName = "metrics-foo"; @@ -892,7 +894,7 @@ public void testReenableDataStreamLifecycle() throws Exception { public void testLifecycleAppliedToFailureStore() throws Exception { // We configure a lifecycle with downsampling to ensure it doesn't fail - DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.builder() + DataStreamLifecycle.Template lifecycle = DataStreamLifecycle.dataLifecycleBuilder() .dataRetention(TimeValue.timeValueSeconds(20)) .downsampling( List.of( @@ -1088,7 +1090,8 @@ public Collection getSystemDataStreamDescriptors() { Template.builder() .settings(Settings.EMPTY) .lifecycle( - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(SYSTEM_DATA_STREAM_RETENTION_DAYS)) + DataStreamLifecycle.dataLifecycleBuilder() + .dataRetention(TimeValue.timeValueDays(SYSTEM_DATA_STREAM_RETENTION_DAYS)) ) ) .build(), diff --git a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/ExplainDataStreamLifecycleIT.java b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/ExplainDataStreamLifecycleIT.java index 7f5fd14fd45d6..388d967093513 100644 --- a/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/ExplainDataStreamLifecycleIT.java +++ b/modules/data-streams/src/internalClusterTest/java/org/elasticsearch/datastreams/lifecycle/ExplainDataStreamLifecycleIT.java @@ -501,7 +501,7 @@ public void testExplainDataStreamLifecycleForUnmanagedIndices() throws Exception List.of("metrics-foo*"), null, null, - DataStreamLifecycle.builder().enabled(false).buildTemplate() + DataStreamLifecycle.dataLifecycleBuilder().enabled(false).buildTemplate() ); CreateDataStreamAction.Request createDataStreamRequest = new CreateDataStreamAction.Request( TEST_REQUEST_TIMEOUT, diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java index f4ed40b2e0078..a39fadba97ee9 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/action/GetDataStreamsResponseTests.java @@ -158,7 +158,7 @@ public void testResponseIlmAndDataStreamLifecycleRepresentation() throws Excepti .setGeneration(3) .setAllowCustomRouting(true) .setIndexMode(IndexMode.STANDARD) - .setLifecycle(new DataStreamLifecycle(false, null, null)) + .setLifecycle(DataStreamLifecycle.createDataLifecycle(false, null, null)) .setDataStreamOptions(DataStreamOptions.FAILURE_STORE_ENABLED) .setFailureIndices(DataStream.DataStreamIndices.failureIndicesBuilder(failureStores).build()) .build(); diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceTests.java index 37301fbf403a8..6dc5a3eb526a9 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleServiceTests.java @@ -206,7 +206,7 @@ public void testOperationsExecutedOnce() { numBackingIndices, 2, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.ZERO).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.ZERO).build(), now ); builder.put(dataStream); @@ -269,7 +269,7 @@ public void testRetentionNotExecutedDueToAge() { numBackingIndices, numFailureIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(700)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueDays(700)).build(), now ); builder.put(dataStream); @@ -304,7 +304,7 @@ public void testRetentionNotExecutedForTSIndicesWithinTimeBounds() { dataStream.copy() .setName(dataStreamName) .setGeneration(dataStream.getGeneration() + 1) - .setLifecycle(DataStreamLifecycle.builder().dataRetention(TimeValue.ZERO).build()) + .setLifecycle(DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.ZERO).build()) .build() ); clusterState = ClusterState.builder(clusterState).putProjectMetadata(builder).build(); @@ -343,7 +343,7 @@ public void testMergePolicyNotExecutedForTSIndicesWithinTimeBounds() { dataStream.copy() .setName(dataStreamName) .setGeneration(dataStream.getGeneration() + 1) - .setLifecycle(DataStreamLifecycle.builder().build()) + .setLifecycle(DataStreamLifecycle.dataLifecycleBuilder().build()) .build() ); clusterState = ClusterState.builder(clusterState).putProjectMetadata(builder).build(); @@ -378,7 +378,7 @@ public void testRetentionSkippedWhilstDownsamplingInProgress() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueMillis(0)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueMillis(0)).build(), now ); builder.put(dataStream); @@ -456,7 +456,7 @@ public void testIlmManagedIndicesAreSkipped() { Settings.builder() .put(IndexMetadata.LIFECYCLE_NAME, "ILM_policy") .put(IndexMetadata.SETTING_VERSION_CREATED, IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.ZERO).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.ZERO).build(), now ); builder.put(dataStream); @@ -548,7 +548,7 @@ public void testErrorStoreIsClearedOnBackingIndexBecomingUnmanaged() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(700)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueDays(700)).build(), now ); // all backing indices are in the error store @@ -586,7 +586,7 @@ public void testBackingIndicesFromMultipleDataStreamsInErrorStore() { ilmManagedDataStreamName, 3, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(700)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueDays(700)).build(), now ); // all backing indices are in the error store @@ -600,7 +600,7 @@ public void testBackingIndicesFromMultipleDataStreamsInErrorStore() { dataStreamWithBackingIndicesInErrorState, 5, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(700)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueDays(700)).build(), now ); // put all backing indices in the error store @@ -652,7 +652,7 @@ public void testForceMerge() throws Exception { numBackingIndices, settings(IndexVersion.current()).put(MergePolicyConfig.INDEX_MERGE_POLICY_FLOOR_SEGMENT_SETTING.getKey(), ONE_HUNDRED_MB) .put(MergePolicyConfig.INDEX_MERGE_POLICY_MERGE_FACTOR_SETTING.getKey(), TARGET_MERGE_FACTOR_VALUE), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); builder.put(dataStream); @@ -754,7 +754,7 @@ public void testForceMergeRetries() throws Exception { numBackingIndices, settings(IndexVersion.current()).put(MergePolicyConfig.INDEX_MERGE_POLICY_FLOOR_SEGMENT_SETTING.getKey(), ONE_HUNDRED_MB) .put(MergePolicyConfig.INDEX_MERGE_POLICY_MERGE_FACTOR_SETTING.getKey(), TARGET_MERGE_FACTOR_VALUE), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); builder.put(dataStream); @@ -916,7 +916,7 @@ public void testForceMergeDedup() throws Exception { 1L, null, false, - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build() + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build() ); ProjectMetadata.Builder builder = ProjectMetadata.builder(randomProjectIdOrDefault()).put(newIndexMetadata, true).put(dataStream); @@ -1091,7 +1091,7 @@ public void testMergePolicySettingsAreConfiguredBeforeForcemerge() throws Except dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); builder.put(dataStream); @@ -1173,7 +1173,7 @@ public void testDownsampling() throws Exception { .put(MergePolicyConfig.INDEX_MERGE_POLICY_MERGE_FACTOR_SETTING.getKey(), TARGET_MERGE_FACTOR_VALUE) .put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES) .put("index.routing_path", "@timestamp"), - DataStreamLifecycle.builder() + DataStreamLifecycle.dataLifecycleBuilder() .downsampling( List.of(new DownsamplingRound(TimeValue.timeValueMillis(0), new DownsampleConfig(new DateHistogramInterval("5m")))) ) @@ -1322,7 +1322,7 @@ public void testDownsamplingWhenTargetIndexNameClashYieldsException() throws Exc .put(MergePolicyConfig.INDEX_MERGE_POLICY_MERGE_FACTOR_SETTING.getKey(), TARGET_MERGE_FACTOR_VALUE) .put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES) .put("index.routing_path", "@timestamp"), - DataStreamLifecycle.builder() + DataStreamLifecycle.dataLifecycleBuilder() .downsampling( List.of(new DownsamplingRound(TimeValue.timeValueMillis(0), new DownsampleConfig(new DateHistogramInterval("5m")))) ) @@ -1512,7 +1512,7 @@ public void testFailureStoreIsManagedEvenWhenDisabled() { numBackingIndices, 2, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.ZERO).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.ZERO).build(), now ).copy().setDataStreamOptions(DataStreamOptions.FAILURE_STORE_DISABLED).build(); // failure store is managed even when disabled builder.put(dataStream); @@ -1581,7 +1581,7 @@ private ClusterState downsampleSetup(ProjectId projectId, String dataStreamName, 2, settings(IndexVersion.current()).put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES) .put("index.routing_path", "@timestamp"), - DataStreamLifecycle.builder() + DataStreamLifecycle.dataLifecycleBuilder() .downsampling( List.of(new DownsamplingRound(TimeValue.timeValueMillis(0), new DownsampleConfig(new DateHistogramInterval("5m")))) ) diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsActionTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsActionTests.java index 6135411f14ea2..6f110078fb122 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsActionTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/action/TransportGetDataStreamLifecycleStatsActionTests.java @@ -95,7 +95,7 @@ public void testMixedDataStreams() { "dsl-managed-index", numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.timeValueDays(10)).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.timeValueDays(10)).build(), Clock.systemUTC().millis() ); indicesInError.add(dslDataStream.getIndices().get(randomInt(numBackingIndices - 1)).getName()); @@ -131,7 +131,7 @@ public void testMixedDataStreams() { IndexMetadata indexMetadata = indexMetaBuilder.build(); builder.put(indexMetadata, false); backingIndices.add(indexMetadata.getIndex()); - builder.put(newInstance(dataStreamName, backingIndices, 3, null, false, DataStreamLifecycle.builder().build())); + builder.put(newInstance(dataStreamName, backingIndices, 3, null, false, DataStreamLifecycle.dataLifecycleBuilder().build())); } ProjectMetadata project = builder.build(); when(errorStore.getAllIndices(project.id())).thenReturn(indicesInError); diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/downsampling/DeleteSourceAndAddDownsampleToDSTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/downsampling/DeleteSourceAndAddDownsampleToDSTests.java index d860840dfe2c5..0bfbf76bbfca0 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/downsampling/DeleteSourceAndAddDownsampleToDSTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/lifecycle/downsampling/DeleteSourceAndAddDownsampleToDSTests.java @@ -52,7 +52,7 @@ public void testDownsampleIndexMissingIsNoOp() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); builder.put(dataStream); @@ -80,7 +80,7 @@ public void testDownsampleIsAddedToDSEvenIfSourceDeleted() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); String firstGenIndex = DataStream.getDefaultBackingIndexName(dataStreamName, 1); @@ -125,7 +125,7 @@ public void testSourceIndexIsWriteIndexThrowsException() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); builder.put(dataStream); @@ -159,7 +159,7 @@ public void testSourceIsDeleteAndDownsampleOriginationDateIsConfigured() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); String firstGenIndex = DataStream.getDefaultBackingIndexName(dataStreamName, 1); @@ -221,7 +221,7 @@ public void testSourceWithoutLifecycleMetaAndDestWithOriginationDateAlreadyConfi dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); String firstGenIndex = DataStream.getDefaultBackingIndexName(dataStreamName, 1); @@ -272,7 +272,7 @@ public void testSourceIndexIsDeleteEvenIfNotPartOfDSAnymore() { dataStreamName, numBackingIndices, settings(IndexVersion.current()), - DataStreamLifecycle.builder().dataRetention(TimeValue.MAX_VALUE).build(), + DataStreamLifecycle.dataLifecycleBuilder().dataRetention(TimeValue.MAX_VALUE).build(), now ); String firstGenIndex = DataStream.getDefaultBackingIndexName(dataStreamName, 1); diff --git a/server/src/main/java/org/elasticsearch/action/datastreams/lifecycle/PutDataStreamLifecycleAction.java b/server/src/main/java/org/elasticsearch/action/datastreams/lifecycle/PutDataStreamLifecycleAction.java index 1dbfb97851aa6..45b71fd63cb16 100644 --- a/server/src/main/java/org/elasticsearch/action/datastreams/lifecycle/PutDataStreamLifecycleAction.java +++ b/server/src/main/java/org/elasticsearch/action/datastreams/lifecycle/PutDataStreamLifecycleAction.java @@ -149,7 +149,7 @@ public Request( ) { super(masterNodeTimeout, ackTimeout); this.names = names; - this.lifecycle = DataStreamLifecycle.builder() + this.lifecycle = DataStreamLifecycle.dataLifecycleBuilder() .dataRetention(dataRetention) .enabled(enabled == null || enabled) .downsampling(downsampling) diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamLifecycle.java b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamLifecycle.java index fdae853292457..ea749eb434934 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamLifecycle.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/DataStreamLifecycle.java @@ -86,7 +86,7 @@ public static boolean isDataStreamsLifecycleOnlyMode(final Settings settings) { Setting.Property.NodeScope ); - public static final DataStreamLifecycle DEFAULT_DATA_LIFECYCLE = new DataStreamLifecycle(null, null, null); + public static final DataStreamLifecycle DEFAULT_DATA_LIFECYCLE = DataStreamLifecycle.createDataLifecycle(null, null, null); public static final String DATA_STREAM_LIFECYCLE_ORIGIN = "data_stream_lifecycle"; @@ -132,17 +132,27 @@ public static boolean isDataStreamsLifecycleOnlyMode(final Settings settings) { @Nullable private final List downsampling; - public DataStreamLifecycle( - @Nullable Boolean enabled, - @Nullable TimeValue dataRetention, - @Nullable List downsampling - ) { + // Visible for testing, preferably use the factory methods that are specialised by lifecycle type, + // for example for the data component. + DataStreamLifecycle(@Nullable Boolean enabled, @Nullable TimeValue dataRetention, @Nullable List downsampling) { this.enabled = enabled == null || enabled; this.dataRetention = dataRetention; DownsamplingRound.validateRounds(downsampling); this.downsampling = downsampling; } + /** + * This factory method creates a lifecycle applicable for the data index component of a data stream. This + * means it supports all configuration applicable for backing indices. + */ + public static DataStreamLifecycle createDataLifecycle( + @Nullable Boolean enabled, + @Nullable TimeValue dataRetention, + @Nullable List downsampling + ) { + return new DataStreamLifecycle(enabled, dataRetention, downsampling); + } + /** * Returns true, if this data stream lifecycle configuration is enabled, false otherwise */ @@ -736,8 +746,8 @@ public static Builder builder(Template template) { return new Builder(template); } - public static Builder builder() { - return new Builder((DataStreamLifecycle) null); + public static Builder dataLifecycleBuilder() { + return new Builder(); } /** @@ -750,20 +760,18 @@ public static class Builder { @Nullable private List downsampling = null; + private Builder() {} + private Builder(DataStreamLifecycle.Template template) { - if (template != null) { - enabled = template.enabled(); - dataRetention = template.dataRetention().get(); - downsampling = template.downsampling().get(); - } + enabled = template.enabled(); + dataRetention = template.dataRetention().get(); + downsampling = template.downsampling().get(); } private Builder(DataStreamLifecycle lifecycle) { - if (lifecycle != null) { - enabled = lifecycle.enabled(); - dataRetention = lifecycle.dataRetention(); - downsampling = lifecycle.downsampling(); - } + enabled = lifecycle.enabled(); + dataRetention = lifecycle.dataRetention(); + downsampling = lifecycle.downsampling(); } public Builder composeTemplate(DataStreamLifecycle.Template template) { diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Template.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Template.java index 6f413cbbedece..36c470d17d9a0 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Template.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Template.java @@ -61,7 +61,9 @@ public class Template implements SimpleDiffable