Use contains() from containsAnyOf() for single groups
Backend implementations might optimize contains() differently than containsAnyOf(). In the universal backend forward a single group lookup to contains(), allowing the implementation to always use the best method for the current call. Change-Id: I4673f62f4cc1d67746059964b8d47fefcccce976
This commit is contained in:
		| @@ -18,6 +18,7 @@ import static com.google.gerrit.server.account.GroupBackends.GROUP_REF_NAME_COMP | |||||||
|  |  | ||||||
| import com.google.common.collect.ArrayListMultimap; | import com.google.common.collect.ArrayListMultimap; | ||||||
| import com.google.common.collect.ImmutableMap; | import com.google.common.collect.ImmutableMap; | ||||||
|  | import com.google.common.collect.Iterables; | ||||||
| import com.google.common.collect.Multimap; | import com.google.common.collect.Multimap; | ||||||
| import com.google.common.collect.Sets; | import com.google.common.collect.Sets; | ||||||
| import com.google.gerrit.common.data.GroupDescription; | import com.google.gerrit.common.data.GroupDescription; | ||||||
| @@ -128,26 +129,32 @@ public class UniversalGroupBackend implements GroupBackend { | |||||||
|      return m.contains(uuid); |      return m.contains(uuid); | ||||||
|    } |    } | ||||||
|  |  | ||||||
|    @Override |     @Override | ||||||
|    public boolean containsAnyOf(Iterable<AccountGroup.UUID> uuids) { |     public boolean containsAnyOf(Iterable<AccountGroup.UUID> uuids) { | ||||||
|      Multimap<GroupMembership, AccountGroup.UUID> lookups = |       Multimap<GroupMembership, AccountGroup.UUID> lookups = | ||||||
|          ArrayListMultimap.create(); |           ArrayListMultimap.create(); | ||||||
|      for (AccountGroup.UUID uuid : uuids) { |       for (AccountGroup.UUID uuid : uuids) { | ||||||
|        GroupMembership m = membership(uuid); |         GroupMembership m = membership(uuid); | ||||||
|        if (m == null) { |         if (m == null) { | ||||||
|          log.warn("Unknown GroupMembership for UUID: " + uuid); |           log.warn("Unknown GroupMembership for UUID: " + uuid); | ||||||
|          continue; |           continue; | ||||||
|        } |         } | ||||||
|        lookups.put(m, uuid); |         lookups.put(m, uuid); | ||||||
|      } |       } | ||||||
|      for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry : |       for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry | ||||||
|           lookups.asMap().entrySet()) { |           : lookups .asMap().entrySet()) { | ||||||
|        if (entry.getKey().containsAnyOf(entry.getValue())) { |         GroupMembership m = entry.getKey(); | ||||||
|          return true; |         Collection<AccountGroup.UUID> ids = entry.getValue(); | ||||||
|        } |         if (ids.size() == 1) { | ||||||
|      } |           if (m.contains(Iterables.getOnlyElement(ids))) { | ||||||
|      return false; |             return true; | ||||||
|    } |           } | ||||||
|  |         } else if (m.containsAnyOf(ids)) { | ||||||
|  |           return true; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|    @Override |    @Override | ||||||
|    public Set<AccountGroup.UUID> getKnownGroups() { |    public Set<AccountGroup.UUID> getKnownGroups() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Shawn Pearce
					Shawn Pearce