X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetworkconfiguration%2Fneutron%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetworkconfig%2Fneutron%2Fimplementation%2FNeutronFloatingIPInterface.java;h=5cbe5cde9851eabfc7927d5fc3b949e2b26cb4e4;hb=2c7c9ef5e517de98e0d740f938762cc746dbcde1;hp=7d9a2e657675e767d78a774c484e07a39f81d7d9;hpb=350dbdeb0a3d942ba532ada1d1931baf591bec5b;p=controller.git diff --git a/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronFloatingIPInterface.java b/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronFloatingIPInterface.java index 7d9a2e6576..5cbe5cde98 100644 --- a/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronFloatingIPInterface.java +++ b/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronFloatingIPInterface.java @@ -8,14 +8,17 @@ package org.opendaylight.controller.networkconfig.neutron.implementation; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.ObjectInputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Dictionary; import java.util.EnumSet; import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentMap; import org.apache.felix.dm.Component; @@ -23,6 +26,9 @@ import org.opendaylight.controller.clustering.services.CacheConfigException; import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; +import org.opendaylight.controller.configuration.ConfigurationObject; +import org.opendaylight.controller.configuration.IConfigurationContainerAware; +import org.opendaylight.controller.configuration.IConfigurationContainerService; import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPCRUD; import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD; import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD; @@ -31,14 +37,19 @@ import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces; import org.opendaylight.controller.networkconfig.neutron.NeutronFloatingIP; import org.opendaylight.controller.networkconfig.neutron.NeutronPort; import org.opendaylight.controller.networkconfig.neutron.NeutronSubnet; +import org.opendaylight.controller.sal.utils.IObjectReader; +import org.opendaylight.controller.sal.utils.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { +public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD, IConfigurationContainerAware, + IObjectReader { private static final Logger logger = LoggerFactory.getLogger(NeutronFloatingIPInterface.class); + private static final String FILE_NAME = "neutron.floatingip.conf"; private String containerName = null; private IClusterContainerServices clusterContainerService = null; + private IConfigurationContainerService configurationService; private ConcurrentMap floatingIPDB; // methods needed for creating caches @@ -55,7 +66,16 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { } } - @SuppressWarnings("deprecation") + public void setConfigurationContainerService(IConfigurationContainerService service) { + logger.trace("Configuration service set: {}", service); + this.configurationService = service; + } + + public void unsetConfigurationContainerService(IConfigurationContainerService service) { + logger.trace("Configuration service removed: {}", service); + this.configurationService = null; + } + private void allocateCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterContainerService, can't create cache"); @@ -74,7 +94,7 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { logger.debug("Cache successfully created for NeutronFloatingIps"); } - @SuppressWarnings({ "unchecked", "deprecation" }) + @SuppressWarnings({ "unchecked" }) private void retrieveCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterContainerService, can't retrieve cache"); @@ -90,7 +110,6 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { logger.debug("Cache was successfully retrieved for Neutron FloatingIPs"); } - @SuppressWarnings("deprecation") private void destroyCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterMger, can't destroy cache"); @@ -103,6 +122,7 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { private void startUp() { allocateCache(); retrieveCache(); + loadConfiguration(); } /** @@ -151,6 +171,7 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { // this method uses reflection to update an object from it's delta. + @SuppressWarnings("unused") private boolean overwrite(Object target, Object delta) { Method[] methods = target.getClass().getMethods(); @@ -178,16 +199,20 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { // IfNBFloatingIPCRUD interface methods + @Override public boolean floatingIPExists(String uuid) { return floatingIPDB.containsKey(uuid); } + @Override public NeutronFloatingIP getFloatingIP(String uuid) { - if (!floatingIPExists(uuid)) + if (!floatingIPExists(uuid)) { return null; + } return floatingIPDB.get(uuid); } + @Override public List getAllFloatingIPs() { Set allIPs = new HashSet(); for (Entry entry : floatingIPDB.entrySet()) { @@ -200,17 +225,20 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { return ans; } + @Override public boolean addFloatingIP(NeutronFloatingIP input) { INeutronNetworkCRUD networkCRUD = NeutronCRUDInterfaces.getINeutronNetworkCRUD(this); INeutronSubnetCRUD subnetCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this); INeutronPortCRUD portCRUD = NeutronCRUDInterfaces.getINeutronPortCRUD(this); - if (floatingIPExists(input.getID())) + if (floatingIPExists(input.getID())) { return false; + } //if floating_ip_address isn't there, allocate from the subnet pool NeutronSubnet subnet = subnetCRUD.getSubnet(networkCRUD.getNetwork(input.getFloatingNetworkUUID()).getSubnets().get(0)); - if (input.getFloatingIPAddress() == null) + if (input.getFloatingIPAddress() == null) { input.setFloatingIPAddress(subnet.getLowAddr()); + } subnet.allocateIP(input.getFloatingIPAddress()); //if port_id is there, bind port to this floating ip @@ -223,13 +251,15 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { return true; } + @Override public boolean removeFloatingIP(String uuid) { INeutronNetworkCRUD networkCRUD = NeutronCRUDInterfaces.getINeutronNetworkCRUD(this); INeutronSubnetCRUD subnetCRUD = NeutronCRUDInterfaces.getINeutronSubnetCRUD(this); INeutronPortCRUD portCRUD = NeutronCRUDInterfaces.getINeutronPortCRUD(this); - if (!floatingIPExists(uuid)) + if (!floatingIPExists(uuid)) { return false; + } NeutronFloatingIP floatIP = getFloatingIP(uuid); //if floating_ip_address isn't there, allocate from the subnet pool NeutronSubnet subnet = subnetCRUD.getSubnet(networkCRUD.getNetwork(floatIP.getFloatingNetworkUUID()).getSubnets().get(0)); @@ -242,11 +272,13 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { return true; } + @Override public boolean updateFloatingIP(String uuid, NeutronFloatingIP delta) { INeutronPortCRUD portCRUD = NeutronCRUDInterfaces.getINeutronPortCRUD(this); - if (!floatingIPExists(uuid)) + if (!floatingIPExists(uuid)) { return false; + } NeutronFloatingIP target = floatingIPDB.get(uuid); if (target.getPortUUID() != null) { NeutronPort port = portCRUD.getPort(target.getPortUUID()); @@ -263,4 +295,22 @@ public class NeutronFloatingIPInterface implements INeutronFloatingIPCRUD { target.setFixedIPAddress(delta.getFixedIPAddress()); return true; } + + private void loadConfiguration() { + for (ConfigurationObject conf : configurationService.retrieveConfiguration(this, FILE_NAME)) { + NeutronFloatingIP nfIP = (NeutronFloatingIP) conf; + floatingIPDB.put(nfIP.getID(), nfIP); + } + } + + @Override + public Status saveConfiguration() { + return configurationService.persistConfiguration(new ArrayList(floatingIPDB.values()), + FILE_NAME); + } + + @Override + public Object readObject(ObjectInputStream ois) throws FileNotFoundException, IOException, ClassNotFoundException { + return ois.readObject(); + } }