Elasticsearch: Exclude types from V7 which deprecates them
Remove the use of the include_type_name parameter which started from V6.
Before this change, warnings related to the V7 usage of that parameter
showed in consoles.
More in [1] about the include_type_name parameter for Elasticsearch
6.x (warning), 7.x (deprecation), and 8.x (deprecated).
[1] https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html#_schedule_for_removal_of_mapping_types
Bug: Issue 10496
Change-Id: I6fe26e097a618d71a781dbebae621b6515d6822e
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 4f811b9..2e30e59 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -188,10 +188,15 @@
}
protected String getMappingsFor(String type, MappingProperties properties) {
- JsonObject mappingType = new JsonObject();
- mappingType.add(type, gson.toJsonTree(properties));
JsonObject mappings = new JsonObject();
- mappings.add(MAPPINGS, gson.toJsonTree(mappingType));
+
+ if (client.adapter().omitType()) {
+ mappings.add(MAPPINGS, gson.toJsonTree(properties));
+ } else {
+ JsonObject mappingType = new JsonObject();
+ mappingType.add(type, gson.toJsonTree(properties));
+ mappings.add(MAPPINGS, gson.toJsonTree(mappingType));
+ }
return gson.toJson(mappings);
}
@@ -229,11 +234,12 @@
protected String getURI(String type, String request) throws UnsupportedEncodingException {
String encodedIndexName = URLEncoder.encode(indexName, UTF_8.toString());
- if (SEARCH.equals(request) && client.adapter().omitTypeFromSearch()) {
+ if (SEARCH.equals(request) && client.adapter().omitType()) {
return encodedIndexName + "/" + request;
}
- String encodedType = URLEncoder.encode(type, UTF_8.toString());
- return encodedIndexName + "/" + encodedType + "/" + request;
+ String encodedTypeIfAny =
+ client.adapter().omitType() ? "" : "/" + URLEncoder.encode(type, UTF_8.toString());
+ return encodedIndexName + encodedTypeIfAny + "/" + request;
}
protected Response postRequest(String uri, Object payload) throws IOException {
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
index 264822e..81a237b 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
@@ -141,7 +141,7 @@
BulkRequest bulk =
new IndexRequest(getId(cd), indexName, adapter.getType(insertIndex), adapter)
.add(new UpdateRequest<>(schema, cd));
- if (!adapter.usePostV5Type()) {
+ if (adapter.deleteToReplace()) {
bulk.add(new DeleteRequest(cd.getId().toString(), indexName, deleteIndex, adapter));
}
@@ -160,17 +160,19 @@
throws QueryParseException {
Set<Change.Status> statuses = ChangeIndexRewriter.getPossibleStatus(p);
List<String> indexes = Lists.newArrayListWithCapacity(2);
- if (client.adapter().usePostV5Type()) {
- if (!Sets.intersection(statuses, OPEN_STATUSES).isEmpty()
- || !Sets.intersection(statuses, CLOSED_STATUSES).isEmpty()) {
- indexes.add(ElasticQueryAdapter.POST_V5_TYPE);
- }
- } else {
- if (!Sets.intersection(statuses, OPEN_STATUSES).isEmpty()) {
- indexes.add(OPEN_CHANGES);
- }
- if (!Sets.intersection(statuses, CLOSED_STATUSES).isEmpty()) {
- indexes.add(CLOSED_CHANGES);
+ if (!client.adapter().omitType()) {
+ if (client.adapter().useV6Type()) {
+ if (!Sets.intersection(statuses, OPEN_STATUSES).isEmpty()
+ || !Sets.intersection(statuses, CLOSED_STATUSES).isEmpty()) {
+ indexes.add(ElasticQueryAdapter.V6_TYPE);
+ }
+ } else {
+ if (!Sets.intersection(statuses, OPEN_STATUSES).isEmpty()) {
+ indexes.add(OPEN_CHANGES);
+ }
+ if (!Sets.intersection(statuses, CLOSED_STATUSES).isEmpty()) {
+ indexes.add(CLOSED_CHANGES);
+ }
}
}
return new QuerySource(indexes, p, opts);
@@ -178,16 +180,16 @@
@Override
protected String getDeleteActions(Id c) {
- if (client.adapter().usePostV5Type()) {
- return delete(ElasticQueryAdapter.POST_V5_TYPE, c);
+ if (!client.adapter().useV5Type()) {
+ return delete(client.adapter().getType(), c);
}
return delete(OPEN_CHANGES, c) + delete(CLOSED_CHANGES, c);
}
@Override
protected String getMappings() {
- if (client.adapter().usePostV5Type()) {
- return getMappingsFor(ElasticQueryAdapter.POST_V5_TYPE, mapping.changes);
+ if (!client.adapter().useV5Type()) {
+ return getMappingsFor(client.adapter().getType(), mapping.changes);
}
return gson.toJson(ImmutableMap.of(MAPPINGS, mapping));
}
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
index 85fbee8..329913b 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
@@ -17,11 +17,12 @@
import com.google.gson.JsonObject;
public class ElasticQueryAdapter {
- static final String POST_V5_TYPE = "_doc";
+ static final String V6_TYPE = "_doc";
private final boolean ignoreUnmapped;
- private final boolean usePostV5Type;
- private final boolean omitTypeFromSearch;
+ private final boolean useV5Type;
+ private final boolean useV6Type;
+ private final boolean omitType;
private final String searchFilteringName;
private final String indicesExistParam;
@@ -33,15 +34,16 @@
ElasticQueryAdapter(ElasticVersion version) {
this.ignoreUnmapped = false;
- this.usePostV5Type = version.isV6OrLater();
- this.omitTypeFromSearch = version.isV7OrLater();
+ this.useV5Type = !version.isV6OrLater();
+ this.useV6Type = version.isV6();
+ this.omitType = version.isV7OrLater();
this.versionDiscoveryUrl = version.isV6OrLater() ? "/%s*" : "/%s*/_aliases";
this.searchFilteringName = "_source";
this.indicesExistParam = "?allow_no_indices=false";
this.exactFieldType = "keyword";
this.stringFieldType = "text";
this.indexProperty = "true";
- this.includeTypeNameParam = version.isV7OrLater() ? "?include_type_name=true" : "";
+ this.includeTypeNameParam = version.isV6() ? "?include_type_name=true" : "";
}
void setIgnoreUnmapped(JsonObject properties) {
@@ -51,7 +53,7 @@
}
public void setType(JsonObject properties, String type) {
- if (!usePostV5Type) {
+ if (useV5Type) {
properties.addProperty("_type", type);
}
}
@@ -76,16 +78,31 @@
return indexProperty;
}
- boolean usePostV5Type() {
- return usePostV5Type;
+ boolean deleteToReplace() {
+ return useV5Type;
}
- boolean omitTypeFromSearch() {
- return omitTypeFromSearch;
+ boolean useV5Type() {
+ return useV5Type;
+ }
+
+ boolean useV6Type() {
+ return useV6Type;
+ }
+
+ boolean omitType() {
+ return omitType;
+ }
+
+ String getType() {
+ return getType("");
}
String getType(String type) {
- return usePostV5Type() ? POST_V5_TYPE : type;
+ if (useV6Type()) {
+ return V6_TYPE;
+ }
+ return useV5Type() ? type : "";
}
String getVersionDiscoveryUrl(String name) {
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
index 6de4d97..2cd8dd6 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticVersion.java
@@ -58,6 +58,10 @@
return Joiner.on(", ").join(ElasticVersion.values());
}
+ public boolean isV6() {
+ return getMajor() == 6;
+ }
+
public boolean isV6OrLater() {
return isAtLeastVersion(6);
}
@@ -67,7 +71,11 @@
}
private boolean isAtLeastVersion(int v) {
- return Integer.valueOf(version.split("\\.")[0]) >= v;
+ return getMajor() >= v;
+ }
+
+ private Integer getMajor() {
+ return Integer.valueOf(version.split("\\.")[0]);
}
@Override