Merge "Fix bug 1028: Don't ignore exception in prepareInternalNetwork"
authorMadhu Venugopal <mavenugo@gmail.com>
Tue, 20 May 2014 01:42:49 +0000 (01:42 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 20 May 2014 01:42:49 +0000 (01:42 +0000)
1  2 
neutron/src/main/java/org/opendaylight/ovsdb/neutron/InternalNetworkManager.java

index 8d3126c4271a173226b7be97a76da507568316ac,b7148ecb399a5a22ff8223822608ee78e725e7c5..5ff7c18f5e3e52e2bbbdf5341c53e4c011c8f042
@@@ -23,7 -23,7 +23,7 @@@ import org.opendaylight.ovsdb.lib.table
  import org.opendaylight.ovsdb.lib.table.Interface;
  import org.opendaylight.ovsdb.lib.table.Port;
  import org.opendaylight.ovsdb.lib.table.internal.Table;
 -import org.opendaylight.ovsdb.neutron.provider.ProviderNetworkManager;
 +import org.opendaylight.ovsdb.neutron.provider.IProviderNetworkManager;
  import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
  import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
  import org.opendaylight.ovsdb.plugin.StatusWithUuid;
@@@ -38,16 -38,17 +38,16 @@@ import org.slf4j.LoggerFactory
   * Hence this class attempts to bring all the nodes to be eligible for OpenStack operations.
   *
   */
 -public class InternalNetworkManager {
 +public class InternalNetworkManager implements IInternalNetworkManager {
      static final Logger logger = LoggerFactory.getLogger(InternalNetworkManager.class);
      private static final int LLDP_PRIORITY = 1000;
      private static final int NORMAL_PRIORITY = 0;
  
 -    private static InternalNetworkManager internalNetwork = new InternalNetworkManager();
 -    private InternalNetworkManager() {
 -    }
 +    // The implementation for each of these services is resolved by the OSGi Service Manager
 +    private volatile IAdminConfigManager adminConfigManager;
 +    private volatile IProviderNetworkManager providerNetworkManager;
  
 -    public static InternalNetworkManager getManager() {
 -        return internalNetwork;
 +    public InternalNetworkManager() {
      }
  
      public String getInternalBridgeUUID (Node node, String bridgeName) {
@@@ -84,7 -85,7 +84,7 @@@
      }
  
      public boolean isInternalNetworkNeutronReady(Node node) {
 -        if (this.getInternalBridgeUUID(node, AdminConfigManager.getManager().getIntegrationBridgeName()) != null) {
 +        if (this.getInternalBridgeUUID(node, adminConfigManager.getIntegrationBridgeName()) != null) {
              return true;
          } else {
              return false;
@@@ -95,7 -96,7 +95,7 @@@
          if (!this.isInternalNetworkNeutronReady(node)) {
              return false;
          }
 -        if (this.getInternalBridgeUUID(node, AdminConfigManager.getManager().getNetworkBridgeName()) != null) {
 +        if (this.getInternalBridgeUUID(node, adminConfigManager.getNetworkBridgeName()) != null) {
              return true;
          } else {
              return false;
      public boolean isNetworkPatchCreated (Node node, Bridge intBridge, Bridge netBridge) {
          boolean isPatchCreated = false;
  
 -        String portName = AdminConfigManager.getManager().getPatchToNetwork();
 +        String portName = adminConfigManager.getPatchToNetwork();
          if (isPortOnBridge(node, intBridge, portName)) {
 -            portName = AdminConfigManager.getManager().getPatchToIntegration();
 +            portName = adminConfigManager.getPatchToIntegration();
              if (isPortOnBridge(node, netBridge, portName)) {
                  isPatchCreated = true;
              }
       */
      public boolean isInternalNetworkTunnelReady (Node node) {
          /* Is br-int created? */
 -        Bridge intBridge = this.getInternalBridge(node, AdminConfigManager.getManager().getIntegrationBridgeName());
 +        Bridge intBridge = this.getInternalBridge(node, adminConfigManager.getIntegrationBridgeName());
          if (intBridge == null) {
              return false;
          }
  
 -        if (ProviderNetworkManager.getManager().hasPerTenantTunneling()) {
 +        if (providerNetworkManager == null) {
 +            logger.error("Provider Network Manager is not available");
 +            return false;
 +        }
 +        if (providerNetworkManager.getProvider().hasPerTenantTunneling()) {
              /* Is br-net created? */
 -            Bridge netBridge = this.getInternalBridge(node, AdminConfigManager.getManager().getNetworkBridgeName());
 +            Bridge netBridge = this.getInternalBridge(node, adminConfigManager.getNetworkBridgeName());
              if (netBridge == null) {
                  return false;
              }
       */
      public boolean isInternalNetworkVlanReady (Node node, NeutronNetwork network) {
          /* is br-int created */
 -        Bridge intBridge = this.getInternalBridge(node, AdminConfigManager.getManager().getIntegrationBridgeName());
 +        Bridge intBridge = this.getInternalBridge(node, adminConfigManager.getIntegrationBridgeName());
          if (intBridge == null) {
              logger.trace("shague isInternalNetworkVlanReady: node: {}, br-int missing", node);
              return false;
          }
  
 -        if (ProviderNetworkManager.getManager().hasPerTenantTunneling()) {
 +        if (providerNetworkManager == null) {
 +            logger.error("Provider Network Manager is not available");
 +            return false;
 +        }
 +        if (providerNetworkManager.getProvider().hasPerTenantTunneling()) {
              /* is br-net created? */
 -            Bridge netBridge = this.getInternalBridge(node, AdminConfigManager.getManager().getNetworkBridgeName());
 +            Bridge netBridge = this.getInternalBridge(node, adminConfigManager.getNetworkBridgeName());
  
              if (netBridge == null) {
                  logger.trace("shague isInternalNetworkVlanReady: node: {}, br-net missing", node);
              }
  
              /* Check if physical device is added to br-net. */
 -            String phyNetName = AdminConfigManager.getManager().getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
 +            String phyNetName = adminConfigManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
              if (isPortOnBridge(node, netBridge, phyNetName)) {
                  return true;
              }
          } else {
              /* Check if physical device is added to br-int. */
 -            String phyNetName = AdminConfigManager.getManager().getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
 +            String phyNetName = adminConfigManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
              if (isPortOnBridge(node, intBridge, phyNetName)) {
                  return true;
              }
                      type: internal
       */
      public void createIntegrationBridge (Node node) throws Exception {
 -        String brInt = AdminConfigManager.getManager().getIntegrationBridgeName();
 +        String brInt = adminConfigManager.getIntegrationBridgeName();
  
          Status status = this.addInternalBridge(node, brInt, null, null);
          if (!status.isSuccess()) {
  
          logger.debug("createNetNetwork: node: {}, network type: {}", node, network.getProviderNetworkType());
  
 -        if (ProviderNetworkManager.getManager().hasPerTenantTunneling()) { /* indicates OF 1.0 */
 -            String brInt = AdminConfigManager.getManager().getIntegrationBridgeName();
 -            String brNet = AdminConfigManager.getManager().getNetworkBridgeName();
 -            String patchNet = AdminConfigManager.getManager().getPatchToNetwork();
 -            String patchInt = AdminConfigManager.getManager().getPatchToIntegration();
 +        if (providerNetworkManager == null) {
 +            logger.error("Provider Network Manager is not available");
 +            return false;
 +        }
 +        if (providerNetworkManager.getProvider().hasPerTenantTunneling()) { /* indicates OF 1.0 */
 +            String brInt = adminConfigManager.getIntegrationBridgeName();
 +            String brNet = adminConfigManager.getNetworkBridgeName();
 +            String patchNet = adminConfigManager.getPatchToNetwork();
 +            String patchInt = adminConfigManager.getPatchToIntegration();
  
              status = this.addInternalBridge(node, brInt, patchNet, patchInt);
              if (!status.isSuccess()) {
  
              /* For vlan network types add physical port to br-net. */
              if (network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VLAN)) {
 -                String phyNetName = AdminConfigManager.getManager().getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
 +                String phyNetName = adminConfigManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
                  status = addPortToBridge(node, brNet, phyNetName);
                  if (!status.isSuccess()) {
                      logger.debug("Add Port {} to Bridge {} Status: {}", phyNetName, brNet, status);
                  }
              }
          } else {
 -            String brInt = AdminConfigManager.getManager().getIntegrationBridgeName();
 +            String brInt = adminConfigManager.getIntegrationBridgeName();
              status = this.addInternalBridge(node, brInt, null, null);
              if (!status.isSuccess()) {
                  logger.debug("{} Bridge Creation Status: {}", brInt, status);
  
              /* For vlan network types add physical port to br-int. */
              if (network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VLAN)) {
 -                String phyNetName = AdminConfigManager.getManager().getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
 +                String phyNetName = adminConfigManager.getPhysicalInterfaceName(node, network.getProviderPhysicalNetwork());
                  status = addPortToBridge(node, brInt, phyNetName);
                  if (!status.isSuccess()) {
                      logger.debug("Add Port {} to Bridge {} Status: {}", phyNetName, brInt, status);
          bridge.setFail_mode(failMode);
  
          OvsDBSet<String> protocols = new OvsDBSet<String>();
 -        if (!ProviderNetworkManager.getManager().hasPerTenantTunneling()) {
 +        if (providerNetworkManager == null) {
 +            logger.error("Provider Network Manager is not available");
 +            return new Status(StatusCode.INTERNALERROR);
 +        }
 +        if (!providerNetworkManager.getProvider().hasPerTenantTunneling()) {
              protocols.add("OpenFlow13");
          } else {
              protocols.add("OpenFlow10");
          IConnectionServiceInternal connectionService = (IConnectionServiceInternal)ServiceHelper.getGlobalInstance(IConnectionServiceInternal.class, this);
          connectionService.setOFController(node, bridgeUUID);
  
 -        if (localPatchName != null && remotePatchName != null && ProviderNetworkManager.getManager().hasPerTenantTunneling()) {
 +        if (localPatchName != null && remotePatchName != null && providerNetworkManager.getProvider().hasPerTenantTunneling()) {
              return addPatchPort(node, bridgeUUID, localPatchName, remotePatchName);
          }
          return new Status(StatusCode.SUCCESS);
              this.createIntegrationBridge(node);
          } catch (Exception e) {
              logger.error("Error creating internal network "+node.toString(), e);
+             return;
          }
 -        ProviderNetworkManager.getManager().initializeFlowRules(node);
 +        if (providerNetworkManager == null) {
 +            logger.error("Error creating internal network. Provider Network Manager unavailable");
 +            return;
 +        }
 +        providerNetworkManager.getProvider().initializeFlowRules(node);
      }
  
      /*
      public boolean checkAndCreateNetwork (Node node, NeutronNetwork network) {
          boolean isCreated = false;
          if (network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VLAN)) {
 -            if (!InternalNetworkManager.getManager().isInternalNetworkVlanReady(node, network)) {
 +            if (!this.isInternalNetworkVlanReady(node, network)) {
                  try {
 -                    isCreated = InternalNetworkManager.getManager().createNetNetwork(node, network);
 +                    isCreated = this.createNetNetwork(node, network);
                  } catch (Exception e) {
                      logger.error("Error creating internal net network ", node, e);
                  }
              }
          } else if (network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VXLAN) ||
                  network.getProviderNetworkType().equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_GRE)) {
 -            if (!InternalNetworkManager.getManager().isInternalNetworkTunnelReady(node)) {
 +            if (!this.isInternalNetworkTunnelReady(node)) {
                  try {
 -                    isCreated = InternalNetworkManager.getManager().createNetNetwork(node, network);
 +                    isCreated = this.createNetNetwork(node, network);
                  } catch (Exception e) {
                      logger.error("Error creating internal net network ", node, e);
                  }
                  isCreated = true;
              }
          }
 -
          return isCreated;
      }
 -}
 +}