Merge branch 'stable-2.16' into stable-3.0 * stable-2.16: Validate high-availability plugin using Gerrit CI Change-Id: Ie5c2e6f71c40a5037cdb4e39063eb859549b49c7
diff --git a/.bazelversion b/.bazelversion index fd2a018..7c69a55 100644 --- a/.bazelversion +++ b/.bazelversion
@@ -1 +1 @@ -3.1.0 +3.7.0
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 95fa75d..6fd8a64 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,26 +3,15 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "8ad33887665f4f6adf7cb465a03f6bd81b95e01d", + commit = "a010a539824bd467059f414412a47b80101352d7", #local_path = "/home/<user>/projects/bazlets", ) -# Snapshot Plugin API -#load( -# "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl", -# "gerrit_api_maven_local", -#) - -# Load snapshot Plugin API -#gerrit_api_maven_local() - -# Release Plugin API load( "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl", "gerrit_api", ) -# Load release Plugin API gerrit_api() load("//:external_plugin_deps.bzl", "external_plugin_deps")
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl index 12bf919..0f8b43b 100644 --- a/external_plugin_deps.bzl +++ b/external_plugin_deps.bzl
@@ -3,39 +3,8 @@ def external_plugin_deps(): maven_jar( name = "wiremock", - artifact = "com.github.tomakehurst:wiremock-standalone:2.26.3", - sha1 = "245c6efae2cbcb4e4f3457caf3d1c030cbaf2eb5", - ) - - 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", + artifact = "com.github.tomakehurst:wiremock-standalone:2.27.2", + sha1 = "327647a19b2319af2526b9c33a5733a2241723e0", ) maven_jar(
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/cache/CachePatternMatcher.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java index cab8f58..9a8adce 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcher.java
@@ -26,14 +26,18 @@ @Singleton class CachePatternMatcher { private static final List<String> DEFAULT_PATTERNS = - ImmutableList.of( - "^accounts.*", "^groups.*", "ldap_usernames", "projects", "sshkeys", "web_sessions"); + ImmutableList.of("^accounts.*", "^groups.*", "ldap_usernames", "projects", "sshkeys"); private final Pattern pattern; @Inject CachePatternMatcher(Configuration cfg) { List<String> patterns = new ArrayList<>(DEFAULT_PATTERNS); + + if (cfg.websession().synchronize()) { + patterns.add("web_sessions"); + } + patterns.addAll(cfg.cache().patterns()); this.pattern = Pattern.compile(Joiner.on("|").join(patterns)); }
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..611b0e7 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' -------------------- @@ -75,13 +81,6 @@ Delay is expressed in Gerrit time values as in [websession.cleanupInterval](#websessioncleanupInterval). When not specified, polling of conditional reindexing is disabled. -```autoReindex.interval``` -: Enable the tracking of the latest change indexed under data/high-availability - for each of the indexes. At startup scans all the changes, accounts and groups - and reindex the ones that have been updated by other nodes while the server was down. - When not specified, the default is "false", that means no automatic tracking - and indexing at start. - ```peerInfo.strategy``` : Strategy to find other peers. Supported strategies are `static` or `jgroups`. Defaults to `jgroups`.
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 537cb3c..707e5ae 100644 --- a/src/test/docker/gerrit/Dockerfile +++ b/src/test/docker/gerrit/Dockerfile
@@ -1,19 +1,17 @@ -FROM gerritcodereview/gerrit:2.16.22 +FROM gerritcodereview/gerrit:3.0.12 -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/cache/CachePatternMatcherTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java index 9093238..0aac3e4 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/CachePatternMatcherTest.java
@@ -20,6 +20,7 @@ import com.ericsson.gerrit.plugins.highavailability.Configuration; import com.google.common.collect.ImmutableList; +import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -78,4 +79,28 @@ assertWithMessage(cache + " should not match").that(matcher.matches(cache)).isFalse(); } } + + @Test + public void testShouldNotMatchWebSessionsWhenNotSynchronized() { + String cache = "web_sessions"; + when(configurationMock.cache().patterns()).thenReturn(Collections.emptyList()); + when(configurationMock.websession().synchronize()).thenReturn(false); + CachePatternMatcher matcher = new CachePatternMatcher(configurationMock); + + assertWithMessage(cache + " should NOT match when websession.synchronize is false") + .that(matcher.matches(cache)) + .isFalse(); + } + + @Test + public void testShouldMatchWebSessionsWhenSynchronized() { + String cache = "web_sessions"; + when(configurationMock.cache().patterns()).thenReturn(Collections.emptyList()); + when(configurationMock.websession().synchronize()).thenReturn(true); + CachePatternMatcher matcher = new CachePatternMatcher(configurationMock); + + assertWithMessage(cache + " should match when websession.synchronize is true") + .that(matcher.matches(cache)) + .isTrue(); + } }
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); } }
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.json index 281515d..43ee6ec 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.json
@@ -1,6 +1,6 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT1/a/config/server/caches/projects", + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT1/a/config/server/caches/projects", "entries": "PROJECTS_ENTRIES" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.json index 3fd506d..f128e73 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.json
@@ -1,6 +1,6 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT2/_PROJECT", + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT2/_PROJECT", "cmd": "clone" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.json index b535c1d..a167922 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.json
@@ -1,6 +1,6 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT1/a/changes/", + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT1/a/changes/", "project": "_PROJECT" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.json index da3f028..2e5073b 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT1/a/projects/PROJECT" + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT1/a/projects/PROJECT" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.json index 8e0a304..4ecbe68 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.json
@@ -1,6 +1,6 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT2/a/changes/", + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT2/a/changes/", "number": "NUMBER" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.json index be47699..2405b03 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME/a/projects/PROJECT/delete-project~delete" + "url": "HTTP_SCHEME://HOSTNAME/a/projects/PROJECT/delete-project~delete" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.json index c938973..ae904f5 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME:HTTP_PORT2/a/config/server/caches/projects/flush" + "url": "HTTP_SCHEME://HOSTNAME:HTTP_PORT2/a/config/server/caches/projects/flush" } ]
diff --git a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.json b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.json index f7450a4..25521c7 100644 --- a/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.json +++ b/src/test/resources/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.json
@@ -1,5 +1,5 @@ [ { - "url": "http://HOSTNAME/a/config/server/caches/projects" + "url": "HTTP_SCHEME://HOSTNAME/a/config/server/caches/projects" } ]
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.scala index 10374f8..6a0d07f 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CheckProjectsCacheFlushEntriesUsingHAGerrit1.scala
@@ -32,7 +32,7 @@ this.producer = Some(producer) } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(session => { if (producer.nonEmpty) { @@ -41,12 +41,12 @@ session } }) - .exec(http(unique).get("${url}") + .exec(http(uniqueName).get("${url}") .check(regex("\"" + memKey + "\": (\\d+)") .is(session => session(entriesKey).as[String]))) setUp( test.inject( - atOnceUsers(1) + atOnceUsers(single) )).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.scala index 13a741a..4fa0ca5 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CloneUsingHAGerrit2.scala
@@ -23,37 +23,37 @@ class CloneUsingHAGerrit2 extends GitSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).queue - private var default: String = name + private var projectName = className - def this(default: String) { + def this(projectName: String) { this() - this.default = default + this.projectName = projectName } override def replaceOverride(in: String): String = { val next = replaceProperty("http_port2", 8082, in) - replaceKeyWith("_project", default, next) + replaceKeyWith("_project", projectName, next) } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(gitRequest) - private val createProject = new CreateProjectUsingHAGerrit1(default) - private val deleteProject = new DeleteProjectUsingHAGerrit(default) + private val createProject = new CreateProjectUsingHAGerrit1(projectName) + private val deleteProject = new DeleteProjectUsingHAGerrit(projectName) setUp( createProject.test.inject( nothingFor(stepWaitTime(createProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), test.inject( nothingFor(stepWaitTime(this) seconds), - atOnceUsers(1) - ), + atOnceUsers(single) + ).protocols(gitProtocol), deleteProject.test.inject( nothingFor(stepWaitTime(deleteProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), - ).protocols(gitProtocol, httpProtocol) + ).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.scala index f07aabd..26732b6 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateChangeUsingHAGerrit1.scala
@@ -24,7 +24,7 @@ class CreateChangeUsingHAGerrit1 extends GerritSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).queue - private val default: String = name + private val projectName = className private val numberKey = "_number" override def relativeRuntimeWeight = 10 @@ -33,7 +33,7 @@ replaceProperty("http_port1", 8081, in) } - private val test: ScenarioBuilder = scenario(unique) + private val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(httpRequest .body(ElFileBody(body)).asJson @@ -43,26 +43,26 @@ session }) - private val createProject = new CreateProjectUsingHAGerrit1(default) - private val deleteProject = new DeleteProjectUsingHAGerrit(default) + private val createProject = new CreateProjectUsingHAGerrit1(projectName) + private val deleteProject = new DeleteProjectUsingHAGerrit(projectName) private val deleteChange = new DeleteChangeUsingHAGerrit2 setUp( createProject.test.inject( nothingFor(stepWaitTime(createProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), test.inject( nothingFor(stepWaitTime(this) seconds), - atOnceUsers(1) + atOnceUsers(single) ), deleteChange.test.inject( nothingFor(stepWaitTime(deleteChange) seconds), - atOnceUsers(1) + atOnceUsers(single) ), deleteProject.test.inject( nothingFor(stepWaitTime(deleteProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), ).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.scala index 964aadb..5773bcf 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerrit1.scala
@@ -22,9 +22,9 @@ class CreateProjectUsingHAGerrit1 extends ProjectSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).queue - def this(default: String) { + def this(projectName: String) { this() - this.default = default + this.projectName = projectName } override def replaceOverride(in: String): String = { @@ -32,12 +32,12 @@ super.replaceOverride(next) } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(httpRequest.body(RawFileBody(body)).asJson) setUp( test.inject( - atOnceUsers(1) + atOnceUsers(single) )).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerritTwice.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerritTwice.scala index a4da93c..fd83e7a 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerritTwice.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/CreateProjectUsingHAGerritTwice.scala
@@ -20,34 +20,34 @@ import scala.concurrent.duration._ class CreateProjectUsingHAGerritTwice extends GitSimulation { - private val default: String = name + private val projectName = className - private val createProject = new CreateProjectUsingHAGerrit1(default) - private val deleteProject = new DeleteProjectUsingHAGerrit(default) - private val createItAgain = new CreateProjectUsingHAGerrit1(default) - private val verifyProject = new CloneUsingHAGerrit2(default) - private val deleteItAfter = new DeleteProjectUsingHAGerrit(default) + private val createProject = new CreateProjectUsingHAGerrit1(projectName) + private val deleteProject = new DeleteProjectUsingHAGerrit(projectName) + private val createItAgain = new CreateProjectUsingHAGerrit1(projectName) + private val verifyProject = new CloneUsingHAGerrit2(projectName) + private val deleteItAfter = new DeleteProjectUsingHAGerrit(projectName) setUp( createProject.test.inject( nothingFor(stepWaitTime(createProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), deleteProject.test.inject( nothingFor(stepWaitTime(deleteProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), createItAgain.test.inject( nothingFor(stepWaitTime(createItAgain) seconds), - atOnceUsers(1) + atOnceUsers(single) ), verifyProject.test.inject( nothingFor(stepWaitTime(verifyProject) seconds), - atOnceUsers(1) - ), + atOnceUsers(single) + ).protocols(gitProtocol), deleteItAfter.test.inject( nothingFor(stepWaitTime(deleteItAfter) seconds), - atOnceUsers(1) + atOnceUsers(single) ), - ).protocols(gitProtocol, httpProtocol) + ).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.scala index 5b0f461..d3dc7c1 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteChangeUsingHAGerrit2.scala
@@ -30,7 +30,7 @@ replaceProperty("http_port2", 8082, in) } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(session => { if (number.nonEmpty) { @@ -39,10 +39,10 @@ session } }) - .exec(http(unique).delete("${url}${number}")) + .exec(http(uniqueName).delete("${url}${number}")) setUp( test.inject( - atOnceUsers(1) + atOnceUsers(single) )).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.scala index 428085d..cdc6e9e 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/DeleteProjectUsingHAGerrit.scala
@@ -22,17 +22,17 @@ class DeleteProjectUsingHAGerrit extends ProjectSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).queue - def this(default: String) { + def this(projectName: String) { this() - this.default = default + this.projectName = projectName } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(httpRequest) setUp( test.inject( - atOnceUsers(1) + atOnceUsers(single) )).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.scala index 9c317d4..4f619b8 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/FlushProjectsCacheUsingHAGerrit2.scala
@@ -23,7 +23,7 @@ class FlushProjectsCacheUsingHAGerrit2 extends CacheFlushSimulation { private val data: FeederBuilder = jsonFile(resource).convert(keys).queue - private val default: String = name + private val projectName = className override def relativeRuntimeWeight = 2 @@ -31,35 +31,35 @@ replaceProperty("http_port2", 8082, in) } - private val flushCache: ScenarioBuilder = scenario(unique) + private val flushCache: ScenarioBuilder = scenario(uniqueName) .feed(data) .exec(httpRequest) - private val createProject = new CreateProjectUsingHAGerrit1(default) + private val createProject = new CreateProjectUsingHAGerrit1(projectName) private val getCacheEntriesAfterProject = new GetProjectsCacheEntries(this) private val checkCacheEntriesAfterFlush = new CheckProjectsCacheFlushEntriesUsingHAGerrit1(this) - private val deleteProject = new DeleteProjectUsingHAGerrit(default) + private val deleteProject = new DeleteProjectUsingHAGerrit(projectName) setUp( createProject.test.inject( nothingFor(stepWaitTime(createProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), getCacheEntriesAfterProject.test.inject( nothingFor(stepWaitTime(getCacheEntriesAfterProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), flushCache.inject( nothingFor(stepWaitTime(this) seconds), - atOnceUsers(1) + atOnceUsers(single) ), checkCacheEntriesAfterFlush.test.inject( nothingFor(stepWaitTime(checkCacheEntriesAfterFlush) seconds), - atOnceUsers(1) + atOnceUsers(single) ), deleteProject.test.inject( nothingFor(stepWaitTime(deleteProject) seconds), - atOnceUsers(1) + atOnceUsers(single) ), ).protocols(httpProtocol) }
diff --git a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.scala b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.scala index 9565365..ed19c0b 100644 --- a/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.scala +++ b/src/test/scala/com/ericsson/gerrit/plugins/highavailability/scenarios/GetProjectsCacheEntries.scala
@@ -28,9 +28,9 @@ this.consumer = Some(consumer) } - val test: ScenarioBuilder = scenario(unique) + val test: ScenarioBuilder = scenario(uniqueName) .feed(data) - .exec(http(unique).get("${url}") + .exec(http(uniqueName).get("${url}") .check(regex("\"" + memKey + "\": (\\d+)").saveAs(entriesKey))) .exec(session => { if (consumer.nonEmpty) { @@ -41,6 +41,6 @@ setUp( test.inject( - atOnceUsers(1) + atOnceUsers(single) )).protocols(httpProtocol) }