Committed by
Gerrit Code Review
ONOS-3552 Do not return group information when a device is unavailable
Change-Id: I84753bf95c47bbebb3156474c03c2860c51ecb4e
Showing
2 changed files
with
22 additions
and
7 deletions
| ... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
| 16 | package org.onosproject.store.group.impl; | 16 | package org.onosproject.store.group.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.FluentIterable; | 18 | import com.google.common.collect.FluentIterable; |
| 19 | +import com.google.common.collect.ImmutableSet; | ||
| 19 | import com.google.common.collect.Iterables; | 20 | import com.google.common.collect.Iterables; |
| 20 | import com.google.common.collect.Sets; | 21 | import com.google.common.collect.Sets; |
| 21 | 22 | ||
| ... | @@ -28,6 +29,7 @@ import org.apache.felix.scr.annotations.Service; | ... | @@ -28,6 +29,7 @@ import org.apache.felix.scr.annotations.Service; |
| 28 | import org.onlab.util.KryoNamespace; | 29 | import org.onlab.util.KryoNamespace; |
| 29 | import org.onlab.util.NewConcurrentHashMap; | 30 | import org.onlab.util.NewConcurrentHashMap; |
| 30 | import org.onosproject.cluster.ClusterService; | 31 | import org.onosproject.cluster.ClusterService; |
| 32 | +import org.onosproject.cluster.NodeId; | ||
| 31 | import org.onosproject.core.DefaultGroupId; | 33 | import org.onosproject.core.DefaultGroupId; |
| 32 | import org.onosproject.core.GroupId; | 34 | import org.onosproject.core.GroupId; |
| 33 | import org.onosproject.mastership.MastershipService; | 35 | import org.onosproject.mastership.MastershipService; |
| ... | @@ -63,6 +65,7 @@ import org.slf4j.Logger; | ... | @@ -63,6 +65,7 @@ import org.slf4j.Logger; |
| 63 | 65 | ||
| 64 | import java.util.ArrayList; | 66 | import java.util.ArrayList; |
| 65 | import java.util.Collection; | 67 | import java.util.Collection; |
| 68 | +import java.util.Collections; | ||
| 66 | import java.util.HashMap; | 69 | import java.util.HashMap; |
| 67 | import java.util.Iterator; | 70 | import java.util.Iterator; |
| 68 | import java.util.List; | 71 | import java.util.List; |
| ... | @@ -276,16 +279,22 @@ public class DistributedGroupStore | ... | @@ -276,16 +279,22 @@ public class DistributedGroupStore |
| 276 | */ | 279 | */ |
| 277 | @Override | 280 | @Override |
| 278 | public Iterable<Group> getGroups(DeviceId deviceId) { | 281 | public Iterable<Group> getGroups(DeviceId deviceId) { |
| 279 | - // flatten and make iterator unmodifiable | 282 | + // Let ImmutableSet.copyOf do the type conversion |
| 280 | - return FluentIterable.from(getGroupStoreKeyMap().values()) | 283 | + return ImmutableSet.copyOf(getStoredGroups(deviceId)); |
| 281 | - .filter(input -> input.deviceId().equals(deviceId)) | ||
| 282 | - .transform(input -> input); | ||
| 283 | } | 284 | } |
| 284 | 285 | ||
| 285 | private Iterable<StoredGroupEntry> getStoredGroups(DeviceId deviceId) { | 286 | private Iterable<StoredGroupEntry> getStoredGroups(DeviceId deviceId) { |
| 286 | - // flatten and make iterator unmodifiable | 287 | + NodeId master = mastershipService.getMasterFor(deviceId); |
| 287 | - return FluentIterable.from(getGroupStoreKeyMap().values()) | 288 | + if (master == null) { |
| 288 | - .filter(input -> input.deviceId().equals(deviceId)); | 289 | + log.debug("Failed to getGroups: No master for {}", deviceId); |
| 290 | + return Collections.emptySet(); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + Set<StoredGroupEntry> storedGroups = getGroupStoreKeyMap().values() | ||
| 294 | + .stream() | ||
| 295 | + .filter(input -> input.deviceId().equals(deviceId)) | ||
| 296 | + .collect(Collectors.toSet()); | ||
| 297 | + return ImmutableSet.copyOf(storedGroups); | ||
| 289 | } | 298 | } |
| 290 | 299 | ||
| 291 | /** | 300 | /** | ... | ... |
| ... | @@ -23,6 +23,7 @@ import org.junit.After; | ... | @@ -23,6 +23,7 @@ import org.junit.After; |
| 23 | import org.junit.Before; | 23 | import org.junit.Before; |
| 24 | import org.junit.Test; | 24 | import org.junit.Test; |
| 25 | import org.onlab.junit.TestUtils; | 25 | import org.onlab.junit.TestUtils; |
| 26 | +import org.onosproject.cluster.NodeId; | ||
| 26 | import org.onosproject.core.DefaultGroupId; | 27 | import org.onosproject.core.DefaultGroupId; |
| 27 | import org.onosproject.core.GroupId; | 28 | import org.onosproject.core.GroupId; |
| 28 | import org.onosproject.mastership.MastershipServiceAdapter; | 29 | import org.onosproject.mastership.MastershipServiceAdapter; |
| ... | @@ -106,6 +107,11 @@ public class DistributedGroupStoreTest { | ... | @@ -106,6 +107,11 @@ public class DistributedGroupStoreTest { |
| 106 | public MastershipRole getLocalRole(DeviceId deviceId) { | 107 | public MastershipRole getLocalRole(DeviceId deviceId) { |
| 107 | return MastershipRole.MASTER; | 108 | return MastershipRole.MASTER; |
| 108 | } | 109 | } |
| 110 | + | ||
| 111 | + @Override | ||
| 112 | + public NodeId getMasterFor(DeviceId deviceId) { | ||
| 113 | + return new NodeId("foo"); | ||
| 114 | + } | ||
| 109 | } | 115 | } |
| 110 | 116 | ||
| 111 | @Before | 117 | @Before | ... | ... |
-
Please register or login to post a comment