diff --git a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/UpdateTimeSeriesRangeServiceTests.java b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/UpdateTimeSeriesRangeServiceTests.java index b0e5c1de49786..ba0ac57e611a9 100644 --- a/modules/data-streams/src/test/java/org/elasticsearch/datastreams/UpdateTimeSeriesRangeServiceTests.java +++ b/modules/data-streams/src/test/java/org/elasticsearch/datastreams/UpdateTimeSeriesRangeServiceTests.java @@ -27,6 +27,7 @@ import org.elasticsearch.core.TimeValue; import org.elasticsearch.core.Tuple; import org.elasticsearch.index.IndexSettings; +import org.elasticsearch.index.mapper.DateFieldMapper; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.threadpool.TestThreadPool; import org.elasticsearch.threadpool.ThreadPool; @@ -245,7 +246,13 @@ public void testUpdateTimeSeriesTemporalOneBadDataStream() { DataStreamTestHelper.getClusterStateWithDataStream(mbBuilder, dataStreamName, List.of(new Tuple<>(start, end))); } - Settings settings = Settings.builder().put("index.mode", "logsdb").build(); + Settings settings = Settings.builder() + .put(IndexSettings.TIME_SERIES_START_TIME.getKey(), DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.format(start)) + .put( + IndexSettings.TIME_SERIES_END_TIME.getKey(), + DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.format(start.minus(1, ChronoUnit.SECONDS)) + ) + .build(); var im = createIndexMetadata(getDefaultBackingIndexName(dataStreamName2, 2, start.toEpochMilli()), true, settings, 0); mbBuilder.put(im, true); var ds2 = mbBuilder.dataStreamMetadata().dataStreams().get(dataStreamName2); diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index c11259b202002..ac9171995e317 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -96,4 +96,8 @@ tasks.named("yamlRestCompatTestTransform").configure ({ task -> task.skipTest("search.vectors/90_sparse_vector/sparse_vector synthetic source", "Vectors are not returned by default") task.skipTest("update/100_synthetic_source/keyword", "synthetic recovery source means _recovery_source field will not be present") task.skipTest("update/100_synthetic_source/stored text", "synthetic recovery source means _recovery_source field will not be present") + task.skipTest("logsdb/10_settings/start time not allowed in logs mode", "we don't validate for index_mode=tsdb when setting start_date/end_date anymore") + task.skipTest("logsdb/10_settings/end time not allowed in logs mode", "we don't validate for index_mode=tsdb when setting start_date/end_date anymore") + task.skipTest("tsdb/10_settings/set start_time and end_time without timeseries mode", "we don't validate for index_mode=tsdb when setting start_date/end_date anymore") + task.skipTest("tsdb/10_settings/set start_time, end_time and routing_path via put settings api without time_series mode", "we don't validate for index_mode=tsdb when setting start_date/end_date anymore") }) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/logsdb/10_settings.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/logsdb/10_settings.yml index 13107b39d6e1f..f76b4eb7bc32f 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/logsdb/10_settings.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/logsdb/10_settings.yml @@ -503,72 +503,6 @@ routing path allowed in logs mode with routing on sort fields: - match: { test.settings.index.logsdb.route_on_sort_fields: "true" } - match: { test.settings.index.routing_path: [ host.name, agent_id ] } ---- -start time not allowed in logs mode: - - do: - catch: bad_request - indices.create: - index: test - body: - settings: - index: - mode: logsdb - number_of_replicas: 0 - number_of_shards: 2 - time_series: - start_time: 2023-01-01T00:00:00Z - mappings: - properties: - "@timestamp": - type: date - host.name: - type: keyword - agent_id: - type: keyword - process_id: - type: integer - http_method: - type: keyword - message: - type: text - - - match: { error.root_cause.0.type: "illegal_argument_exception" } - - match: { error.type: "illegal_argument_exception" } - - match: { error.reason: "[index.time_series.start_time] requires [index.mode=time_series]" } - ---- -end time not allowed in logs mode: - - do: - catch: bad_request - indices.create: - index: test - body: - settings: - index: - mode: logsdb - number_of_replicas: 0 - number_of_shards: 2 - time_series: - end_time: 2023-01-30T00:00:00Z - mappings: - properties: - "@timestamp": - type: date - host.name: - type: keyword - agent_id: - type: keyword - process_id: - type: integer - http_method: - type: keyword - message: - type: text - - - match: { error.root_cause.0.type: "illegal_argument_exception" } - - match: { error.type: "illegal_argument_exception" } - - match: { error.reason: "[index.time_series.end_time] requires [index.mode=time_series]" } - --- ignore dynamic beyond limit logsdb default value: - requires: diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/tsdb/10_settings.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/tsdb/10_settings.yml index 46476fd071b30..c54556e99bee9 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/tsdb/10_settings.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/tsdb/10_settings.yml @@ -310,93 +310,6 @@ set start_time and end_time: indices.delete: index: test_index ---- -set start_time and end_time without timeseries mode: - - requires: - cluster_features: ["gte_v8.2.0"] - reason: tsdb indexing changed in 8.2.0 - - - do: - catch: /\[index.time_series.start_time\] requires \[index.mode=time_series\]/ - indices.create: - index: test_index - body: - settings: - index: - time_series: - start_time: 1632625782000 - - - do: - catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/ - indices.create: - index: test_index - body: - settings: - index: - time_series: - end_time: 1632625782000 - ---- -set start_time, end_time and routing_path via put settings api without time_series mode: - - requires: - cluster_features: [ "gte_v8.15.0" ] - reason: bug fixed in 8.15.0 - - - do: - indices.create: - index: test-index - - match: { acknowledged: true } - - - do: - catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/ - indices.put_settings: - index: test-index - body: - index.time_series.end_time: 1632625782000 - - - do: - catch: /Can't update non dynamic settings \[\[index.time_series.start_time\]\] for open indices/ - indices.put_settings: - index: test-index - body: - index.time_series.start_time: 1632625782000 - - - do: - catch: /Can't update non dynamic settings \[\[index.routing_path\]\] for open indices/ - indices.put_settings: - index: test-index - body: - settings: - index: - routing_path: foo - - - do: - indices.close: - index: test-index - - - do: - catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/ - indices.put_settings: - index: test-index - body: - index.time_series.end_time: 1632625782000 - - - do: - catch: /final test-index setting \[index.time_series.start_time\], not updateable/ - indices.put_settings: - index: test-index - body: - index.time_series.start_time: 1632625782000 - - - do: - catch: /final test-index setting \[index.routing_path\], not updateable/ - indices.put_settings: - index: test-index - body: - settings: - index: - routing_path: foo - --- set bad start_time and end_time: - requires: diff --git a/server/src/main/java/org/elasticsearch/index/IndexMode.java b/server/src/main/java/org/elasticsearch/index/IndexMode.java index 00aee91423b30..07cbc39ca103b 100644 --- a/server/src/main/java/org/elasticsearch/index/IndexMode.java +++ b/server/src/main/java/org/elasticsearch/index/IndexMode.java @@ -65,7 +65,6 @@ public enum IndexMode { @Override void validateWithOtherSettings(Map, Object> settings) { validateRoutingPathSettings(settings); - validateTimeSeriesSettings(settings); } @Override @@ -239,7 +238,6 @@ public SourceFieldMapper.Mode defaultSourceMode() { LOGSDB("logsdb") { @Override void validateWithOtherSettings(Map, Object> settings) { - validateTimeSeriesSettings(settings); var setting = settings.get(IndexSettings.LOGSDB_ROUTE_ON_SORT_FIELDS); if (setting.equals(Boolean.FALSE)) { validateRoutingPathSettings(settings); @@ -401,11 +399,6 @@ private static void validateRoutingPathSettings(Map, Object> settings settingRequiresTimeSeries(settings, IndexMetadata.INDEX_ROUTING_PATH); } - private static void validateTimeSeriesSettings(Map, Object> settings) { - settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_START_TIME); - settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_END_TIME); - } - private static void settingRequiresTimeSeries(Map, Object> settings, Setting setting) { if (false == Objects.equals(setting.getDefault(Settings.EMPTY), settings.get(setting))) { throw new IllegalArgumentException("[" + setting.getKey() + "] requires " + tsdbMode()); diff --git a/server/src/main/java/org/elasticsearch/index/IndexSettings.java b/server/src/main/java/org/elasticsearch/index/IndexSettings.java index a6335ca6666b0..636c30027bd0b 100644 --- a/server/src/main/java/org/elasticsearch/index/IndexSettings.java +++ b/server/src/main/java/org/elasticsearch/index/IndexSettings.java @@ -617,21 +617,11 @@ public void validate(Instant value, Map, Object> settings) { if (startTime.toEpochMilli() > value.toEpochMilli()) { throw new IllegalArgumentException("index.time_series.end_time must be larger than index.time_series.start_time"); } - - // The index.time_series.end_time setting can only be specified if the index.mode setting has been set to time_series - // This check here is specifically needed because in case of updating index settings the validation the gets executed - // in IndexSettings constructor when reading the index.mode setting doesn't get executed. - IndexMode indexMode = (IndexMode) settings.get(MODE); - if (indexMode != IndexMode.TIME_SERIES) { - throw new IllegalArgumentException( - "[" + TIME_SERIES_END_TIME.getKey() + "] requires [index.mode=" + IndexMode.TIME_SERIES + "]" - ); - } } @Override public Iterator> settings() { - List> settings = List.of(TIME_SERIES_START_TIME, MODE); + List> settings = List.of(TIME_SERIES_START_TIME); return settings.iterator(); } }, diff --git a/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_metrics_tests.yml b/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_metrics_tests.yml index b4c76416fcb11..214a4df7a8b83 100644 --- a/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_metrics_tests.yml +++ b/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_metrics_tests.yml @@ -10,8 +10,6 @@ setup: template: settings: index: - routing_path: [unit, attributes.*, resource.attributes.*] - mode: time_series time_series: start_time: 2024-07-01T13:03:08.138Z ---