remove Hazelcast based Device, Link, .. Store implementation bundle
Change-Id: I352ebaed2d51b51201a8f3abc609be7c793cc3be
Showing
13 changed files
with
0 additions
and
993 deletions
core/store/hz/net/pom.xml
deleted
100644 → 0
| 1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | -<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| 3 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 4 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
| 5 | - <modelVersion>4.0.0</modelVersion> | ||
| 6 | - | ||
| 7 | - <parent> | ||
| 8 | - <groupId>org.onlab.onos</groupId> | ||
| 9 | - <artifactId>onos-core-hz</artifactId> | ||
| 10 | - <version>1.0.0-SNAPSHOT</version> | ||
| 11 | - <relativePath>../pom.xml</relativePath> | ||
| 12 | - </parent> | ||
| 13 | - | ||
| 14 | - <artifactId>onos-core-hz-net</artifactId> | ||
| 15 | - <packaging>bundle</packaging> | ||
| 16 | - | ||
| 17 | - <description>ONOS Hazelcast based distributed store subsystems</description> | ||
| 18 | - | ||
| 19 | - <dependencies> | ||
| 20 | - <dependency> | ||
| 21 | - <groupId>org.onlab.onos</groupId> | ||
| 22 | - <artifactId>onos-api</artifactId> | ||
| 23 | - </dependency> | ||
| 24 | - <dependency> | ||
| 25 | - <groupId>org.onlab.onos</groupId> | ||
| 26 | - <artifactId>onos-core-hz-common</artifactId> | ||
| 27 | - <version>${project.version}</version> | ||
| 28 | - </dependency> | ||
| 29 | - <dependency> | ||
| 30 | - <groupId>org.onlab.onos</groupId> | ||
| 31 | - <artifactId>onos-core-hz-common</artifactId> | ||
| 32 | - <classifier>tests</classifier> | ||
| 33 | - <scope>test</scope> | ||
| 34 | - <version>${project.version}</version> | ||
| 35 | - </dependency> | ||
| 36 | - <dependency> | ||
| 37 | - <groupId>org.apache.felix</groupId> | ||
| 38 | - <artifactId>org.apache.felix.scr.annotations</artifactId> | ||
| 39 | - </dependency> | ||
| 40 | - <dependency> | ||
| 41 | - <groupId>com.hazelcast</groupId> | ||
| 42 | - <artifactId>hazelcast</artifactId> | ||
| 43 | - </dependency> | ||
| 44 | - </dependencies> | ||
| 45 | - | ||
| 46 | - <build> | ||
| 47 | - <plugins> | ||
| 48 | - <plugin> | ||
| 49 | - <groupId>org.apache.felix</groupId> | ||
| 50 | - <artifactId>maven-scr-plugin</artifactId> | ||
| 51 | - </plugin> | ||
| 52 | - </plugins> | ||
| 53 | - </build> | ||
| 54 | - | ||
| 55 | -</project> |
core/store/hz/net/src/main/java/org/onlab/onos/store/device/impl/DistributedDeviceStore.java
deleted
100644 → 0
This diff is collapsed. Click to expand it.
| 1 | -package org.onlab.onos.store.device.impl; | ||
| 2 | - | ||
| 3 | -import org.apache.felix.scr.annotations.Component; | ||
| 4 | -import org.apache.felix.scr.annotations.Service; | ||
| 5 | -import org.onlab.onos.mastership.MastershipTerm; | ||
| 6 | -import org.onlab.onos.net.DeviceId; | ||
| 7 | -import org.onlab.onos.net.device.DeviceClockProviderService; | ||
| 8 | - | ||
| 9 | -// FIXME: Code clone in onos-core-trivial, onos-core-hz-net | ||
| 10 | -/** | ||
| 11 | - * Dummy implementation of {@link DeviceClockProviderService}. | ||
| 12 | - */ | ||
| 13 | -@Component(immediate = true) | ||
| 14 | -@Service | ||
| 15 | -public class NoOpClockProviderService implements DeviceClockProviderService { | ||
| 16 | - | ||
| 17 | - @Override | ||
| 18 | - public void setMastershipTerm(DeviceId deviceId, MastershipTerm term) { | ||
| 19 | - } | ||
| 20 | -} |
core/store/hz/net/src/main/java/org/onlab/onos/store/flow/impl/DistributedFlowRuleStore.java
deleted
100644 → 0
| 1 | -package org.onlab.onos.store.flow.impl; | ||
| 2 | - | ||
| 3 | -import static org.onlab.onos.net.flow.FlowRuleEvent.Type.RULE_REMOVED; | ||
| 4 | -import static org.slf4j.LoggerFactory.getLogger; | ||
| 5 | - | ||
| 6 | -import java.util.Collection; | ||
| 7 | -import java.util.Collections; | ||
| 8 | - | ||
| 9 | -import org.apache.felix.scr.annotations.Activate; | ||
| 10 | -import org.apache.felix.scr.annotations.Component; | ||
| 11 | -import org.apache.felix.scr.annotations.Deactivate; | ||
| 12 | -import org.apache.felix.scr.annotations.Service; | ||
| 13 | -import org.onlab.onos.ApplicationId; | ||
| 14 | -import org.onlab.onos.net.DeviceId; | ||
| 15 | -import org.onlab.onos.net.flow.DefaultFlowEntry; | ||
| 16 | -import org.onlab.onos.net.flow.FlowEntry; | ||
| 17 | -import org.onlab.onos.net.flow.FlowEntry.FlowEntryState; | ||
| 18 | -import org.onlab.onos.net.flow.FlowRule; | ||
| 19 | -import org.onlab.onos.net.flow.FlowRuleEvent; | ||
| 20 | -import org.onlab.onos.net.flow.FlowRuleEvent.Type; | ||
| 21 | -import org.onlab.onos.net.flow.FlowRuleStore; | ||
| 22 | -import org.onlab.onos.net.flow.FlowRuleStoreDelegate; | ||
| 23 | -import org.onlab.onos.store.AbstractStore; | ||
| 24 | -import org.slf4j.Logger; | ||
| 25 | - | ||
| 26 | -import com.google.common.collect.ArrayListMultimap; | ||
| 27 | -import com.google.common.collect.ImmutableSet; | ||
| 28 | -import com.google.common.collect.Multimap; | ||
| 29 | - | ||
| 30 | -/** | ||
| 31 | - * Manages inventory of flow rules using trivial in-memory implementation. | ||
| 32 | - */ | ||
| 33 | -//FIXME I LIE. I AIN'T DISTRIBUTED | ||
| 34 | -@Component(immediate = true) | ||
| 35 | -@Service | ||
| 36 | -public class DistributedFlowRuleStore | ||
| 37 | - extends AbstractStore<FlowRuleEvent, FlowRuleStoreDelegate> | ||
| 38 | - implements FlowRuleStore { | ||
| 39 | - | ||
| 40 | - private final Logger log = getLogger(getClass()); | ||
| 41 | - | ||
| 42 | - // store entries as a pile of rules, no info about device tables | ||
| 43 | - private final Multimap<DeviceId, FlowEntry> flowEntries = | ||
| 44 | - ArrayListMultimap.<DeviceId, FlowEntry>create(); | ||
| 45 | - | ||
| 46 | - private final Multimap<Short, FlowRule> flowEntriesById = | ||
| 47 | - ArrayListMultimap.<Short, FlowRule>create(); | ||
| 48 | - | ||
| 49 | - @Activate | ||
| 50 | - public void activate() { | ||
| 51 | - log.info("Started"); | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - @Deactivate | ||
| 55 | - public void deactivate() { | ||
| 56 | - log.info("Stopped"); | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - | ||
| 60 | - @Override | ||
| 61 | - public int getFlowRuleCount() { | ||
| 62 | - return flowEntries.size(); | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - @Override | ||
| 66 | - public synchronized FlowEntry getFlowEntry(FlowRule rule) { | ||
| 67 | - for (FlowEntry f : flowEntries.get(rule.deviceId())) { | ||
| 68 | - if (f.equals(rule)) { | ||
| 69 | - return f; | ||
| 70 | - } | ||
| 71 | - } | ||
| 72 | - return null; | ||
| 73 | - } | ||
| 74 | - | ||
| 75 | - @Override | ||
| 76 | - public synchronized Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) { | ||
| 77 | - Collection<FlowEntry> rules = flowEntries.get(deviceId); | ||
| 78 | - if (rules == null) { | ||
| 79 | - return Collections.emptyList(); | ||
| 80 | - } | ||
| 81 | - return ImmutableSet.copyOf(rules); | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - @Override | ||
| 85 | - public synchronized Iterable<FlowRule> getFlowRulesByAppId(ApplicationId appId) { | ||
| 86 | - Collection<FlowRule> rules = flowEntriesById.get(appId.id()); | ||
| 87 | - if (rules == null) { | ||
| 88 | - return Collections.emptyList(); | ||
| 89 | - } | ||
| 90 | - return ImmutableSet.copyOf(rules); | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - @Override | ||
| 94 | - public synchronized void storeFlowRule(FlowRule rule) { | ||
| 95 | - FlowEntry f = new DefaultFlowEntry(rule); | ||
| 96 | - DeviceId did = f.deviceId(); | ||
| 97 | - if (!flowEntries.containsEntry(did, f)) { | ||
| 98 | - flowEntries.put(did, f); | ||
| 99 | - flowEntriesById.put(rule.appId(), f); | ||
| 100 | - } | ||
| 101 | - } | ||
| 102 | - | ||
| 103 | - @Override | ||
| 104 | - public synchronized void deleteFlowRule(FlowRule rule) { | ||
| 105 | - FlowEntry entry = getFlowEntry(rule); | ||
| 106 | - if (entry == null) { | ||
| 107 | - return; | ||
| 108 | - } | ||
| 109 | - entry.setState(FlowEntryState.PENDING_REMOVE); | ||
| 110 | - } | ||
| 111 | - | ||
| 112 | - @Override | ||
| 113 | - public synchronized FlowRuleEvent addOrUpdateFlowRule(FlowEntry rule) { | ||
| 114 | - DeviceId did = rule.deviceId(); | ||
| 115 | - | ||
| 116 | - // check if this new rule is an update to an existing entry | ||
| 117 | - FlowEntry stored = getFlowEntry(rule); | ||
| 118 | - if (stored != null) { | ||
| 119 | - stored.setBytes(rule.bytes()); | ||
| 120 | - stored.setLife(rule.life()); | ||
| 121 | - stored.setPackets(rule.packets()); | ||
| 122 | - if (stored.state() == FlowEntryState.PENDING_ADD) { | ||
| 123 | - stored.setState(FlowEntryState.ADDED); | ||
| 124 | - return new FlowRuleEvent(Type.RULE_ADDED, rule); | ||
| 125 | - } | ||
| 126 | - return new FlowRuleEvent(Type.RULE_UPDATED, rule); | ||
| 127 | - } | ||
| 128 | - | ||
| 129 | - flowEntries.put(did, rule); | ||
| 130 | - return null; | ||
| 131 | - } | ||
| 132 | - | ||
| 133 | - @Override | ||
| 134 | - public synchronized FlowRuleEvent removeFlowRule(FlowEntry rule) { | ||
| 135 | - // This is where one could mark a rule as removed and still keep it in the store. | ||
| 136 | - if (flowEntries.remove(rule.deviceId(), rule)) { | ||
| 137 | - return new FlowRuleEvent(RULE_REMOVED, rule); | ||
| 138 | - } else { | ||
| 139 | - return null; | ||
| 140 | - } | ||
| 141 | - } | ||
| 142 | -} |
core/store/hz/net/src/main/java/org/onlab/onos/store/host/impl/DistributedHostStore.java
deleted
100644 → 0
| 1 | -package org.onlab.onos.store.host.impl; | ||
| 2 | - | ||
| 3 | -import com.google.common.collect.HashMultimap; | ||
| 4 | -import com.google.common.collect.ImmutableSet; | ||
| 5 | -import com.google.common.collect.Multimap; | ||
| 6 | -import com.google.common.collect.Sets; | ||
| 7 | -import org.apache.felix.scr.annotations.Activate; | ||
| 8 | -import org.apache.felix.scr.annotations.Component; | ||
| 9 | -import org.apache.felix.scr.annotations.Deactivate; | ||
| 10 | -import org.apache.felix.scr.annotations.Service; | ||
| 11 | -import org.onlab.onos.net.Annotations; | ||
| 12 | -import org.onlab.onos.net.ConnectPoint; | ||
| 13 | -import org.onlab.onos.net.DefaultHost; | ||
| 14 | -import org.onlab.onos.net.DeviceId; | ||
| 15 | -import org.onlab.onos.net.Host; | ||
| 16 | -import org.onlab.onos.net.HostId; | ||
| 17 | -import org.onlab.onos.net.HostLocation; | ||
| 18 | -import org.onlab.onos.net.host.HostDescription; | ||
| 19 | -import org.onlab.onos.net.host.HostEvent; | ||
| 20 | -import org.onlab.onos.net.host.HostStore; | ||
| 21 | -import org.onlab.onos.net.host.HostStoreDelegate; | ||
| 22 | -import org.onlab.onos.net.host.PortAddresses; | ||
| 23 | -import org.onlab.onos.net.provider.ProviderId; | ||
| 24 | -import org.onlab.onos.store.AbstractStore; | ||
| 25 | -import org.onlab.packet.IpPrefix; | ||
| 26 | -import org.onlab.packet.MacAddress; | ||
| 27 | -import org.onlab.packet.VlanId; | ||
| 28 | -import org.slf4j.Logger; | ||
| 29 | - | ||
| 30 | -import java.util.HashSet; | ||
| 31 | -import java.util.Map; | ||
| 32 | -import java.util.Set; | ||
| 33 | -import java.util.concurrent.ConcurrentHashMap; | ||
| 34 | - | ||
| 35 | -import static org.onlab.onos.net.host.HostEvent.Type.*; | ||
| 36 | -import static org.slf4j.LoggerFactory.getLogger; | ||
| 37 | - | ||
| 38 | -/** | ||
| 39 | - * TEMPORARY: Manages inventory of end-station hosts using distributed | ||
| 40 | - * structures implementation. | ||
| 41 | - */ | ||
| 42 | -//FIXME: I LIE I AM NOT DISTRIBUTED | ||
| 43 | -@Component(immediate = true) | ||
| 44 | -@Service | ||
| 45 | -public class DistributedHostStore | ||
| 46 | - extends AbstractStore<HostEvent, HostStoreDelegate> | ||
| 47 | - implements HostStore { | ||
| 48 | - | ||
| 49 | - private final Logger log = getLogger(getClass()); | ||
| 50 | - | ||
| 51 | - // Host inventory | ||
| 52 | - private final Map<HostId, StoredHost> hosts = new ConcurrentHashMap<>(2000000, 0.75f, 16); | ||
| 53 | - | ||
| 54 | - // Hosts tracked by their location | ||
| 55 | - private final Multimap<ConnectPoint, Host> locations = HashMultimap.create(); | ||
| 56 | - | ||
| 57 | - private final Map<ConnectPoint, PortAddresses> portAddresses = | ||
| 58 | - new ConcurrentHashMap<>(); | ||
| 59 | - | ||
| 60 | - @Activate | ||
| 61 | - public void activate() { | ||
| 62 | - log.info("Started"); | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - @Deactivate | ||
| 66 | - public void deactivate() { | ||
| 67 | - log.info("Stopped"); | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - @Override | ||
| 71 | - public HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId, | ||
| 72 | - HostDescription hostDescription) { | ||
| 73 | - StoredHost host = hosts.get(hostId); | ||
| 74 | - if (host == null) { | ||
| 75 | - return createHost(providerId, hostId, hostDescription); | ||
| 76 | - } | ||
| 77 | - return updateHost(providerId, host, hostDescription); | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - // creates a new host and sends HOST_ADDED | ||
| 81 | - private HostEvent createHost(ProviderId providerId, HostId hostId, | ||
| 82 | - HostDescription descr) { | ||
| 83 | - StoredHost newhost = new StoredHost(providerId, hostId, | ||
| 84 | - descr.hwAddress(), | ||
| 85 | - descr.vlan(), | ||
| 86 | - descr.location(), | ||
| 87 | - ImmutableSet.copyOf(descr.ipAddress())); | ||
| 88 | - synchronized (this) { | ||
| 89 | - hosts.put(hostId, newhost); | ||
| 90 | - locations.put(descr.location(), newhost); | ||
| 91 | - } | ||
| 92 | - return new HostEvent(HOST_ADDED, newhost); | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - // checks for type of update to host, sends appropriate event | ||
| 96 | - private HostEvent updateHost(ProviderId providerId, StoredHost host, | ||
| 97 | - HostDescription descr) { | ||
| 98 | - HostEvent event; | ||
| 99 | - if (!host.location().equals(descr.location())) { | ||
| 100 | - host.setLocation(descr.location()); | ||
| 101 | - return new HostEvent(HOST_MOVED, host); | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - if (host.ipAddresses().containsAll(descr.ipAddress())) { | ||
| 105 | - return null; | ||
| 106 | - } | ||
| 107 | - | ||
| 108 | - Set<IpPrefix> addresses = new HashSet<>(host.ipAddresses()); | ||
| 109 | - addresses.addAll(descr.ipAddress()); | ||
| 110 | - StoredHost updated = new StoredHost(providerId, host.id(), | ||
| 111 | - host.mac(), host.vlan(), | ||
| 112 | - descr.location(), addresses); | ||
| 113 | - event = new HostEvent(HOST_UPDATED, updated); | ||
| 114 | - synchronized (this) { | ||
| 115 | - hosts.put(host.id(), updated); | ||
| 116 | - locations.remove(host.location(), host); | ||
| 117 | - locations.put(updated.location(), updated); | ||
| 118 | - } | ||
| 119 | - return event; | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - @Override | ||
| 123 | - public HostEvent removeHost(HostId hostId) { | ||
| 124 | - synchronized (this) { | ||
| 125 | - Host host = hosts.remove(hostId); | ||
| 126 | - if (host != null) { | ||
| 127 | - locations.remove((host.location()), host); | ||
| 128 | - return new HostEvent(HOST_REMOVED, host); | ||
| 129 | - } | ||
| 130 | - return null; | ||
| 131 | - } | ||
| 132 | - } | ||
| 133 | - | ||
| 134 | - @Override | ||
| 135 | - public int getHostCount() { | ||
| 136 | - return hosts.size(); | ||
| 137 | - } | ||
| 138 | - | ||
| 139 | - @Override | ||
| 140 | - public Iterable<Host> getHosts() { | ||
| 141 | - return ImmutableSet.<Host>copyOf(hosts.values()); | ||
| 142 | - } | ||
| 143 | - | ||
| 144 | - @Override | ||
| 145 | - public Host getHost(HostId hostId) { | ||
| 146 | - return hosts.get(hostId); | ||
| 147 | - } | ||
| 148 | - | ||
| 149 | - @Override | ||
| 150 | - public Set<Host> getHosts(VlanId vlanId) { | ||
| 151 | - Set<Host> vlanset = new HashSet<>(); | ||
| 152 | - for (Host h : hosts.values()) { | ||
| 153 | - if (h.vlan().equals(vlanId)) { | ||
| 154 | - vlanset.add(h); | ||
| 155 | - } | ||
| 156 | - } | ||
| 157 | - return vlanset; | ||
| 158 | - } | ||
| 159 | - | ||
| 160 | - @Override | ||
| 161 | - public Set<Host> getHosts(MacAddress mac) { | ||
| 162 | - Set<Host> macset = new HashSet<>(); | ||
| 163 | - for (Host h : hosts.values()) { | ||
| 164 | - if (h.mac().equals(mac)) { | ||
| 165 | - macset.add(h); | ||
| 166 | - } | ||
| 167 | - } | ||
| 168 | - return macset; | ||
| 169 | - } | ||
| 170 | - | ||
| 171 | - @Override | ||
| 172 | - public Set<Host> getHosts(IpPrefix ip) { | ||
| 173 | - Set<Host> ipset = new HashSet<>(); | ||
| 174 | - for (Host h : hosts.values()) { | ||
| 175 | - if (h.ipAddresses().contains(ip)) { | ||
| 176 | - ipset.add(h); | ||
| 177 | - } | ||
| 178 | - } | ||
| 179 | - return ipset; | ||
| 180 | - } | ||
| 181 | - | ||
| 182 | - @Override | ||
| 183 | - public Set<Host> getConnectedHosts(ConnectPoint connectPoint) { | ||
| 184 | - return ImmutableSet.copyOf(locations.get(connectPoint)); | ||
| 185 | - } | ||
| 186 | - | ||
| 187 | - @Override | ||
| 188 | - public Set<Host> getConnectedHosts(DeviceId deviceId) { | ||
| 189 | - Set<Host> hostset = new HashSet<>(); | ||
| 190 | - for (ConnectPoint p : locations.keySet()) { | ||
| 191 | - if (p.deviceId().equals(deviceId)) { | ||
| 192 | - hostset.addAll(locations.get(p)); | ||
| 193 | - } | ||
| 194 | - } | ||
| 195 | - return hostset; | ||
| 196 | - } | ||
| 197 | - | ||
| 198 | - @Override | ||
| 199 | - public void updateAddressBindings(PortAddresses addresses) { | ||
| 200 | - synchronized (portAddresses) { | ||
| 201 | - PortAddresses existing = portAddresses.get(addresses.connectPoint()); | ||
| 202 | - if (existing == null) { | ||
| 203 | - portAddresses.put(addresses.connectPoint(), addresses); | ||
| 204 | - } else { | ||
| 205 | - Set<IpPrefix> union = Sets.union(existing.ips(), addresses.ips()) | ||
| 206 | - .immutableCopy(); | ||
| 207 | - | ||
| 208 | - MacAddress newMac = (addresses.mac() == null) ? existing.mac() | ||
| 209 | - : addresses.mac(); | ||
| 210 | - | ||
| 211 | - PortAddresses newAddresses = | ||
| 212 | - new PortAddresses(addresses.connectPoint(), union, newMac); | ||
| 213 | - | ||
| 214 | - portAddresses.put(newAddresses.connectPoint(), newAddresses); | ||
| 215 | - } | ||
| 216 | - } | ||
| 217 | - } | ||
| 218 | - | ||
| 219 | - @Override | ||
| 220 | - public void removeAddressBindings(PortAddresses addresses) { | ||
| 221 | - synchronized (portAddresses) { | ||
| 222 | - PortAddresses existing = portAddresses.get(addresses.connectPoint()); | ||
| 223 | - if (existing != null) { | ||
| 224 | - Set<IpPrefix> difference = | ||
| 225 | - Sets.difference(existing.ips(), addresses.ips()).immutableCopy(); | ||
| 226 | - | ||
| 227 | - // If they removed the existing mac, set the new mac to null. | ||
| 228 | - // Otherwise, keep the existing mac. | ||
| 229 | - MacAddress newMac = existing.mac(); | ||
| 230 | - if (addresses.mac() != null && addresses.mac().equals(existing.mac())) { | ||
| 231 | - newMac = null; | ||
| 232 | - } | ||
| 233 | - | ||
| 234 | - PortAddresses newAddresses = | ||
| 235 | - new PortAddresses(addresses.connectPoint(), difference, newMac); | ||
| 236 | - | ||
| 237 | - portAddresses.put(newAddresses.connectPoint(), newAddresses); | ||
| 238 | - } | ||
| 239 | - } | ||
| 240 | - } | ||
| 241 | - | ||
| 242 | - @Override | ||
| 243 | - public void clearAddressBindings(ConnectPoint connectPoint) { | ||
| 244 | - synchronized (portAddresses) { | ||
| 245 | - portAddresses.remove(connectPoint); | ||
| 246 | - } | ||
| 247 | - } | ||
| 248 | - | ||
| 249 | - @Override | ||
| 250 | - public Set<PortAddresses> getAddressBindings() { | ||
| 251 | - synchronized (portAddresses) { | ||
| 252 | - return new HashSet<>(portAddresses.values()); | ||
| 253 | - } | ||
| 254 | - } | ||
| 255 | - | ||
| 256 | - @Override | ||
| 257 | - public PortAddresses getAddressBindingsForPort(ConnectPoint connectPoint) { | ||
| 258 | - PortAddresses addresses; | ||
| 259 | - | ||
| 260 | - synchronized (portAddresses) { | ||
| 261 | - addresses = portAddresses.get(connectPoint); | ||
| 262 | - } | ||
| 263 | - | ||
| 264 | - if (addresses == null) { | ||
| 265 | - addresses = new PortAddresses(connectPoint, null, null); | ||
| 266 | - } | ||
| 267 | - | ||
| 268 | - return addresses; | ||
| 269 | - } | ||
| 270 | - | ||
| 271 | - // Auxiliary extension to allow location to mutate. | ||
| 272 | - private class StoredHost extends DefaultHost { | ||
| 273 | - private HostLocation location; | ||
| 274 | - | ||
| 275 | - /** | ||
| 276 | - * Creates an end-station host using the supplied information. | ||
| 277 | - * | ||
| 278 | - * @param providerId provider identity | ||
| 279 | - * @param id host identifier | ||
| 280 | - * @param mac host MAC address | ||
| 281 | - * @param vlan host VLAN identifier | ||
| 282 | - * @param location host location | ||
| 283 | - * @param ips host IP addresses | ||
| 284 | - * @param annotations optional key/value annotations | ||
| 285 | - */ | ||
| 286 | - public StoredHost(ProviderId providerId, HostId id, | ||
| 287 | - MacAddress mac, VlanId vlan, HostLocation location, | ||
| 288 | - Set<IpPrefix> ips, Annotations... annotations) { | ||
| 289 | - super(providerId, id, mac, vlan, location, ips, annotations); | ||
| 290 | - this.location = location; | ||
| 291 | - } | ||
| 292 | - | ||
| 293 | - void setLocation(HostLocation location) { | ||
| 294 | - this.location = location; | ||
| 295 | - } | ||
| 296 | - | ||
| 297 | - @Override | ||
| 298 | - public HostLocation location() { | ||
| 299 | - return location; | ||
| 300 | - } | ||
| 301 | - } | ||
| 302 | -} |
core/store/hz/net/src/main/java/org/onlab/onos/store/link/impl/DistributedLinkStore.java
deleted
100644 → 0
| 1 | -package org.onlab.onos.store.link.impl; | ||
| 2 | - | ||
| 3 | -import static com.google.common.cache.CacheBuilder.newBuilder; | ||
| 4 | -import static org.onlab.onos.net.Link.Type.DIRECT; | ||
| 5 | -import static org.onlab.onos.net.Link.Type.INDIRECT; | ||
| 6 | -import static org.onlab.onos.net.LinkKey.linkKey; | ||
| 7 | -import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED; | ||
| 8 | -import static org.onlab.onos.net.link.LinkEvent.Type.LINK_REMOVED; | ||
| 9 | -import static org.onlab.onos.net.link.LinkEvent.Type.LINK_UPDATED; | ||
| 10 | -import static org.slf4j.LoggerFactory.getLogger; | ||
| 11 | - | ||
| 12 | -import java.util.HashSet; | ||
| 13 | -import java.util.Set; | ||
| 14 | - | ||
| 15 | -import org.apache.felix.scr.annotations.Activate; | ||
| 16 | -import org.apache.felix.scr.annotations.Component; | ||
| 17 | -import org.apache.felix.scr.annotations.Deactivate; | ||
| 18 | -import org.apache.felix.scr.annotations.Service; | ||
| 19 | -import org.onlab.onos.net.ConnectPoint; | ||
| 20 | -import org.onlab.onos.net.DefaultLink; | ||
| 21 | -import org.onlab.onos.net.DeviceId; | ||
| 22 | -import org.onlab.onos.net.Link; | ||
| 23 | -import org.onlab.onos.net.LinkKey; | ||
| 24 | -import org.onlab.onos.net.link.LinkDescription; | ||
| 25 | -import org.onlab.onos.net.link.LinkEvent; | ||
| 26 | -import org.onlab.onos.net.link.LinkStore; | ||
| 27 | -import org.onlab.onos.net.link.LinkStoreDelegate; | ||
| 28 | -import org.onlab.onos.net.provider.ProviderId; | ||
| 29 | -import org.onlab.onos.store.common.AbsentInvalidatingLoadingCache; | ||
| 30 | -import org.onlab.onos.store.common.AbstractHazelcastStore; | ||
| 31 | -import org.onlab.onos.store.common.OptionalCacheLoader; | ||
| 32 | -import org.slf4j.Logger; | ||
| 33 | - | ||
| 34 | -import com.google.common.base.Optional; | ||
| 35 | -import com.google.common.cache.LoadingCache; | ||
| 36 | -import com.google.common.collect.HashMultimap; | ||
| 37 | -import com.google.common.collect.ImmutableSet; | ||
| 38 | -import com.google.common.collect.Multimap; | ||
| 39 | -import com.google.common.collect.ImmutableSet.Builder; | ||
| 40 | -import com.hazelcast.core.IMap; | ||
| 41 | - | ||
| 42 | -//TODO: Add support for multiple provider and annotations | ||
| 43 | -/** | ||
| 44 | - * Manages inventory of infrastructure links using Hazelcast-backed map. | ||
| 45 | - */ | ||
| 46 | -@Component(immediate = true) | ||
| 47 | -@Service | ||
| 48 | -public class DistributedLinkStore | ||
| 49 | - extends AbstractHazelcastStore<LinkEvent, LinkStoreDelegate> | ||
| 50 | - implements LinkStore { | ||
| 51 | - | ||
| 52 | - private final Logger log = getLogger(getClass()); | ||
| 53 | - | ||
| 54 | - // Link inventory | ||
| 55 | - private IMap<byte[], byte[]> rawLinks; | ||
| 56 | - private LoadingCache<LinkKey, Optional<DefaultLink>> links; | ||
| 57 | - | ||
| 58 | - // TODO synchronize? | ||
| 59 | - // Egress and ingress link sets | ||
| 60 | - private final Multimap<DeviceId, Link> srcLinks = HashMultimap.create(); | ||
| 61 | - private final Multimap<DeviceId, Link> dstLinks = HashMultimap.create(); | ||
| 62 | - | ||
| 63 | - private String linksListener; | ||
| 64 | - | ||
| 65 | - @Override | ||
| 66 | - @Activate | ||
| 67 | - public void activate() { | ||
| 68 | - super.activate(); | ||
| 69 | - | ||
| 70 | - boolean includeValue = true; | ||
| 71 | - | ||
| 72 | - // TODO decide on Map name scheme to avoid collision | ||
| 73 | - rawLinks = theInstance.getMap("links"); | ||
| 74 | - final OptionalCacheLoader<LinkKey, DefaultLink> linkLoader | ||
| 75 | - = new OptionalCacheLoader<>(serializer, rawLinks); | ||
| 76 | - links = new AbsentInvalidatingLoadingCache<>(newBuilder().build(linkLoader)); | ||
| 77 | - // refresh/populate cache based on notification from other instance | ||
| 78 | - linksListener = rawLinks.addEntryListener(new RemoteLinkEventHandler(links), includeValue); | ||
| 79 | - | ||
| 80 | - loadLinkCache(); | ||
| 81 | - | ||
| 82 | - log.info("Started"); | ||
| 83 | - } | ||
| 84 | - | ||
| 85 | - @Deactivate | ||
| 86 | - public void deactivate() { | ||
| 87 | - rawLinks.removeEntryListener(linksListener); | ||
| 88 | - log.info("Stopped"); | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - private void loadLinkCache() { | ||
| 92 | - for (byte[] keyBytes : rawLinks.keySet()) { | ||
| 93 | - final LinkKey id = deserialize(keyBytes); | ||
| 94 | - links.refresh(id); | ||
| 95 | - } | ||
| 96 | - } | ||
| 97 | - | ||
| 98 | - @Override | ||
| 99 | - public int getLinkCount() { | ||
| 100 | - return links.asMap().size(); | ||
| 101 | - } | ||
| 102 | - | ||
| 103 | - @Override | ||
| 104 | - public Iterable<Link> getLinks() { | ||
| 105 | - Builder<Link> builder = ImmutableSet.builder(); | ||
| 106 | - for (Optional<DefaultLink> e : links.asMap().values()) { | ||
| 107 | - if (e.isPresent()) { | ||
| 108 | - builder.add(e.get()); | ||
| 109 | - } | ||
| 110 | - } | ||
| 111 | - return builder.build(); | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - @Override | ||
| 115 | - public Set<Link> getDeviceEgressLinks(DeviceId deviceId) { | ||
| 116 | - return ImmutableSet.copyOf(srcLinks.get(deviceId)); | ||
| 117 | - } | ||
| 118 | - | ||
| 119 | - @Override | ||
| 120 | - public Set<Link> getDeviceIngressLinks(DeviceId deviceId) { | ||
| 121 | - return ImmutableSet.copyOf(dstLinks.get(deviceId)); | ||
| 122 | - } | ||
| 123 | - | ||
| 124 | - @Override | ||
| 125 | - public Link getLink(ConnectPoint src, ConnectPoint dst) { | ||
| 126 | - return links.getUnchecked(linkKey(src, dst)).orNull(); | ||
| 127 | - } | ||
| 128 | - | ||
| 129 | - @Override | ||
| 130 | - public Set<Link> getEgressLinks(ConnectPoint src) { | ||
| 131 | - Set<Link> egress = new HashSet<>(); | ||
| 132 | - for (Link link : srcLinks.get(src.deviceId())) { | ||
| 133 | - if (link.src().equals(src)) { | ||
| 134 | - egress.add(link); | ||
| 135 | - } | ||
| 136 | - } | ||
| 137 | - return egress; | ||
| 138 | - } | ||
| 139 | - | ||
| 140 | - @Override | ||
| 141 | - public Set<Link> getIngressLinks(ConnectPoint dst) { | ||
| 142 | - Set<Link> ingress = new HashSet<>(); | ||
| 143 | - for (Link link : dstLinks.get(dst.deviceId())) { | ||
| 144 | - if (link.dst().equals(dst)) { | ||
| 145 | - ingress.add(link); | ||
| 146 | - } | ||
| 147 | - } | ||
| 148 | - return ingress; | ||
| 149 | - } | ||
| 150 | - | ||
| 151 | - @Override | ||
| 152 | - public LinkEvent createOrUpdateLink(ProviderId providerId, | ||
| 153 | - LinkDescription linkDescription) { | ||
| 154 | - LinkKey key = linkKey(linkDescription.src(), linkDescription.dst()); | ||
| 155 | - Optional<DefaultLink> link = links.getUnchecked(key); | ||
| 156 | - if (!link.isPresent()) { | ||
| 157 | - return createLink(providerId, key, linkDescription); | ||
| 158 | - } | ||
| 159 | - return updateLink(providerId, link.get(), key, linkDescription); | ||
| 160 | - } | ||
| 161 | - | ||
| 162 | - // Creates and stores the link and returns the appropriate event. | ||
| 163 | - private LinkEvent createLink(ProviderId providerId, LinkKey key, | ||
| 164 | - LinkDescription linkDescription) { | ||
| 165 | - DefaultLink link = new DefaultLink(providerId, key.src(), key.dst(), | ||
| 166 | - linkDescription.type()); | ||
| 167 | - synchronized (this) { | ||
| 168 | - final byte[] keyBytes = serialize(key); | ||
| 169 | - rawLinks.put(keyBytes, serialize(link)); | ||
| 170 | - links.asMap().putIfAbsent(key, Optional.of(link)); | ||
| 171 | - | ||
| 172 | - addNewLink(link); | ||
| 173 | - } | ||
| 174 | - return new LinkEvent(LINK_ADDED, link); | ||
| 175 | - } | ||
| 176 | - | ||
| 177 | - // update Egress and ingress link sets | ||
| 178 | - private void addNewLink(DefaultLink link) { | ||
| 179 | - synchronized (this) { | ||
| 180 | - srcLinks.put(link.src().deviceId(), link); | ||
| 181 | - dstLinks.put(link.dst().deviceId(), link); | ||
| 182 | - } | ||
| 183 | - } | ||
| 184 | - | ||
| 185 | - // Updates, if necessary the specified link and returns the appropriate event. | ||
| 186 | - private LinkEvent updateLink(ProviderId providerId, DefaultLink link, | ||
| 187 | - LinkKey key, LinkDescription linkDescription) { | ||
| 188 | - // FIXME confirm Link update condition is OK | ||
| 189 | - if (link.type() == INDIRECT && linkDescription.type() == DIRECT) { | ||
| 190 | - synchronized (this) { | ||
| 191 | - | ||
| 192 | - DefaultLink updated = | ||
| 193 | - new DefaultLink(providerId, link.src(), link.dst(), | ||
| 194 | - linkDescription.type()); | ||
| 195 | - final byte[] keyBytes = serialize(key); | ||
| 196 | - rawLinks.put(keyBytes, serialize(updated)); | ||
| 197 | - links.asMap().replace(key, Optional.of(link), Optional.of(updated)); | ||
| 198 | - | ||
| 199 | - replaceLink(link, updated); | ||
| 200 | - return new LinkEvent(LINK_UPDATED, updated); | ||
| 201 | - } | ||
| 202 | - } | ||
| 203 | - return null; | ||
| 204 | - } | ||
| 205 | - | ||
| 206 | - // update Egress and ingress link sets | ||
| 207 | - private void replaceLink(DefaultLink link, DefaultLink updated) { | ||
| 208 | - synchronized (this) { | ||
| 209 | - srcLinks.remove(link.src().deviceId(), link); | ||
| 210 | - dstLinks.remove(link.dst().deviceId(), link); | ||
| 211 | - | ||
| 212 | - srcLinks.put(link.src().deviceId(), updated); | ||
| 213 | - dstLinks.put(link.dst().deviceId(), updated); | ||
| 214 | - } | ||
| 215 | - } | ||
| 216 | - | ||
| 217 | - @Override | ||
| 218 | - public LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) { | ||
| 219 | - synchronized (this) { | ||
| 220 | - LinkKey key = linkKey(src, dst); | ||
| 221 | - byte[] keyBytes = serialize(key); | ||
| 222 | - Link link = deserialize(rawLinks.remove(keyBytes)); | ||
| 223 | - links.invalidate(key); | ||
| 224 | - if (link != null) { | ||
| 225 | - removeLink(link); | ||
| 226 | - return new LinkEvent(LINK_REMOVED, link); | ||
| 227 | - } | ||
| 228 | - return null; | ||
| 229 | - } | ||
| 230 | - } | ||
| 231 | - | ||
| 232 | - // update Egress and ingress link sets | ||
| 233 | - private void removeLink(Link link) { | ||
| 234 | - synchronized (this) { | ||
| 235 | - srcLinks.remove(link.src().deviceId(), link); | ||
| 236 | - dstLinks.remove(link.dst().deviceId(), link); | ||
| 237 | - } | ||
| 238 | - } | ||
| 239 | - | ||
| 240 | - private class RemoteLinkEventHandler extends RemoteCacheEventHandler<LinkKey, DefaultLink> { | ||
| 241 | - public RemoteLinkEventHandler(LoadingCache<LinkKey, Optional<DefaultLink>> cache) { | ||
| 242 | - super(cache); | ||
| 243 | - } | ||
| 244 | - | ||
| 245 | - @Override | ||
| 246 | - protected void onAdd(LinkKey key, DefaultLink newVal) { | ||
| 247 | - addNewLink(newVal); | ||
| 248 | - notifyDelegate(new LinkEvent(LINK_ADDED, newVal)); | ||
| 249 | - } | ||
| 250 | - | ||
| 251 | - @Override | ||
| 252 | - protected void onUpdate(LinkKey key, DefaultLink oldVal, DefaultLink newVal) { | ||
| 253 | - replaceLink(oldVal, newVal); | ||
| 254 | - notifyDelegate(new LinkEvent(LINK_UPDATED, newVal)); | ||
| 255 | - } | ||
| 256 | - | ||
| 257 | - @Override | ||
| 258 | - protected void onRemove(LinkKey key, DefaultLink val) { | ||
| 259 | - removeLink(val); | ||
| 260 | - notifyDelegate(new LinkEvent(LINK_REMOVED, val)); | ||
| 261 | - } | ||
| 262 | - } | ||
| 263 | -} |
core/store/hz/net/src/main/java/org/onlab/onos/store/topology/impl/DefaultTopology.java
deleted
100644 → 0
This diff is collapsed. Click to expand it.
core/store/hz/net/src/main/java/org/onlab/onos/store/topology/impl/DefaultTopologyGraph.java
deleted
100644 → 0
| 1 | -package org.onlab.onos.store.topology.impl; | ||
| 2 | - | ||
| 3 | -import org.onlab.graph.AdjacencyListsGraph; | ||
| 4 | -import org.onlab.onos.net.topology.TopologyEdge; | ||
| 5 | -import org.onlab.onos.net.topology.TopologyGraph; | ||
| 6 | -import org.onlab.onos.net.topology.TopologyVertex; | ||
| 7 | - | ||
| 8 | -import java.util.Set; | ||
| 9 | - | ||
| 10 | -/** | ||
| 11 | - * Default implementation of an immutable topology graph based on a generic | ||
| 12 | - * implementation of adjacency lists graph. | ||
| 13 | - */ | ||
| 14 | -public class DefaultTopologyGraph | ||
| 15 | - extends AdjacencyListsGraph<TopologyVertex, TopologyEdge> | ||
| 16 | - implements TopologyGraph { | ||
| 17 | - | ||
| 18 | - /** | ||
| 19 | - * Creates a topology graph comprising of the specified vertexes and edges. | ||
| 20 | - * | ||
| 21 | - * @param vertexes set of graph vertexes | ||
| 22 | - * @param edges set of graph edges | ||
| 23 | - */ | ||
| 24 | - public DefaultTopologyGraph(Set<TopologyVertex> vertexes, Set<TopologyEdge> edges) { | ||
| 25 | - super(vertexes, edges); | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | -} |
| 1 | -package org.onlab.onos.store.topology.impl; | ||
| 2 | - | ||
| 3 | -import static org.slf4j.LoggerFactory.getLogger; | ||
| 4 | - | ||
| 5 | -import java.util.List; | ||
| 6 | -import java.util.Set; | ||
| 7 | - | ||
| 8 | -import org.apache.felix.scr.annotations.Activate; | ||
| 9 | -import org.apache.felix.scr.annotations.Component; | ||
| 10 | -import org.apache.felix.scr.annotations.Deactivate; | ||
| 11 | -import org.apache.felix.scr.annotations.Service; | ||
| 12 | -import org.onlab.onos.event.Event; | ||
| 13 | -import org.onlab.onos.net.ConnectPoint; | ||
| 14 | -import org.onlab.onos.net.DeviceId; | ||
| 15 | -import org.onlab.onos.net.Link; | ||
| 16 | -import org.onlab.onos.net.Path; | ||
| 17 | -import org.onlab.onos.net.provider.ProviderId; | ||
| 18 | -import org.onlab.onos.net.topology.ClusterId; | ||
| 19 | -import org.onlab.onos.net.topology.GraphDescription; | ||
| 20 | -import org.onlab.onos.net.topology.LinkWeight; | ||
| 21 | -import org.onlab.onos.net.topology.Topology; | ||
| 22 | -import org.onlab.onos.net.topology.TopologyCluster; | ||
| 23 | -import org.onlab.onos.net.topology.TopologyEvent; | ||
| 24 | -import org.onlab.onos.net.topology.TopologyGraph; | ||
| 25 | -import org.onlab.onos.net.topology.TopologyStore; | ||
| 26 | -import org.onlab.onos.net.topology.TopologyStoreDelegate; | ||
| 27 | -import org.onlab.onos.store.AbstractStore; | ||
| 28 | -import org.slf4j.Logger; | ||
| 29 | - | ||
| 30 | -/** | ||
| 31 | - * TEMPORARY: Manages inventory of topology snapshots using distributed | ||
| 32 | - * structures implementation. | ||
| 33 | - */ | ||
| 34 | -//FIXME: I LIE I AM NOT DISTRIBUTED | ||
| 35 | -@Component(immediate = true) | ||
| 36 | -@Service | ||
| 37 | -public class DistributedTopologyStore | ||
| 38 | -extends AbstractStore<TopologyEvent, TopologyStoreDelegate> | ||
| 39 | -implements TopologyStore { | ||
| 40 | - | ||
| 41 | - private final Logger log = getLogger(getClass()); | ||
| 42 | - | ||
| 43 | - private volatile DefaultTopology current; | ||
| 44 | - | ||
| 45 | - @Activate | ||
| 46 | - public void activate() { | ||
| 47 | - log.info("Started"); | ||
| 48 | - } | ||
| 49 | - | ||
| 50 | - @Deactivate | ||
| 51 | - public void deactivate() { | ||
| 52 | - log.info("Stopped"); | ||
| 53 | - } | ||
| 54 | - @Override | ||
| 55 | - public Topology currentTopology() { | ||
| 56 | - return current; | ||
| 57 | - } | ||
| 58 | - | ||
| 59 | - @Override | ||
| 60 | - public boolean isLatest(Topology topology) { | ||
| 61 | - // Topology is current only if it is the same as our current topology | ||
| 62 | - return topology == current; | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - @Override | ||
| 66 | - public TopologyGraph getGraph(Topology topology) { | ||
| 67 | - return defaultTopology(topology).getGraph(); | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - @Override | ||
| 71 | - public Set<TopologyCluster> getClusters(Topology topology) { | ||
| 72 | - return defaultTopology(topology).getClusters(); | ||
| 73 | - } | ||
| 74 | - | ||
| 75 | - @Override | ||
| 76 | - public TopologyCluster getCluster(Topology topology, ClusterId clusterId) { | ||
| 77 | - return defaultTopology(topology).getCluster(clusterId); | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - @Override | ||
| 81 | - public Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster) { | ||
| 82 | - return defaultTopology(topology).getClusterDevices(cluster); | ||
| 83 | - } | ||
| 84 | - | ||
| 85 | - @Override | ||
| 86 | - public Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster) { | ||
| 87 | - return defaultTopology(topology).getClusterLinks(cluster); | ||
| 88 | - } | ||
| 89 | - | ||
| 90 | - @Override | ||
| 91 | - public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) { | ||
| 92 | - return defaultTopology(topology).getPaths(src, dst); | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - @Override | ||
| 96 | - public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, | ||
| 97 | - LinkWeight weight) { | ||
| 98 | - return defaultTopology(topology).getPaths(src, dst, weight); | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | - @Override | ||
| 102 | - public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) { | ||
| 103 | - return defaultTopology(topology).isInfrastructure(connectPoint); | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - @Override | ||
| 107 | - public boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint) { | ||
| 108 | - return defaultTopology(topology).isBroadcastPoint(connectPoint); | ||
| 109 | - } | ||
| 110 | - | ||
| 111 | - @Override | ||
| 112 | - public TopologyEvent updateTopology(ProviderId providerId, | ||
| 113 | - GraphDescription graphDescription, | ||
| 114 | - List<Event> reasons) { | ||
| 115 | - // First off, make sure that what we're given is indeed newer than | ||
| 116 | - // what we already have. | ||
| 117 | - if (current != null && graphDescription.timestamp() < current.time()) { | ||
| 118 | - return null; | ||
| 119 | - } | ||
| 120 | - | ||
| 121 | - // Have the default topology construct self from the description data. | ||
| 122 | - DefaultTopology newTopology = | ||
| 123 | - new DefaultTopology(providerId, graphDescription); | ||
| 124 | - | ||
| 125 | - // Promote the new topology to current and return a ready-to-send event. | ||
| 126 | - synchronized (this) { | ||
| 127 | - current = newTopology; | ||
| 128 | - return new TopologyEvent(TopologyEvent.Type.TOPOLOGY_CHANGED, | ||
| 129 | - current, reasons); | ||
| 130 | - } | ||
| 131 | - } | ||
| 132 | - | ||
| 133 | - // Validates the specified topology and returns it as a default | ||
| 134 | - private DefaultTopology defaultTopology(Topology topology) { | ||
| 135 | - if (topology instanceof DefaultTopology) { | ||
| 136 | - return (DefaultTopology) topology; | ||
| 137 | - } | ||
| 138 | - throw new IllegalArgumentException("Topology class " + topology.getClass() + | ||
| 139 | - " not supported"); | ||
| 140 | - } | ||
| 141 | - | ||
| 142 | -} |
| 1 | -package org.onlab.onos.store.topology.impl; | ||
| 2 | - | ||
| 3 | -import org.onlab.onos.net.DeviceId; | ||
| 4 | - | ||
| 5 | -import java.util.Objects; | ||
| 6 | - | ||
| 7 | -/** | ||
| 8 | - * Key for filing pre-computed paths between source and destination devices. | ||
| 9 | - */ | ||
| 10 | -class PathKey { | ||
| 11 | - private final DeviceId src; | ||
| 12 | - private final DeviceId dst; | ||
| 13 | - | ||
| 14 | - /** | ||
| 15 | - * Creates a path key from the given source/dest pair. | ||
| 16 | - * @param src source device | ||
| 17 | - * @param dst destination device | ||
| 18 | - */ | ||
| 19 | - PathKey(DeviceId src, DeviceId dst) { | ||
| 20 | - this.src = src; | ||
| 21 | - this.dst = dst; | ||
| 22 | - } | ||
| 23 | - | ||
| 24 | - @Override | ||
| 25 | - public int hashCode() { | ||
| 26 | - return Objects.hash(src, dst); | ||
| 27 | - } | ||
| 28 | - | ||
| 29 | - @Override | ||
| 30 | - public boolean equals(Object obj) { | ||
| 31 | - if (this == obj) { | ||
| 32 | - return true; | ||
| 33 | - } | ||
| 34 | - if (obj instanceof PathKey) { | ||
| 35 | - final PathKey other = (PathKey) obj; | ||
| 36 | - return Objects.equals(this.src, other.src) && Objects.equals(this.dst, other.dst); | ||
| 37 | - } | ||
| 38 | - return false; | ||
| 39 | - } | ||
| 40 | -} |
This diff is collapsed. Click to expand it.
core/store/hz/net/src/test/java/org/onlab/onos/store/link/impl/DistributedLinkStoreTest.java
deleted
100644 → 0
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment