Merge branch 'stable-3.2' into stable-3.3
* stable-3.2:
Add newline at EOF as required by HAProxy
Use GerritForge's archive-ci for downloading artifacts
Fix issue with disabling ref-database
Use archive-ci.gerritforge.com for downloading plugins
Add handling of multi-base local disk repositories
Change-Id: I7120e9b9c861ffda7567e45f34bd26df5a2f0bfa
diff --git a/e2e-tests/test.sh b/e2e-tests/test.sh
index 49615e7..19c8b04 100755
--- a/e2e-tests/test.sh
+++ b/e2e-tests/test.sh
@@ -17,7 +17,7 @@
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.3
-GERRIT_CI=https://gerrit-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
+GERRIT_CI=https://archive-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.3.6-centos8
diff --git a/setup_local_env/setup.sh b/setup_local_env/setup.sh
index 5342fbf..11ae04f 100755
--- a/setup_local_env/setup.sh
+++ b/setup_local_env/setup.sh
@@ -17,7 +17,7 @@
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
GERRIT_BRANCH=stable-3.3
-GERRIT_CI=https://gerrit-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
+GERRIT_CI=https://archive-ci.gerritforge.com/view/Plugins-$GERRIT_BRANCH/job
LAST_BUILD=lastSuccessfulBuild/artifact/bazel-bin/plugins
EVENTS_BROKER_VER=`grep 'com.gerritforge:events-broker' $(dirname $0)/../external_plugin_deps.bzl | cut -d '"' -f 2 | cut -d ':' -f 3`
GLOBAL_REFDB_VER=`grep 'com.gerritforge:global-refdb' $(dirname $0)/../external_plugin_deps.bzl | cut -d '"' -f 2 | cut -d ':' -f 3`
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
index 81e1c12..6b77713 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/Configuration.java
@@ -135,6 +135,13 @@
null,
SharedRefDbConfiguration.SharedRefDatabase.ENABLE_KEY,
true);
+ if (cfg instanceof FileBasedConfig) {
+ try {
+ ((FileBasedConfig) cfg).save();
+ } catch (IOException e) {
+ throw new IllegalStateException("Error while enabling global-refdb by default", e);
+ }
+ }
}
return cfg;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/GitModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/GitModule.java
index 38cddd5..96bb4e8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/GitModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/GitModule.java
@@ -15,24 +15,33 @@
package com.googlesource.gerrit.plugins.multisite;
import com.gerritforge.gerrit.globalrefdb.validation.SharedRefDbConfiguration;
+import com.google.gerrit.server.ModuleImpl;
+import com.google.gerrit.server.config.RepositoryConfig;
+import com.google.gerrit.server.git.GitRepositoryManagerModule;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.multisite.validation.ValidationModule;
+@ModuleImpl(name = GitRepositoryManagerModule.MANAGER_MODULE)
public class GitModule extends AbstractModule {
private final Configuration config;
+ private final RepositoryConfig repoConfig;
@Inject
- public GitModule(Configuration config) {
+ public GitModule(Configuration config, RepositoryConfig repoConfig) {
this.config = config;
+ this.repoConfig = repoConfig;
}
@Override
protected void configure() {
- bind(SharedRefDbConfiguration.class).toInstance(config.getSharedRefDbConfiguration());
+ SharedRefDbConfiguration sharedRefDbConfiguration = config.getSharedRefDbConfiguration();
+ bind(SharedRefDbConfiguration.class).toInstance(sharedRefDbConfiguration);
bind(ProjectVersionLogger.class).to(Log4jProjectVersionLogger.class);
- if (config.getSharedRefDbConfiguration().getSharedRefDb().isEnabled()) {
- install(new ValidationModule(config));
+ if (sharedRefDbConfiguration.getSharedRefDb().isEnabled()) {
+ install(new ValidationModule(config, repoConfig));
+ } else {
+ install(new GitRepositoryManagerModule(repoConfig));
}
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RepositoryManagerModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RepositoryManagerModule.java
new file mode 100644
index 0000000..b71ca67
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RepositoryManagerModule.java
@@ -0,0 +1,41 @@
+// Copyright (C) 2022 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.googlesource.gerrit.plugins.multisite.validation;
+
+import com.gerritforge.gerrit.globalrefdb.validation.SharedRefDbGitRepositoryManager;
+import com.google.gerrit.lifecycle.LifecycleModule;
+import com.google.gerrit.server.config.RepositoryConfig;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager;
+
+class RepositoryManagerModule extends LifecycleModule {
+ private final RepositoryConfig cfg;
+
+ RepositoryManagerModule(RepositoryConfig cfg) {
+ this.cfg = cfg;
+ }
+
+ @Override
+ protected void configure() {
+ bind(GitRepositoryManager.class).to(SharedRefDbGitRepositoryManager.class);
+
+ // part responsible for physical repositories handling
+ listener().to(LocalDiskRepositoryManager.Lifecycle.class);
+ if (!cfg.getAllBasePaths().isEmpty()) {
+ bind(LocalDiskRepositoryManager.class).to(MultiBaseLocalDiskRepositoryManager.class);
+ }
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/ValidationModule.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/ValidationModule.java
index f66bf37..8601cf2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/ValidationModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/ValidationModule.java
@@ -31,7 +31,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.extensions.registration.DynamicItem;
-import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.config.RepositoryConfig;
import com.google.inject.Scopes;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
@@ -41,9 +41,11 @@
public class ValidationModule extends FactoryModule {
private final Configuration cfg;
+ private final RepositoryConfig repoConfig;
- public ValidationModule(Configuration cfg) {
+ public ValidationModule(Configuration cfg, RepositoryConfig repoConfig) {
this.cfg = cfg;
+ this.repoConfig = repoConfig;
}
@Override
@@ -67,7 +69,7 @@
ImmutableSet.of(
ProjectVersionRefUpdate.MULTI_SITE_VERSIONING_REF,
ProjectVersionRefUpdate.MULTI_SITE_VERSIONING_VALUE_REF));
- bind(GitRepositoryManager.class).to(SharedRefDbGitRepositoryManager.class);
+ install(new RepositoryManagerModule(repoConfig));
DynamicItem.bind(binder(), ReplicationPushFilter.class)
.to(MultisiteReplicationPushFilter.class);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/GitModuleTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/GitModuleTest.java
new file mode 100644
index 0000000..7faccae
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/GitModuleTest.java
@@ -0,0 +1,67 @@
+// Copyright (C) 2022 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.googlesource.gerrit.plugins.multisite;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.gerritforge.gerrit.globalrefdb.validation.SharedRefDbGitRepositoryManager;
+import com.google.gerrit.acceptance.AbstractDaemonTest;
+import com.google.gerrit.acceptance.NoHttpd;
+import com.google.gerrit.acceptance.UseLocalDisk;
+import com.google.gerrit.acceptance.config.GerritConfig;
+import com.google.gerrit.acceptance.config.GlobalPluginConfig;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.gerrit.server.git.MultiBaseLocalDiskRepositoryManager;
+import com.google.inject.Inject;
+import org.junit.Test;
+
+@UseLocalDisk
+@NoHttpd
+public class GitModuleTest extends AbstractDaemonTest {
+ @Inject private GitRepositoryManager gitRepoManager;
+ @Inject private LocalDiskRepositoryManager wrapped;
+
+ @Test
+ @GerritConfig(
+ name = "gerrit.installDbModule",
+ value = "com.googlesource.gerrit.plugins.multisite.GitModule")
+ public void shouldUseLocalDiskRepositoryManagerByDefault() {
+ assertThat(gitRepoManager).isInstanceOf(SharedRefDbGitRepositoryManager.class);
+ assertThat(wrapped).isNotInstanceOf(MultiBaseLocalDiskRepositoryManager.class);
+ }
+
+ @Test
+ @GerritConfig(
+ name = "gerrit.installDbModule",
+ value = "com.googlesource.gerrit.plugins.multisite.GitModule")
+ @GerritConfig(name = "repository.r1.basePath", value = "/tmp/git1")
+ public void shouldUseMultiBaseLocalDiskRepositoryManagerWhenItIsConfigured() {
+ assertThat(gitRepoManager).isInstanceOf(SharedRefDbGitRepositoryManager.class);
+ assertThat(wrapped).isInstanceOf(MultiBaseLocalDiskRepositoryManager.class);
+ }
+
+ @Test
+ @GerritConfig(
+ name = "gerrit.installDbModule",
+ value = "com.googlesource.gerrit.plugins.multisite.GitModule")
+ @GlobalPluginConfig(
+ pluginName = Configuration.PLUGIN_NAME,
+ name = "ref-database.enabled",
+ value = "false")
+ public void shouldInstallDefaultGerritGitManagerWhenRefDbIsDisabled() {
+ assertThat(gitRepoManager).isInstanceOf(LocalDiskRepositoryManager.class);
+ }
+}
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 0d6fb67..88d2270 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
@@ -265,28 +265,6 @@
}
@Test
- public void shouldNotUpdateProjectVersionWhenProjectFilteredOut() throws Exception {
- when(projectsFilter.matches(any(Event.class))).thenReturn(false);
-
- Context.setForwardedEvent(false);
-
- Thread.sleep(1000L);
- repo.branch("master").commit().create();
-
- Thread.sleep(1000L);
- repo.branch("master").update(masterCommit);
-
- new ProjectVersionRefUpdateImpl(
- repoManager, sharedRefDb, gitReferenceUpdated, verLogger, projectsFilter)
- .onEvent(refUpdatedEvent);
-
- Ref ref = repo.getRepository().findRef(MULTI_SITE_VERSIONING_REF);
- assertThat(ref).isNull();
-
- verifyZeroInteractions(verLogger);
- }
-
- @Test
public void getRemoteProjectVersionShouldReturnCorrectValue() {
when(sharedRefDb.get(A_TEST_PROJECT_NAME_KEY, MULTI_SITE_VERSIONING_VALUE_REF, String.class))
.thenReturn(Optional.of("123"));