From 7f6a3bca4c44d18648eb9c7f315d12361a6fc3ed Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 7 Jun 2011 18:01:03 -0700 Subject: [PATCH] Redundant Router: Fix OVS --- .../network/ovs/OvsNetworkManagerImpl.java | 45 ++++++++++--------- .../network/ovs/OvsTunnelManagerImpl.java | 15 ++++--- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/server/src/com/cloud/network/ovs/OvsNetworkManagerImpl.java b/server/src/com/cloud/network/ovs/OvsNetworkManagerImpl.java index b4e7edbfddf..cd27ce9a100 100644 --- a/server/src/com/cloud/network/ovs/OvsNetworkManagerImpl.java +++ b/server/src/com/cloud/network/ovs/OvsNetworkManagerImpl.java @@ -395,11 +395,10 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager { long hostId = dest.getHost().getId(); long accountId = instance.getAccountId(); Listvms = _userVmDao.listByAccountId(accountId); - /* FIXME: Redundant virtual router doesn't support OVS */ - DomainRouterVO router = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()).get(0); + List routers = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()); Listins = new ArrayList(); ins.addAll(vms); - ins.add(router); + ins.addAll(routers); ListtoHostIds = new ArrayList(); ListfromHostIds = new ArrayList(); @@ -539,9 +538,8 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager { } long accountId = instance.getAccountId(); - /* FIXME: Redundant virtual router doesn't support OVS */ - DomainRouterVO router = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()).get(0); - if (router == null) { + List routers = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()); + if (routers.size() == 0) { return; } @@ -549,18 +547,20 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager { return; } - try { - long hostId = router.getHostId(); - String tag = Long.toString(_vlanMappingDao.findByAccountIdAndHostId(accountId, hostId).getVlan()); - VmFlowLogVO log = _flowLogDao.findOrNewByVmId(instance.getId(), instance.getHostName()); - String vlans = getVlanInPortMapping(accountId, hostId); - s_logger.debug("ask router " + router.getHostName() + " on host " - + hostId + " update vlan map to " + vlans); - Commands cmds = new Commands(new OvsSetTagAndFlowCommand( - router.getHostName(), tag, vlans, Long.toString(log.getLogsequence()), instance.getId())); - _agentMgr.send(router.getHostId(), cmds, _ovsListener); - } catch (Exception e) { - s_logger.warn("apply flow to router failed", e); + for (DomainRouterVO router : routers) { + try { + long hostId = router.getHostId(); + String tag = Long.toString(_vlanMappingDao.findByAccountIdAndHostId(accountId, hostId).getVlan()); + VmFlowLogVO log = _flowLogDao.findOrNewByVmId(instance.getId(), instance.getHostName()); + String vlans = getVlanInPortMapping(accountId, hostId); + s_logger.debug("ask router " + router.getHostName() + " on host " + + hostId + " update vlan map to " + vlans); + Commands cmds = new Commands(new OvsSetTagAndFlowCommand( + router.getHostName(), tag, vlans, Long.toString(log.getLogsequence()), instance.getId())); + _agentMgr.send(router.getHostId(), cmds, _ovsListener); + } catch (Exception e) { + s_logger.warn("apply flow to router failed", e); + } } } @@ -641,10 +641,11 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager { } if (tellRouter && instance.getType() != VirtualMachine.Type.DomainRouter) { - /* FIXME: Redundant virtual router doesn't support OVS */ - DomainRouterVO router = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()).get(0); - if (router != null) { - affectedVms.add(new Long(router.getId())); + List routers = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()); + for (DomainRouterVO router : routers) { + if (router != null) { + affectedVms.add(new Long(router.getId())); + } } } return affectedVms; diff --git a/server/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java b/server/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java index 88ae03a0a44..3215db198d5 100644 --- a/server/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java +++ b/server/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java @@ -153,14 +153,13 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager { long hostId = dest.getHost().getId(); long accountId = instance.getAccountId(); Listvms = _userVmDao.listByAccountId(accountId); - /* FIXME: Redundant virtual router doesn't support OVS */ - DomainRouterVO router = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()).get(0); + List routers = _routerDao.findBy(accountId, instance.getDataCenterIdToDeployIn()); Listins = new ArrayList(); if (vms != null) { ins.addAll(vms); } - if (router != null) { - ins.add(router); + if (routers.size() != 0) { + ins.addAll(routers); } List>toHosts = new ArrayList>(); List>fromHosts = new ArrayList>(); @@ -285,9 +284,11 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager { return; } - DomainRouterVO router = _routerDao.findBy(vm.getAccountId(), vm.getDataCenterIdToDeployIn()).get(0); - if (router.getHostId() == vm.getHostId()) { - return; + List routers = _routerDao.findBy(vm.getAccountId(), vm.getDataCenterIdToDeployIn()); + for (DomainRouterVO router : routers) { + if (router.getHostId() == vm.getHostId()) { + return; + } } } else if (vm.getType() == VirtualMachine.Type.DomainRouter && userVms.size() != 0) { return;