Merge branch 'stable-2.16' into stable-3.0 * stable-2.16: DeleteChangeUsingHAGerrit2: Fix json change number Change-Id: I4d4898e1ea494d5fd42f98fca90e7f8cf0283baf
diff --git a/BUILD b/BUILD index 577b49d..c3f5a11 100644 --- a/BUILD +++ b/BUILD
@@ -41,7 +41,6 @@ visibility = ["//visibility:public"], exports = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [ ":high-availability__plugin", - "@mockito//jar", "@wiremock//jar", ], )
diff --git a/WORKSPACE b/WORKSPACE index ad74f46..3ac36dd 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,7 +3,7 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "22b242638bd36017790d94ffcc18a57f223bda2f", + commit = "15eae2ee5cd524a204bd62c3d59bfd0ce86916ec", #local_path = "/home/<user>/projects/bazlets", )
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl index 12bf919..ca33b60 100644 --- a/external_plugin_deps.bzl +++ b/external_plugin_deps.bzl
@@ -8,37 +8,6 @@ ) maven_jar( - name = "mockito", - artifact = "org.mockito:mockito-core:2.28.2", - sha1 = "91110215a8cb9b77a46e045ee758f77d79167cc0", - deps = [ - "@byte-buddy//jar", - "@byte-buddy-agent//jar", - "@objenesis//jar", - ], - ) - - BYTE_BUDDY_VERSION = "1.9.10" - - maven_jar( - name = "byte-buddy", - artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION, - sha1 = "211a2b4d3df1eeef2a6cacf78d74a1f725e7a840", - ) - - maven_jar( - name = "byte-buddy-agent", - artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION, - sha1 = "9674aba5ee793e54b864952b001166848da0f26b", - ) - - maven_jar( - name = "objenesis", - artifact = "org.objenesis:objenesis:2.6", - sha1 = "639033469776fd37c08358c6b92a4761feb2af4b", - ) - - maven_jar( name = "jgroups", artifact = "org.jgroups:jgroups:3.6.15.Final", sha1 = "755afcfc6c8a8ea1e15ef0073417c0b6e8c6d6e4",
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/AccountReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/AccountReindexRunnable.java index de156a2..eb65106 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/AccountReindexRunnable.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/AccountReindexRunnable.java
@@ -19,11 +19,9 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.AbstractIndexRestApiServlet; import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.account.Accounts; import com.google.gerrit.server.util.OneOffRequestContext; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; import java.sql.Timestamp; @@ -48,12 +46,12 @@ } @Override - protected Iterable<AccountState> fetchItems(ReviewDb db) throws Exception { + protected Iterable<AccountState> fetchItems() throws Exception { return accounts.all(); } @Override - protected Optional<Timestamp> indexIfNeeded(ReviewDb db, AccountState as, Timestamp sinceTs) { + protected Optional<Timestamp> indexIfNeeded(AccountState as, Timestamp sinceTs) { try { Account a = as.getAccount(); Timestamp accountTs = a.getRegisteredOn(); @@ -63,7 +61,7 @@ accountIdx.index(a.getId(), Operation.INDEX, Optional.empty()); return Optional.of(accountTs); } - } catch (IOException | OrmException e) { + } catch (IOException e) { log.atSevere().withCause(e).log("Reindex failed"); } return Optional.empty();
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ChangeReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ChangeReindexRunnable.java index 67c8325..dd323b4 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ChangeReindexRunnable.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ChangeReindexRunnable.java
@@ -21,13 +21,11 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.util.OneOffRequestContext; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; import java.sql.Timestamp; @@ -77,14 +75,14 @@ } @Override - protected Iterable<Change> fetchItems(ReviewDb db) throws Exception { + protected Iterable<Change> fetchItems() throws Exception { Stream<Change> allChangesStream = Stream.empty(); Iterable<Project.NameKey> projects = projectCache.all(); for (Project.NameKey projectName : projects) { try (Repository repo = repoManager.openRepository(projectName)) { Stream<Change> projectChangesStream = notesFactory - .scan(repo, db, projectName) + .scan(repo, projectName) .map((ChangeNotesResult changeNotes) -> changeNotes.notes().getChange()); allChangesStream = Streams.concat(allChangesStream, projectChangesStream); } @@ -93,7 +91,7 @@ } @Override - protected Optional<Timestamp> indexIfNeeded(ReviewDb db, Change c, Timestamp sinceTs) { + protected Optional<Timestamp> indexIfNeeded(Change c, Timestamp sinceTs) { try { Timestamp changeTs = c.getLastUpdatedOn(); if (changeTs.after(sinceTs)) { @@ -102,7 +100,7 @@ changeIdx.index(c.getProject() + "~" + c.getId(), Operation.INDEX, Optional.empty()); return Optional.of(changeTs); } - } catch (OrmException | IOException e) { + } catch (IOException e) { log.atSevere().withCause(e).log("Reindex failed"); } return Optional.empty();
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java index 71a0280..e37234c 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java
@@ -16,7 +16,6 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.AbstractIndexRestApiServlet; import com.google.gerrit.common.data.GroupReference; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.group.db.Groups; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.inject.Inject; @@ -34,12 +33,12 @@ } @Override - protected Iterable<GroupReference> fetchItems(ReviewDb db) throws Exception { + protected Iterable<GroupReference> fetchItems() throws Exception { return groups.getAllGroupReferences()::iterator; } @Override - protected Optional<Timestamp> indexIfNeeded(ReviewDb db, GroupReference g, Timestamp sinceTs) { + protected Optional<Timestamp> indexIfNeeded(GroupReference g, Timestamp sinceTs) { return Optional.empty(); } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java index 0e0602a..6255986 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java
@@ -23,11 +23,9 @@ import com.google.gerrit.extensions.events.ChangeIndexedListener; import com.google.gerrit.extensions.events.GroupIndexedListener; import com.google.gerrit.extensions.events.ProjectIndexedListener; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.change.ChangeFinder; import com.google.gerrit.server.git.WorkQueue; import com.google.gerrit.server.notedb.ChangeNotes; -import com.google.gwtorm.server.SchemaFactory; import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; @@ -51,7 +49,6 @@ private final Path dataDir; private final ScheduledExecutorService exec; private final FlusherRunner flusher; - private final SchemaFactory<ReviewDb> schemaFactory; private final ChangeFinder changeFinder; private final CurrentRequestContext currCtx; @@ -87,13 +84,11 @@ public IndexTs( @PluginData Path dataDir, WorkQueue queue, - SchemaFactory<ReviewDb> schemaFactory, ChangeFinder changeFinder, CurrentRequestContext currCtx) { this.dataDir = dataDir; this.exec = queue.getDefaultQueue(); this.flusher = new FlusherRunner(); - this.schemaFactory = schemaFactory; this.changeFinder = changeFinder; this.currCtx = currCtx; } @@ -117,7 +112,7 @@ public void onChangeIndexed(String projectName, int id) { currCtx.onlyWithContext( (ctx) -> { - try (ReviewDb db = schemaFactory.open()) { + try { ChangeNotes changeNotes = changeFinder.findOne(projectName + "~" + id); update( IndexName.CHANGE,
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ProjectReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ProjectReindexRunnable.java index 582227d..ff5a965 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ProjectReindexRunnable.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ProjectReindexRunnable.java
@@ -16,7 +16,6 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.AbstractIndexRestApiServlet; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.inject.Inject; @@ -35,12 +34,12 @@ } @Override - protected Iterable<Project.NameKey> fetchItems(ReviewDb db) { + protected Iterable<Project.NameKey> fetchItems() { return projectCache.all(); } @Override - protected Optional<Timestamp> indexIfNeeded(ReviewDb db, Project.NameKey g, Timestamp sinceTs) { + protected Optional<Timestamp> indexIfNeeded(Project.NameKey g, Timestamp sinceTs) { return Optional.empty(); } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ReindexRunnable.java index 7a5669e..3cb0ed0 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ReindexRunnable.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/ReindexRunnable.java
@@ -17,7 +17,6 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.AbstractIndexRestApiServlet; import com.google.common.base.Stopwatch; import com.google.common.flogger.FluentLogger; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.util.ManualRequestContext; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.inject.Inject; @@ -27,6 +26,7 @@ import java.util.concurrent.TimeUnit; abstract class ReindexRunnable<T> implements Runnable { + private static final FluentLogger log = FluentLogger.forEnclosingClass(); private final AbstractIndexRestApiServlet.IndexName itemName; @@ -49,14 +49,13 @@ if (maybeIndexTs.isPresent()) { newLastIndexTs = maxTimestamp(newLastIndexTs, Timestamp.valueOf(maybeIndexTs.get())); log.atFine().log("Scanning for all the %ss after %s", itemNameString, newLastIndexTs); - try (ManualRequestContext mctx = ctx.open(); - ReviewDb db = mctx.getReviewDbProvider().get()) { + try (ManualRequestContext mctx = ctx.open()) { int count = 0; int errors = 0; Stopwatch stopwatch = Stopwatch.createStarted(); - for (T c : fetchItems(db)) { + for (T c : fetchItems()) { try { - Optional<Timestamp> itemTs = indexIfNeeded(db, c, newLastIndexTs); + Optional<Timestamp> itemTs = indexIfNeeded(c, newLastIndexTs); if (itemTs.isPresent()) { count++; newLastIndexTs = maxTimestamp(newLastIndexTs, itemTs.get()); @@ -102,7 +101,7 @@ return ts2; } - protected abstract Iterable<T> fetchItems(ReviewDb db) throws Exception; + protected abstract Iterable<T> fetchItems() throws Exception; - protected abstract Optional<Timestamp> indexIfNeeded(ReviewDb db, T item, Timestamp sinceTs); + protected abstract Optional<Timestamp> indexIfNeeded(T item, Timestamp sinceTs); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java index 3d9fd60..f156da4 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBroker.java
@@ -14,7 +14,6 @@ package com.ericsson.gerrit.plugins.highavailability.forwarder; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.events.Event; import com.google.gerrit.server.events.EventBroker; import com.google.gerrit.server.events.EventListener; @@ -24,7 +23,6 @@ import com.google.gerrit.server.plugincontext.PluginSetContext; import com.google.gerrit.server.project.ProjectCache; import com.google.inject.Inject; -import com.google.inject.Provider; class ForwardedAwareEventBroker extends EventBroker { @@ -34,15 +32,8 @@ PluginSetContext<EventListener> unrestrictedListeners, PermissionBackend permissionBackend, ProjectCache projectCache, - Factory notesFactory, - Provider<ReviewDb> dbProvider) { - super( - listeners, - unrestrictedListeners, - permissionBackend, - projectCache, - notesFactory, - dbProvider); + Factory notesFactory) { + super(listeners, unrestrictedListeners, permissionBackend, projectCache, notesFactory); } @Override
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java index 51db006..414e795 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandler.java
@@ -18,7 +18,6 @@ import com.google.gerrit.server.events.Event; import com.google.gerrit.server.events.EventDispatcher; import com.google.gerrit.server.permissions.PermissionBackendException; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -42,9 +41,8 @@ * Dispatch an event in the local node, event will not be forwarded to the other node. * * @param event The event to dispatch - * @throws OrmException If an error occur while retrieving the change the event belongs to. */ - public void dispatch(Event event) throws OrmException, PermissionBackendException { + public void dispatch(Event event) throws PermissionBackendException { try { Context.setForwardedEvent(true); log.atFine().log("dispatching event %s", event.getType());
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexAccountHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexAccountHandler.java index ba60830..bb21f13 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexAccountHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexAccountHandler.java
@@ -19,7 +19,6 @@ import com.google.gerrit.server.index.account.AccountIndexer; import com.google.inject.Inject; import com.google.inject.Singleton; -import java.io.IOException; import java.util.Optional; /** @@ -39,7 +38,7 @@ } @Override - protected void doIndex(Account.Id id, Optional<IndexEvent> indexEvent) throws IOException { + protected void doIndex(Account.Id id, Optional<IndexEvent> indexEvent) { indexer.index(id); log.atFine().log("Account %s successfully indexed", id); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java index d7c7e88..25fc93f 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java
@@ -18,17 +18,14 @@ import com.ericsson.gerrit.plugins.highavailability.Configuration.Index; import com.ericsson.gerrit.plugins.highavailability.index.ChangeChecker; import com.ericsson.gerrit.plugins.highavailability.index.ChangeCheckerImpl; -import com.ericsson.gerrit.plugins.highavailability.index.ChangeDb; import com.ericsson.gerrit.plugins.highavailability.index.ForwardedIndexExecutor; import com.google.common.base.Splitter; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.index.change.ChangeIndexer; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.util.ManualRequestContext; import com.google.gerrit.server.util.OneOffRequestContext; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; @@ -45,7 +42,6 @@ @Singleton public class ForwardedIndexChangeHandler extends ForwardedIndexingHandler<String> { private final ChangeIndexer indexer; - private final ChangeDb changeDb; private final ScheduledExecutorService indexExecutor; private final OneOffRequestContext oneOffCtx; private final int retryInterval; @@ -55,14 +51,12 @@ @Inject ForwardedIndexChangeHandler( ChangeIndexer indexer, - ChangeDb changeDb, Configuration config, @ForwardedIndexExecutor ScheduledExecutorService indexExecutor, OneOffRequestContext oneOffCtx, ChangeCheckerImpl.Factory changeCheckerFactory) { super(config.index()); this.indexer = indexer; - this.changeDb = changeDb; this.indexExecutor = indexExecutor; this.oneOffCtx = oneOffCtx; this.changeCheckerFactory = changeCheckerFactory; @@ -73,13 +67,12 @@ } @Override - protected void doIndex(String id, Optional<IndexEvent> indexEvent) - throws IOException, OrmException { + protected void doIndex(String id, Optional<IndexEvent> indexEvent) throws IOException { doIndex(id, indexEvent, 0); } private void doIndex(String id, Optional<IndexEvent> indexEvent, int retryCount) - throws IOException, OrmException { + throws IOException { try { ChangeChecker checker = changeCheckerFactory.create(id); Optional<ChangeNotes> changeNotes = checker.getChangeNotes(); @@ -121,11 +114,9 @@ } } - private void reindex(ChangeNotes notes) throws IOException, OrmException { - try (ReviewDb db = changeDb.open()) { - notes.reload(); - indexer.index(db, notes.getChange()); - } + private void reindex(ChangeNotes notes) { + notes.reload(); + indexer.index(notes.getChange()); } private boolean rescheduleIndex(String id, Optional<IndexEvent> indexEvent, int retryCount) {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexGroupHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexGroupHandler.java index fb4d2f2..9272a60 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexGroupHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexGroupHandler.java
@@ -19,7 +19,6 @@ import com.google.gerrit.server.index.group.GroupIndexer; import com.google.inject.Inject; import com.google.inject.Singleton; -import java.io.IOException; import java.util.Optional; /** @@ -39,8 +38,7 @@ } @Override - protected void doIndex(AccountGroup.UUID uuid, Optional<IndexEvent> indexEvent) - throws IOException { + protected void doIndex(AccountGroup.UUID uuid, Optional<IndexEvent> indexEvent) { indexer.index(uuid); log.atFine().log("Group %s successfully indexed", uuid); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexProjectHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexProjectHandler.java index 5ae4cc0..076a44c 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexProjectHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexProjectHandler.java
@@ -19,7 +19,6 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.inject.Inject; import com.google.inject.Singleton; -import java.io.IOException; import java.util.Optional; /** @@ -39,8 +38,7 @@ } @Override - protected void doIndex(Project.NameKey projectName, Optional<IndexEvent> indexEvent) - throws IOException { + protected void doIndex(Project.NameKey projectName, Optional<IndexEvent> indexEvent) { indexer.index(projectName); log.atFine().log("Project %s successfully indexed", projectName); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexingHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexingHandler.java index 78e103d..48dfba3 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexingHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexingHandler.java
@@ -17,7 +17,6 @@ import com.ericsson.gerrit.plugins.highavailability.Configuration; import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Striped; -import com.google.gwtorm.server.OrmException; import java.io.IOException; import java.util.Optional; import java.util.concurrent.locks.Lock; @@ -43,8 +42,7 @@ private final Striped<Lock> idLocks; - protected abstract void doIndex(T id, Optional<IndexEvent> indexEvent) - throws IOException, OrmException; + protected abstract void doIndex(T id, Optional<IndexEvent> indexEvent) throws IOException; protected abstract void doDelete(T id, Optional<IndexEvent> indexEvent) throws IOException; @@ -59,10 +57,8 @@ * @param operation The operation to do; index or delete * @param indexEvent The index event details. * @throws IOException If an error occur while indexing. - * @throws OrmException If an error occur while retrieving a change related to the item to index */ - public void index(T id, Operation operation, Optional<IndexEvent> indexEvent) - throws IOException, OrmException { + public void index(T id, Operation operation, Optional<IndexEvent> indexEvent) throws IOException { log.atFine().log("%s %s %s", operation, id, indexEvent); try { Context.setForwardedEvent(true);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java index 410aa23..5603fc2 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
@@ -16,7 +16,6 @@ import static javax.servlet.http.HttpServletResponse.SC_CONFLICT; import static javax.servlet.http.HttpServletResponse.SC_METHOD_NOT_ALLOWED; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedIndexingHandler; @@ -25,7 +24,6 @@ import com.google.common.base.Charsets; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gwtorm.server.OrmException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Optional; @@ -93,10 +91,6 @@ } catch (IOException e) { sendError(rsp, SC_CONFLICT, e.getMessage()); log.atSevere().withCause(e).log("Unable to update %s index", indexName); - } catch (OrmException e) { - String msg = String.format("Error trying to find %s", indexName); - sendError(rsp, SC_NOT_FOUND, msg); - log.atFine().withCause(e).log(msg); } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java index 61b714c..3d2d25e 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServlet.java
@@ -16,7 +16,6 @@ import static com.google.common.net.MediaType.JSON_UTF_8; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import static javax.servlet.http.HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE; @@ -25,7 +24,6 @@ import com.google.common.net.MediaType; import com.google.gerrit.server.events.Event; import com.google.gerrit.server.permissions.PermissionBackendException; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; @@ -55,9 +53,6 @@ } forwardedEventHandler.dispatch(getEventFromRequest(req)); rsp.setStatus(SC_NO_CONTENT); - } catch (OrmException e) { - log.atFine().withCause(e).log("Error trying to find a change"); - sendError(rsp, SC_NOT_FOUND, "Change not found\n"); } catch (IOException | PermissionBackendException e) { log.atSevere().withCause(e).log("Unable to re-trigger event"); sendError(rsp, SC_BAD_REQUEST, e.getMessage());
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeChecker.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeChecker.java index ce04589..ef7f942 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeChecker.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeChecker.java
@@ -16,7 +16,6 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.IndexEvent; import com.google.gerrit.server.notedb.ChangeNotes; -import com.google.gwtorm.server.OrmException; import java.io.IOException; import java.util.Optional; @@ -27,18 +26,16 @@ * Return the Change notes read from ReviewDb or NoteDb. * * @return notes of the Change - * @throws OrmException if ReviewDb or NoteDb cannot be opened */ - Optional<ChangeNotes> getChangeNotes() throws OrmException; + Optional<ChangeNotes> getChangeNotes(); /** * Create a new index event POJO associated with the current Change. * * @return new IndexEvent * @throws IOException if the current Change cannot read - * @throws OrmException if ReviewDb cannot be opened */ - Optional<IndexEvent> newIndexEvent() throws IOException, OrmException; + Optional<IndexEvent> newIndexEvent() throws IOException; /** * Check if the local Change is aligned with the indexEvent received. @@ -46,9 +43,8 @@ * @param indexEvent indexing event * @return true if the local Change is up-to-date, false otherwise. * @throws IOException if an I/O error occurred while reading the local Change - * @throws OrmException if the local ReviewDb cannot be opened */ - boolean isChangeUpToDate(Optional<IndexEvent> indexEvent) throws IOException, OrmException; + boolean isChangeUpToDate(Optional<IndexEvent> indexEvent) throws IOException; /** * Return the last computed up-to-date Change time-stamp. @@ -57,7 +53,6 @@ * * @return the Change timestamp epoch in seconds * @throws IOException if an I/O error occurred while reading the local Change - * @throws OrmException if the local ReviewDb cannot be opened */ - Optional<Long> getComputedChangeTs() throws IOException, OrmException; + Optional<Long> getComputedChangeTs() throws IOException; }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java index 4cdf431..f88e10b 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java
@@ -18,14 +18,12 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Comment; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CommentsUtil; import com.google.gerrit.server.change.ChangeFinder; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.util.ManualRequestContext; import com.google.gerrit.server.util.OneOffRequestContext; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import java.io.IOException; @@ -39,7 +37,6 @@ private static final FluentLogger log = FluentLogger.forEnclosingClass(); private final GitRepositoryManager gitRepoMgr; private final CommentsUtil commentsUtil; - private final ChangeDb changeDb; private final OneOffRequestContext oneOffReqCtx; private final String changeId; private final ChangeFinder changeFinder; @@ -54,20 +51,18 @@ public ChangeCheckerImpl( GitRepositoryManager gitRepoMgr, CommentsUtil commentsUtil, - ChangeDb changeDb, ChangeFinder changeFinder, OneOffRequestContext oneOffReqCtx, @Assisted String changeId) { this.changeFinder = changeFinder; this.gitRepoMgr = gitRepoMgr; this.commentsUtil = commentsUtil; - this.changeDb = changeDb; this.oneOffReqCtx = oneOffReqCtx; this.changeId = changeId; } @Override - public Optional<IndexEvent> newIndexEvent() throws IOException, OrmException { + public Optional<IndexEvent> newIndexEvent() { return getComputedChangeTs() .map( ts -> { @@ -79,7 +74,7 @@ } @Override - public Optional<ChangeNotes> getChangeNotes() throws OrmException { + public Optional<ChangeNotes> getChangeNotes() { try (ManualRequestContext ctx = oneOffReqCtx.open()) { changeNotes = Optional.ofNullable(changeFinder.findOne(changeId)); return changeNotes; @@ -87,8 +82,7 @@ } @Override - public boolean isChangeUpToDate(Optional<IndexEvent> indexEvent) - throws IOException, OrmException { + public boolean isChangeUpToDate(Optional<IndexEvent> indexEvent) { getComputedChangeTs(); log.atFine().log("Checking change %s against index event %s", this, indexEvent); if (!computedChangeTs.isPresent()) { @@ -110,7 +104,7 @@ } @Override - public Optional<Long> getComputedChangeTs() throws IOException, OrmException { + public Optional<Long> getComputedChangeTs() { if (!computedChangeTs.isPresent()) { computedChangeTs = computeLastChangeTs(); } @@ -119,17 +113,12 @@ @Override public String toString() { - try { - return "change-id=" - + changeId - + "@" - + getComputedChangeTs().map(IndexEvent::format) - + "/" - + getBranchTargetSha(); - } catch (IOException | OrmException e) { - log.atSevere().withCause(e).log("Unable to render change %s", changeId); - return "change-id=" + changeId; - } + return "change-id=" + + changeId + + "@" + + getComputedChangeTs().map(IndexEvent::format) + + "/" + + getBranchTargetSha(); } private String getBranchTargetSha() { @@ -148,22 +137,16 @@ } } - private Optional<Long> computeLastChangeTs() throws OrmException { - try (ReviewDb db = changeDb.open()) { - return getChangeNotes().map(notes -> getTsFromChangeAndDraftComments(db, notes)); - } + private Optional<Long> computeLastChangeTs() { + return getChangeNotes().map(this::getTsFromChangeAndDraftComments); } - private long getTsFromChangeAndDraftComments(ReviewDb db, ChangeNotes notes) { + private long getTsFromChangeAndDraftComments(ChangeNotes notes) { Change change = notes.getChange(); Timestamp changeTs = change.getLastUpdatedOn(); - try { - for (Comment comment : commentsUtil.draftByChange(db, changeNotes.get())) { - Timestamp commentTs = comment.writtenOn; - changeTs = commentTs.after(changeTs) ? commentTs : changeTs; - } - } catch (OrmException e) { - log.atWarning().withCause(e).log("Unable to access draft comments for change %s", change); + for (Comment comment : commentsUtil.draftByChange(changeNotes.get())) { + Timestamp commentTs = comment.writtenOn; + changeTs = commentTs.after(changeTs) ? commentTs : changeTs; } return changeTs.getTime() / 1000; }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeDb.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeDb.java deleted file mode 100644 index bef5363..0000000 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeDb.java +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed 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 com.ericsson.gerrit.plugins.highavailability.index; - -import com.google.gerrit.reviewdb.server.ReviewDb; -import com.google.gerrit.server.notedb.NotesMigration; -import com.google.gwtorm.server.OrmException; -import com.google.gwtorm.server.SchemaFactory; -import com.google.inject.Inject; - -public class ChangeDb { - private static final DisabledReviewDb disabledReviewDb = new DisabledReviewDb(); - - private final NotesMigration migration; - private final SchemaFactory<ReviewDb> schemaFactory; - - @Inject - public ChangeDb(NotesMigration migration, SchemaFactory<ReviewDb> schemaFactory) { - this.migration = migration; - this.schemaFactory = schemaFactory; - } - - public ReviewDb open() throws OrmException { - return migration.readChanges() ? disabledReviewDb : schemaFactory.open(); - } -}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/CurrentRequestContext.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/CurrentRequestContext.java index f8c6e31..46aadbb 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/CurrentRequestContext.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/CurrentRequestContext.java
@@ -20,7 +20,6 @@ import com.google.gerrit.server.util.OneOffRequestContext; import com.google.gerrit.server.util.RequestContext; import com.google.gerrit.server.util.ThreadLocalRequestContext; -import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.function.Consumer; @@ -51,8 +50,6 @@ if (ctx == null) { try (ManualRequestContext manualCtx = oneOffCtx.open()) { body.accept(manualCtx); - } catch (OrmException e) { - logger.atSevere().withCause(e).log("Unable to open request context"); } } else { body.accept(ctx);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/DisabledReviewDb.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/DisabledReviewDb.java deleted file mode 100644 index 48c6ecb..0000000 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/DisabledReviewDb.java +++ /dev/null
@@ -1,201 +0,0 @@ -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed 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 com.ericsson.gerrit.plugins.highavailability.index; - -import com.google.common.util.concurrent.CheckedFuture; -import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.reviewdb.server.ChangeAccess; -import com.google.gerrit.reviewdb.server.ChangeMessageAccess; -import com.google.gerrit.reviewdb.server.PatchLineCommentAccess; -import com.google.gerrit.reviewdb.server.PatchSetAccess; -import com.google.gerrit.reviewdb.server.PatchSetApprovalAccess; -import com.google.gerrit.reviewdb.server.ReviewDb; -import com.google.gerrit.reviewdb.server.SchemaVersionAccess; -import com.google.gwtorm.server.Access; -import com.google.gwtorm.server.AtomicUpdate; -import com.google.gwtorm.server.OrmException; -import com.google.gwtorm.server.ResultSet; -import com.google.gwtorm.server.StatementExecutor; -import java.util.Map; - -/** ReviewDb that is disabled. */ -@SuppressWarnings("deprecation") -public class DisabledReviewDb implements ReviewDb { - public static class Disabled extends RuntimeException { - private static final long serialVersionUID = 1L; - - private Disabled() { - super("ReviewDb is disabled for changes"); - } - } - - public static class DisabledChangeAccess implements ChangeAccess { - - @Override - public String getRelationName() { - throw new Disabled(); - } - - @Override - public int getRelationID() { - throw new Disabled(); - } - - @Override - public ResultSet<Change> iterateAllEntities() throws OrmException { - throw new Disabled(); - } - - @Override - public Change.Id primaryKey(Change entity) { - throw new Disabled(); - } - - @Override - public Map<Change.Id, Change> toMap(Iterable<Change> c) { - throw new Disabled(); - } - - @Override - public CheckedFuture<Change, OrmException> getAsync(Change.Id key) { - throw new Disabled(); - } - - @Override - public ResultSet<Change> get(Iterable<Change.Id> keys) throws OrmException { - throw new Disabled(); - } - - @Override - public void insert(Iterable<Change> instances) throws OrmException { - throw new Disabled(); - } - - @Override - public void update(Iterable<Change> instances) throws OrmException { - throw new Disabled(); - } - - @Override - public void upsert(Iterable<Change> instances) throws OrmException { - throw new Disabled(); - } - - @Override - public void deleteKeys(Iterable<Change.Id> keys) throws OrmException { - throw new Disabled(); - } - - @Override - public void delete(Iterable<Change> instances) throws OrmException { - throw new Disabled(); - } - - @Override - public void beginTransaction(Change.Id key) throws OrmException { - throw new Disabled(); - } - - @Override - public Change atomicUpdate(Change.Id key, AtomicUpdate<Change> update) throws OrmException { - throw new Disabled(); - } - - @Override - public Change get(Change.Id id) throws OrmException { - return null; - } - - @Override - public ResultSet<Change> all() throws OrmException { - return null; - } - } - - @Override - public void close() { - // Do nothing. - } - - @Override - public void commit() { - throw new Disabled(); - } - - @Override - public void rollback() { - throw new Disabled(); - } - - @Override - public void updateSchema(StatementExecutor e) { - throw new Disabled(); - } - - @Override - public void pruneSchema(StatementExecutor e) { - throw new Disabled(); - } - - @Override - public Access<?, ?>[] allRelations() { - throw new Disabled(); - } - - @Override - public SchemaVersionAccess schemaVersion() { - throw new Disabled(); - } - - @Override - public ChangeAccess changes() { - return new DisabledChangeAccess(); - } - - @Override - public PatchSetApprovalAccess patchSetApprovals() { - throw new Disabled(); - } - - @Override - public ChangeMessageAccess changeMessages() { - throw new Disabled(); - } - - @Override - public PatchSetAccess patchSets() { - throw new Disabled(); - } - - @Override - public PatchLineCommentAccess patchComments() { - throw new Disabled(); - } - - @Override - public int nextAccountId() { - throw new Disabled(); - } - - @Override - public int nextAccountGroupId() { - throw new Disabled(); - } - - @Override - public int nextChangeId() { - throw new Disabled(); - } -}
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md index c7196c6..1d1a02b 100644 --- a/src/main/resources/Documentation/about.md +++ b/src/main/resources/Documentation/about.md
@@ -57,9 +57,10 @@ For the masters: -* Configure database section in gerrit.config to use the shared database +* Configure the database section in gerrit.config to use the shared database * Configure gerrit.basePath in gerrit.config to the shared repositories location -* Install and configure @PLUGIN@ plugin +* Configure gerrit.serverId in gerrit.config based on [config](config.md)'s introduction +* Install and configure this @PLUGIN@ plugin [further](config.md) or based on below. Here is an example of the minimal @PLUGIN@.config:
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index e79cbdd..dd8e675 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md
@@ -2,8 +2,14 @@ @PLUGIN@ Configuration ========================= -The @PLUGIN@ plugin must be installed on all the instances and the following fields -should be specified in `$site_path/etc/@PLUGIN@.config` file: +The @PLUGIN@ plugin must be installed on all the instances. Each instance should +be configured with the same [gerrit.serverId](https://gerrit-documentation.storage.googleapis.com/Documentation/3.0.0/config-gerrit.html#gerrit.serverId). +If there are existing changes in [NoteDb](https://gerrit-documentation.storage.googleapis.com/Documentation/3.0.0/note-db.html) +made with another `serverId`, then this plugin might not be able to access them. +Likewise, if the HA gerrit.serverIds differ, then changes conveyed by one +instance will not be accessible by the other. + +The following fields should be specified in `$site_path/etc/@PLUGIN@.config` files: File '@PLUGIN@.config' --------------------
diff --git a/src/test/docker/docker-compose.yaml b/src/test/docker/docker-compose.yaml index 93971b3..647aa6d 100644 --- a/src/test/docker/docker-compose.yaml +++ b/src/test/docker/docker-compose.yaml
@@ -2,17 +2,6 @@ services: - postgres: - image: postgres:9.5.4 - environment: - - POSTGRES_USER=gerrit - - POSTGRES_PASSWORD=secret - - POSTGRES_DB=reviewdb - networks: - - gerrit-net - volumes: - - ./pgdata:/var/lib/postgresql/data - gerrit-01: build: gerrit ports: @@ -20,8 +9,6 @@ - "29411:29418" networks: - gerrit-net - depends_on: - - postgres volumes: - /dev/urandom:/dev/random - ./gitvolume:/var/gerrit/git @@ -39,7 +26,6 @@ networks: - gerrit-net depends_on: - - postgres - gerrit-01 volumes: - /dev/urandom:/dev/random
diff --git a/src/test/docker/etc/gerrit.config b/src/test/docker/etc/gerrit.config index c110835..90a4057 100644 --- a/src/test/docker/etc/gerrit.config +++ b/src/test/docker/etc/gerrit.config
@@ -1,12 +1,7 @@ [gerrit] basePath = git canonicalWebUrl = http://gerrit:8080/ -[database] - type = postgresql - hostname = postgres - database = reviewdb - username = gerrit - password = secret + serverId = f7696647-8efd-41b1-bd60-d321bc071ea9 [index] type = LUCENE [auth]
diff --git a/src/test/docker/gerrit/Dockerfile b/src/test/docker/gerrit/Dockerfile index 0328827..0dc189d 100644 --- a/src/test/docker/gerrit/Dockerfile +++ b/src/test/docker/gerrit/Dockerfile
@@ -1,19 +1,17 @@ -FROM gerritcodereview/gerrit:2.16.19 +FROM gerritcodereview/gerrit:3.0.9 -ENV GERRIT_BRANCH=stable-2.16 +ENV GERRIT_BRANCH=stable-3.0 ENV GERRIT_CI_URL=https://gerrit-ci.gerritforge.com/job USER root -RUN yum install -y iputils-ping netcat postgresql curl lsof gettext moreutils net-tools netcat inetutils-ping sudo +RUN yum install -y iputils-ping netcat curl lsof gettext moreutils net-tools netcat inetutils-ping sudo USER gerrit ADD --chown=gerrit:gerrit $GERRIT_CI_URL/plugin-javamelody-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/javamelody/javamelody.jar /var/gerrit/plugins/javamelody.jar -ADD --chown=gerrit:gerrit $GERRIT_CI_URL/plugin-javamelody-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/javamelody/javamelody-deps_deploy.jar /var/gerrit/lib/javamelody-deps_deploy.jar ADD --chown=gerrit:gerrit $GERRIT_CI_URL/plugin-high-availability-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/high-availability/high-availability.jar /var/gerrit/plugins/high-availability.jar -ADD --chown=gerrit:gerrit $GERRIT_CI_URL/plugin-delete-project-bazel-$GERRIT_BRANCH/lastSuccessfulBuild/artifact/bazel-bin/plugins/delete-project/delete-project.jar /var/gerrit/plugins/delete-project.jar USER root @@ -24,4 +22,6 @@ ARG GERRIT_UID=1000 RUN usermod -u ${GERRIT_UID} gerrit &> /dev/null + +ENTRYPOINT ["/usr/bin/env"] CMD /bin/start.sh
diff --git a/src/test/docker/gerrit/start.sh b/src/test/docker/gerrit/start.sh index 7aa3550..65804b3 100755 --- a/src/test/docker/gerrit/start.sh +++ b/src/test/docker/gerrit/start.sh
@@ -1,7 +1,5 @@ #!/bin/bash -e -wait-for-it.sh postgres:5432 -t 600 -- echo "Postgres is up" - if [[ ! -z "$WAIT_FOR" ]] then wait-for-it.sh $WAIT_FOR -t 600 -- echo "$WAIT_FOR is up" @@ -12,7 +10,7 @@ sudo -u gerrit cp /var/gerrit/etc/gerrit.config.orig /var/gerrit/etc/gerrit.config sudo -u gerrit cp /var/gerrit/etc/high-availability.config.orig /var/gerrit/etc/high-availability.config -if [[ ! -f /var/gerrit/git/All-Projects.git/config ]] +if [[ ! -f /var/gerrit/etc/ssh_host_ed25519_key ]] then echo "Initializing Gerrit site ..." sudo -u gerrit java -jar /var/gerrit/bin/gerrit.war init -d /var/gerrit --batch
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java index 2cf12fc..e28f8c9 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
@@ -114,15 +114,16 @@ @Test public void testGetPeerInfoStrategy() { - assertThat(getConfiguration().peerInfo().strategy()).isSameAs(DEFAULT_PEER_INFO_STRATEGY); + assertThat(getConfiguration().peerInfo().strategy()) + .isSameInstanceAs(DEFAULT_PEER_INFO_STRATEGY); globalPluginConfig.setString( PEER_INFO_SECTION, null, STRATEGY_KEY, PeerInfoStrategy.STATIC.name()); - assertThat(getConfiguration().peerInfo().strategy()).isSameAs(PeerInfoStrategy.STATIC); + assertThat(getConfiguration().peerInfo().strategy()).isSameInstanceAs(PeerInfoStrategy.STATIC); globalPluginConfig.setString( PEER_INFO_SECTION, null, STRATEGY_KEY, PeerInfoStrategy.JGROUPS.name()); - assertThat(getConfiguration().peerInfo().strategy()).isSameAs(PeerInfoStrategy.JGROUPS); + assertThat(getConfiguration().peerInfo().strategy()).isSameInstanceAs(PeerInfoStrategy.JGROUPS); } @Test @@ -131,7 +132,7 @@ globalPluginConfig.setStringList(PEER_INFO_SECTION, STATIC_SUBSECTION, URL_KEY, URLS); assertThat(getConfiguration().peerInfoStatic().urls()) - .containsAllIn(ImmutableList.of(URL, "http://anotherUrl")); + .containsAtLeastElementsIn(ImmutableList.of(URL, "http://anotherUrl")); } @Test @@ -155,7 +156,9 @@ globalPluginConfig.setStringList( JGROUPS_SECTION, null, SKIP_INTERFACE_KEY, ImmutableList.of("lo*", "eth0")); - assertThat(getConfiguration().jgroups().skipInterface()).containsAllOf("lo*", "eth0").inOrder(); + assertThat(getConfiguration().jgroups().skipInterface()) + .containsExactly("lo*", "eth0") + .inOrder(); } @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java index ec5b1de..36cc953 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedAwareEventBrokerTest.java
@@ -39,7 +39,7 @@ DynamicSet<EventListener> set = DynamicSet.emptySet(); set.add("high-availability", listenerMock); PluginSetContext<EventListener> listeners = new PluginSetContext<>(set, mockMetrics); - broker = new ForwardedAwareEventBroker(null, listeners, null, null, null, null); + broker = new ForwardedAwareEventBroker(null, listeners, null, null, null); } @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java index a855c5e..8ef8e2f 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedEventHandlerTest.java
@@ -15,14 +15,14 @@ package com.ericsson.gerrit.plugins.highavailability.forwarder; import static com.google.common.truth.Truth.assertThat; -import static com.google.gerrit.testing.GerritJUnit.assertThrows; +import static org.junit.Assert.fail; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.verify; import com.google.gerrit.server.events.Event; import com.google.gerrit.server.events.EventDispatcher; import com.google.gerrit.server.events.ProjectCreatedEvent; -import com.google.gwtorm.server.OrmException; +import com.google.gerrit.server.permissions.PermissionBackendException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -76,14 +76,18 @@ (Answer<Void>) invocation -> { assertThat(Context.isForwardedEvent()).isTrue(); - throw new OrmException("someMessage"); + throw new PermissionBackendException("someMessage"); }) .when(dispatcherMock) .postEvent(event); assertThat(Context.isForwardedEvent()).isFalse(); - OrmException thrown = assertThrows(OrmException.class, () -> handler.dispatch(event)); - assertThat(thrown).hasMessageThat().contains("someMessage"); + try { + handler.dispatch(event); + fail("should have throw a PermissionBackendException"); + } catch (PermissionBackendException e) { + assertThat(e.getMessage()).isEqualTo("someMessage"); + } assertThat(Context.isForwardedEvent()).isFalse(); verify(dispatcherMock).postEvent(event);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java index 6bfd47d..df36271 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java
@@ -15,11 +15,9 @@ package com.ericsson.gerrit.plugins.highavailability.forwarder; import static com.google.common.truth.Truth.assertThat; -import static com.google.gerrit.testing.GerritJUnit.assertThrows; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -28,14 +26,11 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedIndexingHandler.Operation; import com.ericsson.gerrit.plugins.highavailability.index.ChangeChecker; import com.ericsson.gerrit.plugins.highavailability.index.ChangeCheckerImpl; -import com.ericsson.gerrit.plugins.highavailability.index.ChangeDb; import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.index.change.ChangeIndexer; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.gerrit.server.util.time.TimeUtil; -import com.google.gwtorm.server.OrmException; import java.io.IOException; import java.util.Optional; import java.util.concurrent.ScheduledExecutorService; @@ -54,16 +49,10 @@ private static String TEST_CHANGE_ID = TEST_PROJECT + "~" + TEST_CHANGE_NUMBER; private static final boolean CHANGE_EXISTS = true; private static final boolean CHANGE_DOES_NOT_EXIST = false; - private static final boolean DO_NOT_THROW_IO_EXCEPTION = false; - private static final boolean DO_NOT_THROW_ORM_EXCEPTION = false; - private static final boolean THROW_IO_EXCEPTION = true; - private static final boolean THROW_ORM_EXCEPTION = true; private static final boolean CHANGE_UP_TO_DATE = true; private static final boolean CHANGE_OUTDATED = false; @Mock private ChangeIndexer indexerMock; - @Mock private ChangeDb changeDbMock; - @Mock private ReviewDb dbMock; @Mock private ChangeNotes changeNotes; @Mock private Configuration configMock; @Mock private Configuration.Index indexMock; @@ -77,7 +66,6 @@ @Before public void setUp() throws Exception { - when(changeDbMock.open()).thenReturn(dbMock); id = new Change.Id(TEST_CHANGE_NUMBER); Change change = new Change(null, id, null, null, TimeUtil.nowTs()); when(changeNotes.getChange()).thenReturn(change); @@ -86,26 +74,21 @@ when(changeCheckerFactoryMock.create(any())).thenReturn(changeCheckerAbsentMock); handler = new ForwardedIndexChangeHandler( - indexerMock, - changeDbMock, - configMock, - indexExecutorMock, - ctxMock, - changeCheckerFactoryMock); + indexerMock, configMock, indexExecutorMock, ctxMock, changeCheckerFactoryMock); } @Test public void changeIsIndexedWhenUpToDate() throws Exception { setupChangeAccessRelatedMocks(CHANGE_EXISTS, CHANGE_UP_TO_DATE); handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.empty()); - verify(indexerMock, times(1)).index(any(ReviewDb.class), any(Change.class)); + verify(indexerMock, times(1)).index(any(Change.class)); } @Test public void changeIsStillIndexedEvenWhenOutdated() throws Exception { setupChangeAccessRelatedMocks(CHANGE_EXISTS, CHANGE_OUTDATED); handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.of(new IndexEvent())); - verify(indexerMock, times(1)).index(any(ReviewDb.class), any(Change.class)); + verify(indexerMock, times(1)).index(any(Change.class)); } @Test @@ -122,21 +105,6 @@ } @Test - public void schemaThrowsExceptionWhenLookingUpForChange() throws Exception { - setupChangeAccessRelatedMocks(CHANGE_EXISTS, THROW_ORM_EXCEPTION, CHANGE_UP_TO_DATE); - assertThrows( - OrmException.class, () -> handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.empty())); - } - - @Test - public void indexerThrowsIOExceptionTryingToIndexChange() throws Exception { - setupChangeAccessRelatedMocks( - CHANGE_EXISTS, DO_NOT_THROW_ORM_EXCEPTION, THROW_IO_EXCEPTION, CHANGE_UP_TO_DATE); - assertThrows( - IOException.class, () -> handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.empty())); - } - - @Test public void shouldSetAndUnsetForwardedContext() throws Exception { setupChangeAccessRelatedMocks(CHANGE_EXISTS, CHANGE_UP_TO_DATE); // this doAnswer is to allow to assert that context is set to forwarded @@ -148,13 +116,13 @@ return null; }) .when(indexerMock) - .index(any(ReviewDb.class), any(Change.class)); + .index(any(Change.class)); assertThat(Context.isForwardedEvent()).isFalse(); handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.empty()); assertThat(Context.isForwardedEvent()).isFalse(); - verify(indexerMock, times(1)).index(any(ReviewDb.class), any(Change.class)); + verify(indexerMock, times(1)).index(any(Change.class)); } @Test @@ -167,7 +135,7 @@ throw new IOException("someMessage"); }) .when(indexerMock) - .index(any(ReviewDb.class), any(Change.class)); + .index(any(Change.class)); assertThat(Context.isForwardedEvent()).isFalse(); try { @@ -178,39 +146,14 @@ } assertThat(Context.isForwardedEvent()).isFalse(); - verify(indexerMock, times(1)).index(any(ReviewDb.class), any(Change.class)); + verify(indexerMock, times(1)).index(any(Change.class)); } - private void setupChangeAccessRelatedMocks(boolean changeExist, boolean changeUpToDate) - throws Exception { - setupChangeAccessRelatedMocks( - changeExist, DO_NOT_THROW_ORM_EXCEPTION, DO_NOT_THROW_IO_EXCEPTION, changeUpToDate); - } - - private void setupChangeAccessRelatedMocks( - boolean changeExist, boolean ormException, boolean changeUpToDate) - throws OrmException, IOException { - setupChangeAccessRelatedMocks( - changeExist, ormException, DO_NOT_THROW_IO_EXCEPTION, changeUpToDate); - } - - private void setupChangeAccessRelatedMocks( - boolean changeExists, boolean ormException, boolean ioException, boolean changeIsUpToDate) - throws OrmException, IOException { - if (ormException) { - doThrow(new OrmException("")).when(changeDbMock).open(); - } else { - when(changeDbMock.open()).thenReturn(dbMock); - } - + private void setupChangeAccessRelatedMocks(boolean changeExists, boolean changeIsUpToDate) + throws IOException { if (changeExists) { when(changeCheckerFactoryMock.create(TEST_CHANGE_ID)).thenReturn(changeCheckerPresentMock); when(changeCheckerPresentMock.getChangeNotes()).thenReturn(Optional.of(changeNotes)); - if (ioException) { - doThrow(new IOException("io-error")) - .when(indexerMock) - .index(any(ReviewDb.class), any(Change.class)); - } } when(changeCheckerPresentMock.isChangeUpToDate(any())).thenReturn(changeIsUpToDate);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java index 835977f..7872785 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/EventRestApiServletTest.java
@@ -16,7 +16,6 @@ import static com.google.common.net.MediaType.JSON_UTF_8; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import static javax.servlet.http.HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE; import static org.mockito.ArgumentMatchers.any; @@ -29,7 +28,7 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.events.EventTypes; import com.google.gerrit.server.events.RefEvent; -import com.google.gwtorm.server.OrmException; +import com.google.gerrit.server.permissions.PermissionBackendException; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -83,11 +82,11 @@ + "\"refs/changes/76/669676/2\",\"nodesCount\":1,\"type\":" + "\"ref-replication-done\",\"eventCreatedOn\":1451415011}"; when(requestMock.getReader()).thenReturn(new BufferedReader(new StringReader(event))); - doThrow(new OrmException(ERR_MSG)) + doThrow(new PermissionBackendException(ERR_MSG)) .when(forwardedEventHandlerMock) .dispatch(any(RefReplicationDoneEvent.class)); eventRestApiServlet.doPost(requestMock, responseMock); - verify(responseMock).sendError(SC_NOT_FOUND, "Change not found\n"); + verify(responseMock).sendError(SC_BAD_REQUEST, ERR_MSG); } @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java index c1fa765..fb3649e 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
@@ -15,7 +15,6 @@ package com.ericsson.gerrit.plugins.highavailability.forwarder.rest; import static javax.servlet.http.HttpServletResponse.SC_CONFLICT; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -26,7 +25,6 @@ import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedIndexChangeHandler; import com.ericsson.gerrit.plugins.highavailability.forwarder.ForwardedIndexingHandler.Operation; -import com.google.gwtorm.server.OrmException; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -81,15 +79,6 @@ } @Test - public void indexerThrowsOrmExceptionTryingToIndexChange() throws Exception { - doThrow(new OrmException("some message")) - .when(handlerMock) - .index(eq(CHANGE_ID), eq(Operation.INDEX), any()); - servlet.doPost(requestMock, responseMock); - verify(responseMock).sendError(SC_NOT_FOUND, "Error trying to find change"); - } - - @Test public void sendErrorThrowsIOException() throws Exception { doThrow(new IOException(IO_ERROR)) .when(handlerMock)
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AccountIndexForwardingIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AccountIndexForwardingIT.java index 4b2462e..a66e896 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AccountIndexForwardingIT.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/AccountIndexForwardingIT.java
@@ -26,11 +26,11 @@ @Override public String getExpectedRequest() { - return "/plugins/high-availability/index/account/" + testAccount.id; + return "/plugins/high-availability/index/account/" + testAccount.id(); } @Override public void doAction() throws Exception { - gApi.accounts().id(testAccount.id.get()).setActive(false); + gApi.accounts().id(testAccount.id().get()).setActive(false); } }