Committed by
Gerrit Code Review
Construct GraphDescription with online/active Device/Link only
Change-Id: I9312c0c8ae190bf0200bd040823b6f7a3e7a15e1
Showing
15 changed files
with
130 additions
and
9 deletions
| ... | @@ -44,6 +44,14 @@ public interface DeviceService { | ... | @@ -44,6 +44,14 @@ public interface DeviceService { |
| 44 | Iterable<Device> getDevices(); | 44 | Iterable<Device> getDevices(); |
| 45 | 45 | ||
| 46 | /** | 46 | /** |
| 47 | + * Returns an iterable collection of all devices | ||
| 48 | + * currently available to the system. | ||
| 49 | + * | ||
| 50 | + * @return device collection | ||
| 51 | + */ | ||
| 52 | + Iterable<Device> getAvailableDevices(); | ||
| 53 | + | ||
| 54 | + /** | ||
| 47 | * Returns the device with the specified identifier. | 55 | * Returns the device with the specified identifier. |
| 48 | * | 56 | * |
| 49 | * @param deviceId device identifier | 57 | * @param deviceId device identifier | ... | ... |
| ... | @@ -44,6 +44,15 @@ public interface DeviceStore extends Store<DeviceEvent, DeviceStoreDelegate> { | ... | @@ -44,6 +44,15 @@ public interface DeviceStore extends Store<DeviceEvent, DeviceStoreDelegate> { |
| 44 | Iterable<Device> getDevices(); | 44 | Iterable<Device> getDevices(); |
| 45 | 45 | ||
| 46 | /** | 46 | /** |
| 47 | + * Returns an iterable collection of all devices currently available to the system. | ||
| 48 | + * | ||
| 49 | + * @return device collection | ||
| 50 | + */ | ||
| 51 | + Iterable<Device> getAvailableDevices(); | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + | ||
| 55 | + /** | ||
| 47 | * Returns the device with the specified identifier. | 56 | * Returns the device with the specified identifier. |
| 48 | * | 57 | * |
| 49 | * @param deviceId device identifier | 58 | * @param deviceId device identifier | ... | ... |
| ... | @@ -41,6 +41,13 @@ public interface LinkService { | ... | @@ -41,6 +41,13 @@ public interface LinkService { |
| 41 | Iterable<Link> getLinks(); | 41 | Iterable<Link> getLinks(); |
| 42 | 42 | ||
| 43 | /** | 43 | /** |
| 44 | + * Returns a collection of all active infrastructure links. | ||
| 45 | + * | ||
| 46 | + * @return all infrastructure links | ||
| 47 | + */ | ||
| 48 | + Iterable<Link> getActiveLinks(); | ||
| 49 | + | ||
| 50 | + /** | ||
| 44 | * Returns set of all infrastructure links leading to and from the | 51 | * Returns set of all infrastructure links leading to and from the |
| 45 | * specified device. | 52 | * specified device. |
| 46 | * | 53 | * | ... | ... |
| ... | @@ -21,6 +21,9 @@ import org.onlab.onos.net.MastershipRole; | ... | @@ -21,6 +21,9 @@ import org.onlab.onos.net.MastershipRole; |
| 21 | import org.onlab.onos.net.Port; | 21 | import org.onlab.onos.net.Port; |
| 22 | import org.onlab.onos.net.PortNumber; | 22 | import org.onlab.onos.net.PortNumber; |
| 23 | 23 | ||
| 24 | +import com.google.common.base.Predicate; | ||
| 25 | +import com.google.common.collect.FluentIterable; | ||
| 26 | + | ||
| 24 | import java.util.List; | 27 | import java.util.List; |
| 25 | 28 | ||
| 26 | /** | 29 | /** |
| ... | @@ -38,6 +41,18 @@ public class DeviceServiceAdapter implements DeviceService { | ... | @@ -38,6 +41,18 @@ public class DeviceServiceAdapter implements DeviceService { |
| 38 | } | 41 | } |
| 39 | 42 | ||
| 40 | @Override | 43 | @Override |
| 44 | + public Iterable<Device> getAvailableDevices() { | ||
| 45 | + return FluentIterable.from(getDevices()) | ||
| 46 | + .filter(new Predicate<Device>() { | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + public boolean apply(Device input) { | ||
| 50 | + return isAvailable(input.id()); | ||
| 51 | + } | ||
| 52 | + }); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @Override | ||
| 41 | public Device getDevice(DeviceId deviceId) { | 56 | public Device getDevice(DeviceId deviceId) { |
| 42 | return null; | 57 | return null; |
| 43 | } | 58 | } | ... | ... |
| ... | @@ -20,6 +20,10 @@ import java.util.Set; | ... | @@ -20,6 +20,10 @@ import java.util.Set; |
| 20 | import org.onlab.onos.net.ConnectPoint; | 20 | import org.onlab.onos.net.ConnectPoint; |
| 21 | import org.onlab.onos.net.DeviceId; | 21 | import org.onlab.onos.net.DeviceId; |
| 22 | import org.onlab.onos.net.Link; | 22 | import org.onlab.onos.net.Link; |
| 23 | +import org.onlab.onos.net.Link.State; | ||
| 24 | + | ||
| 25 | +import com.google.common.base.Predicate; | ||
| 26 | +import com.google.common.collect.FluentIterable; | ||
| 23 | 27 | ||
| 24 | /** | 28 | /** |
| 25 | * Test adapter for link service. | 29 | * Test adapter for link service. |
| ... | @@ -36,6 +40,18 @@ public class LinkServiceAdapter implements LinkService { | ... | @@ -36,6 +40,18 @@ public class LinkServiceAdapter implements LinkService { |
| 36 | } | 40 | } |
| 37 | 41 | ||
| 38 | @Override | 42 | @Override |
| 43 | + public Iterable<Link> getActiveLinks() { | ||
| 44 | + return FluentIterable.from(getLinks()) | ||
| 45 | + .filter(new Predicate<Link>() { | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public boolean apply(Link input) { | ||
| 49 | + return input.state() == State.ACTIVE; | ||
| 50 | + } | ||
| 51 | + }); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 39 | public Set<Link> getDeviceLinks(DeviceId deviceId) { | 55 | public Set<Link> getDeviceLinks(DeviceId deviceId) { |
| 40 | return null; | 56 | return null; |
| 41 | } | 57 | } | ... | ... |
| ... | @@ -149,6 +149,11 @@ public class DeviceManager | ... | @@ -149,6 +149,11 @@ public class DeviceManager |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | @Override | 151 | @Override |
| 152 | + public Iterable<Device> getAvailableDevices() { | ||
| 153 | + return store.getAvailableDevices(); | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + @Override | ||
| 152 | public Device getDevice(DeviceId deviceId) { | 157 | public Device getDevice(DeviceId deviceId) { |
| 153 | checkNotNull(deviceId, DEVICE_ID_NULL); | 158 | checkNotNull(deviceId, DEVICE_ID_NULL); |
| 154 | return store.getDevice(deviceId); | 159 | return store.getDevice(deviceId); | ... | ... |
| ... | @@ -31,6 +31,7 @@ import org.onlab.onos.event.EventDeliveryService; | ... | @@ -31,6 +31,7 @@ import org.onlab.onos.event.EventDeliveryService; |
| 31 | import org.onlab.onos.net.ConnectPoint; | 31 | import org.onlab.onos.net.ConnectPoint; |
| 32 | import org.onlab.onos.net.DeviceId; | 32 | import org.onlab.onos.net.DeviceId; |
| 33 | import org.onlab.onos.net.Link; | 33 | import org.onlab.onos.net.Link; |
| 34 | +import org.onlab.onos.net.Link.State; | ||
| 34 | import org.onlab.onos.net.MastershipRole; | 35 | import org.onlab.onos.net.MastershipRole; |
| 35 | import org.onlab.onos.net.device.DeviceEvent; | 36 | import org.onlab.onos.net.device.DeviceEvent; |
| 36 | import org.onlab.onos.net.device.DeviceListener; | 37 | import org.onlab.onos.net.device.DeviceListener; |
| ... | @@ -49,6 +50,8 @@ import org.onlab.onos.net.provider.AbstractProviderRegistry; | ... | @@ -49,6 +50,8 @@ import org.onlab.onos.net.provider.AbstractProviderRegistry; |
| 49 | import org.onlab.onos.net.provider.AbstractProviderService; | 50 | import org.onlab.onos.net.provider.AbstractProviderService; |
| 50 | import org.slf4j.Logger; | 51 | import org.slf4j.Logger; |
| 51 | 52 | ||
| 53 | +import com.google.common.base.Predicate; | ||
| 54 | +import com.google.common.collect.FluentIterable; | ||
| 52 | import com.google.common.collect.Sets; | 55 | import com.google.common.collect.Sets; |
| 53 | 56 | ||
| 54 | /** | 57 | /** |
| ... | @@ -109,6 +112,18 @@ public class LinkManager | ... | @@ -109,6 +112,18 @@ public class LinkManager |
| 109 | } | 112 | } |
| 110 | 113 | ||
| 111 | @Override | 114 | @Override |
| 115 | + public Iterable<Link> getActiveLinks() { | ||
| 116 | + return FluentIterable.from(getLinks()) | ||
| 117 | + .filter(new Predicate<Link>() { | ||
| 118 | + | ||
| 119 | + @Override | ||
| 120 | + public boolean apply(Link input) { | ||
| 121 | + return input.state() == State.ACTIVE; | ||
| 122 | + } | ||
| 123 | + }); | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + @Override | ||
| 112 | public Set<Link> getDeviceLinks(DeviceId deviceId) { | 127 | public Set<Link> getDeviceLinks(DeviceId deviceId) { |
| 113 | checkNotNull(deviceId, DEVICE_ID_NULL); | 128 | checkNotNull(deviceId, DEVICE_ID_NULL); |
| 114 | return Sets.union(store.getDeviceEgressLinks(deviceId), | 129 | return Sets.union(store.getDeviceEgressLinks(deviceId), | ... | ... |
| ... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
| 16 | package org.onlab.onos.net.topology.impl; | 16 | package org.onlab.onos.net.topology.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.ImmutableList; | 18 | import com.google.common.collect.ImmutableList; |
| 19 | + | ||
| 19 | import org.apache.felix.scr.annotations.Activate; | 20 | import org.apache.felix.scr.annotations.Activate; |
| 20 | import org.apache.felix.scr.annotations.Component; | 21 | import org.apache.felix.scr.annotations.Component; |
| 21 | import org.apache.felix.scr.annotations.Deactivate; | 22 | import org.apache.felix.scr.annotations.Deactivate; |
| ... | @@ -209,8 +210,8 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -209,8 +210,8 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 209 | if (isStarted) { | 210 | if (isStarted) { |
| 210 | GraphDescription desc = | 211 | GraphDescription desc = |
| 211 | new DefaultGraphDescription(System.nanoTime(), | 212 | new DefaultGraphDescription(System.nanoTime(), |
| 212 | - deviceService.getDevices(), | 213 | + deviceService.getAvailableDevices(), |
| 213 | - linkService.getLinks()); | 214 | + linkService.getActiveLinks()); |
| 214 | providerService.topologyChanged(desc, reasons); | 215 | providerService.topologyChanged(desc, reasons); |
| 215 | } | 216 | } |
| 216 | } | 217 | } | ... | ... |
| ... | @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableMap; | ... | @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableMap; |
| 20 | import com.google.common.collect.Lists; | 20 | import com.google.common.collect.Lists; |
| 21 | import com.google.common.collect.Sets; | 21 | import com.google.common.collect.Sets; |
| 22 | import com.google.common.util.concurrent.ListenableFuture; | 22 | import com.google.common.util.concurrent.ListenableFuture; |
| 23 | + | ||
| 23 | import org.junit.After; | 24 | import org.junit.After; |
| 24 | import org.junit.Before; | 25 | import org.junit.Before; |
| 25 | import org.junit.Test; | 26 | import org.junit.Test; |
| ... | @@ -34,7 +35,7 @@ import org.onlab.onos.net.MastershipRole; | ... | @@ -34,7 +35,7 @@ import org.onlab.onos.net.MastershipRole; |
| 34 | import org.onlab.onos.net.Port; | 35 | import org.onlab.onos.net.Port; |
| 35 | import org.onlab.onos.net.PortNumber; | 36 | import org.onlab.onos.net.PortNumber; |
| 36 | import org.onlab.onos.net.device.DeviceListener; | 37 | import org.onlab.onos.net.device.DeviceListener; |
| 37 | -import org.onlab.onos.net.device.DeviceService; | 38 | +import org.onlab.onos.net.device.DeviceServiceAdapter; |
| 38 | import org.onlab.onos.net.flow.BatchOperation; | 39 | import org.onlab.onos.net.flow.BatchOperation; |
| 39 | import org.onlab.onos.net.flow.CompletedBatchOperation; | 40 | import org.onlab.onos.net.flow.CompletedBatchOperation; |
| 40 | import org.onlab.onos.net.flow.DefaultFlowEntry; | 41 | import org.onlab.onos.net.flow.DefaultFlowEntry; |
| ... | @@ -461,7 +462,7 @@ public class FlowRuleManagerTest { | ... | @@ -461,7 +462,7 @@ public class FlowRuleManagerTest { |
| 461 | } | 462 | } |
| 462 | } | 463 | } |
| 463 | 464 | ||
| 464 | - private static class TestDeviceService implements DeviceService { | 465 | + private static class TestDeviceService extends DeviceServiceAdapter { |
| 465 | 466 | ||
| 466 | @Override | 467 | @Override |
| 467 | public int getDeviceCount() { | 468 | public int getDeviceCount() { | ... | ... |
| ... | @@ -39,7 +39,7 @@ import org.onlab.onos.net.MastershipRole; | ... | @@ -39,7 +39,7 @@ import org.onlab.onos.net.MastershipRole; |
| 39 | import org.onlab.onos.net.Port; | 39 | import org.onlab.onos.net.Port; |
| 40 | import org.onlab.onos.net.PortNumber; | 40 | import org.onlab.onos.net.PortNumber; |
| 41 | import org.onlab.onos.net.device.DeviceListener; | 41 | import org.onlab.onos.net.device.DeviceListener; |
| 42 | -import org.onlab.onos.net.device.DeviceService; | 42 | +import org.onlab.onos.net.device.DeviceServiceAdapter; |
| 43 | import org.onlab.onos.net.flow.instructions.Instruction; | 43 | import org.onlab.onos.net.flow.instructions.Instruction; |
| 44 | import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction; | 44 | import org.onlab.onos.net.flow.instructions.Instructions.OutputInstruction; |
| 45 | import org.onlab.onos.net.host.HostProvider; | 45 | import org.onlab.onos.net.host.HostProvider; |
| ... | @@ -189,7 +189,7 @@ public class HostMonitorTest { | ... | @@ -189,7 +189,7 @@ public class HostMonitorTest { |
| 189 | } | 189 | } |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | - class TestDeviceService implements DeviceService { | 192 | + class TestDeviceService extends DeviceServiceAdapter { |
| 193 | 193 | ||
| 194 | List<Device> devices = Lists.newArrayList(); | 194 | List<Device> devices = Lists.newArrayList(); |
| 195 | Multimap<DeviceId, Port> devicePorts = HashMultimap.create(); | 195 | Multimap<DeviceId, Port> devicePorts = HashMultimap.create(); | ... | ... |
| ... | @@ -154,6 +154,11 @@ public class DefaultTopologyProviderTest { | ... | @@ -154,6 +154,11 @@ public class DefaultTopologyProviderTest { |
| 154 | device("e"), device("f")); | 154 | device("e"), device("f")); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | + @Override | ||
| 158 | + public Iterable<Device> getAvailableDevices() { | ||
| 159 | + return getDevices(); | ||
| 160 | + } | ||
| 161 | + | ||
| 157 | void post(DeviceEvent event) { | 162 | void post(DeviceEvent event) { |
| 158 | eventDispatcher.post(event); | 163 | eventDispatcher.post(event); |
| 159 | } | 164 | } |
| ... | @@ -174,6 +179,11 @@ public class DefaultTopologyProviderTest { | ... | @@ -174,6 +179,11 @@ public class DefaultTopologyProviderTest { |
| 174 | link("e", 1, "f", 1), link("f", 1, "e", 1)); | 179 | link("e", 1, "f", 1), link("f", 1, "e", 1)); |
| 175 | } | 180 | } |
| 176 | 181 | ||
| 182 | + @Override | ||
| 183 | + public Iterable<Link> getActiveLinks() { | ||
| 184 | + return getLinks(); | ||
| 185 | + } | ||
| 186 | + | ||
| 177 | void post(LinkEvent event) { | 187 | void post(LinkEvent event) { |
| 178 | eventDispatcher.post(event); | 188 | eventDispatcher.post(event); |
| 179 | } | 189 | } | ... | ... |
| ... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
| 16 | package org.onlab.onos.store.device.impl; | 16 | package org.onlab.onos.store.device.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.base.Function; | 18 | import com.google.common.base.Function; |
| 19 | +import com.google.common.base.Predicate; | ||
| 19 | import com.google.common.collect.FluentIterable; | 20 | import com.google.common.collect.FluentIterable; |
| 20 | import com.google.common.collect.ImmutableList; | 21 | import com.google.common.collect.ImmutableList; |
| 21 | import com.google.common.collect.Maps; | 22 | import com.google.common.collect.Maps; |
| ... | @@ -231,6 +232,18 @@ public class GossipDeviceStore | ... | @@ -231,6 +232,18 @@ public class GossipDeviceStore |
| 231 | } | 232 | } |
| 232 | 233 | ||
| 233 | @Override | 234 | @Override |
| 235 | + public Iterable<Device> getAvailableDevices() { | ||
| 236 | + return FluentIterable.from(getDevices()) | ||
| 237 | + .filter(new Predicate<Device>() { | ||
| 238 | + | ||
| 239 | + @Override | ||
| 240 | + public boolean apply(Device input) { | ||
| 241 | + return isAvailable(input.id()); | ||
| 242 | + } | ||
| 243 | + }); | ||
| 244 | + } | ||
| 245 | + | ||
| 246 | + @Override | ||
| 234 | public Device getDevice(DeviceId deviceId) { | 247 | public Device getDevice(DeviceId deviceId) { |
| 235 | return devices.get(deviceId); | 248 | return devices.get(deviceId); |
| 236 | } | 249 | } | ... | ... |
| ... | @@ -15,6 +15,7 @@ | ... | @@ -15,6 +15,7 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onlab.onos.store.trivial.impl; | 16 | package org.onlab.onos.store.trivial.impl; |
| 17 | 17 | ||
| 18 | +import com.google.common.base.Predicate; | ||
| 18 | import com.google.common.collect.FluentIterable; | 19 | import com.google.common.collect.FluentIterable; |
| 19 | import com.google.common.collect.ImmutableList; | 20 | import com.google.common.collect.ImmutableList; |
| 20 | import com.google.common.collect.Maps; | 21 | import com.google.common.collect.Maps; |
| ... | @@ -123,6 +124,18 @@ public class SimpleDeviceStore | ... | @@ -123,6 +124,18 @@ public class SimpleDeviceStore |
| 123 | } | 124 | } |
| 124 | 125 | ||
| 125 | @Override | 126 | @Override |
| 127 | + public Iterable<Device> getAvailableDevices() { | ||
| 128 | + return FluentIterable.from(getDevices()) | ||
| 129 | + .filter(new Predicate<Device>() { | ||
| 130 | + | ||
| 131 | + @Override | ||
| 132 | + public boolean apply(Device input) { | ||
| 133 | + return isAvailable(input.id()); | ||
| 134 | + } | ||
| 135 | + }); | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + @Override | ||
| 126 | public Device getDevice(DeviceId deviceId) { | 139 | public Device getDevice(DeviceId deviceId) { |
| 127 | return devices.get(deviceId); | 140 | return devices.get(deviceId); |
| 128 | } | 141 | } | ... | ... |
| ... | @@ -32,4 +32,12 @@ | ... | @@ -32,4 +32,12 @@ |
| 32 | 32 | ||
| 33 | <description>ONOS LLDP Link Discovery</description> | 33 | <description>ONOS LLDP Link Discovery</description> |
| 34 | 34 | ||
| 35 | + <dependencies> | ||
| 36 | + <dependency> | ||
| 37 | + <groupId>org.onlab.onos</groupId> | ||
| 38 | + <artifactId>onos-api</artifactId> | ||
| 39 | + <classifier>tests</classifier> | ||
| 40 | + <scope>test</scope> | ||
| 41 | + </dependency> | ||
| 42 | + </dependencies> | ||
| 35 | </project> | 43 | </project> | ... | ... |
| ... | @@ -37,7 +37,7 @@ import org.onlab.onos.net.Port; | ... | @@ -37,7 +37,7 @@ import org.onlab.onos.net.Port; |
| 37 | import org.onlab.onos.net.PortNumber; | 37 | import org.onlab.onos.net.PortNumber; |
| 38 | import org.onlab.onos.net.device.DeviceEvent; | 38 | import org.onlab.onos.net.device.DeviceEvent; |
| 39 | import org.onlab.onos.net.device.DeviceListener; | 39 | import org.onlab.onos.net.device.DeviceListener; |
| 40 | -import org.onlab.onos.net.device.DeviceService; | 40 | +import org.onlab.onos.net.device.DeviceServiceAdapter; |
| 41 | import org.onlab.onos.net.flow.TrafficTreatment; | 41 | import org.onlab.onos.net.flow.TrafficTreatment; |
| 42 | import org.onlab.onos.net.link.LinkDescription; | 42 | import org.onlab.onos.net.link.LinkDescription; |
| 43 | import org.onlab.onos.net.link.LinkProvider; | 43 | import org.onlab.onos.net.link.LinkProvider; |
| ... | @@ -376,7 +376,7 @@ public class LLDPLinkProviderTest { | ... | @@ -376,7 +376,7 @@ public class LLDPLinkProviderTest { |
| 376 | } | 376 | } |
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | - private class TestDeviceService implements DeviceService { | 379 | + private class TestDeviceService extends DeviceServiceAdapter { |
| 380 | 380 | ||
| 381 | private Map<DeviceId, Device> devices = new HashMap<>(); | 381 | private Map<DeviceId, Device> devices = new HashMap<>(); |
| 382 | private final ArrayListMultimap<DeviceId, Port> ports = | 382 | private final ArrayListMultimap<DeviceId, Port> ports = |
| ... | @@ -408,7 +408,7 @@ public class LLDPLinkProviderTest { | ... | @@ -408,7 +408,7 @@ public class LLDPLinkProviderTest { |
| 408 | 408 | ||
| 409 | @Override | 409 | @Override |
| 410 | public Iterable<Device> getDevices() { | 410 | public Iterable<Device> getDevices() { |
| 411 | - return Collections.EMPTY_LIST; | 411 | + return Collections.emptyList(); |
| 412 | } | 412 | } |
| 413 | 413 | ||
| 414 | @Override | 414 | @Override | ... | ... |
-
Please register or login to post a comment