diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index aa0ba62be09..9b227de6c49 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2062,7 +2062,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } // Make sure that there are no user vms in the network that are not Expunged/Error - List userVms = _userVmDao.listByNetworkId(networkId); + List userVms = _userVmDao.listByNetworkIdAndStates(networkId, null); for (UserVmVO vm : userVms) { if (!(vm.getState() == VirtualMachine.State.Error || (vm.getState() == VirtualMachine.State.Expunging && vm.getRemoved() != null))) { diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1376098f3a8..d55aa878387 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1635,40 +1635,34 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian private void createVmDataCommands(DomainRouterVO router, Commands cmds) { long networkId = router.getNetworkId(); - List vms = _userVmDao.listByNetworkId(networkId); - if (vms != null && !vms.isEmpty()) { - for (UserVmVO vm : vms) { - NicVO nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); - if (nic != null) { - s_logger.debug("Creating user data entry for vm " + vm + " on domR " + router); - String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getServiceOfferingId()).getDisplayText(); - String zoneName = _dcDao.findById(router.getDataCenterIdToDeployIn()).getName(); - cmds.addCommand("vmdata", - generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), vm.getHostName(), vm.getInstanceName(), vm.getId(), null)); - } + List vms = _userVmDao.listByNetworkIdAndStates(networkId, State.Starting, State.Running, State.Migrating, State.Stopping); + for (UserVmVO vm : vms) { + NicVO nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); + if (nic != null) { + s_logger.debug("Creating user data entry for vm " + vm + " on domR " + router); + String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getServiceOfferingId()).getDisplayText(); + String zoneName = _dcDao.findById(router.getDataCenterIdToDeployIn()).getName(); + cmds.addCommand("vmdata", + generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), vm.getHostName(), vm.getInstanceName(), vm.getId(), null)); } } } private void createDhcpEntriesCommands(DomainRouterVO router, Commands cmds) { long networkId = router.getNetworkId(); - List vms = _userVmDao.listByNetworkId(networkId); - if (!vms.isEmpty()) { - for (UserVmVO vm : vms) { - if (vm.getState() != State.Destroyed && vm.getState() != State.Expunging) { - NicVO nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); - if (nic != null) { - s_logger.debug("Creating dhcp entry for vm " + vm + " on domR " + router + "."); + List vms = _userVmDao.listByNetworkIdAndStates(networkId, State.Starting, State.Running, State.Migrating, State.Stopping); + for (UserVmVO vm : vms) { + NicVO nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); + if (nic != null) { + s_logger.debug("Creating dhcp entry for vm " + vm + " on domR " + router + "."); - DhcpEntryCommand dhcpCommand = new DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), vm.getHostName()); - dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_IP, router.getPrivateIpAddress()); - dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); - DataCenterVO dcVo = _dcDao.findById(router.getDataCenterIdToDeployIn()); - dhcpCommand.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); + DhcpEntryCommand dhcpCommand = new DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), vm.getHostName()); + dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_IP, router.getPrivateIpAddress()); + dhcpCommand.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + DataCenterVO dcVo = _dcDao.findById(router.getDataCenterIdToDeployIn()); + dhcpCommand.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); - cmds.addCommand("dhcp", dhcpCommand); - } - } + cmds.addCommand("dhcp", dhcpCommand); } } } diff --git a/server/src/com/cloud/vm/dao/UserVmDao.java b/server/src/com/cloud/vm/dao/UserVmDao.java index 0db42f26458..a308f2212a9 100755 --- a/server/src/com/cloud/vm/dao/UserVmDao.java +++ b/server/src/com/cloud/vm/dao/UserVmDao.java @@ -22,6 +22,8 @@ import java.util.List; import com.cloud.utils.db.GenericDao; import com.cloud.vm.UserVmVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.State; public interface UserVmDao extends GenericDao { List listByAccountId(long id); @@ -57,7 +59,7 @@ public interface UserVmDao extends GenericDao { */ List listVirtualNetworkInstancesByAcctAndZone(long accountId, long dcId, long networkId); - List listByNetworkId(long networkId); + List listByNetworkIdAndStates(long networkId, State... states); List listByAccountIdAndHostId(long accountId, long hostId); diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java index a9d3200073a..d736088b974 100755 --- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -234,7 +234,7 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use } @Override - public List listByNetworkId(long networkId) { + public List listByNetworkIdAndStates(long networkId, State... states) { if (UserVmSearch == null) { NicDao _nicDao = ComponentLocator.getLocator("management-server").getDao(NicDao.class); SearchBuilder nicSearch = _nicDao.createSearchBuilder(); @@ -242,11 +242,15 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use nicSearch.and("ip4Address", nicSearch.entity().getIp4Address(), SearchCriteria.Op.NNULL); UserVmSearch = createSearchBuilder(); + UserVmSearch.and("states", UserVmSearch.entity().getState(), SearchCriteria.Op.IN); UserVmSearch.join("nicSearch", nicSearch, UserVmSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER); UserVmSearch.done(); } SearchCriteria sc = UserVmSearch.create(); + if (states != null) { + sc.setParameters("states", (Object[]) states); + } sc.setJoinParameters("nicSearch", "networkId", networkId); return listBy(sc);