Merge branch 'stable-3.5' into stable-3.6
* stable-3.5:
Use put operation for project version update
Remove project version SHA1 from global-refdb
Consume global-refdb directly from source
Do not download events-broker from maven during local setup
Change-Id: I76036152b07b695a53c379dffa6d24df177fbde5
diff --git a/DESIGN.md b/DESIGN.md
index 1bbe78f..b114eb3 100644
--- a/DESIGN.md
+++ b/DESIGN.md
@@ -2,7 +2,7 @@
This document collects and organizes thoughts about
the design of the Gerrit multi-site plugin, supporting the definition of the
-[implementation roadmap](#next-steps-in-the-road-map).
+[implementation roadmap](#next-steps-in-the-roadmap).
It first presents background for the problems the plugin will address and
the tools currently available in the Gerrit ecosystem that support the
diff --git a/e2e-tests/test.sh b/e2e-tests/test.sh
index 12aca41..b069565 100755
--- a/e2e-tests/test.sh
+++ b/e2e-tests/test.sh
@@ -16,8 +16,8 @@
LOCATION="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
LOCAL_ENV="$( cd "${LOCATION}/../setup_local_env" >/dev/null 2>&1 && pwd )"
-GERRIT_BRANCH=stable-3.5
-GERRIT_CI=https://archive-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
+GERRIT_BRANCH=stable-3.6
+GERRIT_CI=https://gerrit-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
LAST_BUILD=lastSuccessfulBuild/artifact/bazel-bin/plugins
DEF_MULTISITE_LOCATION=${LOCATION}/../../../bazel-bin/plugins/multi-site/multi-site.jar
DEF_GERRIT_IMAGE=3.4.0-centos8
@@ -25,6 +25,7 @@
DEF_GERRIT_HEALTHCHECK_INTERVAL=5s
DEF_GERRIT_HEALTHCHECK_TIMEOUT=5s
DEF_GERRIT_HEALTHCHECK_RETRIES=5
+COMMON_PLUGINS_LIST="websession-broker healthcheck zookeeper-refdb"
function check_application_requirements {
type java >/dev/null 2>&1 || { echo >&2 "Require java but it's not installed. Aborting."; exit 1; }
@@ -112,6 +113,19 @@
return 0
}
+function download_plugin {
+ local PLUGIN_NAME=$1
+
+ echo "Downloading $PLUGIN_NAME plugin $GERRIT_BRANCH onto $TARGET_DIR"
+ wget $GERRIT_CI/plugin-$PLUGIN_NAME-bazel-$GERRIT_BRANCH/$LAST_BUILD/$PLUGIN_NAME/$PLUGIN_NAME.jar \
+ -O $COMMON_PLUGINS/$PLUGIN_NAME.jar || \
+ wget $GERRIT_CI/plugin-$PLUGIN_NAME-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/$PLUGIN_NAME/$PLUGIN_NAME.jar \
+ -O $COMMON_PLUGINS/$PLUGIN_NAME.jar || \
+ { echo >&2 "Cannot download $PLUGIN_NAME plugin: Check internet connection. Aborting"; exit 1; }
+
+ return 0
+}
+
# Check application requirements
check_application_requirements
@@ -220,27 +234,14 @@
echo "Downloading common plugins"
COMMON_PLUGINS=${DEPLOYMENT_LOCATION}/common_plugins
mkdir -p ${COMMON_PLUGINS}
+for plugin in $COMMON_PLUGINS_LIST; do download_plugin $plugin; done
echo "plugin location[${MULTISITE_LIB_LOCATION}]"
cp -f $MULTISITE_LIB_LOCATION $COMMON_PLUGINS/multi-site.jar >/dev/null 2>&1 || \
{ echo >&2 "$MULTISITE_LIB_LOCATION: Not able to copy the file. Aborting"; exit 1; }
-echo "Downloading websession-broker plugin $GERRIT_BRANCH"
-wget $GERRIT_CI/plugin-websession-broker-bazel-$GERRIT_BRANCH/$LAST_BUILD/websession-broker/websession-broker.jar \
- -O $COMMON_PLUGINS/websession-broker.jar || { echo >&2 "Cannot download websession-broker plugin: Check internet connection. Aborting"; exit 1; }
-
-echo "Downloading healthcheck plugin $GERRIT_BRANCH"
-wget $GERRIT_CI/plugin-healthcheck-bazel-$GERRIT_BRANCH/$LAST_BUILD/healthcheck/healthcheck.jar \
- -O $COMMON_PLUGINS/healthcheck.jar || { echo >&2 "Cannot download healthcheck plugin: Check internet connection. Aborting"; exit 1; }
-
-echo "Downloading zookeeper plugin $GERRIT_BRANCH"
-wget $GERRIT_CI/plugin-zookeeper-refdb-bazel-$GERRIT_BRANCH/$LAST_BUILD/zookeeper-refdb/zookeeper-refdb.jar \
- -O $COMMON_PLUGINS/zookeeper-refdb.jar || { echo >&2 "Cannot download zookeeper plugin: Check internet connection. Aborting"; exit 1; }
-
if [ "$BROKER_TYPE" = "kafka" ]; then
- echo "Downloading events-kafka plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-events-kafka-bazel-$GERRIT_BRANCH/$LAST_BUILD/events-kafka/events-kafka.jar \
- -O $COMMON_PLUGINS/events-kafka.jar || { echo >&2 "Cannot download events-kafka plugin: Check internet connection. Aborting"; exit 1; }
+ download_plugin events-kafka $COMMON_PLUGINS
BROKER_PORT=9092
BROKER_HOST=kafka
BROKER_PLUGIN=events-kafka
diff --git a/setup_local_env/setup.sh b/setup_local_env/setup.sh
index 5180473..7697f24 100755
--- a/setup_local_env/setup.sh
+++ b/setup_local_env/setup.sh
@@ -16,8 +16,8 @@
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-GERRIT_BRANCH=stable-3.5
-GERRIT_CI=https://archive-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
+GERRIT_BRANCH=stable-3.6
+GERRIT_CI=https://gerrit-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
LAST_BUILD=lastSuccessfulBuild/artifact/bazel-bin/plugins
function check_application_requirements {
@@ -224,6 +224,16 @@
fi
}
+function download_artifact_from_ci {
+ local artifact_name=$1
+ local prefix=${2:-plugin}
+ wget $GERRIT_CI/$prefix-$artifact_name-bazel-$GERRIT_BRANCH/$LAST_BUILD/$artifact_name/$artifact_name.jar \
+ -O $DEPLOYMENT_LOCATION/$artifact_name.jar || \
+ wget $GERRIT_CI/$prefix-$artifact_name-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/$artifact_name/$artifact_name.jar \
+ -O $DEPLOYMENT_LOCATION/$artifact_name.jar || \
+ { echo >&2 "Cannot download $artifact_name $prefix: Check internet connection. Aborting"; exit 1; }
+}
+
while [ $# -ne 0 ]
do
case "$1" in
@@ -429,70 +439,37 @@
if [ $DOWNLOAD_WEBSESSION_PLUGIN = "true" ];then
echo "Downloading websession-broker plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-websession-broker-bazel-$GERRIT_BRANCH/$LAST_BUILD/websession-broker/websession-broker.jar \
- -O $DEPLOYMENT_LOCATION/websession-broker.jar || \
- wget $GERRIT_CI/plugin-websession-broker-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/websession-broker/websession-broker.jar \
- -O $DEPLOYMENT_LOCATION/websession-broker.jar || \
- { echo >&2 "Cannot download websession-broker plugin: Check internet connection. Abort\
-ing"; exit 1; }
- wget $GERRIT_CI/plugin-healthcheck-bazel-$GERRIT_BRANCH/$LAST_BUILD/healthcheck/healthcheck.jar \
- -O $DEPLOYMENT_LOCATION/healthcheck.jar || { echo >&2 "Cannot download healthcheck plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci websession-broker
+ download_artifact_from_ci healthcheck
+
else
echo "Without the websession-broker; user login via haproxy will fail."
fi
echo "Downloading zookeeper plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-zookeeper-refdb-bazel-$GERRIT_BRANCH/$LAST_BUILD/zookeeper-refdb/zookeeper-refdb.jar \
- -O $DEPLOYMENT_LOCATION/zookeeper-refdb.jar || \
- wget $GERRIT_CI/plugin-zookeeper-refdb-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/zookeeper-refdb/zookeeper-refdb.jar \
- -O $DEPLOYMENT_LOCATION/zookeeper-refdb.jar || \
- { echo >&2 "Cannot download zookeeper plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci zookeeper-refdb
if [ "$BROKER_TYPE" = "kafka" ]; then
echo "Downloading events-kafka plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-events-kafka-bazel-$GERRIT_BRANCH/$LAST_BUILD/events-kafka/events-kafka.jar \
- -O $DEPLOYMENT_LOCATION/events-kafka.jar || \
- wget $GERRIT_CI/plugin-events-kafka-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/events-kafka/events-kafka.jar \
- -O $DEPLOYMENT_LOCATION/events-kafka.jar || \
- { echo >&2 "Cannot download events-kafka plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci events-kafka
fi
if [ "$BROKER_TYPE" = "kinesis" ]; then
echo "Downloading events-aws-kinesis plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-events-aws-kinesis-bazel-$GERRIT_BRANCH/$LAST_BUILD/events-aws-kinesis/events-aws-kinesis.jar \
- -O $DEPLOYMENT_LOCATION/events-aws-kinesis.jar || \
- wget $GERRIT_CI/plugin-events-aws-kinesis-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/events-aws-kinesis/events-aws-kinesis.jar \
- -O $DEPLOYMENT_LOCATION/events-aws-kinesis.jar || \
- { echo >&2 "Cannot download events-aws-kinesis plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci events-aws-kinesis
fi
if [ "$BROKER_TYPE" = "gcloud-pubsub" ]; then
echo "Downloading events-gcloud-pubsub plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-events-gcloud-pubsub-bazel-$GERRIT_BRANCH/$LAST_BUILD/events-gcloud-pubsub/events-gcloud-pubsub.jar \
- -O $DEPLOYMENT_LOCATION/events-gcloud-pubsub.jar || \
- wget $GERRIT_CI/plugin-events-gcloud-pubsub-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/events-gcloud-pubsub/events-gcloud-pubsub.jar \
- -O $DEPLOYMENT_LOCATION/events-gcloud-pubsub.jar || \
- { echo >&2 "Cannot download events-gcloud-pubsub plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci events-gcloud-pubsub
fi
echo "Downloading metrics-reporter-prometheus plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-metrics-reporter-prometheus-bazel-$GERRIT_BRANCH/$LAST_BUILD/metrics-reporter-prometheus/metrics-reporter-prometheus.jar \
- -O $DEPLOYMENT_LOCATION/metrics-reporter-prometheus.jar || \
- wget $GERRIT_CI/plugin-metrics-reporter-prometheus-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/metrics-reporter-prometheus/metrics-reporter-prometheus.jar \
- -O $DEPLOYMENT_LOCATION/metrics-reporter-prometheus.jar || \
- { echo >&2 "Cannot download metrics-reporter-prometheus plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci metrics-reporter-prometheus
echo "Downloading pull-replication plugin $GERRIT_BRANCH"
- wget $GERRIT_CI/plugin-pull-replication-bazel-$GERRIT_BRANCH/$LAST_BUILD/pull-replication/pull-replication.jar \
- -O $DEPLOYMENT_LOCATION/pull-replication.jar || { echo >&2 "Cannot download pull-replication plugin: Check internet connection. Abort\
-ing"; exit 1; }
+ download_artifact_from_ci pull-replication
if [ "$HTTPS_ENABLED" = "true" ];then
export HTTP_PROTOCOL="https"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/LibModuleLogFile.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/LibModuleLogFile.java
index 106bcde..7c88185 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/LibModuleLogFile.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/LibModuleLogFile.java
@@ -23,10 +23,11 @@
public abstract class LibModuleLogFile {
public LibModuleLogFile(SystemLog systemLog, String logName, Layout layout) {
- AsyncAppender asyncAppender = systemLog.createAsyncAppender(logName, layout, true, true);
Logger logger = LogManager.getLogger(logName);
- logger.removeAppender(logName);
- logger.addAppender(asyncAppender);
- logger.setAdditivity(false);
+ if (logger.getAppender(logName) == null) {
+ AsyncAppender asyncAppender = systemLog.createAsyncAppender(logName, layout, true, true);
+ logger.addAppender(asyncAppender);
+ logger.setAdditivity(false);
+ }
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/cache/CacheModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/cache/CacheModule.java
index 6373f58..5e54951 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/cache/CacheModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/cache/CacheModule.java
@@ -14,18 +14,31 @@
package com.googlesource.gerrit.plugins.multisite.cache;
+import com.google.common.annotations.VisibleForTesting;
import com.google.gerrit.extensions.events.NewProjectCreatedListener;
import com.google.gerrit.extensions.events.ProjectDeletedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.server.cache.CacheRemovalListener;
+import com.googlesource.gerrit.plugins.multisite.ExecutorProvider;
import java.util.concurrent.Executor;
public class CacheModule extends LifecycleModule {
+ private final Class<? extends ExecutorProvider> cacheExecutorProviderClass;
+
+ public CacheModule() {
+ this(CacheExecutorProvider.class);
+ }
+
+ @VisibleForTesting
+ public CacheModule(Class<? extends ExecutorProvider> cacheExecutorProviderClass) {
+ this.cacheExecutorProviderClass = cacheExecutorProviderClass;
+ }
+
@Override
protected void configure() {
- bind(Executor.class).annotatedWith(CacheExecutor.class).toProvider(CacheExecutorProvider.class);
+ bind(Executor.class).annotatedWith(CacheExecutor.class).toProvider(cacheExecutorProviderClass);
listener().to(CacheExecutorProvider.class);
DynamicSet.bind(binder(), CacheRemovalListener.class).to(CacheEvictionHandler.class);
DynamicSet.bind(binder(), NewProjectCreatedListener.class).to(ProjectListUpdateHandler.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/index/ChangeCheckerImpl.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/index/ChangeCheckerImpl.java
index 4ef5b7f..7373bcc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/index/ChangeCheckerImpl.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/index/ChangeCheckerImpl.java
@@ -182,7 +182,7 @@
private long getTsFromChangeAndDraftComments(ChangeNotes notes) {
Change change = notes.getChange();
- Timestamp changeTs = change.getLastUpdatedOn();
+ Timestamp changeTs = Timestamp.from(change.getLastUpdatedOn());
try {
for (HumanComment comment : commentsUtil.draftByChange(changeNotes.get())) {
Timestamp commentTs = comment.writtenOn;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/CacheEvictionHandlerTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/CacheEvictionHandlerTest.java
index ce222d0..ed51e1b 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/CacheEvictionHandlerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/CacheEvictionHandlerTest.java
@@ -14,7 +14,7 @@
package com.googlesource.gerrit.plugins.multisite.cache;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import com.google.common.cache.RemovalCause;
import com.google.common.cache.RemovalNotification;
@@ -44,6 +44,6 @@
handler.onRemoval(
"test", "accounts", RemovalNotification.create("test", "accounts", RemovalCause.EXPLICIT));
- verifyZeroInteractions(executorMock);
+ verifyNoInteractions(executorMock);
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/ProjectListUpdateHandlerTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/ProjectListUpdateHandlerTest.java
index 69968b5..3a4242c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/ProjectListUpdateHandlerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/cache/ProjectListUpdateHandlerTest.java
@@ -20,7 +20,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import com.google.common.util.concurrent.MoreExecutors;
@@ -90,7 +90,7 @@
handler.onNewProjectCreated(mock(NewProjectCreatedListener.Event.class));
handler.onProjectDeleted(mock(ProjectDeletedListener.Event.class));
Context.unsetForwardedEvent();
- verifyZeroInteractions(forwarder);
+ verifyNoInteractions(forwarder);
}
@Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/IndexEventSubscriberTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/IndexEventSubscriberTest.java
index 0e63528..fd4a0aa 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/IndexEventSubscriberTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/IndexEventSubscriberTest.java
@@ -128,6 +128,6 @@
Change.id(CHANGE_ID),
Account.id(9999),
BranchNameKey.create(Project.nameKey(PROJECT_NAME), "refs/heads/master"),
- TimeUtil.nowTs());
+ TimeUtil.now());
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetricsTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetricsTest.java
index 6413b18..6a03a6c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetricsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/SubscriberMetricsTest.java
@@ -16,7 +16,7 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import com.google.common.base.Suppliers;
@@ -140,7 +140,7 @@
metrics.updateReplicationStatusMetrics(eventMessage);
- verifyZeroInteractions(verLogger);
+ verifyNoInteractions(verLogger);
}
@Test
@@ -152,7 +152,7 @@
metrics.updateReplicationStatusMetrics(eventMessage);
- verifyZeroInteractions(verLogger);
+ verifyNoInteractions(verLogger);
}
@Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/IndexEventRouterTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/IndexEventRouterTest.java
index 413b6c1..4ffdbbc 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/IndexEventRouterTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/IndexEventRouterTest.java
@@ -16,7 +16,7 @@
import static com.google.gerrit.testing.GerritJUnit.assertThrows;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import com.google.gerrit.entities.Account;
import com.google.gerrit.server.config.AllUsersName;
@@ -73,7 +73,7 @@
verify(indexAccountHandler)
.indexAsync(Account.id(event.accountId), ForwardedIndexingHandler.Operation.INDEX);
- verifyZeroInteractions(indexChangeHandler, indexGroupHandler, indexProjectHandler);
+ verifyNoInteractions(indexChangeHandler, indexGroupHandler, indexProjectHandler);
}
@Test
@@ -87,7 +87,7 @@
verify(indexAccountHandler)
.indexAsync(Account.id(event.accountId), ForwardedIndexingHandler.Operation.INDEX);
- verifyZeroInteractions(indexChangeHandler, indexGroupHandler, indexProjectHandler);
+ verifyNoInteractions(indexChangeHandler, indexGroupHandler, indexProjectHandler);
streamEventRouter.route(new RefReplicationDoneEvent(allUsersName.get(), "refs/any", 1));
@@ -103,7 +103,7 @@
verify(indexGroupHandler)
.index(groupId, ForwardedIndexingHandler.Operation.INDEX, Optional.of(event));
- verifyZeroInteractions(indexAccountHandler, indexChangeHandler, indexProjectHandler);
+ verifyNoInteractions(indexAccountHandler, indexChangeHandler, indexProjectHandler);
}
@Test
@@ -115,7 +115,7 @@
verify(indexProjectHandler)
.index(projectName, ForwardedIndexingHandler.Operation.INDEX, Optional.of(event));
- verifyZeroInteractions(indexAccountHandler, indexChangeHandler, indexGroupHandler);
+ verifyNoInteractions(indexAccountHandler, indexChangeHandler, indexGroupHandler);
}
@Test
@@ -129,7 +129,7 @@
ForwardedIndexingHandler.Operation.INDEX,
Optional.of(event));
- verifyZeroInteractions(indexAccountHandler, indexGroupHandler, indexProjectHandler);
+ verifyNoInteractions(indexAccountHandler, indexGroupHandler, indexProjectHandler);
}
@Test
@@ -143,7 +143,7 @@
ForwardedIndexingHandler.Operation.DELETE,
Optional.of(event));
- verifyZeroInteractions(indexAccountHandler, indexGroupHandler, indexProjectHandler);
+ verifyNoInteractions(indexAccountHandler, indexGroupHandler, indexProjectHandler);
}
@Test
@@ -151,7 +151,7 @@
final IndexEvent newEventType = new IndexEvent("new-type", INSTANCE_ID) {};
assertThrows(UnsupportedOperationException.class, () -> router.route(newEventType));
- verifyZeroInteractions(
+ verifyNoInteractions(
indexAccountHandler, indexChangeHandler, indexGroupHandler, indexProjectHandler);
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/StreamEventRouterTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/StreamEventRouterTest.java
index 3b4bec5..ac90436 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/event/StreamEventRouterTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/event/StreamEventRouterTest.java
@@ -55,6 +55,6 @@
Change.id(1),
Account.id(1),
BranchNameKey.create("proj", "refs/heads/master"),
- TimeUtil.nowTs());
+ TimeUtil.now());
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/BrokerForwarderTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/BrokerForwarderTest.java
index 28bf56d..c583455 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/BrokerForwarderTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/BrokerForwarderTest.java
@@ -16,7 +16,7 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import com.googlesource.gerrit.plugins.multisite.Configuration;
import com.googlesource.gerrit.plugins.multisite.broker.BrokerApiWrapper;
@@ -99,21 +99,21 @@
@Test
public void shouldSkipEventFromHighAvailabilityPluginThread() {
brokerForwarder.send(newForwarderTask(HIGH_AVAILABILITY_PLUGIN), testTopic, testEvent);
- verifyZeroInteractions(brokerMock);
+ verifyNoInteractions(brokerMock);
}
@Test
public void shouldSkipEventFromHighAvailabilityPluginForwardedThread() {
brokerForwarder.send(newForwarderTask(HIGH_AVAILABILITY_FORWARDED), testTopic, testEvent);
- verifyZeroInteractions(brokerMock);
+ verifyNoInteractions(brokerMock);
}
@Test
public void shouldSkipEventFromHighAvailabilityPluginBatchForwardedThread() {
brokerForwarder.send(newForwarderTask(HIGH_AVAILABILITY_BATCH_FORWARDED), testTopic, testEvent);
- verifyZeroInteractions(brokerMock);
+ verifyNoInteractions(brokerMock);
}
private ForwarderTask newForwarderTask(String threadName) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
index 75596ed..6ca1a7a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedCacheEvictionHandlerIT.java
@@ -29,10 +29,13 @@
import com.google.gerrit.extensions.registration.RegistrationHandle;
import com.google.gerrit.server.cache.CacheRemovalListener;
import com.google.gerrit.server.events.EventGson;
+import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.project.ProjectCacheImpl;
import com.google.gson.Gson;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.multisite.ExecutorProvider;
import com.googlesource.gerrit.plugins.multisite.cache.CacheModule;
import com.googlesource.gerrit.plugins.multisite.forwarder.events.CacheEvictionEvent;
import com.googlesource.gerrit.plugins.multisite.forwarder.router.CacheEvictionEventRouter;
@@ -43,7 +46,10 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.jgit.lib.Config;
import org.junit.After;
import org.junit.Before;
@@ -69,7 +75,7 @@
@Override
protected void configure() {
install(new ForwarderModule());
- install(new CacheModule());
+ install(new CacheModule(TestForwardingExecutorProvider.class));
install(new RouterModule());
install(new IndexModule());
SharedRefDbConfiguration sharedRefDbConfig =
@@ -78,11 +84,44 @@
}
}
+ @Singleton
+ public static class TestForwardingExecutorProvider extends ExecutorProvider {
+ private final ScheduledThreadPoolExecutor executor;
+ private final AtomicInteger executionsCounter;
+
+ @Inject
+ protected TestForwardingExecutorProvider(WorkQueue workQueue) {
+ super(workQueue, 1, "test");
+ executionsCounter = new AtomicInteger();
+ executor =
+ new ScheduledThreadPoolExecutor(1) {
+
+ @Override
+ public void execute(Runnable command) {
+ @SuppressWarnings("unused")
+ int ignored = executionsCounter.incrementAndGet();
+ super.execute(command);
+ }
+ };
+ }
+
+ @Override
+ public ScheduledExecutorService get() {
+ return executor;
+ }
+
+ public int executions() {
+ return executionsCounter.get();
+ }
+ }
+
public static class CacheEvictionsTracker<K, V> implements CacheRemovalListener<K, V> {
private final Map<String, Set<Object>> trackedEvictions;
private final CountDownLatch allExpectedEvictionsArrived;
+ private final String trackedCacheName;
- public CacheEvictionsTracker(int numExpectedEvictions) {
+ public CacheEvictionsTracker(String cacheName, int numExpectedEvictions) {
+ this.trackedCacheName = cacheName;
allExpectedEvictionsArrived = new CountDownLatch(numExpectedEvictions);
trackedEvictions = Maps.newHashMap();
}
@@ -99,22 +138,24 @@
@Override
public void onRemoval(
String pluginName, String cacheName, RemovalNotification<K, V> notification) {
- trackedEvictions.compute(
- cacheName,
- (k, v) -> {
- if (v == null) {
- return Sets.newHashSet(notification.getKey());
- }
- v.add(notification.getKey());
- return v;
- });
- allExpectedEvictionsArrived.countDown();
+ if (cacheName.equals(trackedCacheName)) {
+ trackedEvictions.compute(
+ cacheName,
+ (k, v) -> {
+ if (v == null) {
+ return Sets.newHashSet(notification.getKey());
+ }
+ v.add(notification.getKey());
+ return v;
+ });
+ allExpectedEvictionsArrived.countDown();
+ }
}
}
@Before
public void startTrackingCacheEvictions() {
- evictionsCacheTracker = new CacheEvictionsTracker<>(1);
+ evictionsCacheTracker = new CacheEvictionsTracker<>(ProjectCacheImpl.CACHE_NAME, 1);
cacheEvictionRegistrationHandle = cacheRemovalListeners.add("gerrit", evictionsCacheTracker);
}
@@ -135,6 +176,36 @@
}
@Test
+ @GerritConfig(name = "gerrit.instanceId", value = "testInstanceId")
+ @GerritConfig(name = "cache.threads", value = "0")
+ public void shouldNotForwardProjectCacheEvictionsWhenEventIsForwarded() throws Exception {
+ TestForwardingExecutorProvider cacheForwarder =
+ plugin.getSysInjector().getInstance(TestForwardingExecutorProvider.class);
+ Context.setForwardedEvent(true);
+ projectCache.evict(allProjects);
+
+ evictionsCacheTracker.waitForExpectedEvictions();
+ assertThat(evictionsCacheTracker.trackedEvictionsFor(ProjectCacheImpl.CACHE_NAME))
+ .contains(allProjects);
+
+ assertThat(cacheForwarder.executions()).isEqualTo(0);
+ }
+
+ @Test
+ @GerritConfig(name = "gerrit.instanceId", value = "testInstanceId")
+ public void shouldForwardProjectCacheEvictions() throws Exception {
+ TestForwardingExecutorProvider cacheForwarder =
+ plugin.getSysInjector().getInstance(TestForwardingExecutorProvider.class);
+ projectCache.evict(allProjects);
+
+ evictionsCacheTracker.waitForExpectedEvictions();
+ assertThat(evictionsCacheTracker.trackedEvictionsFor(ProjectCacheImpl.CACHE_NAME))
+ .contains(allProjects);
+
+ assertThat(cacheForwarder.executions()).isEqualTo(1);
+ }
+
+ @Test
@GerritConfig(name = "gerrit.instanceId", value = "instance-id")
public void shouldEvictProjectCacheWithSlash() throws Exception {
ProjectInput in = new ProjectInput();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedIndexChangeHandlerTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedIndexChangeHandlerTest.java
index b827cdf..2c4b157 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedIndexChangeHandlerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwardedIndexChangeHandlerTest.java
@@ -87,7 +87,7 @@
public void setUp() throws Exception {
when(ctxMock.open()).thenReturn(manualRequestContextMock);
id = Change.id(TEST_CHANGE_NUMBER);
- change = new Change(null, id, null, null, TimeUtil.nowTs());
+ change = new Change(null, id, null, null, TimeUtil.now());
when(changeNotes.getChange()).thenReturn(change);
when(changeCheckerFactoryMock.create(any())).thenReturn(changeCheckerAbsentMock);
when(configurationMock.index()).thenReturn(index);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/ProjectVersionRefUpdateTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/ProjectVersionRefUpdateTest.java
index fbf8ba0..1cfb2cd 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/ProjectVersionRefUpdateTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/ProjectVersionRefUpdateTest.java
@@ -24,7 +24,7 @@
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import com.gerritforge.gerrit.globalrefdb.validation.SharedRefDatabaseWrapper;
@@ -249,7 +249,7 @@
Ref ref = repo.getRepository().findRef(MULTI_SITE_VERSIONING_REF);
assertThat(ref).isNull();
- verifyZeroInteractions(verLogger);
+ verifyNoInteractions(verLogger);
}
@Test
@@ -264,7 +264,7 @@
Ref ref = repo.getRepository().findRef(MULTI_SITE_VERSIONING_REF);
assertThat(ref).isNull();
- verifyZeroInteractions(verLogger);
+ verifyNoInteractions(verLogger);
}
@Test
@@ -279,7 +279,7 @@
Ref ref = repo.getRepository().findRef(MULTI_SITE_VERSIONING_REF);
assertThat(ref).isNull();
- verifyZeroInteractions(verLogger);
+ verifyNoInteractions(verLogger);
}
@Test