summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2016-02-01 11:09:52 +0900
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2016-02-01 11:12:00 +0900
commitb4584ad31125a13649de9a953bd931364fd5ae0b (patch)
treebc50680ad4290252866f374b99b4369886980ac1
parent8723423376077a0f71499006f8d1524f49a53c81 (diff)
parent85685f618eecf41bc0bc3a65bc1c849b96bca4e8 (diff)
Merge branch 'stable-2.11' into stable-2.12v2.12.2v2.12.1
* stable-2.11: Fetch parent groups of the authGroups Change-Id: I9fdfccadcd14fb707676abeaedaa8a2a7455a55b
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java12
-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.java8
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 2c946a5..2743549 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/AutoReloadConfigDecorator.java
@@ -16,6 +16,7 @@ package com.googlesource.gerrit.plugins.replication;
import com.google.gerrit.common.FileUtil;
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;
@@ -45,13 +46,15 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
private final GroupBackend groupBackend;
private final WorkQueue workQueue;
private final ReplicationStateListener stateLog;
+ private final GroupIncludeCache groupIncludeCache;
@Inject
public AutoReloadConfigDecorator(Injector injector, SitePaths site,
RemoteSiteUser.Factory ruf, PluginUser pu,
GitRepositoryManager grm, GroupBackend gb,
WorkQueue workQueue,
- ReplicationStateListener stateLog) throws ConfigInvalidException,
+ ReplicationStateListener stateLog,
+ GroupIncludeCache groupIncludeCache) throws ConfigInvalidException,
IOException {
this.injector = injector;
this.site = site;
@@ -59,6 +62,7 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
this.pluginUser = pu;
this.gitRepositoryManager = grm;
this.groupBackend = gb;
+ this.groupIncludeCache = groupIncludeCache;
this.currentConfig = loadConfig();
this.currentConfigTs = getLastModified(currentConfig);
this.workQueue = workQueue;
@@ -71,9 +75,9 @@ public class AutoReloadConfigDecorator implements ReplicationConfig {
private ReplicationFileBasedConfig loadConfig()
throws ConfigInvalidException, IOException {
- return new ReplicationFileBasedConfig(injector, site,
- remoteSiteUserFactory, pluginUser, gitRepositoryManager,
- groupBackend, stateLog);
+ return new ReplicationFileBasedConfig(injector, site, remoteSiteUserFactory,
+ pluginUser, gitRepositoryManager, groupBackend, stateLog,
+ 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 8744284..e267da3 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.extensions.config.FactoryModule;
@@ -28,6 +29,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.RequestScopedReviewDbProvider;
@@ -103,7 +105,8 @@ class Destination {
final PluginUser pluginUser,
final GitRepositoryManager gitRepositoryManager,
final GroupBackend groupBackend,
- final ReplicationStateListener stateLog) {
+ final ReplicationStateListener stateLog,
+ final GroupIncludeCache groupIncludeCache) {
remote = rc;
gitManager = gitRepositoryManager;
this.stateLog = stateLog;
@@ -136,6 +139,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));
@@ -188,6 +192,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 1486f1b..f7dc733 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;
@@ -56,14 +57,17 @@ public class ReplicationFileBasedConfig implements ReplicationConfig {
private final GroupBackend groupBackend;
private final FileBasedConfig config;
private final ReplicationStateListener stateLog;
+ 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,
- final ReplicationStateListener stateLog) throws ConfigInvalidException, IOException {
+ final ReplicationStateListener stateLog,
+ final GroupIncludeCache groupIncludeCache) throws ConfigInvalidException, IOException {
this.cfgPath = site.etc_dir.resolve("replication.config");
+ this.groupIncludeCache = groupIncludeCache;
this.injector = injector;
this.replicationUserFactory = ruf;
this.pluginUser = pu;
@@ -162,7 +166,7 @@ public class ReplicationFileBasedConfig implements ReplicationConfig {
Destination destination =
new Destination(injector, c, config, replicationUserFactory,
- pluginUser, gitRepositoryManager, groupBackend, stateLog);
+ pluginUser, gitRepositoryManager, groupBackend, stateLog, groupIncludeCache);
if (!destination.isSingleProjectMatch()) {
for (URIish u : c.getURIs()) {