summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2016-01-29 00:33:55 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-01-29 00:33:55 +0000
commit85685f618eecf41bc0bc3a65bc1c849b96bca4e8 (patch)
tree81d45b5c959a0a36ce819ccfc7cde13bfa43a44d
parent154fc97697f6a3caacc0b25d68bad96a5b0afcdf (diff)
parent333a1e5c3fe1d8e187ddb93ccb18e564b1f3e8a3 (diff)
Merge "Fetch parent groups of the authGroups" into stable-2.11v2.11.9v2.11.8v2.11.7v2.11.6v2.11.12v2.11.11v2.11.10upstream/stable-2.11
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java11
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java17
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java9
3 files changed, 30 insertions, 7 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
index 62cad2c..14db7a3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
@@ -15,6 +15,7 @@ package com.googlesource.gerrit.plugins.replication;
import com.google.gerrit.server.PluginUser;
import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.GroupIncludeCache;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.WorkQueue;
@@ -43,12 +44,14 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
private final GitRepositoryManager gitRepositoryManager;
private final GroupBackend groupBackend;
private final WorkQueue workQueue;
+ private final GroupIncludeCache groupIncludeCache;
@Inject
public AutoReloadConfigDecorator(Injector injector, SitePaths site,
RemoteSiteUser.Factory ruf, PluginUser pu,
GitRepositoryManager grm, GroupBackend gb,
- WorkQueue workQueue) throws ConfigInvalidException,
+ WorkQueue workQueue,
+ GroupIncludeCache groupIncludeCache) throws ConfigInvalidException,
IOException {
this.injector = injector;
this.site = site;
@@ -56,6 +59,7 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
this.pluginUser = pu;
this.gitRepositoryManager = grm;
this.groupBackend = gb;
+ this.groupIncludeCache = groupIncludeCache;
this.currentConfig = loadConfig();
this.currentConfigTs = currentConfig.getCfgPath().lastModified();
this.workQueue = workQueue;
@@ -63,9 +67,8 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
private ReplicationFileBasedConfig loadConfig()
throws ConfigInvalidException, IOException {
- return new ReplicationFileBasedConfig(injector, site,
- remoteSiteUserFactory, pluginUser, gitRepositoryManager,
- groupBackend);
+ return new ReplicationFileBasedConfig(injector, site, remoteSiteUserFactory,
+ pluginUser, gitRepositoryManager, groupBackend, groupIncludeCache);
}
private synchronized boolean isAutoReload() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index dfeb174..544a285 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -17,6 +17,7 @@ package com.googlesource.gerrit.plugins.replication;
import com.google.common.base.MoreObjects;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.Lists;
import com.google.gerrit.common.data.GroupReference;
import com.google.gerrit.reviewdb.client.AccountGroup;
@@ -27,6 +28,7 @@ import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.PluginUser;
import com.google.gerrit.server.account.GroupBackend;
import com.google.gerrit.server.account.GroupBackends;
+import com.google.gerrit.server.account.GroupIncludeCache;
import com.google.gerrit.server.account.ListGroupMembership;
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.FactoryModule;
@@ -101,7 +103,8 @@ class Destination {
final RemoteSiteUser.Factory replicationUserFactory,
final PluginUser pluginUser,
final GitRepositoryManager gitRepositoryManager,
- final GroupBackend groupBackend) {
+ final GroupBackend groupBackend,
+ final GroupIncludeCache groupIncludeCache) {
remote = rc;
gitManager = gitRepositoryManager;
delay = Math.max(0,
@@ -131,6 +134,7 @@ class Destination {
GroupReference g = GroupBackends.findExactSuggestion(groupBackend, name);
if (g != null) {
builder.add(g.getUUID());
+ addRecursiveParents(g.getUUID(), builder, groupIncludeCache);
} else {
repLog.warn(String.format(
"Group \"%s\" not recognized, removing from authGroup", name));
@@ -183,6 +187,17 @@ class Destination {
threadScoper = child.getInstance(PerThreadRequestScope.Scoper.class);
}
+ private void addRecursiveParents(AccountGroup.UUID g,
+ Builder<AccountGroup.UUID> builder, GroupIncludeCache groupIncludeCache) {
+ for (AccountGroup.UUID p : groupIncludeCache.parentGroupsOf(g)) {
+ if (builder.build().contains(p)) {
+ continue;
+ }
+ builder.add(p);
+ addRecursiveParents(p, builder, groupIncludeCache);
+ }
+ }
+
void start(WorkQueue workQueue) {
pool = workQueue.createQueue(poolThreads, poolName);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
index f56185d..e796c9f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.gerrit.server.PluginUser;
import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.GroupIncludeCache;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.WorkQueue;
@@ -55,13 +56,17 @@ public class ReplicationFileBasedConfig implements ReplicationConfig {
private final GitRepositoryManager gitRepositoryManager;
private final GroupBackend groupBackend;
private final FileBasedConfig config;
+ private final GroupIncludeCache groupIncludeCache;
@Inject
public ReplicationFileBasedConfig(final Injector injector, final SitePaths site,
final RemoteSiteUser.Factory ruf, final PluginUser pu,
final GitRepositoryManager grm,
- final GroupBackend gb) throws ConfigInvalidException, IOException {
+ final GroupBackend gb,
+ final GroupIncludeCache groupIncludeCache) throws ConfigInvalidException,
+ IOException {
this.cfgPath = new File(site.etc_dir, "replication.config");
+ this.groupIncludeCache = groupIncludeCache;
this.injector = injector;
this.replicationUserFactory = ruf;
this.pluginUser = pu;
@@ -159,7 +164,7 @@ public class ReplicationFileBasedConfig implements ReplicationConfig {
Destination destination =
new Destination(injector, c, config, replicationUserFactory,
- pluginUser, gitRepositoryManager, groupBackend);
+ pluginUser, gitRepositoryManager, groupBackend, groupIncludeCache);
if (!destination.isSingleProjectMatch()) {
for (URIish u : c.getURIs()) {