diff options
author | Dariusz Luksza <dariusz.luksza@gmail.com> | 2023-12-07 13:51:51 +0000 |
---|---|---|
committer | Dariusz Luksza <dariusz.luksza@gmail.com> | 2023-12-27 12:13:47 +0000 |
commit | 5c4fd7bf6e644f42073acb60ab804170e6eab9e5 (patch) | |
tree | bff657ba2e3848e62bfb396784c7d0d493b7f949 | |
parent | 5e76935f1c5b23cd849c68952e72a16563225ca5 (diff) |
Extract `ReplicationConfigModule`
Move configuration related bindings to a specialized
`ReplicationConfigModule`. This hides implementation details like
conditional bindings based on the configuration options.
Additionally this will also limit the impact on the `pull-replication`
plugin when we decide to move around configuration classes or add new
configuration related functionality.
Change-Id: I2fa409cdf19079a0c05a9b0612847bd2be2527f1
-rw-r--r-- | src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java | 75 | ||||
-rw-r--r-- | src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java | 49 |
2 files changed, 80 insertions, 44 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java new file mode 100644 index 0000000..a2edd0b --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java @@ -0,0 +1,75 @@ +// Copyright (C) 2023 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.replication; + +import com.google.gerrit.extensions.events.LifecycleListener; +import com.google.gerrit.server.config.SitePaths; +import com.google.inject.AbstractModule; +import com.google.inject.Inject; +import com.google.inject.ProvisionException; +import com.google.inject.Scopes; +import com.google.inject.internal.UniqueAnnotations; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import org.eclipse.jgit.errors.ConfigInvalidException; +import org.eclipse.jgit.storage.file.FileBasedConfig; +import org.eclipse.jgit.util.FS; + +public class ReplicationConfigModule extends AbstractModule { + + private final SitePaths site; + private final Path cfgPath; + + @Inject + ReplicationConfigModule(SitePaths site) { + this.site = site; + this.cfgPath = site.etc_dir.resolve("replication.config"); + } + + @Override + protected void configure() { + if (getReplicationConfig().getBoolean("gerrit", "autoReload", false)) { + bind(ReplicationConfig.class) + .annotatedWith(MainReplicationConfig.class) + .to(getReplicationConfigClass()); + bind(ReplicationConfig.class).to(AutoReloadConfigDecorator.class).in(Scopes.SINGLETON); + bind(LifecycleListener.class) + .annotatedWith(UniqueAnnotations.create()) + .to(AutoReloadConfigDecorator.class); + } else { + bind(ReplicationConfig.class).to(getReplicationConfigClass()).in(Scopes.SINGLETON); + } + } + + public FileBasedConfig getReplicationConfig() { + File replicationConfigFile = cfgPath.toFile(); + FileBasedConfig config = new FileBasedConfig(replicationConfigFile, FS.DETECTED); + try { + config.load(); + } catch (IOException | ConfigInvalidException e) { + throw new ProvisionException("Unable to load " + replicationConfigFile.getAbsolutePath(), e); + } + return config; + } + + private Class<? extends ReplicationConfig> getReplicationConfigClass() { + if (Files.exists(site.etc_dir.resolve("replication"))) { + return FanoutReplicationConfig.class; + } + return ReplicationFileBasedConfig.class; + } +} diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java index 9f331f2..ac27280 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java @@ -24,11 +24,9 @@ import com.google.gerrit.extensions.events.HeadUpdatedListener; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.events.ProjectDeletedListener; import com.google.gerrit.extensions.registration.DynamicSet; -import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.events.EventTypes; import com.google.inject.AbstractModule; import com.google.inject.Inject; -import com.google.inject.ProvisionException; import com.google.inject.Scopes; import com.google.inject.assistedinject.FactoryModuleBuilder; import com.google.inject.internal.UniqueAnnotations; @@ -40,29 +38,22 @@ import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionState; import com.googlesource.gerrit.plugins.replication.events.RefReplicatedEvent; import com.googlesource.gerrit.plugins.replication.events.RefReplicationDoneEvent; import com.googlesource.gerrit.plugins.replication.events.ReplicationScheduledEvent; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import org.apache.http.impl.client.CloseableHttpClient; -import org.eclipse.jgit.errors.ConfigInvalidException; -import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.transport.SshSessionFactory; -import org.eclipse.jgit.util.FS; class ReplicationModule extends AbstractModule { - private final SitePaths site; - private final Path cfgPath; + + private final ReplicationConfigModule configModule; @Inject - public ReplicationModule(SitePaths site) { - this.site = site; - cfgPath = site.etc_dir.resolve("replication.config"); + public ReplicationModule(ReplicationConfigModule configModule) { + this.configModule = configModule; } @Override protected void configure() { install(new FactoryModuleBuilder().build(Destination.Factory.class)); + install(configModule); bind(ReplicationQueue.class).in(Scopes.SINGLETON); bind(ObservableQueue.class).to(ReplicationQueue.class); bind(LifecycleListener.class) @@ -92,18 +83,6 @@ class ReplicationModule extends AbstractModule { bind(ReplicationDestinations.class).to(DestinationsCollection.class); bind(ConfigParser.class).to(DestinationConfigParser.class).in(Scopes.SINGLETON); - if (getReplicationConfig().getBoolean("gerrit", "autoReload", false)) { - bind(ReplicationConfig.class) - .annotatedWith(MainReplicationConfig.class) - .to(getReplicationConfigClass()); - bind(ReplicationConfig.class).to(AutoReloadConfigDecorator.class).in(Scopes.SINGLETON); - bind(LifecycleListener.class) - .annotatedWith(UniqueAnnotations.create()) - .to(AutoReloadConfigDecorator.class); - } else { - bind(ReplicationConfig.class).to(getReplicationConfigClass()).in(Scopes.SINGLETON); - } - DynamicSet.setOf(binder(), ReplicationStateListener.class); DynamicSet.bind(binder(), ReplicationStateListener.class).to(ReplicationStateLogger.class); @@ -125,22 +104,4 @@ class ReplicationModule extends AbstractModule { bind(TransportFactory.class).to(TransportFactoryImpl.class).in(Scopes.SINGLETON); bind(CloseableHttpClient.class).toProvider(HttpClientProvider.class).in(Scopes.SINGLETON); } - - private FileBasedConfig getReplicationConfig() { - File replicationConfigFile = cfgPath.toFile(); - FileBasedConfig config = new FileBasedConfig(replicationConfigFile, FS.DETECTED); - try { - config.load(); - } catch (IOException | ConfigInvalidException e) { - throw new ProvisionException("Unable to load " + replicationConfigFile.getAbsolutePath(), e); - } - return config; - } - - private Class<? extends ReplicationConfig> getReplicationConfigClass() { - if (Files.exists(site.etc_dir.resolve("replication"))) { - return FanoutReplicationConfig.class; - } - return ReplicationFileBasedConfig.class; - } } |