Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions rest-api-spec/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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")
})
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
7 changes: 0 additions & 7 deletions server/src/main/java/org/elasticsearch/index/IndexMode.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ public enum IndexMode {
@Override
void validateWithOtherSettings(Map<Setting<?>, Object> settings) {
validateRoutingPathSettings(settings);
validateTimeSeriesSettings(settings);
}

@Override
Expand Down Expand Up @@ -239,7 +238,6 @@ public SourceFieldMapper.Mode defaultSourceMode() {
LOGSDB("logsdb") {
@Override
void validateWithOtherSettings(Map<Setting<?>, Object> settings) {
validateTimeSeriesSettings(settings);
var setting = settings.get(IndexSettings.LOGSDB_ROUTE_ON_SORT_FIELDS);
if (setting.equals(Boolean.FALSE)) {
validateRoutingPathSettings(settings);
Expand Down Expand Up @@ -401,11 +399,6 @@ private static void validateRoutingPathSettings(Map<Setting<?>, Object> settings
settingRequiresTimeSeries(settings, IndexMetadata.INDEX_ROUTING_PATH);
}

private static void validateTimeSeriesSettings(Map<Setting<?>, Object> settings) {
settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_START_TIME);
settingRequiresTimeSeries(settings, IndexSettings.TIME_SERIES_END_TIME);
}

private static void settingRequiresTimeSeries(Map<Setting<?>, Object> settings, Setting<?> setting) {
if (false == Objects.equals(setting.getDefault(Settings.EMPTY), settings.get(setting))) {
throw new IllegalArgumentException("[" + setting.getKey() + "] requires " + tsdbMode());
Expand Down
12 changes: 1 addition & 11 deletions server/src/main/java/org/elasticsearch/index/IndexSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -617,21 +617,11 @@ public void validate(Instant value, Map<Setting<?>, 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<Setting<?>> settings() {
List<Setting<?>> settings = List.of(TIME_SERIES_START_TIME, MODE);
List<Setting<?>> settings = List.of(TIME_SERIES_START_TIME);
return settings.iterator();
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
---
Expand Down