Skip to content

Commit 5e74ecd

Browse files
authored
Don't validate index_mode for start_date/end_date index settings (#134300)
This allows component templates to set the start/end date without forcing them to set routing_path. This would disable the new index.dimensions-based optimization introduced in #132566.
1 parent 2f10065 commit 5e74ecd

File tree

7 files changed

+13
-174
lines changed

7 files changed

+13
-174
lines changed

modules/data-streams/src/test/java/org/elasticsearch/datastreams/UpdateTimeSeriesRangeServiceTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.elasticsearch.core.TimeValue;
2828
import org.elasticsearch.core.Tuple;
2929
import org.elasticsearch.index.IndexSettings;
30+
import org.elasticsearch.index.mapper.DateFieldMapper;
3031
import org.elasticsearch.test.ESTestCase;
3132
import org.elasticsearch.threadpool.TestThreadPool;
3233
import org.elasticsearch.threadpool.ThreadPool;
@@ -245,7 +246,13 @@ public void testUpdateTimeSeriesTemporalOneBadDataStream() {
245246
DataStreamTestHelper.getClusterStateWithDataStream(mbBuilder, dataStreamName, List.of(new Tuple<>(start, end)));
246247
}
247248

248-
Settings settings = Settings.builder().put("index.mode", "logsdb").build();
249+
Settings settings = Settings.builder()
250+
.put(IndexSettings.TIME_SERIES_START_TIME.getKey(), DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.format(start))
251+
.put(
252+
IndexSettings.TIME_SERIES_END_TIME.getKey(),
253+
DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.format(start.minus(1, ChronoUnit.SECONDS))
254+
)
255+
.build();
249256
var im = createIndexMetadata(getDefaultBackingIndexName(dataStreamName2, 2, start.toEpochMilli()), true, settings, 0);
250257
mbBuilder.put(im, true);
251258
var ds2 = mbBuilder.dataStreamMetadata().dataStreams().get(dataStreamName2);

rest-api-spec/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,8 @@ tasks.named("yamlRestCompatTestTransform").configure ({ task ->
9696
task.skipTest("search.vectors/90_sparse_vector/sparse_vector synthetic source", "Vectors are not returned by default")
9797
task.skipTest("update/100_synthetic_source/keyword", "synthetic recovery source means _recovery_source field will not be present")
9898
task.skipTest("update/100_synthetic_source/stored text", "synthetic recovery source means _recovery_source field will not be present")
99+
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")
100+
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")
101+
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")
102+
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")
99103
})

rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/logsdb/10_settings.yml

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -503,72 +503,6 @@ routing path allowed in logs mode with routing on sort fields:
503503
- match: { test.settings.index.logsdb.route_on_sort_fields: "true" }
504504
- match: { test.settings.index.routing_path: [ host.name, agent_id ] }
505505

506-
---
507-
start time not allowed in logs mode:
508-
- do:
509-
catch: bad_request
510-
indices.create:
511-
index: test
512-
body:
513-
settings:
514-
index:
515-
mode: logsdb
516-
number_of_replicas: 0
517-
number_of_shards: 2
518-
time_series:
519-
start_time: 2023-01-01T00:00:00Z
520-
mappings:
521-
properties:
522-
"@timestamp":
523-
type: date
524-
host.name:
525-
type: keyword
526-
agent_id:
527-
type: keyword
528-
process_id:
529-
type: integer
530-
http_method:
531-
type: keyword
532-
message:
533-
type: text
534-
535-
- match: { error.root_cause.0.type: "illegal_argument_exception" }
536-
- match: { error.type: "illegal_argument_exception" }
537-
- match: { error.reason: "[index.time_series.start_time] requires [index.mode=time_series]" }
538-
539-
---
540-
end time not allowed in logs mode:
541-
- do:
542-
catch: bad_request
543-
indices.create:
544-
index: test
545-
body:
546-
settings:
547-
index:
548-
mode: logsdb
549-
number_of_replicas: 0
550-
number_of_shards: 2
551-
time_series:
552-
end_time: 2023-01-30T00:00:00Z
553-
mappings:
554-
properties:
555-
"@timestamp":
556-
type: date
557-
host.name:
558-
type: keyword
559-
agent_id:
560-
type: keyword
561-
process_id:
562-
type: integer
563-
http_method:
564-
type: keyword
565-
message:
566-
type: text
567-
568-
- match: { error.root_cause.0.type: "illegal_argument_exception" }
569-
- match: { error.type: "illegal_argument_exception" }
570-
- match: { error.reason: "[index.time_series.end_time] requires [index.mode=time_series]" }
571-
572506
---
573507
ignore dynamic beyond limit logsdb default value:
574508
- requires:

rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/tsdb/10_settings.yml

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -310,93 +310,6 @@ set start_time and end_time:
310310
indices.delete:
311311
index: test_index
312312

