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.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.gerrit.common.data.GroupDescription;
|
||||
@@ -128,26 +129,32 @@ public class UniversalGroupBackend implements GroupBackend {
|
||||
return m.contains(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAnyOf(Iterable<AccountGroup.UUID> uuids) {
|
||||
Multimap<GroupMembership, AccountGroup.UUID> lookups =
|
||||
ArrayListMultimap.create();
|
||||
for (AccountGroup.UUID uuid : uuids) {
|
||||
GroupMembership m = membership(uuid);
|
||||
if (m == null) {
|
||||
log.warn("Unknown GroupMembership for UUID: " + uuid);
|
||||
continue;
|
||||
}
|
||||
lookups.put(m, uuid);
|
||||
}
|
||||
for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry :
|
||||
lookups.asMap().entrySet()) {
|
||||
if (entry.getKey().containsAnyOf(entry.getValue())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean containsAnyOf(Iterable<AccountGroup.UUID> uuids) {
|
||||
Multimap<GroupMembership, AccountGroup.UUID> lookups =
|
||||
ArrayListMultimap.create();
|
||||
for (AccountGroup.UUID uuid : uuids) {
|
||||
GroupMembership m = membership(uuid);
|
||||
if (m == null) {
|
||||
log.warn("Unknown GroupMembership for UUID: " + uuid);
|
||||
continue;
|
||||
}
|
||||
lookups.put(m, uuid);
|
||||
}
|
||||
for (Map.Entry<GroupMembership, Collection<AccountGroup.UUID>> entry
|
||||
: lookups .asMap().entrySet()) {
|
||||
GroupMembership m = entry.getKey();
|
||||
Collection<AccountGroup.UUID> ids = entry.getValue();
|
||||
if (ids.size() == 1) {
|
||||
if (m.contains(Iterables.getOnlyElement(ids))) {
|
||||
return true;
|
||||
}
|
||||
} else if (m.containsAnyOf(ids)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<AccountGroup.UUID> getKnownGroups() {
|
||||
|
||||
Reference in New Issue
Block a user