You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by ad...@apache.org on 2019/05/06 13:18:33 UTC
[incubator-zipkin] 01/04: Removes support for Elasticsearch 2.x
This is an automated email from the ASF dual-hosted git repository.
adriancole pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin.git
commit 097fc9d392e470bd2288ced071280ba83bb0d885
Author: Adrian Cole <ac...@pivotal.io>
AuthorDate: Mon May 6 13:22:58 2019 +0800
Removes support for Elasticsearch 2.x
As discussed, this removes support for Elasticsearch 2.x
See https://lists.apache.org/thread.html/ac01ebd12b6ecaac6496e146570652a3e804d45d9b9d2100001f5c75@%3Cdev.zipkin.apache.org%3E
---
zipkin-server/README.md | 5 +-
zipkin-storage/elasticsearch/README.md | 7 +-
.../elasticsearch/ElasticsearchStorage.java | 1 -
.../elasticsearch/VersionSpecificTemplates.java | 276 +++++++++------------
.../elasticsearch/ElasticsearchStorageTest.java | 2 +-
.../integration/ITElasticsearchStorageV2.java | 163 ------------
.../integration/ITElasticsearchStorageV7.java | 19 ++
7 files changed, 144 insertions(+), 329 deletions(-)
diff --git a/zipkin-server/README.md b/zipkin-server/README.md
index 0a79549..7832c84 100644
--- a/zipkin-server/README.md
+++ b/zipkin-server/README.md
@@ -183,14 +183,13 @@ $ STORAGE_TYPE=cassandra3 java -jar zipkin.jar --logging.level.zipkin=trace --lo
### Elasticsearch Storage
Zipkin's [Elasticsearch storage component](../zipkin-storage/elasticsearch)
-supports versions 2-6.x and applies when `STORAGE_TYPE` is set to `elasticsearch`
+supports versions 5-7.x and applies when `STORAGE_TYPE` is set to `elasticsearch`
The following apply when `STORAGE_TYPE` is set to `elasticsearch`:
* `ES_HOSTS`: A comma separated list of elasticsearch base urls to connect to ex. http://host:9200.
Defaults to "http://localhost:9200".
- * `ES_PIPELINE`: Only valid when the destination is Elasticsearch 5+. Indicates the ingest
- pipeline used before spans are indexed. No default.
+ * `ES_PIPELINE`: Indicates the ingest pipeline used before spans are indexed. No default.
* `ES_TIMEOUT`: Controls the connect, read and write socket timeouts (in milliseconds) for
Elasticsearch Api. Defaults to 10000 (10 seconds)
* `ES_MAX_REQUESTS`: Only valid when the transport is http. Sets maximum in-flight requests from
diff --git a/zipkin-storage/elasticsearch/README.md b/zipkin-storage/elasticsearch/README.md
index a3ee202..f5b5e7b 100644
--- a/zipkin-storage/elasticsearch/README.md
+++ b/zipkin-storage/elasticsearch/README.md
@@ -2,8 +2,8 @@
This is is a plugin to the Elasticsearch storage component, which uses
HTTP by way of [OkHttp 3](https://github.com/square/okttp) and
-[Moshi](https://github.com/square/moshi). This currently supports 2.x,
-5.x, 6.x and 7.x version families.
+[Moshi](https://github.com/square/moshi). This currently supports 5.x,
+6.x and 7.x version families.
## Multiple hosts
Most users will supply a DNS name that's mapped to multiple A or AAAA
@@ -123,8 +123,7 @@ be written, nor analyzed.
## Customizing the ingest pipeline
-When using Elasticsearch 5.x, you can setup an [ingest pipeline](https://www.elastic.co/guide/en/elasticsearch/reference/master/pipeline.html)
-to perform custom processing.
+You can setup an [ingest pipeline](https://www.elastic.co/guide/en/elasticsearch/reference/master/pipeline.html) to perform custom processing.
Here's an example, which you'd setup prior to configuring Zipkin to use
it via `ElasticsearchStorage.Builder.pipeline`
diff --git a/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/ElasticsearchStorage.java b/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/ElasticsearchStorage.java
index a19541f..1d12681 100644
--- a/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/ElasticsearchStorage.java
+++ b/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/ElasticsearchStorage.java
@@ -293,7 +293,6 @@ public abstract class ElasticsearchStorage extends zipkin2.storage.StorageCompon
void clear(String index) throws IOException {
HttpUrl.Builder url = http().baseUrl.newBuilder().addPathSegment(index);
- //if (version() >= 6.0 ) url.addQueryParameter("refresh", "wait_for");
Request delete = new Request.Builder().url(url.build()).delete().tag("delete-index").build();
http().newCall(delete, BodyConverters.NULL).execute();
}
diff --git a/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/VersionSpecificTemplates.java b/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/VersionSpecificTemplates.java
index b48a9a1..6f82980 100644
--- a/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/VersionSpecificTemplates.java
+++ b/zipkin-storage/elasticsearch/src/main/java/zipkin2/elasticsearch/VersionSpecificTemplates.java
@@ -31,6 +31,7 @@ import static zipkin2.elasticsearch.internal.JsonReaders.enterPath;
/** Returns a version-specific span and dependency index template */
final class VersionSpecificTemplates {
static final Logger LOG = Logger.getLogger(VersionSpecificTemplates.class.getName());
+ static final String KEYWORD = "{ \"type\": \"keyword\", \"norms\": false }";
final boolean searchEnabled;
final String spanIndexTemplate;
@@ -39,21 +40,16 @@ final class VersionSpecificTemplates {
VersionSpecificTemplates(ElasticsearchStorage es) {
this.searchEnabled = es.searchEnabled();
- this.spanIndexTemplate =
- spanIndexTemplate()
- .replace("${__INDEX__}", es.indexNameFormatter().index())
- .replace("${__NUMBER_OF_SHARDS__}", String.valueOf(es.indexShards()))
- .replace("${__NUMBER_OF_REPLICAS__}", String.valueOf(es.indexReplicas()))
- .replace(
- "${__TRACE_ID_MAPPING__}",
- es.strictTraceId()
- ? "{ KEYWORD }"
- : "{ \"type\": \"STRING\", \"analyzer\": \"traceId_analyzer\" }");
- this.dependencyIndexTemplate =
- DEPENDENCY_INDEX_TEMPLATE
- .replace("${__INDEX__}", es.indexNameFormatter().index())
- .replace("${__NUMBER_OF_SHARDS__}", String.valueOf(es.indexShards()))
- .replace("${__NUMBER_OF_REPLICAS__}", String.valueOf(es.indexReplicas()));
+ this.spanIndexTemplate = spanIndexTemplate()
+ .replace("${__INDEX__}", es.indexNameFormatter().index())
+ .replace("${__NUMBER_OF_SHARDS__}", String.valueOf(es.indexShards()))
+ .replace("${__NUMBER_OF_REPLICAS__}", String.valueOf(es.indexReplicas()))
+ .replace("${__TRACE_ID_MAPPING__}", es.strictTraceId() ? KEYWORD
+ : "{ \"type\": \"text\", \"fielddata\": \"true\", \"analyzer\": \"traceId_analyzer\" }");
+ this.dependencyIndexTemplate = DEPENDENCY_INDEX_TEMPLATE
+ .replace("${__INDEX__}", es.indexNameFormatter().index())
+ .replace("${__NUMBER_OF_SHARDS__}", String.valueOf(es.indexShards()))
+ .replace("${__NUMBER_OF_REPLICAS__}", String.valueOf(es.indexReplicas()));
this.autocompleteIndexTemplate = AUTOCOMPLETE_INDEX_TEMPLATE
.replace("${__INDEX__}", es.indexNameFormatter().index())
.replace("${__NUMBER_OF_SHARDS__}", String.valueOf(es.indexShards()))
@@ -63,138 +59,127 @@ final class VersionSpecificTemplates {
/** Templatized due to version differences. Only fields used in search are declared */
String spanIndexTemplate() {
String result =
- "{\n"
- + " \"TEMPLATE\": \"${__INDEX__}:"
- + SPAN
- + "-*\",\n"
- + " \"settings\": {\n"
- + " \"index.number_of_shards\": ${__NUMBER_OF_SHARDS__},\n"
- + " \"index.number_of_replicas\": ${__NUMBER_OF_REPLICAS__},\n"
- + " \"index.requests.cache.enable\": true,\n"
- + " \"index.mapper.dynamic\": false,\n"
- + " \"analysis\": {\n"
- + " \"analyzer\": {\n"
- + " \"traceId_analyzer\": {\n"
- + " \"type\": \"custom\",\n"
- + " \"tokenizer\": \"keyword\",\n"
- + " \"filter\": \"traceId_filter\"\n"
- + " }\n"
- + " },\n"
- + " \"filter\": {\n"
- + " \"traceId_filter\": {\n"
- + " \"type\": \"pattern_capture\",\n"
- + " \"patterns\": [\"([0-9a-f]{1,16})$\"],\n"
- + " \"preserve_original\": true\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " },\n";
+ "{\n"
+ + " \"TEMPLATE\": \"${__INDEX__}:span-*\",\n"
+ + " \"settings\": {\n"
+ + " \"index.number_of_shards\": ${__NUMBER_OF_SHARDS__},\n"
+ + " \"index.number_of_replicas\": ${__NUMBER_OF_REPLICAS__},\n"
+ + " \"index.requests.cache.enable\": true,\n"
+ + " \"index.mapper.dynamic\": false,\n"
+ + " \"analysis\": {\n"
+ + " \"analyzer\": {\n"
+ + " \"traceId_analyzer\": {\n"
+ + " \"type\": \"custom\",\n"
+ + " \"tokenizer\": \"keyword\",\n"
+ + " \"filter\": \"traceId_filter\"\n"
+ + " }\n"
+ + " },\n"
+ + " \"filter\": {\n"
+ + " \"traceId_filter\": {\n"
+ + " \"type\": \"pattern_capture\",\n"
+ + " \"patterns\": [\"([0-9a-f]{1,16})$\"],\n"
+ + " \"preserve_original\": true\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + " },\n";
if (searchEnabled) {
return result
- + (" \"mappings\": {\nDISABLE_ALL"
- + " \""
- + SPAN
- + "\": {\n"
- + " \"_source\": {\"excludes\": [\"_q\"] },\n"
- + " \"dynamic_templates\": [\n"
- + " {\n"
- + " \"strings\": {\n"
- + " \"mapping\": {\n"
- + " KEYWORD,\n"
- + " \"ignore_above\": 256\n"
- + " },\n"
- + " \"match_mapping_type\": \"string\",\n"
- + " \"match\": \"*\"\n"
- + " }\n"
- + " }\n"
- + " ],\n"
- + " \"properties\": {\n"
- + " \"traceId\": ${__TRACE_ID_MAPPING__},\n"
- + " \"name\": { KEYWORD },\n"
- + " \"localEndpoint\": {\n"
- + " \"type\": \"object\",\n"
- + " \"dynamic\": false,\n"
- + " \"properties\": { \"serviceName\": { KEYWORD } }\n"
- + " },\n"
- + " \"remoteEndpoint\": {\n"
- + " \"type\": \"object\",\n"
- + " \"dynamic\": false,\n"
- + " \"properties\": { \"serviceName\": { KEYWORD } }\n"
- + " },\n"
- + " \"timestamp_millis\": {\n"
- + " \"type\": \"date\",\n"
- + " \"format\": \"epoch_millis\"\n"
- + " },\n"
- + " \"duration\": { \"type\": \"long\" },\n"
- + " \"annotations\": { \"enabled\": false },\n"
- + " \"tags\": { \"enabled\": false },\n"
- + " \"_q\": { KEYWORD }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + "}");
+ + (" \"mappings\": {\n"
+ + " \"span\": {\n"
+ + " \"_source\": {\"excludes\": [\"_q\"] },\n"
+ + " \"dynamic_templates\": [\n"
+ + " {\n"
+ + " \"strings\": {\n"
+ + " \"mapping\": {\n"
+ + " \"type\": \"keyword\",\"norms\": false\n,\n"
+ + " \"ignore_above\": 256\n"
+ + " },\n"
+ + " \"match_mapping_type\": \"string\",\n"
+ + " \"match\": \"*\"\n"
+ + " }\n"
+ + " }\n"
+ + " ],\n"
+ + " \"properties\": {\n"
+ + " \"traceId\": ${__TRACE_ID_MAPPING__},\n"
+ + " \"name\": " + KEYWORD + ",\n"
+ + " \"localEndpoint\": {\n"
+ + " \"type\": \"object\",\n"
+ + " \"dynamic\": false,\n"
+ + " \"properties\": { \"serviceName\": " + KEYWORD + " }\n"
+ + " },\n"
+ + " \"remoteEndpoint\": {\n"
+ + " \"type\": \"object\",\n"
+ + " \"dynamic\": false,\n"
+ + " \"properties\": { \"serviceName\": " + KEYWORD + " }\n"
+ + " },\n"
+ + " \"timestamp_millis\": {\n"
+ + " \"type\": \"date\",\n"
+ + " \"format\": \"epoch_millis\"\n"
+ + " },\n"
+ + " \"duration\": { \"type\": \"long\" },\n"
+ + " \"annotations\": { \"enabled\": false },\n"
+ + " \"tags\": { \"enabled\": false },\n"
+ + " \"_q\": " + KEYWORD + "\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + "}");
}
return result
- + (" \"mappings\": {\nDISABLE_ALL"
- + " \""
- + SPAN
- + "\": {\n"
- + " \"properties\": {\n"
- + " \"traceId\": ${__TRACE_ID_MAPPING__},\n"
- + " \"annotations\": { \"enabled\": false },\n"
- + " \"tags\": { \"enabled\": false }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + "}");
+ + (" \"mappings\": {\n"
+ + " \"span\": {\n"
+ + " \"properties\": {\n"
+ + " \"traceId\": ${__TRACE_ID_MAPPING__},\n"
+ + " \"annotations\": { \"enabled\": false },\n"
+ + " \"tags\": { \"enabled\": false }\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + "}");
}
/** Templatized due to version differences. Only fields used in search are declared */
static final String DEPENDENCY_INDEX_TEMPLATE =
- "{\n"
- + " \"TEMPLATE\": \"${__INDEX__}:"
- + DEPENDENCY
- + "-*\",\n"
- + " \"settings\": {\n"
- + " \"index.number_of_shards\": ${__NUMBER_OF_SHARDS__},\n"
- + " \"index.number_of_replicas\": ${__NUMBER_OF_REPLICAS__},\n"
- + " \"index.requests.cache.enable\": true,\n"
- + " \"index.mapper.dynamic\": false\n"
- + " },\n"
- + " \"mappings\": {\""
- + DEPENDENCY
- + "\": { \"enabled\": false }}\n"
- + "}";
+ "{\n"
+ + " \"TEMPLATE\": \"${__INDEX__}:dependency-*\",\n"
+ + " \"settings\": {\n"
+ + " \"index.number_of_shards\": ${__NUMBER_OF_SHARDS__},\n"
+ + " \"index.number_of_replicas\": ${__NUMBER_OF_REPLICAS__},\n"
+ + " \"index.requests.cache.enable\": true,\n"
+ + " \"index.mapper.dynamic\": false\n"
+ + " },\n"
+ + " \"mappings\": {\"dependency\": { \"enabled\": false }}\n"
+ + "}";
// The key filed of a autocompleteKeys is intentionally names as tagKey since it clashes with the
// BodyConverters KEY
static final String AUTOCOMPLETE_INDEX_TEMPLATE =
"{\n"
- + " \"TEMPLATE\": \"${__INDEX__}:"
- + AUTOCOMPLETE
- + "-*\",\n"
+ + " \"TEMPLATE\": \"${__INDEX__}:autocomplete-*\",\n"
+ " \"settings\": {\n"
+ " \"index.number_of_shards\": ${__NUMBER_OF_SHARDS__},\n"
+ " \"index.number_of_replicas\": ${__NUMBER_OF_REPLICAS__},\n"
+ " \"index.requests.cache.enable\": true,\n"
+ " \"index.mapper.dynamic\": false\n"
+ " },\n"
- + " \"mappings\": {\""
- + AUTOCOMPLETE
- + "\": { \"enabled\": true,\n"
+ + " \"mappings\": {\n"
+ + " \"autocomplete\": {\n"
+ + " \"enabled\": true,\n"
+ " \"properties\": {\n"
- + " \"tagKey\": { KEYWORD },\n"
- + " \"tagValue\": { KEYWORD }\n"
+ + " \"tagKey\": " + KEYWORD + ",\n"
+ + " \"tagValue\": " + KEYWORD + "\n"
+ " }}}\n"
+ "}";
+
IndexTemplates get(HttpCall.Factory callFactory) throws IOException {
float version = getVersion(callFactory);
return IndexTemplates.newBuilder()
- .version(version)
- .span(versionSpecificSpanIndexTemplate(version))
- .dependency(versionSpecificDependencyLinkIndexTemplate(version))
- .autocomplete(versionSpecificAutocompleteIndexTemplate(version))
- .build();
+ .version(version)
+ .span(versionSpecificSpanIndexTemplate(version))
+ .dependency(versionSpecificDependencyLinkIndexTemplate(version))
+ .autocomplete(versionSpecificAutocompleteIndexTemplate(version))
+ .build();
}
static float getVersion(HttpCall.Factory callFactory) throws IOException {
@@ -205,47 +190,30 @@ final class VersionSpecificTemplates {
enum ReadVersionNumber implements HttpCall.BodyConverter<Float> {
INSTANCE;
- @Override
- public Float convert(BufferedSource content) throws IOException {
+ @Override public Float convert(BufferedSource content) throws IOException {
JsonReader version = enterPath(JsonReader.of(content), "version", "number");
if (version == null) throw new IllegalStateException(".version.number not in response");
String versionString = version.nextString();
float result = Float.valueOf(versionString.substring(0, 3));
- if (result < 2) {
- LOG.warning("Please upgrade to Elasticsearch 2 or later. version=" + versionString);
+ if (result < 5) {
+ LOG.warning("Please upgrade to Elasticsearch 5 or later. version=" + versionString);
}
return result;
}
- @Override
- public String toString() {
+ @Override public String toString() {
return "GetVersion";
}
}
private String versionSpecificSpanIndexTemplate(float version) {
String result;
- if (version >= 2 && version < 3) {
- result = spanIndexTemplate
- .replace("TEMPLATE", "template")
- .replace("STRING", "string")
- .replace("DISABLE_ALL", "\"_default_\": { \"_all\": {\"enabled\": false} },\n")
- .replace(
- "KEYWORD",
- "\"type\": \"string\", \"norms\": {\"enabled\": false }, \"index\": \"not_analyzed\"");
- } else if (version >= 5) {
- result = spanIndexTemplate
- .replace("TEMPLATE", version >= 6 ? "index_patterns" : "template")
- .replace("STRING", "text")
- // 6.x _all disabled https://www.elastic.co/guide/en/elasticsearch/reference/6.7/breaking-changes-6.0.html#_the_literal__all_literal_meta_field_is_now_disabled_by_default
- // 7.x _default disallowed https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#_the_literal__default__literal_mapping_is_no_longer_allowed
- .replace("DISABLE_ALL", "")
- .replace("KEYWORD", "\"type\": \"keyword\", \"norms\": false")
- .replace(
- "\"analyzer\": \"traceId_analyzer\" }",
- "\"fielddata\": \"true\", \"analyzer\": \"traceId_analyzer\" }");
+ if (version >= 5) {
+ result = spanIndexTemplate.replace("TEMPLATE", version >= 6 ? "index_patterns" : "template");
+ // 6.x _all disabled https://www.elastic.co/guide/en/elasticsearch/reference/6.7/breaking-changes-6.0.html#_the_literal__all_literal_meta_field_is_now_disabled_by_default
+ // 7.x _default disallowed https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#_the_literal__default__literal_mapping_is_no_longer_allowed
} else {
- throw new IllegalStateException("Elasticsearch 2-7.x are supported, was: " + version);
+ throw new IllegalStateException("Elasticsearch 5-7.x are supported, was: " + version);
}
return maybeReviseFor7x(SPAN, version, result);
}
@@ -258,17 +226,11 @@ final class VersionSpecificTemplates {
private String versionSpecificAutocompleteIndexTemplate(float version) {
String result;
- if (version >= 2 && version < 3) {
- result = autocompleteIndexTemplate
- .replace("TEMPLATE", "template")
- .replace("KEYWORD", "\"type\": \"string\", \"norms\": {\"enabled\": false }, \"index\": "
- + "\"not_analyzed\"");
- } else if (version >= 5) {
+ if (version >= 5) {
result = autocompleteIndexTemplate
- .replace("TEMPLATE", version >= 6 ? "index_patterns" : "template")
- .replace("KEYWORD", "\"type\": \"keyword\",\"norms\": false\n");
+ .replace("TEMPLATE", version >= 6 ? "index_patterns" : "template");
} else {
- throw new IllegalStateException("Elasticsearch 2-7.x are supported, was: " + version);
+ throw new IllegalStateException("Elasticsearch 5-7.x are supported, was: " + version);
}
return maybeReviseFor7x(AUTOCOMPLETE, version, result);
}
diff --git a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/ElasticsearchStorageTest.java b/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/ElasticsearchStorageTest.java
index 0609fe3..ff543e5 100644
--- a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/ElasticsearchStorageTest.java
+++ b/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/ElasticsearchStorageTest.java
@@ -43,7 +43,7 @@ public class ElasticsearchStorageTest {
@Test
public void memoizesIndexTemplate() throws Exception {
- es.enqueue(new MockResponse().setBody("{\"version\":{\"number\":\"2.4.0\"}}"));
+ es.enqueue(new MockResponse().setBody("{\"version\":{\"number\":\"6.7.0\"}}"));
es.enqueue(new MockResponse()); // get span template
es.enqueue(new MockResponse()); // get dependency template
es.enqueue(new MockResponse()); // get tags template
diff --git a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV2.java b/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV2.java
deleted file mode 100644
index adc380e..0000000
--- a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV2.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package zipkin2.elasticsearch.integration;
-
-import java.io.IOException;
-import java.util.List;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.rules.TestName;
-import org.junit.runner.RunWith;
-import zipkin2.Span;
-import zipkin2.elasticsearch.ElasticsearchStorage;
-import zipkin2.elasticsearch.InternalForTests;
-import zipkin2.storage.StorageComponent;
-
-import static zipkin2.elasticsearch.integration.ElasticsearchStorageRule.index;
-
-@RunWith(Enclosed.class)
-public class ITElasticsearchStorageV2 {
-
- static ElasticsearchStorageRule classRule() {
- return new ElasticsearchStorageRule("openzipkin/zipkin-elasticsearch:2.12.8",
- "test_elasticsearch3");
- }
-
- public static class ITSpanStore extends zipkin2.storage.ITSpanStore {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- ElasticsearchStorage storage;
-
- @Before public void connect() {
- storage = backend.computeStorageBuilder().index(index(testName)).build();
- }
-
- @Override protected StorageComponent storage() {
- return storage;
- }
-
- @Override @Test @Ignore("No consumer-side span deduplication") public void deduplicates() {
- }
-
- @Before @Override public void clear() throws IOException {
- storage.clear();
- }
- }
-
- public static class ITSearchEnabledFalse extends zipkin2.storage.ITSearchEnabledFalse {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- ElasticsearchStorage storage;
-
- @Before public void connect() {
- storage = backend.computeStorageBuilder().index(index(testName)).searchEnabled(false).build();
- }
-
- @Override protected StorageComponent storage() {
- return storage;
- }
-
- @Before @Override public void clear() throws IOException {
- storage.clear();
- }
- }
-
- public static class ITStrictTraceIdFalse extends zipkin2.storage.ITStrictTraceIdFalse {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- ElasticsearchStorage storage;
-
- @Before public void connect() {
- storage = backend.computeStorageBuilder().index(index(testName)).strictTraceId(false).build();
- }
-
- @Override protected StorageComponent storage() {
- return storage;
- }
-
- @Before @Override public void clear() throws IOException {
- storage.clear();
- }
- }
-
- public static class ITServiceAndSpanNames extends zipkin2.storage.ITServiceAndSpanNames {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- ElasticsearchStorage storage;
-
- @Before public void connect() {
- storage = backend.computeStorageBuilder().index(index(testName)).build();
- }
-
- @Override protected StorageComponent storage() {
- return storage;
- }
-
- @Before @Override public void clear() throws IOException {
- storage.clear();
- }
- }
-
- public static class ITAutocompleteTags extends zipkin2.storage.ITAutocompleteTags {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- @Override protected StorageComponent.Builder storageBuilder() {
- return backend.computeStorageBuilder().index(index(testName));
- }
-
- @Before @Override public void clear() throws IOException {
- ((ElasticsearchStorage) storage).clear();
- }
- }
-
- public static class ITDependencies extends zipkin2.storage.ITDependencies {
- @ClassRule public static ElasticsearchStorageRule backend = classRule();
- @Rule public TestName testName = new TestName();
-
- ElasticsearchStorage storage;
-
- @Before public void connect() {
- storage = backend.computeStorageBuilder().index(index(testName)).build();
- }
-
- @Override protected StorageComponent storage() {
- return storage;
- }
-
- /**
- * The current implementation does not include dependency aggregation. It includes retrieval of
- * pre-aggregated links, usually made via zipkin-dependencies
- */
- @Override protected void processDependencies(List<Span> spans) throws Exception {
- aggregateLinks(spans).forEach(
- (midnight, links) -> InternalForTests.writeDependencyLinks(storage, links, midnight));
- }
-
- @Before @Override public void clear() throws IOException {
- storage.clear();
- }
- }
-}
diff --git a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV7.java b/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV7.java
index e2c37f3..c6a4367 100644
--- a/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV7.java
+++ b/zipkin-storage/elasticsearch/src/test/java/zipkin2/elasticsearch/integration/ITElasticsearchStorageV7.java
@@ -83,6 +83,25 @@ public class ITElasticsearchStorageV7 {
}
}
+ public static class ITServiceAndSpanNames extends zipkin2.storage.ITServiceAndSpanNames {
+ @ClassRule public static ElasticsearchStorageRule backend = classRule();
+ @Rule public TestName testName = new TestName();
+
+ ElasticsearchStorage storage;
+
+ @Before public void connect() {
+ storage = backend.computeStorageBuilder().index(index(testName)).build();
+ }
+
+ @Override protected StorageComponent storage() {
+ return storage;
+ }
+
+ @Before @Override public void clear() throws IOException {
+ storage.clear();
+ }
+ }
+
public static class ITAutocompleteTags extends zipkin2.storage.ITAutocompleteTags {
@ClassRule public static ElasticsearchStorageRule backend = classRule();
@Rule public TestName testName = new TestName();