Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.admin.indices.rollover.RolloverRequest;
import org.elasticsearch.action.admin.indices.template.put.PutComponentTemplateAction;
import org.elasticsearch.action.admin.indices.template.put.PutComposableIndexTemplateAction;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.cluster.metadata.ComponentTemplate;
import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
import org.elasticsearch.cluster.metadata.Template;
import org.elasticsearch.common.compress.CompressedXContent;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.time.DateFormatter;
import org.elasticsearch.common.time.FormatNames;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.indices.InvalidIndexTemplateException;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.ESSingleNodeTestCase;
import org.elasticsearch.xcontent.XContentType;
Expand All @@ -28,6 +31,7 @@
import java.util.List;
import java.util.concurrent.CountDownLatch;

import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;

public class TSDBIndexingIT extends ESSingleNodeTestCase {
Expand Down Expand Up @@ -76,21 +80,48 @@ public void testTimeRanges() throws Exception {
}
}
}""";
Settings templateSettings = Settings.builder().put("index.mode", "time_series").put("index.routing_path", "metricset").build();
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(templateSettings, new CompressedXContent(mappingTemplate), null),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet();
var templateSettings = Settings.builder().put("index.mode", "time_series");
if (randomBoolean()) {
templateSettings.put("index.routing_path", "metricset");
}

if (randomBoolean()) {
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(templateSettings.build(), new CompressedXContent(mappingTemplate), null),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet();
} else {
var putComponentTemplateRequest = new PutComponentTemplateAction.Request("1");
putComponentTemplateRequest.componentTemplate(
new ComponentTemplate(new Template(null, new CompressedXContent(mappingTemplate), null), null, null)
);
client().execute(PutComponentTemplateAction.INSTANCE, putComponentTemplateRequest).actionGet();

var putTemplateRequest = new PutComposableIndexTemplateAction.Request("id");
putTemplateRequest.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(templateSettings.build(), null, null),
List.of("1"),
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
client().execute(PutComposableIndexTemplateAction.INSTANCE, putTemplateRequest).actionGet();
}

// index doc
Instant time = Instant.now();
Expand Down Expand Up @@ -176,34 +207,60 @@ public void testInvalidTsdbTemplatesNoTimeSeriesDimensionAttribute() throws Exce
}
}
}""";
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.mode", "time_series").put("index.routing_path", "metricset").build(),
new CompressedXContent(mappingTemplate),
{
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.mode", "time_series").put("index.routing_path", "metricset").build(),
new CompressedXContent(mappingTemplate),
null
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
Exception e = expectThrows(
IllegalArgumentException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(
e.getCause().getCause().getMessage(),
equalTo(
"All fields that match routing_path must be keywords with [time_series_dimension: true] and "
+ "without the [script] parameter. [metricset] was not [time_series_dimension: true]."
)
);
)
);
var e = expectThrows(
IllegalArgumentException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(
e.getCause().getCause().getMessage(),
equalTo(
"All fields that match routing_path must be keywords with [time_series_dimension: true] and "
+ "without the [script] parameter. [metricset] was not [time_series_dimension: true]."
)
);
}
{
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.mode", "time_series").build(),
new CompressedXContent(mappingTemplate),
null
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
var e = expectThrows(
InvalidIndexTemplateException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(e.getMessage(), containsString("[index.mode=time_series] requires a non-empty [index.routing_path]"));
}
}

public void testInvalidTsdbTemplatesNoKeywordFieldType() throws Exception {
Expand Down Expand Up @@ -260,54 +317,28 @@ public void testInvalidTsdbTemplatesMissingSettings() throws Exception {
}
}
}""";
{
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.mode", "time_series").build(),
new CompressedXContent(mappingTemplate),
null
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
var e = expectThrows(
IllegalArgumentException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(e.getMessage(), equalTo("[index.mode=time_series] requires a non-empty [index.routing_path]"));
}
{
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.routing_path", "metricset").build(),
new CompressedXContent(mappingTemplate),
null
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
var request = new PutComposableIndexTemplateAction.Request("id");
request.indexTemplate(
new ComposableIndexTemplate(
List.of("k8s*"),
new Template(
Settings.builder().put("index.routing_path", "metricset").build(),
new CompressedXContent(mappingTemplate),
null
)
);
var e = expectThrows(
IllegalArgumentException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(e.getMessage(), equalTo("[index.routing_path] requires [index.mode=time_series]"));
}
),
null,
null,
null,
null,
new ComposableIndexTemplate.DataStreamTemplate(false, false),
null
)
);
var e = expectThrows(
IllegalArgumentException.class,
() -> client().execute(PutComposableIndexTemplateAction.INSTANCE, request).actionGet()
);
assertThat(e.getCause().getMessage(), equalTo("[index.routing_path] requires [index.mode=time_series]"));
}

static String formatInstant(Instant instant) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

import static org.elasticsearch.cluster.metadata.DataStreamTestHelper.backingIndexEqualTo;
import static org.hamcrest.Matchers.aMapWithSize;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.equalTo;
Expand All @@ -42,8 +42,7 @@ public class TsdbDataStreamRestIT extends ESRestTestCase {
"index": {
"number_of_replicas": 0,
"number_of_shards": 2,
"mode": "time_series",
"routing_path": ["metricset", "time_series_dimension"]
"mode": "time_series"
}
},
"mappings":{
Expand Down Expand Up @@ -328,7 +327,7 @@ public void testSimulateTsdbDataStreamTemplate() throws Exception {
assertThat(ObjectPath.evaluate(responseBody, "template.settings.index.time_series.end_time"), notNullValue());
assertThat(
ObjectPath.evaluate(responseBody, "template.settings.index.routing_path"),
contains("metricset", "time_series_dimension")
containsInAnyOrder("metricset", "k8s.pod.uid")
);
assertThat(ObjectPath.evaluate(responseBody, "overlapping"), empty());
}
Expand Down
Loading