summaryrefslogtreecommitdiffstats
path: root/src/main/java/com
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2024-04-04 16:54:06 +0000
committerLuca Milanesio <luca.milanesio@gmail.com>2024-04-04 17:13:21 +0000
commitaab69373db6152ea98e7627f816fa3d777d5fe46 (patch)
tree6e7f30d0274edd2c5b7072fb456a79130edc8bfe /src/main/java/com
parent5e33f8344e3855478914a5c530a327f888bd8c8e (diff)
Revert "Expose API to update remotes' configurations"v3.10.0-rc0
This reverts commit 68ce459ba2dd7d5625e03712635caf78957e1c1e. The plan is: - Revert master - cut stable-3.10 - Re-apply on master and expose the new API properly Reason for revert: Broke the pull-replication plugin Change-Id: I461cd1bef6d74d48763662c0c26db47bafe5d422
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java26
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java21
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java10
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java6
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationRemotesUpdater.java110
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/api/ConfigResource.java11
6 files changed, 6 insertions, 178 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
index 0a2afa6..4220ddb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FanoutConfigResource.java
@@ -23,11 +23,9 @@ import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
import com.google.gerrit.server.config.SitePaths;
import com.google.inject.Inject;
-import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -63,30 +61,6 @@ public class FanoutConfigResource extends FileConfigResource {
}
}
- @Override
- public void update(Config updates) throws IOException {
- Set<String> remotes = updates.getSubsections("remote");
- for (String remote : remotes) {
- File remoteFile = remoteConfigsDirPath.resolve(remote + ".config").toFile();
- FileBasedConfig remoteConfig = new FileBasedConfig(remoteFile, FS.DETECTED);
- try {
- remoteConfig.load();
- } catch (ConfigInvalidException e) {
- throw new IOException(
- String.format("Cannot parse configuration file: %s", remoteFile.getAbsoluteFile()), e);
- }
- Set<String> options = updates.getNames("remote", remote);
- for (String option : options) {
- List<String> values = List.of(updates.getStringList("remote", remote, option));
- remoteConfig.setStringList("remote", remote, option, values);
- }
- remoteConfig.save();
- }
-
- removeRemotes(updates);
- super.update(updates);
- }
-
private static void removeRemotes(Config config) {
Set<String> remoteNames = config.getSubsections("remote");
if (remoteNames.size() > 0) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
index 7a14cd1..baccb83 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/FileConfigResource.java
@@ -17,7 +17,6 @@ package com.googlesource.gerrit.plugins.replication;
import static com.googlesource.gerrit.plugins.replication.ReplicationQueue.repLog;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
import com.google.gerrit.common.UsedAt;
import com.google.gerrit.common.UsedAt.Project;
import com.google.gerrit.server.config.SitePaths;
@@ -25,7 +24,6 @@ import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.replication.api.ConfigResource;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.List;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.storage.file.FileBasedConfig;
@@ -56,25 +54,6 @@ public class FileConfigResource implements ConfigResource {
}
@Override
- public void update(Config updates) throws IOException {
- for (String section : updates.getSections()) {
- for (String subsection : updates.getSubsections(section)) {
- for (String name : updates.getNames(section, subsection, true)) {
- List<String> values =
- Lists.newArrayList(updates.getStringList(section, subsection, name));
- config.setStringList(section, subsection, name, values);
- }
- }
-
- for (String name : updates.getNames(section, true)) {
- List<String> values = Lists.newArrayList(updates.getStringList(section, null, name));
- config.setStringList(section, null, name, values);
- }
- }
- config.save();
- }
-
- @Override
public String getVersion() {
return Long.toString(config.getFile().lastModified());
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
index 6a97432..b0343c9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationConfigModule.java
@@ -23,11 +23,9 @@ 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;
import com.googlesource.gerrit.plugins.replication.api.ConfigResource;
import com.googlesource.gerrit.plugins.replication.api.ReplicationConfig;
-import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionState;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -59,14 +57,6 @@ public class ReplicationConfigModule extends AbstractModule {
} else {
bind(ReplicationConfig.class).to(ReplicationConfigImpl.class).in(Scopes.SINGLETON);
}
-
- bind(ReplicationQueue.class).in(Scopes.SINGLETON);
- bind(ObservableQueue.class).to(ReplicationQueue.class);
- bind(ReplicationDestinations.class).to(DestinationsCollection.class);
- bind(ConfigParser.class).to(DestinationConfigParser.class).in(Scopes.SINGLETON);
-
- install(new FactoryModuleBuilder().build(Destination.Factory.class));
- install(new FactoryModuleBuilder().build(ProjectDeletionState.Factory.class));
}
public FileBasedConfig getReplicationConfig() {
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 5f59bf8..ac27280 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationModule.java
@@ -34,6 +34,7 @@ import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplica
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationFailedEvent;
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationScheduledEvent;
import com.googlesource.gerrit.plugins.replication.events.ProjectDeletionReplicationSucceededEvent;
+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;
@@ -51,7 +52,10 @@ class ReplicationModule extends AbstractModule {
@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)
.annotatedWith(UniqueAnnotations.create())
.to(ReplicationQueue.class);
@@ -73,8 +77,10 @@ class ReplicationModule extends AbstractModule {
.to(StartReplicationCapability.class);
install(new FactoryModuleBuilder().build(PushAll.Factory.class));
+ install(new FactoryModuleBuilder().build(ProjectDeletionState.Factory.class));
bind(EventBus.class).in(Scopes.SINGLETON);
+ bind(ReplicationDestinations.class).to(DestinationsCollection.class);
bind(ConfigParser.class).to(DestinationConfigParser.class).in(Scopes.SINGLETON);
DynamicSet.setOf(binder(), ReplicationStateListener.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationRemotesUpdater.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationRemotesUpdater.java
deleted file mode 100644
index a5e84d9..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationRemotesUpdater.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (C) 2024 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 static com.google.gerrit.common.UsedAt.Project.PLUGIN_GITHUB;
-
-import com.google.gerrit.common.Nullable;
-import com.google.gerrit.common.UsedAt;
-import com.google.gerrit.extensions.registration.DynamicItem;
-import com.google.gerrit.server.securestore.SecureStore;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-import com.googlesource.gerrit.plugins.replication.api.ConfigResource;
-import com.googlesource.gerrit.plugins.replication.api.ReplicationConfigOverrides;
-import java.io.IOException;
-import java.util.List;
-import org.eclipse.jgit.lib.Config;
-
-/** Public API to update replication plugin remotes configurations programmatically. */
-@Singleton
-@UsedAt(PLUGIN_GITHUB)
-public class ReplicationRemotesUpdater {
-
- private final SecureStore secureStore;
- private final Provider<ConfigResource> baseConfigProvider;
- private final DynamicItem<ReplicationConfigOverrides> configOverridesItem;
-
- @Inject
- ReplicationRemotesUpdater(
- SecureStore secureStore,
- Provider<ConfigResource> baseConfigProvider,
- @Nullable DynamicItem<ReplicationConfigOverrides> configOverridesItem) {
- this.secureStore = secureStore;
- this.baseConfigProvider = baseConfigProvider;
- this.configOverridesItem = configOverridesItem;
- }
-
- /**
- * Adds or updates the remote configuration for the replication plugin.
- *
- * <p>Provided JGit {@link Config} object should contain at least one named <em>remote</em>
- * section. All other configurations will be ignored.
- *
- * <p>NOTE: The {@code remote.$name.password} will be stored using {@link SecureStore}.
- *
- * @param remoteConfig remotes to add or update
- * @throws IOException when persisting fails
- */
- public void update(Config remoteConfig) throws IOException {
- if (remoteConfig.getSubsections("remote").isEmpty()) {
- throw new IllegalArgumentException(
- "configuration update must have at least one 'remote' section");
- }
-
- SeparatedRemoteConfigs configs = onlyRemoteSectionsWithSeparatedPasswords(remoteConfig);
- persistRemotesPasswords(configs);
-
- if (hasConfigOverrides()) {
- configOverridesItem.get().update(configs.remotes);
- } else {
- baseConfigProvider.get().update(configs.remotes);
- }
- }
-
- private SeparatedRemoteConfigs onlyRemoteSectionsWithSeparatedPasswords(Config configUpdates) {
- SeparatedRemoteConfigs configs = new SeparatedRemoteConfigs();
- for (String subSection : configUpdates.getSubsections("remote")) {
- for (String name : configUpdates.getNames("remote", subSection)) {
- List<String> values = List.of(configUpdates.getStringList("remote", subSection, name));
- if ("password".equals(name)) {
- configs.passwords.setStringList("remote", subSection, "password", values);
- } else {
- configs.remotes.setStringList("remote", subSection, name, values);
- }
- }
- }
-
- return configs;
- }
-
- private void persistRemotesPasswords(SeparatedRemoteConfigs configs) {
- for (String subSection : configs.passwords.getSubsections("remote")) {
- List<String> values =
- List.of(configs.passwords.getStringList("remote", subSection, "password"));
- secureStore.setList("remote", subSection, "password", values);
- }
- }
-
- private boolean hasConfigOverrides() {
- return configOverridesItem != null && configOverridesItem.get() != null;
- }
-
- private static class SeparatedRemoteConfigs {
- private final Config remotes = new Config();
- private final Config passwords = new Config();
- }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/api/ConfigResource.java b/src/main/java/com/googlesource/gerrit/plugins/replication/api/ConfigResource.java
index 68d59f6..8babd01 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/api/ConfigResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/api/ConfigResource.java
@@ -14,7 +14,6 @@
package com.googlesource.gerrit.plugins.replication.api;
-import java.io.IOException;
import org.eclipse.jgit.lib.Config;
/**
@@ -38,16 +37,6 @@ public interface ConfigResource {
Config getConfig();
/**
- * Update the configuration resource.
- *
- * <p>Allows to persist changes to the configuration resource.
- *
- * @param config updated configuration
- * @throws IOException when configuration cannot be persisted
- */
- void update(Config config) throws IOException;
-
- /**
* Current logical version string of the current configuration loaded in memory, depending on the
* actual implementation of the configuration on the persistent storage.
*