diff --git a/server/src/com/cloud/network/element/DhcpElement.java b/server/src/com/cloud/network/element/DhcpElement.java index 65439a830aa..a164b0f54d5 100644 --- a/server/src/com/cloud/network/element/DhcpElement.java +++ b/server/src/com/cloud/network/element/DhcpElement.java @@ -196,8 +196,14 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password @Override public boolean restart(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ DataCenter dc = _configMgr.getZone(network.getDataCenterId()); - NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); DeployDestination dest = new DeployDestination(dc, null, null, null); + NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + + if (!canHandle(network.getGuestType(), dest, offering.getTrafficType())) { + s_logger.trace("Dhcp element doesn't handle network restart for the network " + network); + return false; + } + List routers = _routerDao.findByNetwork(network.getId()); if (routers == null || routers.isEmpty()) { s_logger.trace("Can't find dhcp element in network " + network.getId()); @@ -207,19 +213,16 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password VirtualRouter result = null; boolean ret = true; for (DomainRouterVO router : routers) { - if (canHandle(network.getGuestType(), dest, offering.getTrafficType())) { - if (router.getState() == State.Stopped) { - result = _routerMgr.startRouter(router.getId(), false); - } else { - result = _routerMgr.rebootRouter(router.getId(), false); - } - if (result == null) { - s_logger.warn("Failed to restart dhcp element " + router + " as a part of netowrk " + network + " restart"); - ret = false; - } + if (router.getState() == State.Stopped) { + result = _routerMgr.startRouter(router.getId(), false); } else { - s_logger.trace("Dhcp element doesn't handle network restart for the network " + network); + result = _routerMgr.rebootRouter(router.getId(), false); } + if (result == null) { + s_logger.warn("Failed to restart dhcp element " + router + " as a part of netowrk " + network + " restart"); + ret = false; + } + } return ret; } diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 3e5a42547c7..dd6d737a8b6 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -132,8 +132,13 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, @Override public boolean restart(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + if (!canHandle(network.getGuestType(), dc)) { + s_logger.trace("Virtual router element doesn't handle network restart for the network " + network); + return false; + } + DeployDestination dest = new DeployDestination(dc, null, null, null); - + NetworkOffering networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); // We need to re-implement the network since the redundancy capability may changed @@ -148,21 +153,20 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement, boolean result = true; boolean ret = true; for (DomainRouterVO router : routers) { - if (canHandle(network.getGuestType(), dest.getDataCenter())) { - host_id = router.getHostId(); - if (_routerMgr.stopRouter(router.getId(), false) == null) { - s_logger.warn("Failed to stop virtual router element " + router + " as a part of netowrk " + network + " restart"); - ret = false; - } - result = _routerMgr.destroyRouter(router.getId()); - if (!result) { - s_logger.warn("Failed to destroy virtual router element " + router + " as a part of netowrk " + network + " restart"); - ret = false; - } - } else { - s_logger.trace("Virtual router element doesn't handle network restart for the network " + network); + host_id = router.getHostId(); + if (_routerMgr.stopRouter(router.getId(), false) == null) { + s_logger.warn("Failed to stop virtual router element " + router + " as a part of netowrk " + network + " restart"); + ret = false; } + result = _routerMgr.destroyRouter(router.getId()); + if (!result) { + s_logger.warn("Failed to destroy virtual router element " + router + " as a part of netowrk " + network + " restart"); + ret = false; + } + } + + Cluster cluster = _configMgr.getCluster(_hostDao.findById(host_id).getClusterId()); dest = new DeployDestination(dc, null, cluster, null); implement(network, networkOffering, dest, context);