moving sendCommand to the NetworkGeneralHelper; adding handle single network method to the NetworkGeneralHelper; moving getRealPriority to the NetworkGeneralHelper; making priority constants part of the VirtualNetworkApplianceManager; changing the network topology implementation in order to use the NetworkGeneralManager instead of the appliance
Conflicts: server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0ad36615 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0ad36615 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0ad36615 Branch: refs/heads/vpc-refactor Commit: 0ad366156421dfde2bcdeebe06c7a68513e22786 Parents: 9d9e440 Author: wrodrigues <wrodrig...@schubergphilis.com> Authored: Tue Aug 19 08:04:23 2014 +0200 Committer: Wilder Rodrigues <wrodrig...@schubergphilis.com> Committed: Fri Oct 3 06:21:27 2014 +0200 ---------------------------------------------------------------------- .../network/router/NetworkGeneralHelper.java | 290 +++++++++++-------- .../router/VirtualNetworkApplianceManager.java | 2 + .../VirtualNetworkApplianceManagerImpl.java | 133 ++------- .../VpcVirtualNetworkApplianceManagerImpl.java | 22 +- .../topology/AdvancedNetworkTopology.java | 3 +- .../topology/AdvancedNetworkVisitor.java | 14 +- .../network/topology/BasicNetworkTopology.java | 7 +- .../network/topology/BasicNetworkVisitor.java | 30 +- .../MockVpcVirtualNetworkApplianceManager.java | 8 - 9 files changed, 235 insertions(+), 274 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/com/cloud/network/router/NetworkGeneralHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/NetworkGeneralHelper.java b/server/src/com/cloud/network/router/NetworkGeneralHelper.java index 314cbc0..d22631b 100644 --- a/server/src/com/cloud/network/router/NetworkGeneralHelper.java +++ b/server/src/com/cloud/network/router/NetworkGeneralHelper.java @@ -33,8 +33,11 @@ import org.cloud.network.router.deployment.VpcRouterDeploymentDefinition; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; +import com.cloud.agent.api.BumpUpPriorityCommand; +import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.manager.Commands; +import com.cloud.alert.AlertManager; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; @@ -102,58 +105,60 @@ import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; public class NetworkGeneralHelper { - private static final Logger logger = Logger.getLogger(NetworkGeneralHelper.class); + private static final Logger s_logger = Logger.getLogger(NetworkGeneralHelper.class); @Inject - private NicDao nicDao; + private NicDao _nicDao; @Inject - private NetworkDao networkDao; + private NetworkDao _networkDao; @Inject - private DomainRouterDao routerDao; + private DomainRouterDao _routerDao; @Inject - private AgentManager agentMgr; + private AgentManager _agentMgr; @Inject - private NetworkModel networkModel; + private AlertManager _alertMgr; @Inject - private VirtualMachineManager itMgr; + private NetworkModel _networkModel; @Inject - private AccountManager accountMgr; + private VirtualMachineManager _itMgr; @Inject - private Site2SiteVpnManager s2sVpnMgr; + private AccountManager _accountMgr; @Inject - private HostDao hostDao; + private Site2SiteVpnManager _s2sVpnMgr; @Inject - private VolumeDao volumeDao; + private HostDao _hostDao; @Inject - private ServiceOfferingDao serviceOfferingDao; + private VolumeDao _volumeDao; @Inject - private VMTemplateDao templateDao; + private ServiceOfferingDao _serviceOfferingDao; @Inject - private ResourceManager resourceMgr; + private VMTemplateDao _templateDao; @Inject - private ClusterDao clusterDao; + private ResourceManager _resourceMgr; @Inject - private IPAddressDao ipAddressDao; + private ClusterDao _clusterDao; @Inject - private IpAddressManager ipAddrMgr; + private IPAddressDao _ipAddressDao; @Inject - private UserIpv6AddressDao ipv6Dao; + private IpAddressManager _ipAddrMgr; @Inject - private NetworkOrchestrationService networkMgr; + private UserIpv6AddressDao _ipv6Dao; @Inject - protected VpcVirtualNetworkHelperImpl vpcHelper; + private NetworkOrchestrationService _networkMgr; @Inject - protected VpcManager vpcMgr; + protected VpcVirtualNetworkHelperImpl _vpcHelper; @Inject - protected VlanDao vlanDao; + protected VpcManager _vpcMgr; + @Inject + protected VlanDao _vlanDao; public String getRouterControlIp(final long routerId) { String routerControlIpAddress = null; - final List<NicVO> nics = nicDao.listByVmId(routerId); + final List<NicVO> nics = _nicDao.listByVmId(routerId); for (final NicVO n : nics) { - final NetworkVO nc = networkDao.findById(n.getNetworkId()); + final NetworkVO nc = _networkDao.findById(n.getNetworkId()); if (nc != null && nc.getTrafficType() == TrafficType.Control) { routerControlIpAddress = n.getIp4Address(); // router will have only one control ip @@ -162,8 +167,8 @@ public class NetworkGeneralHelper { } if (routerControlIpAddress == null) { - logger.warn("Unable to find router's control ip in its attached NICs!. routerId: " + routerId); - final DomainRouterVO router = routerDao.findById(routerId); + s_logger.warn("Unable to find router's control ip in its attached NICs!. routerId: " + routerId); + final DomainRouterVO router = _routerDao.findById(routerId); return router.getPrivateIpAddress(); } @@ -171,22 +176,22 @@ public class NetworkGeneralHelper { } public String getRouterIpInNetwork(final long networkId, final long instanceId) { - return nicDao.getIpAddress(networkId, instanceId); + return _nicDao.getIpAddress(networkId, instanceId); } // @Override public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) throws AgentUnavailableException { if(!checkRouterVersion(router)){ - logger.debug("Router requires upgrade. Unable to send command to router:" + router.getId() + ", router template version : " + router.getTemplateVersion() + s_logger.debug("Router requires upgrade. Unable to send command to router:" + router.getId() + ", router template version : " + router.getTemplateVersion() + ", minimal required version : " + VirtualNetworkApplianceService.MinVRVersion); throw new CloudRuntimeException("Unable to send command. Upgrade in progress. Please contact administrator."); } Answer[] answers = null; try { - answers = agentMgr.send(router.getHostId(), cmds); + answers = _agentMgr.send(router.getHostId(), cmds); } catch (final OperationTimedoutException e) { - logger.warn("Timed Out", e); + s_logger.warn("Timed Out", e); throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e); } @@ -210,31 +215,90 @@ public class NetworkGeneralHelper { } return result; } + + public void handleSingleWorkingRedundantRouter(final List<? extends VirtualRouter> connectedRouters, final List<? extends VirtualRouter> disconnectedRouters, final String reason) + throws ResourceUnavailableException { + if (connectedRouters.isEmpty() || disconnectedRouters.isEmpty()) { + return; + } + if (connectedRouters.size() != 1 || disconnectedRouters.size() != 1) { + s_logger.warn("How many redundant routers do we have?? "); + return; + } + if (!connectedRouters.get(0).getIsRedundantRouter()) { + throw new ResourceUnavailableException("Who is calling this with non-redundant router or non-domain router?", DataCenter.class, connectedRouters.get(0) + .getDataCenterId()); + } + if (!disconnectedRouters.get(0).getIsRedundantRouter()) { + throw new ResourceUnavailableException("Who is calling this with non-redundant router or non-domain router?", DataCenter.class, disconnectedRouters.get(0) + .getDataCenterId()); + } + + final DomainRouterVO connectedRouter = (DomainRouterVO)connectedRouters.get(0); + DomainRouterVO disconnectedRouter = (DomainRouterVO)disconnectedRouters.get(0); + + if (s_logger.isDebugEnabled()) { + s_logger.debug("About to stop the router " + disconnectedRouter.getInstanceName() + " due to: " + reason); + } + final String title = "Virtual router " + disconnectedRouter.getInstanceName() + " would be stopped after connecting back, due to " + reason; + final String context = + "Virtual router (name: " + disconnectedRouter.getInstanceName() + ", id: " + disconnectedRouter.getId() + + ") would be stopped after connecting back, due to: " + reason; + _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER, disconnectedRouter.getDataCenterId(), disconnectedRouter.getPodIdToDeployIn(), title, + context); + disconnectedRouter.setStopPending(true); + disconnectedRouter = _routerDao.persist(disconnectedRouter); + + final int connRouterPR = getRealPriority(connectedRouter); + final int disconnRouterPR = getRealPriority(disconnectedRouter); + if (connRouterPR < disconnRouterPR) { + //connRouterPR < disconnRouterPR, they won't equal at anytime + if (!connectedRouter.getIsPriorityBumpUp()) { + final BumpUpPriorityCommand command = new BumpUpPriorityCommand(); + command.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(connectedRouter.getId())); + command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, connectedRouter.getInstanceName()); + final Answer answer = _agentMgr.easySend(connectedRouter.getHostId(), command); + if (!answer.getResult()) { + s_logger.error("Failed to bump up " + connectedRouter.getInstanceName() + "'s priority! " + answer.getDetails()); + } + } else { + final String t = "Can't bump up virtual router " + connectedRouter.getInstanceName() + "'s priority due to it's already bumped up!"; + _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER, connectedRouter.getDataCenterId(), connectedRouter.getPodIdToDeployIn(), t, t); + } + } + } - + public int getRealPriority(final DomainRouterVO router) { + int priority = router.getPriority(); + if (router.getIsPriorityBumpUp()) { + priority += VirtualNetworkApplianceManager.DEFAULT_DELTA; + } + return priority; + } + // @Override public NicTO getNicTO(final VirtualRouter router, final Long networkId, final String broadcastUri) { - NicProfile nicProfile = networkModel.getNicProfile(router, networkId, broadcastUri); + NicProfile nicProfile = _networkModel.getNicProfile(router, networkId, broadcastUri); - return itMgr.toNicTO(nicProfile, router.getHypervisorType()); + return _itMgr.toNicTO(nicProfile, router.getHypervisorType()); } // @Override public VirtualRouter destroyRouter(final long routerId, final Account caller, final Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException { - if (logger.isDebugEnabled()) { - logger.debug("Attempting to destroy router " + routerId); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Attempting to destroy router " + routerId); } - final DomainRouterVO router = routerDao.findById(routerId); + final DomainRouterVO router = _routerDao.findById(routerId); if (router == null) { return null; } - accountMgr.checkAccess(caller, null, true, router); + _accountMgr.checkAccess(caller, null, true, router); - itMgr.expunge(router.getUuid()); - routerDao.remove(router.getId()); + _itMgr.expunge(router.getUuid()); + _routerDao.remove(router.getId()); return router; } @@ -260,31 +324,31 @@ public class NetworkGeneralHelper { protected DomainRouterVO start(DomainRouterVO router, final User user, final Account caller, final Map<Param, Object> params, final DeploymentPlan planToDeploy) throws StorageUnavailableException, InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { - logger.debug("Starting router " + router); + s_logger.debug("Starting router " + router); try { - itMgr.advanceStart(router.getUuid(), params, planToDeploy, null); + _itMgr.advanceStart(router.getUuid(), params, planToDeploy, null); } catch (final OperationTimedoutException e) { throw new ResourceUnavailableException("Starting router " + router + " failed! " + e.toString(), DataCenter.class, router.getDataCenterId()); } if (router.isStopPending()) { - logger.info("Clear the stop pending flag of router " + router.getHostName() + " after start router successfully!"); + s_logger.info("Clear the stop pending flag of router " + router.getHostName() + " after start router successfully!"); router.setStopPending(false); - router = routerDao.persist(router); + router = _routerDao.persist(router); } // We don't want the failure of VPN Connection affect the status of router, so we try to make connection // only after router start successfully final Long vpcId = router.getVpcId(); if (vpcId != null) { - s2sVpnMgr.reconnectDisconnectedVpnByVpc(vpcId); + _s2sVpnMgr.reconnectDisconnectedVpnByVpc(vpcId); } - return routerDao.findById(router.getId()); + return _routerDao.findById(router.getId()); } protected DomainRouterVO waitRouter(final DomainRouterVO router) { - DomainRouterVO vm = routerDao.findById(router.getId()); + DomainRouterVO vm = _routerDao.findById(router.getId()); - if (logger.isDebugEnabled()) { - logger.debug("Router " + router.getInstanceName() + " is not fully up yet, we will wait"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Router " + router.getInstanceName() + " is not fully up yet, we will wait"); } while (vm.getState() == State.Starting) { try { @@ -293,18 +357,18 @@ public class NetworkGeneralHelper { } // reload to get the latest state info - vm = routerDao.findById(router.getId()); + vm = _routerDao.findById(router.getId()); } if (vm.getState() == State.Running) { - if (logger.isDebugEnabled()) { - logger.debug("Router " + router.getInstanceName() + " is now fully up"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Router " + router.getInstanceName() + " is now fully up"); } return router; } - logger.warn("Router " + router.getInstanceName() + " failed to start. current state: " + vm.getState()); + s_logger.warn("Router " + router.getInstanceName() + " failed to start. current state: " + vm.getState()); return null; } @@ -320,14 +384,14 @@ public class NetworkGeneralHelper { boolean skip = false; final State state = router.getState(); if (router.getHostId() != null && state != State.Running) { - final HostVO host = hostDao.findById(router.getHostId()); + final HostVO host = _hostDao.findById(router.getHostId()); if (host == null || host.getState() != Status.Up) { skip = true; } } if (!skip) { if (state != State.Running) { - router = startVirtualRouter(router, accountMgr.getSystemUser(), accountMgr.getSystemAccount(), + router = startVirtualRouter(router, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount(), routerDeploymentDefinition.getParams()); } if (router != null) { @@ -348,7 +412,7 @@ public class NetworkGeneralHelper { } if (router.getState() == State.Running) { - logger.debug("Redundant router " + router.getInstanceName() + " is already running!"); + s_logger.debug("Redundant router " + router.getInstanceName() + " is already running!"); return router; } @@ -363,14 +427,14 @@ public class NetworkGeneralHelper { DataCenterDeployment plan = new DataCenterDeployment(0, null, null, null, null, null); DomainRouterVO result = null; assert router.getIsRedundantRouter(); - final List<Long> networkIds = routerDao.getRouterNetworks(router.getId()); + final List<Long> networkIds = _routerDao.getRouterNetworks(router.getId()); //Not support VPC now if (networkIds.size() > 1) { throw new ResourceUnavailableException("Unable to support more than one guest network for redundant router now!", DataCenter.class, router.getDataCenterId()); } DomainRouterVO routerToBeAvoid = null; if (networkIds.size() != 0) { - final List<DomainRouterVO> routerList = routerDao.findByNetwork(networkIds.get(0)); + final List<DomainRouterVO> routerList = _routerDao.findByNetwork(networkIds.get(0)); for (final DomainRouterVO rrouter : routerList) { if (rrouter.getHostId() != null && rrouter.getIsRedundantRouter() && rrouter.getState() == State.Running) { if (routerToBeAvoid != null) { @@ -392,9 +456,9 @@ public class NetworkGeneralHelper { avoids[0] = new ExcludeList(); avoids[0].addPod(routerToBeAvoid.getPodIdToDeployIn()); avoids[1] = new ExcludeList(); - avoids[1].addCluster(hostDao.findById(routerToBeAvoid.getHostId()).getClusterId()); + avoids[1].addCluster(_hostDao.findById(routerToBeAvoid.getHostId()).getClusterId()); avoids[2] = new ExcludeList(); - final List<VolumeVO> volumes = volumeDao.findByInstanceAndType(routerToBeAvoid.getId(), Volume.Type.ROOT); + final List<VolumeVO> volumes = _volumeDao.findByInstanceAndType(routerToBeAvoid.getId(), Volume.Type.ROOT); if (volumes != null && volumes.size() != 0) { avoids[2].addPool(volumes.get(0).getPoolId()); } @@ -404,8 +468,8 @@ public class NetworkGeneralHelper { avoids[4] = new ExcludeList(); for (int i = 0; i < retryIndex; i++) { - if (logger.isTraceEnabled()) { - logger.trace("Try to deploy redundant virtual router:" + router.getHostName() + ", for " + i + " time"); + if (s_logger.isTraceEnabled()) { + s_logger.trace("Try to deploy redundant virtual router:" + router.getHostName() + ", for " + i + " time"); } plan.setAvoids(avoids[i]); try { @@ -429,7 +493,7 @@ public class NetworkGeneralHelper { InsufficientServerCapacityException, InsufficientCapacityException, StorageUnavailableException, ResourceUnavailableException { - final ServiceOfferingVO routerOffering = serviceOfferingDao.findById(routerDeploymentDefinition.getOfferingId()); + final ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(routerDeploymentDefinition.getOfferingId()); final DeployDestination dest = routerDeploymentDefinition.getDest(); final Account owner = routerDeploymentDefinition.getOwner(); @@ -443,9 +507,9 @@ public class NetworkGeneralHelper { for (final Iterator<HypervisorType> iter = hypervisors.iterator(); iter.hasNext();) { final HypervisorType hType = iter.next(); try { - final long id = routerDao.getNextInSequence(Long.class, "id"); - if (logger.isDebugEnabled()) { - logger.debug("Allocating the VR i=" + id + " in datacenter " + dest.getDataCenter() + "with the hypervisor type " + hType); + final long id = _routerDao.getNextInSequence(Long.class, "id"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Allocating the VR i=" + id + " in datacenter " + dest.getDataCenter() + "with the hypervisor type " + hType); } String templateName = null; @@ -468,10 +532,10 @@ public class NetworkGeneralHelper { default: break; } - final VMTemplateVO template = templateDao.findRoutingTemplate(hType, templateName); + final VMTemplateVO template = _templateDao.findRoutingTemplate(hType, templateName); if (template == null) { - logger.debug(hType + " won't support system vm, skip it"); + s_logger.debug(hType + " won't support system vm, skip it"); continue; } @@ -491,12 +555,12 @@ public class NetworkGeneralHelper { router.setDynamicallyScalable(template.isDynamicallyScalable()); router.setRole(Role.VIRTUAL_ROUTER); - router = routerDao.persist(router); - itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, routerDeploymentDefinition.getPlan(), null); - router = routerDao.findById(router.getId()); + router = _routerDao.persist(router); + _itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, routerDeploymentDefinition.getPlan(), null); + router = _routerDao.findById(router.getId()); } catch (final InsufficientCapacityException ex) { if (allocateRetry < 2 && iter.hasNext()) { - logger.debug("Failed to allocate the VR with hypervisor type " + hType + ", retrying one more time"); + s_logger.debug("Failed to allocate the VR with hypervisor type " + hType + ", retrying one more time"); continue; } else { throw ex; @@ -507,13 +571,13 @@ public class NetworkGeneralHelper { if (startRouter) { try { - router = startVirtualRouter(router, accountMgr.getSystemUser(), accountMgr.getSystemAccount(), routerDeploymentDefinition.getParams()); + router = startVirtualRouter(router, _accountMgr.getSystemUser(), _accountMgr.getSystemAccount(), routerDeploymentDefinition.getParams()); break; } catch (final InsufficientCapacityException ex) { if (startRetry < 2 && iter.hasNext()) { - logger.debug("Failed to start the VR " + router + " with hypervisor type " + hType + ", " + "destroying it and recreating one more time"); + s_logger.debug("Failed to start the VR " + router + " with hypervisor type " + hType + ", " + "destroying it and recreating one more time"); // destroy the router - destroyRouter(router.getId(), accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM); + destroyRouter(router.getId(), _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM); continue; } else { throw ex; @@ -542,12 +606,12 @@ public class NetworkGeneralHelper { hypervisors.add(dest.getCluster().getHypervisorType()); } } else { - final HypervisorType defaults = resourceMgr.getDefaultHypervisor(dest.getDataCenter().getId()); + final HypervisorType defaults = _resourceMgr.getDefaultHypervisor(dest.getDataCenter().getId()); if (defaults != HypervisorType.None) { hypervisors.add(defaults); } else { //if there is no default hypervisor, get it from the cluster - hypervisors = resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId(), true, routerDeploymentDefinition.getPlan().getPodId()); + hypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId(), true, routerDeploymentDefinition.getPlan().getPodId()); } } @@ -576,20 +640,20 @@ public class NetworkGeneralHelper { * Ovm won't support any system. So we have to choose a partner cluster in the same pod to start domain router for us */ protected HypervisorType getClusterToStartDomainRouterForOvm(final long podId) { - final List<ClusterVO> clusters = clusterDao.listByPodId(podId); + final List<ClusterVO> clusters = _clusterDao.listByPodId(podId); for (final ClusterVO cv : clusters) { if (cv.getHypervisorType() == HypervisorType.Ovm || cv.getHypervisorType() == HypervisorType.BareMetal) { continue; } - final List<HostVO> hosts = resourceMgr.listAllHostsInCluster(cv.getId()); + final List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(cv.getId()); if (hosts == null || hosts.isEmpty()) { continue; } for (final HostVO h : hosts) { if (h.getState() == Status.Up) { - logger.debug("Pick up host that has hypervisor type " + h.getHypervisorType() + " in cluster " + cv.getId() + " to start domain router for OVM"); + s_logger.debug("Pick up host that has hypervisor type " + h.getHypervisorType() + " in cluster " + cv.getId() + " to start domain router for OVM"); return h.getHypervisorType(); } } @@ -615,20 +679,20 @@ public class NetworkGeneralHelper { //1) Guest network boolean hasGuestNetwork = false; if (routerDeploymentDefinition.getGuestNetwork() != null) { - logger.debug("Adding nic for Virtual Router in Guest network " + routerDeploymentDefinition.getGuestNetwork()); + s_logger.debug("Adding nic for Virtual Router in Guest network " + routerDeploymentDefinition.getGuestNetwork()); String defaultNetworkStartIp = null, defaultNetworkStartIpv6 = null; if (!routerDeploymentDefinition.isPublicNetwork()) { - final Nic placeholder = networkModel.getPlaceholderNicForRouter(routerDeploymentDefinition.getGuestNetwork(), routerDeploymentDefinition.getPodId()); + final Nic placeholder = _networkModel.getPlaceholderNicForRouter(routerDeploymentDefinition.getGuestNetwork(), routerDeploymentDefinition.getPodId()); if (routerDeploymentDefinition.getGuestNetwork().getCidr() != null) { if (placeholder != null && placeholder.getIp4Address() != null) { - logger.debug("Requesting ipv4 address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + routerDeploymentDefinition.getGuestNetwork()); + s_logger.debug("Requesting ipv4 address " + placeholder.getIp4Address() + " stored in placeholder nic for the network " + routerDeploymentDefinition.getGuestNetwork()); defaultNetworkStartIp = placeholder.getIp4Address(); } else { - final String startIp = networkModel.getStartIpAddress(routerDeploymentDefinition.getGuestNetwork().getId()); - if (startIp != null && ipAddressDao.findByIpAndSourceNetworkId(routerDeploymentDefinition.getGuestNetwork().getId(), startIp).getAllocatedTime() == null) { + final String startIp = _networkModel.getStartIpAddress(routerDeploymentDefinition.getGuestNetwork().getId()); + if (startIp != null && _ipAddressDao.findByIpAndSourceNetworkId(routerDeploymentDefinition.getGuestNetwork().getId(), startIp).getAllocatedTime() == null) { defaultNetworkStartIp = startIp; - } else if (logger.isDebugEnabled()) { - logger.debug("First ipv4 " + startIp + " in network id=" + routerDeploymentDefinition.getGuestNetwork().getId() + + } else if (s_logger.isDebugEnabled()) { + s_logger.debug("First ipv4 " + startIp + " in network id=" + routerDeploymentDefinition.getGuestNetwork().getId() + " is already allocated, can't use it for domain router; will get random ip address from the range"); } } @@ -636,14 +700,14 @@ public class NetworkGeneralHelper { if (routerDeploymentDefinition.getGuestNetwork().getIp6Cidr() != null) { if (placeholder != null && placeholder.getIp6Address() != null) { - logger.debug("Requesting ipv6 address " + placeholder.getIp6Address() + " stored in placeholder nic for the network " + routerDeploymentDefinition.getGuestNetwork()); + s_logger.debug("Requesting ipv6 address " + placeholder.getIp6Address() + " stored in placeholder nic for the network " + routerDeploymentDefinition.getGuestNetwork()); defaultNetworkStartIpv6 = placeholder.getIp6Address(); } else { - final String startIpv6 = networkModel.getStartIpv6Address(routerDeploymentDefinition.getGuestNetwork().getId()); - if (startIpv6 != null && ipv6Dao.findByNetworkIdAndIp(routerDeploymentDefinition.getGuestNetwork().getId(), startIpv6) == null) { + final String startIpv6 = _networkModel.getStartIpv6Address(routerDeploymentDefinition.getGuestNetwork().getId()); + if (startIpv6 != null && _ipv6Dao.findByNetworkIdAndIp(routerDeploymentDefinition.getGuestNetwork().getId(), startIpv6) == null) { defaultNetworkStartIpv6 = startIpv6; - } else if (logger.isDebugEnabled()) { - logger.debug("First ipv6 " + startIpv6 + " in network id=" + routerDeploymentDefinition.getGuestNetwork().getId() + + } else if (s_logger.isDebugEnabled()) { + s_logger.debug("First ipv6 " + startIpv6 + " in network id=" + routerDeploymentDefinition.getGuestNetwork().getId() + " is already allocated, can't use it for domain router; will get random ipv6 address from the range"); } } @@ -653,7 +717,7 @@ public class NetworkGeneralHelper { final NicProfile gatewayNic = new NicProfile(defaultNetworkStartIp, defaultNetworkStartIpv6); if (routerDeploymentDefinition.isPublicNetwork()) { if (routerDeploymentDefinition.isRedundant()) { - gatewayNic.setIp4Address(ipAddrMgr.acquireGuestIpAddress(routerDeploymentDefinition.getGuestNetwork(), null)); + gatewayNic.setIp4Address(_ipAddrMgr.acquireGuestIpAddress(routerDeploymentDefinition.getGuestNetwork(), null)); } else { gatewayNic.setIp4Address(routerDeploymentDefinition.getGuestNetwork().getGateway()); } @@ -672,15 +736,15 @@ public class NetworkGeneralHelper { } //2) Control network - logger.debug("Adding nic for Virtual Router in Control network "); - List<? extends NetworkOffering> offerings = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); + s_logger.debug("Adding nic for Virtual Router in Control network "); + List<? extends NetworkOffering> offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); NetworkOffering controlOffering = offerings.get(0); - Network controlConfig = networkMgr.setupNetwork(VirtualNwStatus.account, controlOffering, routerDeploymentDefinition.getPlan(), + Network controlConfig = _networkMgr.setupNetwork(VirtualNwStatus.account, controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0); networks.put(controlConfig, new ArrayList<NicProfile>()); //3) Public network if (routerDeploymentDefinition.isPublicNetwork()) { - logger.debug("Adding nic for Virtual Router in Public network "); + s_logger.debug("Adding nic for Virtual Router in Public network "); //if source nat service is supported by the network, get the source nat ip address final NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); @@ -690,7 +754,7 @@ public class NetworkGeneralHelper { defaultNic.setNetmask(sourceNatIp.getNetmask()); defaultNic.setMacAddress(sourceNatIp.getMacAddress()); // get broadcast from public network - final Network pubNet = networkDao.findById(sourceNatIp.getNetworkId()); + final Network pubNet = _networkDao.findById(sourceNatIp.getNetworkId()); if (pubNet.getBroadcastDomainType() == BroadcastDomainType.Vxlan) { defaultNic.setBroadcastType(BroadcastDomainType.Vxlan); defaultNic.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag())); @@ -703,14 +767,14 @@ public class NetworkGeneralHelper { if (hasGuestNetwork) { defaultNic.setDeviceId(2); } - final NetworkOffering publicOffering = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - final List<? extends Network> publicNetworks = networkMgr.setupNetwork(VirtualNwStatus.account, publicOffering, + final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); + final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNwStatus.account, publicOffering, routerDeploymentDefinition.getPlan(), null, null, false); final String publicIp = defaultNic.getIp4Address(); // We want to use the identical MAC address for RvR on public interface if possible - final NicVO peerNic = nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); + final NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); if (peerNic != null) { - logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); + s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); defaultNic.setMacAddress(peerNic.getMacAddress()); } networks.put(publicNetworks.get(0), new ArrayList<NicProfile>(Arrays.asList(defaultNic))); @@ -733,36 +797,36 @@ public class NetworkGeneralHelper { final Long vpcId = vpcRouterDeploymentDefinition.getVpc().getId(); //2) allocate nic for private gateways if needed - final List<PrivateGateway> privateGateways = this.vpcMgr.getVpcPrivateGateways(vpcId); + final List<PrivateGateway> privateGateways = this._vpcMgr.getVpcPrivateGateways(vpcId); if (privateGateways != null && !privateGateways.isEmpty()) { for (PrivateGateway privateGateway : privateGateways) { - NicProfile privateNic = this.vpcHelper.createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = networkModel.getNetwork(privateGateway.getNetworkId()); + NicProfile privateNic = this._vpcHelper.createPrivateNicProfileForGateway(privateGateway); + Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); networks.put(privateNetwork, new ArrayList<NicProfile>(Arrays.asList(privateNic))); } } //3) allocate nic for guest gateway if needed - List<? extends Network> guestNetworks = this.vpcMgr.getVpcNetworks(vpcId); + List<? extends Network> guestNetworks = this._vpcMgr.getVpcNetworks(vpcId); for (Network guestNetwork : guestNetworks) { - if (networkModel.isPrivateGateway(guestNetwork.getId())) { + if (_networkModel.isPrivateGateway(guestNetwork.getId())) { continue; } if (guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup) { - NicProfile guestNic = vpcHelper.createGuestNicProfileForVpcRouter(guestNetwork); + NicProfile guestNic = _vpcHelper.createGuestNicProfileForVpcRouter(guestNetwork); networks.put(guestNetwork, new ArrayList<NicProfile>(Arrays.asList(guestNic))); } } //4) allocate nic for additional public network(s) - final List<IPAddressVO> ips = ipAddressDao.listByAssociatedVpc(vpcId, false); + final List<IPAddressVO> ips = _ipAddressDao.listByAssociatedVpc(vpcId, false); final List<NicProfile> publicNics = new ArrayList<NicProfile>(); Network publicNetwork = null; for (IPAddressVO ip : ips) { - PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, this.vlanDao.findById(ip.getVlanId())); - if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && this.vpcMgr.isIpAllocatedToVpc(ip) && + PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, this._vlanDao.findById(ip.getVlanId())); + if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && this._vpcMgr.isIpAllocatedToVpc(ip) && !publicVlans.contains(publicIp.getVlanTag())) { - logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag()); + s_logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag()); NicProfile publicNic = new NicProfile(); publicNic.setDefaultNic(false); publicNic.setIp4Address(publicIp.getAddress().addr()); @@ -772,9 +836,9 @@ public class NetworkGeneralHelper { publicNic.setBroadcastType(BroadcastDomainType.Vlan); publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOffering publicOffering = networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); + NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); if (publicNetwork == null) { - List<? extends Network> publicNetworks = networkMgr.setupNetwork(VirtualNwStatus.account, + List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNwStatus.account, publicOffering, vpcRouterDeploymentDefinition.getPlan(), null, null, false); publicNetwork = publicNetworks.get(0); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java index f5b5096..8e0aba4a 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java @@ -64,6 +64,8 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA public static final int DEFAULT_ROUTER_VM_RAMSIZE = 128; // 128M public static final int DEFAULT_ROUTER_CPU_MHZ = 500; // 500 MHz public static final boolean USE_POD_VLAN = false; + public static final int DEFAULT_PRIORITY = 100; + public static final int DEFAULT_DELTA = 2; /** /* http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 5986a37..4bf9e40 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -67,7 +67,6 @@ import com.cloud.agent.Listener; import com.cloud.agent.api.AgentControlAnswer; import com.cloud.agent.api.AgentControlCommand; import com.cloud.agent.api.Answer; -import com.cloud.agent.api.BumpUpPriorityCommand; import com.cloud.agent.api.CheckRouterAnswer; import com.cloud.agent.api.CheckRouterCommand; import com.cloud.agent.api.CheckS2SVpnConnectionsAnswer; @@ -384,12 +383,11 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V OpRouterMonitorServiceDao _opRouterMonitorServiceDao; @Inject - NetworkTopologyContext networkTopologyContext; - + protected NetworkTopologyContext _networkTopologyContext; @Inject - protected NetworkGeneralHelper nwHelper; + protected NetworkGeneralHelper _nwHelper; @Inject - protected RouterDeploymentDefinitionBuilder routerDeploymentManagerBuilder; + protected RouterDeploymentDefinitionBuilder _routerDeploymentManagerBuilder; int _routerRamSize; int _routerCpuMHz; @@ -424,7 +422,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V @Override public VirtualRouter destroyRouter(final long routerId, final Account caller, final Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException { - return nwHelper.destroyRouter(routerId, caller, callerUserId); + return _nwHelper.destroyRouter(routerId, caller, callerUserId); } @Override @@ -647,7 +645,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V useLocalStorage, true, null, true, VirtualMachine.Type.DomainRouter, true); offering.setUniqueName(ServiceOffering.routerDefaultOffUniqueName); offering = _serviceOfferingDao.persistSystemServiceOffering(offering); - routerDeploymentManagerBuilder.setOfferingId(offering.getId()); + _routerDeploymentManagerBuilder.setOfferingId(offering.getId()); // this can sometimes happen, if DB is manually or programmatically // manipulated @@ -1127,14 +1125,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } } - private int getRealPriority(final DomainRouterVO router) { - int priority = router.getPriority(); - if (router.getIsPriorityBumpUp()) { - priority += DEFAULT_DELTA; - } - return priority; - } - protected class RvRStatusUpdateTask extends ManagedContextRunnable { public RvRStatusUpdateTask() { @@ -1183,7 +1173,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } } if (masterRouter != null && backupRouter != null) { - if (getRealPriority(masterRouter) - DEFAULT_DELTA + 1 != getRealPriority(backupRouter) || backupRouter.getIsPriorityBumpUp()) { + if (_nwHelper.getRealPriority(masterRouter) - DEFAULT_DELTA + 1 != _nwHelper.getRealPriority(backupRouter) || backupRouter.getIsPriorityBumpUp()) { recoverRedundantNetwork(masterRouter, backupRouter); } } @@ -1391,9 +1381,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } } - private final static int DEFAULT_PRIORITY = 100; - private final static int DEFAULT_DELTA = 2; - protected int getUpdatedPriority(final Network guestNetwork, final List<DomainRouterVO> routers, final DomainRouterVO exclude) throws InsufficientVirtualNetworkCapacityException { int priority; @@ -1407,8 +1394,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } // FIXME Assume the maxPriority one should be running or just // created. - if (r.getId() != exclude.getId() && getRealPriority(r) > maxPriority) { - maxPriority = getRealPriority(r); + if (r.getId() != exclude.getId() && _nwHelper.getRealPriority(r) > maxPriority) { + maxPriority = _nwHelper.getRealPriority(r); } } if (maxPriority == 0) { @@ -2121,7 +2108,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V if (nic.getBroadcastUri().getScheme().equals("pvlan")) { final NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic"); - final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO); try { result = networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nicProfile); } catch (final ResourceUnavailableException e) { @@ -2154,7 +2141,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V if (network.getTrafficType() == TrafficType.Guest && nic.getBroadcastUri() != null && nic.getBroadcastUri().getScheme().equals("pvlan")) { final NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic"); - final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO); + final NetworkTopology networkTopology = _networkTopologyContext.retrieveNetworkTopology(dcVO); try { networkTopology.setupDhcpForPvlan(false, domR, domR.getHostId(), nicProfile); } catch (final ResourceUnavailableException e) { @@ -2187,7 +2174,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V final Commands cmds = new Commands(Command.OnError.Stop); createApplyVpnCommands(true, vpn, router, cmds); - if (!sendCommandsToRouter(router, cmds)) { + if (!_nwHelper.sendCommandsToRouter(router, cmds)) { throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId()); } @@ -2222,7 +2209,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V if (router.getState() == State.Running) { final Commands cmds = new Commands(Command.OnError.Continue); createApplyVpnCommands(false, vpn, router, cmds); - result = result && sendCommandsToRouter(router, cmds); + result = result && _nwHelper.sendCommandsToRouter(router, cmds); } else if (router.getState() == State.Stopped) { s_logger.debug("Router " + router + " is in Stopped state, not sending deleteRemoteAccessVpn command to it"); continue; @@ -2277,7 +2264,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } createDeleteIpAliasCommand(router, revokedIpAliasTOs, activeIpAliasTOs, network.getId(), cmds); configDnsMasq(router, network, cmds); - final boolean result = sendCommandsToRouter(router, cmds); + final boolean result = _nwHelper.sendCommandsToRouter(router, cmds); if (result) { Transaction.execute(new TransactionCallbackNoReturn() { @Override @@ -2412,7 +2399,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } else { params.put(Param.ReProgramGuestNetworks, false); } - final VirtualRouter virtualRouter = nwHelper.startVirtualRouter(router, user, caller, params); + final VirtualRouter virtualRouter = _nwHelper.startVirtualRouter(router, user, caller, params); if (virtualRouter == null) { throw new CloudRuntimeException("Failed to start router with id " + routerId); } @@ -2777,92 +2764,6 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V } @Override - public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) throws AgentUnavailableException { - if (!nwHelper.checkRouterVersion(router)) { - s_logger.debug("Router requires upgrade. Unable to send command to router:" + router.getId() + ", router template version : " + router.getTemplateVersion() - + ", minimal required version : " + MinVRVersion); - throw new CloudRuntimeException("Unable to send command. Upgrade in progress. Please contact administrator."); - } - Answer[] answers = null; - try { - answers = _agentMgr.send(router.getHostId(), cmds); - } catch (final OperationTimedoutException e) { - s_logger.warn("Timed Out", e); - throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e); - } - - if (answers == null) { - return false; - } - - if (answers.length != cmds.size()) { - return false; - } - - // FIXME: Have to return state for individual command in the future - boolean result = true; - if (answers.length > 0) { - for (final Answer answer : answers) { - if (!answer.getResult()) { - result = false; - break; - } - } - } - return result; - } - - protected void handleSingleWorkingRedundantRouter(final List<? extends VirtualRouter> connectedRouters, final List<? extends VirtualRouter> disconnectedRouters, - final String reason) throws ResourceUnavailableException { - if (connectedRouters.isEmpty() || disconnectedRouters.isEmpty()) { - return; - } - if (connectedRouters.size() != 1 || disconnectedRouters.size() != 1) { - s_logger.warn("How many redundant routers do we have?? "); - return; - } - if (!connectedRouters.get(0).getIsRedundantRouter()) { - throw new ResourceUnavailableException("Who is calling this with non-redundant router or non-domain router?", DataCenter.class, connectedRouters.get(0) - .getDataCenterId()); - } - if (!disconnectedRouters.get(0).getIsRedundantRouter()) { - throw new ResourceUnavailableException("Who is calling this with non-redundant router or non-domain router?", DataCenter.class, disconnectedRouters.get(0) - .getDataCenterId()); - } - - final DomainRouterVO connectedRouter = (DomainRouterVO) connectedRouters.get(0); - DomainRouterVO disconnectedRouter = (DomainRouterVO) disconnectedRouters.get(0); - - if (s_logger.isDebugEnabled()) { - s_logger.debug("About to stop the router " + disconnectedRouter.getInstanceName() + " due to: " + reason); - } - final String title = "Virtual router " + disconnectedRouter.getInstanceName() + " would be stopped after connecting back, due to " + reason; - final String context = "Virtual router (name: " + disconnectedRouter.getInstanceName() + ", id: " + disconnectedRouter.getId() - + ") would be stopped after connecting back, due to: " + reason; - _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER, disconnectedRouter.getDataCenterId(), disconnectedRouter.getPodIdToDeployIn(), title, context); - disconnectedRouter.setStopPending(true); - disconnectedRouter = _routerDao.persist(disconnectedRouter); - - final int connRouterPR = getRealPriority(connectedRouter); - final int disconnRouterPR = getRealPriority(disconnectedRouter); - if (connRouterPR < disconnRouterPR) { - // connRouterPR < disconnRouterPR, they won't equal at anytime - if (!connectedRouter.getIsPriorityBumpUp()) { - final BumpUpPriorityCommand command = new BumpUpPriorityCommand(); - command.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(connectedRouter.getId())); - command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, connectedRouter.getInstanceName()); - final Answer answer = _agentMgr.easySend(connectedRouter.getHostId(), command); - if (!answer.getResult()) { - s_logger.error("Failed to bump up " + connectedRouter.getInstanceName() + "'s priority! " + answer.getDetails()); - } - } else { - final String t = "Can't bump up virtual router " + connectedRouter.getInstanceName() + "'s priority due to it's already bumped up!"; - _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_DOMAIN_ROUTER, connectedRouter.getDataCenterId(), connectedRouter.getPodIdToDeployIn(), t, t); - } - } - } - - @Override public List<VirtualRouter> getRoutersForNetwork(final long networkId) { final List<DomainRouterVO> routers = _routerDao.findByNetwork(networkId); final List<VirtualRouter> vrs = new ArrayList<VirtualRouter>(routers.size()); @@ -3191,7 +3092,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V private List<Long> rebootRouters(final List<DomainRouterVO> routers) { final List<Long> jobIds = new ArrayList<Long>(); for (final DomainRouterVO router : routers) { - if (!nwHelper.checkRouterVersion(router)) { + if (!_nwHelper.checkRouterVersion(router)) { s_logger.debug("Upgrading template for router: " + router.getId()); final Map<String, String> params = new HashMap<String, String>(); params.put("ctxUserId", "1"); @@ -3265,8 +3166,8 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V for (DomainRouterVO router : routers) { AggregationControlCommand cmd = new AggregationControlCommand(action, router.getInstanceName(), getRouterControlIp(router.getId()), getRouterIpInNetwork( network.getId(), router.getId())); - Commands cmds = new Commands(cmd); - if (!sendCommandsToRouter(router, cmds)) { + final Commands cmds = new Commands(cmd); + if (!_nwHelper.sendCommandsToRouter(router, cmds)) { return false; } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 6a4376c..91461de 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -231,7 +231,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian Commands cmds = new Commands(Command.OnError.Stop); cmds.addCommand("setupguestnetwork", setupCmd); - sendCommandsToRouter(router, cmds); + _nwHelper.sendCommandsToRouter(router, cmds); Answer setupAnswer = cmds.getAnswer("setupguestnetwork"); String setup = add ? "set" : "destroy"; @@ -413,7 +413,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } } - SetNetworkACLCommand cmd = new SetNetworkACLCommand(rulesTO, nwHelper.getNicTO(router, guestNetworkId, null)); + SetNetworkACLCommand cmd = new SetNetworkACLCommand(rulesTO, _nwHelper.getNicTO(router, guestNetworkId, null)); cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId())); cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(guestNetworkId, router.getId())); cmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, guestVlan); @@ -488,7 +488,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } } PlugNicCommand plugNicCmd = - new PlugNicCommand(nwHelper.getNicTO(router, publicNic.getNetworkId(), publicNic.getBroadcastUri().toString()), router.getInstanceName(), router.getType()); + new PlugNicCommand(_nwHelper.getNicTO(router, publicNic.getNetworkId(), publicNic.getBroadcastUri().toString()), router.getInstanceName(), router.getType()); cmds.addCommand(plugNicCmd); VpcVO vpc = _vpcDao.findById(router.getVpcId()); NetworkUsageCommand netUsageCmd = @@ -514,7 +514,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian for (Pair<Nic, Network> nicNtwk : guestNics) { Nic guestNic = nicNtwk.first(); //plug guest nic - PlugNicCommand plugNicCmd = new PlugNicCommand(nwHelper.getNicTO(router, guestNic.getNetworkId(), null), router.getInstanceName(), router.getType()); + PlugNicCommand plugNicCmd = new PlugNicCommand(_nwHelper.getNicTO(router, guestNic.getNetworkId(), null), router.getInstanceName(), router.getType()); cmds.addCommand(plugNicCmd); if (!_networkModel.isPrivateGateway(guestNic.getNetworkId())) { //set guest network @@ -646,7 +646,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } finalizeNetworkRulesForNetwork(cmds, router, provider, networkId); - return sendCommandsToRouter(router, cmds); + return _nwHelper.sendCommandsToRouter(router, cmds); } @Override @@ -656,7 +656,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian Network network = _networkModel.getNetwork(gateway.getNetworkId()); NicProfile requested = vpcHelper.createPrivateNicProfileForGateway(gateway); - if (!nwHelper.checkRouterVersion(router)) { + if (!_nwHelper.checkRouterVersion(router)) { s_logger.warn("Router requires upgrade. Unable to send command to router: " + router.getId()); return false; } @@ -706,7 +706,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian createVpcAssociatePrivateIPCommands(router, privateIps, cmds, add); try{ - if (sendCommandsToRouter(router, cmds)) { + if (_nwHelper.sendCommandsToRouter(router, cmds)) { s_logger.debug("Successfully applied ip association for ip " + ip + " in vpc network " + network); return true; } else { @@ -800,7 +800,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian protected boolean sendStaticRoutes(final List<StaticRouteProfile> staticRoutes, final DomainRouterVO router) throws ResourceUnavailableException { Commands cmds = new Commands(Command.OnError.Continue); createStaticRouteCommands(staticRoutes, router, cmds); - return sendCommandsToRouter(router, cmds); + return _nwHelper.sendCommandsToRouter(router, cmds); } /** @@ -842,7 +842,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian protected boolean applySite2SiteVpn(final boolean isCreate, final VirtualRouter router, final Site2SiteVpnConnection conn) throws ResourceUnavailableException { Commands cmds = new Commands(Command.OnError.Continue); createSite2SiteVpnCfgCommands(conn, isCreate, router, cmds); - return sendCommandsToRouter(router, cmds); + return _nwHelper.sendCommandsToRouter(router, cmds); } private void createSite2SiteVpnCfgCommands(final Site2SiteVpnConnection conn, final boolean isCreate, final VirtualRouter router, final Commands cmds) { @@ -1017,7 +1017,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian // Currently we receive just one answer from the agent. In the future we have to parse individual answers and set // results accordingly - boolean agentResult = sendCommandsToRouter(router, cmds); + boolean agentResult = _nwHelper.sendCommandsToRouter(router, cmds); String[] result = new String[users.size()]; for (int i = 0; i < result.length; i++) { @@ -1082,7 +1082,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian if (router.getState() == State.Running) { Commands cmds = new Commands(Command.OnError.Continue); createApplyVpnCommands(false, vpn, router, cmds); - result = result && sendCommandsToRouter(router, cmds); + result = result && _nwHelper.sendCommandsToRouter(router, cmds); } else if (router.getState() == State.Stopped) { s_logger.debug("Router " + router + " is in Stopped state, not sending deleteRemoteAccessVpn command to it"); } else { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java index 8b2b55c..cf872ca 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java @@ -244,8 +244,7 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology { if (!isZoneBasic && !disconnectedRouters.isEmpty() && disconnectedRouters.get(0).getIsRedundantRouter()) { // These disconnected redundant virtual routers are out of sync // now, stop them for synchronization - // [FIXME] handleSingleWorkingRedundantRouter(connectedRouters, - // disconnectedRouters, msg); + _nwHelper.handleSingleWorkingRedundantRouter(connectedRouters, disconnectedRouters, msg); } } else if (!disconnectedRouters.isEmpty()) { for (final VirtualRouter router : disconnectedRouters) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java index 1b6b20d..df8afb2 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java @@ -62,7 +62,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { userdata.createPasswordCommand(router, profile, nicVo, commands); userdata.createVmDataCommand(router, userVM, nicVo, userVM.getDetail("SSH.PublicKey"), commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -75,7 +75,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { dhcp.createDhcpEntryCommand(router, userVM, nicVo, commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -85,7 +85,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { final Commands commands = nicPlugInOutRules.getNetUsageCommands(); if (commands.size() > 0) { - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } return true; } @@ -99,7 +99,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { List<? extends NetworkACLItem> rules = acls.getRules(); acls.createNetworkACLsCommands(rules, router, commands, network.getId(), acls.isPrivateGateway()); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -113,7 +113,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { if (!ipsToSend.isEmpty()) { vpcip.createVpcAssociatePublicIPCommands(router, ipsToSend, cmds, vlanMacAddress); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } else { return true; } @@ -134,7 +134,7 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { cmds.addCommand(setupCommand); try { - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } catch (final ResourceUnavailableException e) { s_logger.warn("Timed Out", e); return false; @@ -158,6 +158,6 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { //also add the required configuration to the dnsmasq for supporting dhcp and dns on the new ip. subnet.configDnsMasq(router, network, cmds); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java index 1d0c9b3..8133b59 100644 --- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java @@ -41,6 +41,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.PublicIpAddress; import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.router.NetworkGeneralHelper; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.DhcpEntryRules; import com.cloud.network.rules.FirewallRule; @@ -86,6 +87,9 @@ public class BasicNetworkTopology implements NetworkTopology { protected HostDao _hostDao; @Inject + protected NetworkGeneralHelper _nwHelper; + + @Inject protected UserVmDao _userVmDao; @Override @@ -402,8 +406,7 @@ public class BasicNetworkTopology implements NetworkTopology { if (!isZoneBasic && !disconnectedRouters.isEmpty() && disconnectedRouters.get(0).getIsRedundantRouter()) { // These disconnected redundant virtual routers are out of sync // now, stop them for synchronization - // [FIXME] handleSingleWorkingRedundantRouter(connectedRouters, - // disconnectedRouters, msg); + _nwHelper.handleSingleWorkingRedundantRouter(connectedRouters, disconnectedRouters, msg); } } else if (!disconnectedRouters.isEmpty()) { for (final VirtualRouter router : disconnectedRouters) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java ---------------------------------------------------------------------- diff --git a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java b/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java index 7dddb81..5532886 100644 --- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java @@ -32,7 +32,7 @@ import com.cloud.network.Network; import com.cloud.network.PublicIpAddress; import com.cloud.network.VpnUser; import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.router.VirtualNetworkApplianceManager; +import com.cloud.network.router.NetworkGeneralHelper; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.DhcpEntryRules; import com.cloud.network.rules.DhcpSubNetRules; @@ -70,7 +70,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { } @Inject - protected VirtualNetworkApplianceManager _applianceManager; + protected NetworkGeneralHelper _networkGeneralHelper; @Override public boolean visit(final StaticNatRules nat) throws ResourceUnavailableException { @@ -81,7 +81,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final Commands cmds = new Commands(Command.OnError.Continue); nat.createApplyStaticNatCommands(rules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } @Override @@ -93,7 +93,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final Commands cmds = new Commands(Command.OnError.Continue); loadbalancing.createApplyLoadBalancingRulesCommands(rules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } @SuppressWarnings("unchecked") @@ -111,25 +111,25 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { firewall.createApplyLoadBalancingRulesCommands(loadbalancingRules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } else if (purpose == Purpose.PortForwarding) { firewall.createApplyPortForwardingRulesCommands((List<? extends PortForwardingRule>) rules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } else if (purpose == Purpose.StaticNat) { firewall.createApplyStaticNatRulesCommands((List<StaticNatRule>) rules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } else if (purpose == Purpose.Firewall) { firewall.createApplyFirewallRulesCommands(rules, router, cmds, network.getId()); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } s_logger.warn("Unable to apply rules of purpose: " + rules.get(0).getPurpose()); @@ -146,7 +146,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final List<? extends PublicIpAddress> ips = ipRules.getIpAddresses(); ipRules.createAssociateIPCommands(router, ips, commands, network.getId()); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -163,7 +163,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { userdata.createPasswordCommand(router, profile, nicVo, commands); userdata.createVmDataCommand(router, userVM, nicVo, userVM.getDetail("SSH.PublicKey"), commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } return true; @@ -181,7 +181,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { if (router.getPodIdToDeployIn().longValue() == destination.getPod().getId()) { dhcp.createDhcpEntryCommand(router, userVM, nicVo, commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } return true; } @@ -203,7 +203,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { sshkey.createVmDataCommand(router, userVM, nicVo, sshKeystr, commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -215,7 +215,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final Commands cmds = new Commands(Command.OnError.Stop); passwd.createPasswordCommand(router, profile, nicVo, cmds); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } @Override @@ -228,7 +228,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final Commands commands = new Commands(Command.OnError.Stop); userdata.createVmDataCommand(router, userVM, nicVo, null, commands); - return _applianceManager.sendCommandsToRouter(router, commands); + return _networkGeneralHelper.sendCommandsToRouter(router, commands); } @Override @@ -239,7 +239,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { final Commands cmds = new Commands(Command.OnError.Continue); vpn.createApplyVpnUsersCommand(users, router, cmds); - return _applianceManager.sendCommandsToRouter(router, cmds); + return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } @Override http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0ad36615/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 3127858..8802f9b 100644 --- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -27,7 +27,6 @@ import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; import org.springframework.stereotype.Component; -import com.cloud.agent.manager.Commands; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -298,11 +297,4 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement // TODO Auto-generated method stub return null; } - - @Override - public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) - throws AgentUnavailableException { - // TODO Auto-generated method stub - return false; - } } \ No newline at end of file