Some improvements on cordvtn
- Removed unnecessary CordVtnNodeConfig class
- Don't allow local and host management IP range overlapping
- Check node init state saved in the store instead of really check when a
VM is detected or vanished since it's too slow
Change-Id: I076780bdc3946b2000176cb05805003ba7c8724d
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 39a5e69..4267838 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -70,9 +70,11 @@
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
@@ -266,7 +268,7 @@
}
}
- Set<IpAddress> ip = Sets.newHashSet(vPort.fixedIps().values());
+ Set<IpAddress> fixedIp = Sets.newHashSet(vPort.fixedIps().values());
DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
.set(SERVICE_ID, vPort.networkId())
.set(OPENSTACK_VM_ID, vPort.deviceId())
@@ -283,7 +285,7 @@
mac,
VlanId.NONE,
new HostLocation(connectPoint, System.currentTimeMillis()),
- ip,
+ fixedIp,
annotations.build());
hostProvider.hostDetected(hostId, hostDesc, false);
@@ -357,6 +359,30 @@
}
/**
+ * Returns public ip addresses of vSGs running inside a give vSG host.
+ *
+ * @param vSgHost vSG host
+ * @return map of ip and mac address, or empty map
+ */
+ private Map<IpAddress, MacAddress> getSubscriberGateways(Host vSgHost) {
+ String vPortId = vSgHost.annotations().value(OPENSTACK_PORT_ID);
+ String serviceVlan = vSgHost.annotations().value(S_TAG);
+
+ OpenstackPort vPort = openstackService.port(vPortId);
+ if (vPort == null) {
+ log.warn("Failed to get OpenStack port {} for VM {}", vPortId, vSgHost.id());
+ return Maps.newHashMap();
+ }
+
+ if (!serviceVlan.equals(getServiceVlan(vPort))) {
+ log.error("Host({}) s-tag does not match with vPort s-tag", vSgHost.id());
+ return Maps.newHashMap();
+ }
+
+ return vPort.allowedAddressPairs();
+ }
+
+ /**
* Returns CordService by service ID.
*
* @param serviceId service id
@@ -453,6 +479,16 @@
}
/**
+ * Returns service ID of this host.
+ *
+ * @param host host
+ * @return service id, or null if not found
+ */
+ private String getServiceId(Host host) {
+ return host.annotations().value(SERVICE_ID);
+ }
+
+ /**
* Returns hosts associated with a given OpenStack network.
*
* @param vNet openstack network
@@ -461,40 +497,10 @@
private Set<Host> getHostsWithOpenstackNetwork(OpenstackNetwork vNet) {
checkNotNull(vNet);
- Set<Host> hosts = openstackService.ports(vNet.id()).stream()
- .filter(port -> port.deviceOwner().contains("compute"))
- .map(port -> hostService.getHostsByMac(port.macAddress())
- .stream()
- .findFirst()
- .orElse(null))
+ String vNetId = vNet.id();
+ return StreamSupport.stream(hostService.getHosts().spliterator(), false)
+ .filter(host -> Objects.equals(vNetId, getServiceId(host)))
.collect(Collectors.toSet());
-
- hosts.remove(null);
- return hosts;
- }
-
- /**
- * Returns public ip addresses of vSGs running inside a give vSG host.
- *
- * @param vSgHost vSG host
- * @return map of ip and mac address, or empty map
- */
- private Map<IpAddress, MacAddress> getSubscriberGateways(Host vSgHost) {
- String vPortId = vSgHost.annotations().value(OPENSTACK_PORT_ID);
- String serviceVlan = vSgHost.annotations().value(S_TAG);
-
- OpenstackPort vPort = openstackService.port(vPortId);
- if (vPort == null) {
- log.warn("Failed to get OpenStack port {} for VM {}", vPortId, vSgHost.id());
- return Maps.newHashMap();
- }
-
- if (!serviceVlan.equals(getServiceVlan(vPort))) {
- log.error("Host({}) s-tag does not match with vPort s-tag", vSgHost.id());
- return Maps.newHashMap();
- }
-
- return vPort.allowedAddressPairs();
}
/**