313-
---
314-
set start_time and end_time without timeseries mode:
315-
- requires:
316-
cluster_features: ["gte_v8.2.0"]
317-
reason: tsdb indexing changed in 8.2.0
318-
319-
- do:
320-
catch: /\[index.time_series.start_time\] requires \[index.mode=time_series\]/
321-
indices.create:
322-
index: test_index
323-
body:
324-
settings:
325-
index:
326-
time_series:
327-
start_time: 1632625782000
328-
329-
- do:
330-
catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/
331-
indices.create:
332-
index: test_index
333-
body:
334-
settings:
335-
index:
336-
time_series:
337-
end_time: 1632625782000
338-
339-
---
340-
set start_time, end_time and routing_path via put settings api without time_series mode:
341-
- requires:
342-
cluster_features: [ "gte_v8.15.0" ]
343-
reason: bug fixed in 8.15.0
344-
345-
- do:
346-
indices.create:
347-
index: test-index
348-
- match: { acknowledged: true }
349-
350-
- do:
351-
catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/
352-
indices.put_settings:
353-
index: test-index
354-
body:
355-
index.time_series.end_time: 1632625782000
356-
357-
- do:
358-
catch: /Can't update non dynamic settings \[\[index.time_series.start_time\]\] for open indices/
359-
indices.put_settings:
360-
index: test-index
361-
body:
362-
index.time_series.start_time: 1632625782000
363-
364-
- do:
365-
catch: /Can't update non dynamic settings \[\[index.routing_path\]\] for open indices/
366-
indices.put_settings:
367-
index: test-index
368-
body:
369-
settings:
370-
index:
371-
routing_path: foo
372-
373-
- do:
374-
indices.close:
375-
index: test-index
376-
377-
- do:
378-
catch: /\[index.time_series.end_time\] requires \[index.mode=time_series\]/
379-
indices.put_settings:
380-
index: test-index
381-
body:
382-
index.time_series.end_time: 1632625782000
383-
384-
- do:
385-
catch: /final test-index setting \[index.time_series.start_time\], not updateable/
386-
indices.put_settings:
387-
index: test-index
388-
body:
389-
index.time_series.start_time: 1632625782000
390-
391-
- do:
392-
catch: /final test-index setting \[index.routing_path\], not updateable/
393-
indices.put_settings:
394-
index: test-index
395-
body:
396-
settings:
397-
index:
398-
routing_path: foo
399-
400313
---
401314
set bad start_time and end_time:
402315
- requires:

server/src/main/java/org/elasticsearch/index/IndexMode.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ public enum IndexMode {
6565
@Override
6666
void validateWithOtherSettings(Map<Setting<?>, Object> settings) {
6767
validateRoutingPathSettings(settings);
68-
validateTimeSeriesSettings(settings);
6968
}
7069

7170
@Override
@@ -239,7 +238,6 @@ public SourceFieldMapper.Mode defaultSourceMode() {
239238
LOGSDB("logsdb") {
240239
@Override
241240
void validateWithOtherSettings(Map<Setting<?>, Object> settings) {
242-
validateTimeSeriesSettings(settings);
243241
var setting = settings.get(IndexSettings.LOGSDB_ROUTE_ON_SORT_FIELDS);
244242
if (setting.equals(Boolean.FALSE)) {
245243
validateRoutingPathSettings(settings);
@@ -401,11 +399,6 @@ private static void validateRoutingPathSettings(Map<Setting<?>, Object> settings
401399
settingRequiresTimeSeries(settings, IndexMetadata.INDEX_ROUTING_PATH);
402400
}
403401

404-
private static void validateTimeSeriesSettings(Map<Setting<?>, Object> settings) {
405-
settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_START_TIME);
406-
settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_END_TIME);
407-
}
408-
409402
private static void settingRequiresTimeSeries(Map<Setting<?>, Object> settings, Setting<?> setting) {
410403
if (false == Objects.equals(setting.getDefault(Settings.EMPTY), settings.get(setting))) {
411404
throw new IllegalArgumentException("[" + setting.getKey() + "] requires " + tsdbMode());

server/src/main/java/org/elasticsearch/index/IndexSettings.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -617,21 +617,11 @@ public void validate(Instant value, Map<Setting<?>, Object> settings) {
617617
if (startTime.toEpochMilli() > value.toEpochMilli()) {
618618
throw new IllegalArgumentException("index.time_series.end_time must be larger than index.time_series.start_time");
619619
}
620-
621-
// The index.time_series.end_time setting can only be specified if the index.mode setting has been set to time_series
622-
// This check here is specifically needed because in case of updating index settings the validation the gets executed
623-
// in IndexSettings constructor when reading the index.mode setting doesn't get executed.
624-
IndexMode indexMode = (IndexMode) settings.get(MODE);
625-
if (indexMode != IndexMode.TIME_SERIES) {
626-
throw new IllegalArgumentException(
627-
"[" + TIME_SERIES_END_TIME.getKey() + "] requires [index.mode=" + IndexMode.TIME_SERIES + "]"
628-
);
629-
}
630620
}
631621

632622
@Override
633623
public Iterator<Setting<?>> settings() {
634-
List<Setting<?>> settings = List.of(TIME_SERIES_START_TIME, MODE);
624+
List<Setting<?>> settings = List.of(TIME_SERIES_START_TIME);
635625
return settings.iterator();
636626
}
637627
},

x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_metrics_tests.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ setup:
1010
template:
1111
settings:
1212
index:
13-
routing_path: [unit, attributes.*, resource.attributes.*]
14-
mode: time_series
1513
time_series:
1614
start_time: 2024-07-01T13:03:08.138Z
1715
---

0 commit comments

Comments
 (0)