Do not wait for refresh when AutoFlush.DISABLED
We can roughly map Lucene's "flush" concept to the Elasticsearch
"refresh" concept. Previously this module would ignore the value
of AutoFlush, but now we use it to set the value of the refresh
parameter in write API requests to match the boolean value of
AutoFlush (ENABLED=true, DISABLED=false).
Change-Id: I719ab0d39fe58188f5361bbcf9b282b42cc2cfaf
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 6c93219..c6318fa 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -49,6 +49,7 @@
import com.google.gerrit.proto.Protos;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.index.IndexUtils;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
@@ -140,7 +141,8 @@
SitePaths sitePaths,
Schema<V> schema,
ElasticRestClientProvider client,
- String indexName) {
+ String indexName,
+ AutoFlush autoFlush) {
this.config = config;
this.sitePaths = sitePaths;
this.schema = schema;
@@ -149,7 +151,10 @@
this.indexName = config.getIndexName(indexName, schema.getVersion());
this.indexNameRaw = indexName;
this.client = client;
- this.refreshParam = Map.of("refresh", "true");
+ this.refreshParam =
+ Map.of(
+ "refresh",
+ autoFlush == AutoFlush.ENABLED ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
}
@Override
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
index 6d30c41..c350fcc 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticAccountIndex.java
@@ -32,6 +32,7 @@
import com.google.gerrit.server.index.IndexUtils;
import com.google.gerrit.server.index.account.AccountField;
import com.google.gerrit.server.index.account.AccountIndex;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -64,8 +65,9 @@
SitePaths sitePaths,
Provider<AccountCache> accountCache,
ElasticRestClientProvider client,
+ AutoFlush autoFlush,
@Assisted Schema<AccountState> schema) {
- super(cfg, sitePaths, schema, client, ACCOUNTS);
+ super(cfg, sitePaths, schema, client, ACCOUNTS, autoFlush);
this.accountCache = accountCache;
this.mapping = new AccountMapping(schema, client.adapter());
this.schema = schema;
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
index 70b2889..c0ac239 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticChangeIndex.java
@@ -37,6 +37,7 @@
import com.google.gerrit.server.index.IndexUtils;
import com.google.gerrit.server.index.change.ChangeField;
import com.google.gerrit.server.index.change.ChangeIndex;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -79,8 +80,9 @@
SitePaths sitePaths,
ElasticRestClientProvider clientBuilder,
@GerritServerConfig Config gerritConfig,
+ AutoFlush autoFlush,
@Assisted Schema<ChangeData> schema) {
- super(cfg, sitePaths, schema, clientBuilder, CHANGES);
+ super(cfg, sitePaths, schema, clientBuilder, CHANGES, autoFlush);
this.changeDataFactory = changeDataFactory;
this.schema = schema;
this.mapping = new ChangeMapping(schema, client.adapter());
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
index d45e58e..f27c37f 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticGroupIndex.java
@@ -32,6 +32,7 @@
import com.google.gerrit.server.index.IndexUtils;
import com.google.gerrit.server.index.group.GroupField;
import com.google.gerrit.server.index.group.GroupIndex;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -64,8 +65,9 @@
SitePaths sitePaths,
Provider<GroupCache> groupCache,
ElasticRestClientProvider client,
+ AutoFlush autoFlush,
@Assisted Schema<InternalGroup> schema) {
- super(cfg, sitePaths, schema, client, GROUPS);
+ super(cfg, sitePaths, schema, client, GROUPS, autoFlush);
this.groupCache = groupCache;
this.mapping = new GroupMapping(schema, client.adapter());
this.schema = schema;
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java
index 671e9f4..b1bb7b1 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticIndexModule.java
@@ -14,6 +14,7 @@
package com.google.gerrit.elasticsearch;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.index.project.ProjectIndex;
import com.google.gerrit.server.ModuleImpl;
@@ -22,6 +23,7 @@
import com.google.gerrit.server.index.account.AccountIndex;
import com.google.gerrit.server.index.change.ChangeIndex;
import com.google.gerrit.server.index.group.GroupIndex;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.inject.Inject;
import java.util.Map;
@@ -29,22 +31,28 @@
public class ElasticIndexModule extends AbstractIndexModule {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+ private final AutoFlush autoFlush;
+
+ @VisibleForTesting
public static ElasticIndexModule singleVersionWithExplicitVersions(
Map<String, Integer> versions, int threads, boolean slave) {
- return new ElasticIndexModule(versions, threads, slave);
+ return new ElasticIndexModule(versions, threads, slave, AutoFlush.ENABLED);
}
- public static ElasticIndexModule latestVersion(boolean slave) {
- return new ElasticIndexModule(null, 0, slave);
- }
-
- protected ElasticIndexModule(Map<String, Integer> singleVersions, int threads, boolean slave) {
- super(singleVersions, threads, slave);
+ public static ElasticIndexModule singleVersionWithExplicitVersions(
+ Map<String, Integer> versions, int threads, boolean slave, AutoFlush autoFlush) {
+ return new ElasticIndexModule(versions, threads, slave, autoFlush);
}
@Inject
public ElasticIndexModule() {
- this(null, 0, false);
+ this(null, 0, false, AutoFlush.ENABLED);
+ }
+
+ protected ElasticIndexModule(
+ Map<String, Integer> singleVersions, int threads, boolean slave, AutoFlush autoFlush) {
+ super(singleVersions, threads, slave);
+ this.autoFlush = autoFlush;
}
@Override
@@ -52,6 +60,7 @@
logger.atInfo().log("Gerrit index backend set to ElasticSearch");
super.configure();
install(ElasticRestClientProvider.module());
+ bind(AutoFlush.class).toInstance(autoFlush);
}
@Override
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
index 3433147..0ccc954 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticProjectIndex.java
@@ -31,6 +31,7 @@
import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.index.IndexUtils;
+import com.google.gerrit.server.index.options.AutoFlush;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectState;
import com.google.gson.JsonArray;
@@ -66,8 +67,9 @@
SitePaths sitePaths,
Provider<ProjectCache> projectCache,
ElasticRestClientProvider client,
+ AutoFlush autoFlush,
@Assisted Schema<ProjectData> schema) {
- super(cfg, sitePaths, schema, client, PROJECTS);
+ super(cfg, sitePaths, schema, client, PROJECTS, autoFlush);
this.projectCache = projectCache;
this.schema = schema;
this.mapping = new ProjectMapping(schema, client.adapter());
diff --git a/src/main/java/com/google/gerrit/elasticsearch/PrimaryElasticIndexModule.java b/src/main/java/com/google/gerrit/elasticsearch/PrimaryElasticIndexModule.java
index 8500844..823c657 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/PrimaryElasticIndexModule.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/PrimaryElasticIndexModule.java
@@ -16,11 +16,12 @@
import com.google.gerrit.server.ModuleImpl;
import com.google.gerrit.server.index.AbstractIndexModule;
+import com.google.gerrit.server.index.options.AutoFlush;
@ModuleImpl(name = AbstractIndexModule.INDEX_MODULE)
public class PrimaryElasticIndexModule extends ElasticIndexModule {
public PrimaryElasticIndexModule() {
- super(null, 0, false);
+ super(null, 0, false, AutoFlush.ENABLED);
}
}
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ReplicaElasticIndexModule.java b/src/main/java/com/google/gerrit/elasticsearch/ReplicaElasticIndexModule.java
index 8845cbe..86ccac6 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ReplicaElasticIndexModule.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ReplicaElasticIndexModule.java
@@ -16,11 +16,12 @@
import com.google.gerrit.server.ModuleImpl;
import com.google.gerrit.server.index.AbstractIndexModule;
+import com.google.gerrit.server.index.options.AutoFlush;
@ModuleImpl(name = AbstractIndexModule.INDEX_MODULE)
public class ReplicaElasticIndexModule extends ElasticIndexModule {
public ReplicaElasticIndexModule() {
- super(null, 0, true);
+ super(null, 0, true, AutoFlush.ENABLED);
}
}