Merge branch 'stable-3.7' into stable-3.8
* stable-3.7:
Failfast when elasticsearch module has paginationType set to NONE
Fix documentation for building elasticsearch module
Remove double brace initialization
Change-Id: I78a6ca9ed3ebba0e7ab116a4bbdb509a4a93c65e
diff --git a/BUILD b/BUILD
index 4070a77..94ce436 100644
--- a/BUILD
+++ b/BUILD
@@ -90,7 +90,8 @@
exclude = ["src/test/java/**/Elastic*Query*" + SUFFIX],
),
tags = ["elastic"],
- deps = PLUGIN_TEST_DEPS + [
+ deps = ELASTICSEARCH_DEPS + PLUGIN_TEST_DEPS + [
+ ":elasticsearch_test_utils",
":index-elasticsearch__plugin",
],
)
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
index 2a5fcde..0379ed9 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
@@ -18,6 +18,8 @@
import com.google.common.base.Strings;
import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.index.IndexConfig;
+import com.google.gerrit.index.PaginationType;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.inject.Inject;
import com.google.inject.ProvisionException;
@@ -70,7 +72,12 @@
final String prefix;
@Inject
- ElasticConfiguration(@GerritServerConfig Config cfg) {
+ ElasticConfiguration(@GerritServerConfig Config cfg, IndexConfig indexConfig) {
+ if (PaginationType.NONE == indexConfig.paginationType()) {
+ throw new ProvisionException(
+ "The 'index.paginationType = NONE' configuration is not supported by Elasticsearch");
+ }
+
this.cfg = cfg;
this.password = cfg.getString(SECTION_ELASTICSEARCH, null, KEY_PASSWORD);
this.username =
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java
index c054da6..2fcfc90 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticSetting.java
@@ -16,7 +16,6 @@
import com.google.common.collect.ImmutableMap;
import com.google.gson.annotations.SerializedName;
-import java.util.HashMap;
import java.util.Map;
class ElasticSetting {
@@ -60,12 +59,7 @@
FieldProperties analyzer = new FieldProperties();
analyzer.customWithCharFilter = customAnalyzer;
- analyzer.keywordTokenizer =
- new HashMap<>() {
- {
- put("tokenizer", "keyword");
- }
- };
+ analyzer.keywordTokenizer = ImmutableMap.of("tokenizer", "keyword");
fields.put("analyzer", analyzer);
return this;
}
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index acb8d85..b2a31c1 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -20,7 +20,7 @@
git clone https://gerrit.googlesource.com/modules/index-elasticsearch
cd gerrit/plugins
ln -s ../../index-elasticsearch index-elasticsearch
-ln -sf ../../external_plugin_deps.bzl .
+ln -sf ../../index-elasticsearch/external_plugin_deps.bzl .
```
From the Gerrit source tree issue the command `bazelisk build plugins/index-elasticsearch`.
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 927d229..1954cb0 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -10,6 +10,16 @@
value is not configured during site initialization, defaults to 10000, which is the default value
of `index.max_result_window` in Elasticsearch.
+### index.paginationType
+
+The pagination type to use when index queries are repeated to obtain the next set of results.
+Supported values are: `OFFSET` and `SEARCH_AFTER`. For more information, refer to
+[`index.paginationType`](https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#index.paginationType).
+
+Defaults to `OFFSET`.
+Note: paginationType `NONE` is not supported and Gerrit will not start if it is configured (results
+in `ProvisionException`).
+
## Section elasticsearch
WARNING: Support for Elasticsearch is still experimental and is not recommended for production
diff --git a/src/test/java/com/google/gerrit/elasticsearch/ElasticConfigurationTest.java b/src/test/java/com/google/gerrit/elasticsearch/ElasticConfigurationTest.java
index 7e044c3..9d20edc 100644
--- a/src/test/java/com/google/gerrit/elasticsearch/ElasticConfigurationTest.java
+++ b/src/test/java/com/google/gerrit/elasticsearch/ElasticConfigurationTest.java
@@ -25,6 +25,7 @@
import static java.util.stream.Collectors.toList;
import com.google.common.collect.ImmutableList;
+import com.google.gerrit.index.IndexConfig;
import com.google.inject.ProvisionException;
import java.util.Arrays;
import org.apache.http.HttpHost;
@@ -35,7 +36,7 @@
@Test
public void singleServerNoOtherConfig() throws Exception {
Config cfg = newConfig();
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertHosts(esCfg, "http://elastic:1234");
assertThat(esCfg.username).isNull();
assertThat(esCfg.password).isNull();
@@ -46,7 +47,7 @@
public void serverWithoutPortSpecified() throws Exception {
Config cfg = new Config();
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_SERVER, "http://elastic");
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertHosts(esCfg, "http://elastic:9200");
}
@@ -54,7 +55,7 @@
public void prefix() throws Exception {
Config cfg = newConfig();
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_PREFIX, "myprefix");
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertThat(esCfg.prefix).isEqualTo("myprefix");
}
@@ -63,7 +64,7 @@
Config cfg = newConfig();
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_USERNAME, "myself");
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_PASSWORD, "s3kr3t");
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertThat(esCfg.username).isEqualTo("myself");
assertThat(esCfg.password).isEqualTo("s3kr3t");
}
@@ -72,7 +73,7 @@
public void withAuthenticationPasswordOnlyUsesDefaultUsername() throws Exception {
Config cfg = newConfig();
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_PASSWORD, "s3kr3t");
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertThat(esCfg.username).isEqualTo(DEFAULT_USERNAME);
assertThat(esCfg.password).isEqualTo("s3kr3t");
}
@@ -85,20 +86,20 @@
null,
KEY_SERVER,
ImmutableList.of("http://elastic1:1234", "http://elastic2:1234"));
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertHosts(esCfg, "http://elastic1:1234", "http://elastic2:1234");
}
@Test
public void noServers() throws Exception {
- assertProvisionException(new Config());
+ assertProvisionException(new Config(), "No valid Elasticsearch servers configured");
}
@Test
public void singleServerInvalid() throws Exception {
Config cfg = new Config();
cfg.setString(SECTION_ELASTICSEARCH, null, KEY_SERVER, "foo");
- assertProvisionException(cfg);
+ assertProvisionException(cfg, "No valid Elasticsearch servers configured");
}
@Test
@@ -106,24 +107,35 @@
Config cfg = new Config();
cfg.setStringList(
SECTION_ELASTICSEARCH, null, KEY_SERVER, ImmutableList.of("http://elastic1:1234", "foo"));
- ElasticConfiguration esCfg = new ElasticConfiguration(cfg);
+ ElasticConfiguration esCfg = newElasticConfig(cfg);
assertHosts(esCfg, "http://elastic1:1234");
}
+ @Test
+ public void unsupportedPaginationTypeNone() {
+ Config cfg = new Config();
+ cfg.setString("index", null, "paginationType", "NONE");
+ assertProvisionException(
+ cfg, "The 'index.paginationType = NONE' configuration is not supported by Elasticsearch");
+ }
+
private static Config newConfig() {
Config config = new Config();
config.setString(SECTION_ELASTICSEARCH, null, KEY_SERVER, "http://elastic:1234");
return config;
}
+ private static ElasticConfiguration newElasticConfig(Config cfg) {
+ return new ElasticConfiguration(cfg, IndexConfig.fromConfig(cfg).build());
+ }
+
private void assertHosts(ElasticConfiguration cfg, Object... hostURIs) throws Exception {
assertThat(Arrays.asList(cfg.getHosts()).stream().map(HttpHost::toURI).collect(toList()))
.containsExactly(hostURIs);
}
- private void assertProvisionException(Config cfg) {
- ProvisionException thrown =
- assertThrows(ProvisionException.class, () -> new ElasticConfiguration(cfg));
- assertThat(thrown).hasMessageThat().contains("No valid Elasticsearch servers configured");
+ private void assertProvisionException(Config cfg, String msg) {
+ ProvisionException thrown = assertThrows(ProvisionException.class, () -> newElasticConfig(cfg));
+ assertThat(thrown).hasMessageThat().contains(msg);
}
}