diff --git a/api/src/com/cloud/host/Status.java b/api/src/com/cloud/host/Status.java index 5adf487445e..63cecb5665f 100644 --- a/api/src/com/cloud/host/Status.java +++ b/api/src/com/cloud/host/Status.java @@ -122,7 +122,7 @@ public enum Status { s_fsm.addTransition(Status.Connecting, Event.HostDown, Status.Alert); s_fsm.addTransition(Status.Connecting, Event.Ping, Status.Connecting); s_fsm.addTransition(Status.Connecting, Event.ManagementServerDown, Status.Disconnected); - s_fsm.addTransition(Status.Connecting, Event.AgentDisconnected, Status.Alert); + s_fsm.addTransition(Status.Connecting, Event.AgentDisconnected, Status.Disconnected); s_fsm.addTransition(Status.Up, Event.PingTimeout, Status.Alert); s_fsm.addTransition(Status.Up, Event.MaintenanceRequested, Status.PrepareForMaintenance); s_fsm.addTransition(Status.Up, Event.AgentDisconnected, Status.Alert); diff --git a/api/src/com/cloud/resource/Resource.java b/api/src/com/cloud/resource/Resource.java index 3cc5135c648..b1e99ba6137 100644 --- a/api/src/com/cloud/resource/Resource.java +++ b/api/src/com/cloud/resource/Resource.java @@ -36,9 +36,7 @@ public interface Resource { @Override public StateMachine getStateMachine() { - - // TODO Auto-generated method stub - return null; + return s_fsm; } @Override diff --git a/core/src/com/cloud/agent/transport/Request.java b/core/src/com/cloud/agent/transport/Request.java index 869fed7e1a9..583a2b1df75 100755 --- a/core/src/com/cloud/agent/transport/Request.java +++ b/core/src/com/cloud/agent/transport/Request.java @@ -295,7 +295,7 @@ public class Request { throw new UnsupportedVersionException("This version is no longer supported: " + version.toString(), UnsupportedVersionException.IncompatibleVersion); } final byte reserved = buff.get(); // tossed away for now. - final Short flags = buff.getShort(); + final short flags = buff.getShort(); final boolean isRequest = (flags & FLAG_REQUEST) > 0; final long seq = buff.getLong(); diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 301c406ab49..be5b866b639 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -709,6 +709,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } } + @Override public boolean deleteHost(DeleteHostCmd cmd) throws InvalidParameterValueException{ Long id = cmd.getId(); diff --git a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java index a892c1f2acc..6a2c27d6aac 100644 --- a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java @@ -18,6 +18,7 @@ package com.cloud.agent.manager.allocator.impl; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -36,7 +37,9 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.host.Host; import com.cloud.offering.ServiceOffering; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.StoragePoolDao; +import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.Pair; import com.cloud.utils.component.Inject; import com.cloud.vm.VirtualMachine; @@ -50,6 +53,7 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { @Inject StoragePoolDao _poolDao; @Inject ClusterDao _clusterDao; @Inject AgentManager _agentMgr; + @Inject VolumeDao _volsDao; @Override public Host allocateTo(VirtualMachineProfile vm, ServiceOffering offering, Host.Type type, DataCenterVO dc, HostPodVO pod, @@ -67,6 +71,20 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { } List pcs = _agentMgr.listByDataCenter(dc.getId()); + if (vmType == VirtualMachine.Type.DomainRouter) { + s_logger.debug("VM is a domain router so we can only allow the host to be allocated in the same pod due to problems with the DHCP only domR"); + List vols = _volsDao.findByInstance(vm.getId()); + VolumeVO vol = vols.get(0); + long podId = vol.getPodId(); + s_logger.debug("Pod id determined from volume " + vol.getId() + " is " + podId); + Iterator it = pcs.iterator(); + while (it.hasNext()) { + PodCluster pc = it.next(); + if (pc.getPod().getId() != podId) { + it.remove(); + } + } + } Set> avoidPcs = new HashSet>(); for (Host h : avoid) { avoidPcs.add(new Pair(h.getPodId(), h.getClusterId())); diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 9ce3c85e646..9908264d259 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -71,18 +71,6 @@ import com.cloud.vm.VirtualMachineProfile; public interface NetworkManager extends Manager { public static final int DEFAULT_ROUTER_VM_RAMSIZE = 128; // 128M public static final boolean USE_POD_VLAN = false; - /** - * Assigns a router to the user. - * - * @param userId user id. - * @param dcId data center id. - * @param podId pod id. - * @param domain domain to use - * @return DomainRouter if one is assigned. - * @throws InsufficientCapacityException if assigning causes any capacity issues. - */ - DomainRouterVO assignRouter(long userId, long accountId, long dcId, long podId, String domain, String instance) throws InsufficientCapacityException; - /** * create the router. * diff --git a/server/src/com/cloud/network/SshKeysDistriMonitor.java b/server/src/com/cloud/network/SshKeysDistriMonitor.java index fb7f123da17..c56e3d06178 100644 --- a/server/src/com/cloud/network/SshKeysDistriMonitor.java +++ b/server/src/com/cloud/network/SshKeysDistriMonitor.java @@ -35,16 +35,17 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.router.DomainRouterManager; public class SshKeysDistriMonitor implements Listener { private static final Logger s_logger = Logger.getLogger(SshKeysDistriMonitor.class); - private final NetworkManager _networkMgr; + private final DomainRouterManager _routerMgr; private final HostDao _hostDao; private ConfigurationDao _configDao; - public SshKeysDistriMonitor(NetworkManager mgr, HostDao host, ConfigurationDao config) { - this._networkMgr = mgr; + public SshKeysDistriMonitor(DomainRouterManager mgr, HostDao host, ConfigurationDao config) { + this._routerMgr = mgr; _hostDao = host; _configDao = config; } @@ -79,7 +80,7 @@ public class SshKeysDistriMonitor implements Listener { Map configs = _configDao.getConfiguration("management-server", new HashMap()); String pubKey = configs.get("ssh.publickey"); String prvKey = configs.get("ssh.privatekey"); - if (!_networkMgr.sendSshKeysToHost(host.getId(), pubKey, prvKey)) { + if (!_routerMgr.sendSshKeysToHost(host.getId(), pubKey, prvKey)) { s_logger.debug("Failed to send keys to agent: " + host.getId()); return false; } diff --git a/server/src/com/cloud/network/router/DomainRouterManager.java b/server/src/com/cloud/network/router/DomainRouterManager.java index cb7a93e73ba..9d9f9ccb283 100644 --- a/server/src/com/cloud/network/router/DomainRouterManager.java +++ b/server/src/com/cloud/network/router/DomainRouterManager.java @@ -20,36 +20,23 @@ package com.cloud.network.router; import java.util.List; import java.util.Map; -import com.cloud.agent.api.to.NicTO; import com.cloud.async.executor.AssignToLoadBalancerExecutor; import com.cloud.async.executor.LoadBalancerParam; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.VlanVO; -import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlan; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.FirewallRuleVO; import com.cloud.network.IPAddressVO; -import com.cloud.network.NetworkConfiguration; -import com.cloud.network.NetworkConfigurationVO; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.user.AccountVO; -import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; import com.cloud.vm.DomainRouter; import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.NicProfile; -import com.cloud.vm.NicVO; import com.cloud.vm.UserVmVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachineProfile; /** * NetworkManager manages the network for the different end users. @@ -120,6 +107,9 @@ public interface DomainRouterManager extends Manager { boolean getRouterStatistics(long vmId, Map netStats, Map diskStats); + DomainRouterVO findByPublicIpAddress(String publicIpAddress); + DomainRouterVO findByAccountAndDataCenter(long accountId, long dataCenterId); + boolean rebootRouter(long routerId, long eventId); /** * @param hostId get all of the virtual machine routers on a host. @@ -225,19 +215,5 @@ public interface DomainRouterManager extends Manager { */ List listPublicIpAddressesInVirtualNetwork(long accountId, long dcId, Boolean sourceNat); - NetworkConfigurationVO setupNetworkConfiguration(AccountVO owner, NetworkOfferingVO offering, DeploymentPlan plan); - NetworkConfigurationVO setupNetworkConfiguration(AccountVO owner, NetworkOfferingVO offering, NetworkConfiguration predefined, DeploymentPlan plan); - List setupNetworkConfigurations(AccountVO owner, List offerings, DeploymentPlan plan); - - List getSystemAccountNetworkOfferings(String... offeringNames); - - List allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException; - - NicTO[] prepare(VirtualMachineProfile profile, DeployDestination dest) throws InsufficientAddressCapacityException, InsufficientVirtualNetworkCapcityException; - void release(VirtualMachineProfile vmProfile); - - void create(K vm); - - List getNics(K vm); boolean upgradeRouter(long routerId, long serviceOfferingId); } diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index bf8fc102ef6..b482a61059f 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -18,7 +18,6 @@ package com.cloud.network.router; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -57,7 +56,6 @@ import com.cloud.agent.api.routing.LoadBalancerCfgCommand; import com.cloud.agent.api.routing.SavePasswordCommand; import com.cloud.agent.api.routing.SetFirewallRuleCommand; import com.cloud.agent.api.routing.VmDataCommand; -import com.cloud.agent.api.to.NicTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.async.AsyncJobExecutor; @@ -78,8 +76,6 @@ import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.EventState; @@ -88,9 +84,7 @@ import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; @@ -105,8 +99,6 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.LoadBalancerConfigurator; import com.cloud.network.LoadBalancerVO; import com.cloud.network.Network.TrafficType; -import com.cloud.network.NetworkConfiguration; -import com.cloud.network.NetworkConfigurationVO; import com.cloud.network.SecurityGroupVMMapVO; import com.cloud.network.SshKeysDistriMonitor; import com.cloud.network.configuration.NetworkGuru; @@ -120,8 +112,6 @@ import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.GuestIpType; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.resource.Resource; -import com.cloud.resource.Resource.ReservationStrategy; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.GuestOSVO; @@ -160,16 +150,12 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.DomainRouter; import com.cloud.vm.DomainRouter.Role; import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.NicProfile; -import com.cloud.vm.NicVO; import com.cloud.vm.State; import com.cloud.vm.UserVmVO; -import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; -import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; @@ -1890,7 +1876,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach throw new ConfigurationException("Unable to get " + UserStatisticsDao.class.getName()); } - _agentMgr.registerForHostEvents(new SshKeysDistriMonitor(null, _hostDao, _configDao), true, false, false); + _agentMgr.registerForHostEvents(new SshKeysDistriMonitor(this, _hostDao, _configDao), true, false, false); _haMgr.registerHandler(VirtualMachine.Type.DomainRouter, this); boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key())); @@ -2040,6 +2026,17 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach return stopped; } + + @Override + public DomainRouterVO findByPublicIpAddress(String publicIpAddress) { + return _routerDao.findByPublicIpAddress(publicIpAddress); + } + + @Override + public DomainRouterVO findByAccountAndDataCenter(long accountId, long dataCenterId) { + return _routerDao.findBy(accountId, dataCenterId); + } + @Override @DB @@ -2408,274 +2405,6 @@ public class DomainRouterManagerImpl implements DomainRouterManager, VirtualMach return _ipAddressDao.search(ipAddressSC, null); } - @Override - public NetworkConfigurationVO setupNetworkConfiguration(AccountVO owner, NetworkOfferingVO offering, DeploymentPlan plan) { - return setupNetworkConfiguration(owner, offering, null, plan); - } - - @Override - public NetworkConfigurationVO setupNetworkConfiguration(AccountVO owner, NetworkOfferingVO offering, NetworkConfiguration predefined, DeploymentPlan plan) { - List configs = _networkProfileDao.listBy(owner.getId(), offering.getId(), plan.getDataCenterId()); - if (configs.size() > 0) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Found existing network configuration for offering " + offering + ": " + configs.get(0)); - } - return configs.get(0); - } - - for (NetworkGuru guru : _networkGurus) { - NetworkConfiguration config = guru.design(offering, plan, predefined, owner); - if (config == null) { - continue; - } - - if (config.getId() != null) { - if (config instanceof NetworkConfigurationVO) { - return (NetworkConfigurationVO)config; - } else { - return _networkProfileDao.findById(config.getId()); - } - } - - NetworkConfigurationVO vo = new NetworkConfigurationVO(config, offering.getId(), plan.getDataCenterId(), guru.getName()); - return _networkProfileDao.persist(vo, owner.getId()); - } - - throw new CloudRuntimeException("Unable to convert network offering to network profile: " + offering.getId()); - } - - @Override - public List setupNetworkConfigurations(AccountVO owner, List offerings, DeploymentPlan plan) { - List profiles = new ArrayList(offerings.size()); - for (NetworkOfferingVO offering : offerings) { - profiles.add(setupNetworkConfiguration(owner, offering, plan)); - } - return profiles; - } - - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - List offerings = new ArrayList(offeringNames.length); - for (String offeringName : offeringNames) { - NetworkOfferingVO network = _systemNetworks.get(offeringName); - if (network == null) { - throw new CloudRuntimeException("Unable to find system network profile for " + offeringName); - } - offerings.add(network); - } - return offerings; - } - - public NetworkConfigurationVO createNetworkConfiguration(NetworkOfferingVO offering, DeploymentPlan plan, AccountVO owner) { - return null; - } - - - @Override @DB - public List allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException { - List nicProfiles = new ArrayList(networks.size()); - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - int deviceId = 0; - - boolean[] deviceIds = new boolean[networks.size()]; - Arrays.fill(deviceIds, false); - - List nics = new ArrayList(networks.size()); - NicVO defaultNic = null; - - for (Pair network : networks) { - NetworkConfigurationVO config = network.first(); - NetworkGuru concierge = _networkGurus.get(config.getGuruName()); - NicProfile requested = network.second(); - NicProfile profile = concierge.allocate(config, requested, vm); - if (profile == null) { - continue; - } - NicVO vo = new NicVO(concierge.getName(), vm.getId(), config.getId()); - vo.setMode(network.first().getMode()); - - while (deviceIds[deviceId] && deviceId < deviceIds.length) { - deviceId++; - } - - deviceId = applyProfileToNic(vo, profile, deviceId); - - vo = _nicDao.persist(vo); - - if (vo.isDefaultNic()) { - if (defaultNic != null) { - throw new IllegalArgumentException("You cannot specify two nics as default nics: nic 1 = " + defaultNic + "; nic 2 = " + vo); - } - defaultNic = vo; - } - - int devId = vo.getDeviceId(); - if (devId > deviceIds.length) { - throw new IllegalArgumentException("Device id for nic is too large: " + vo); - } - if (deviceIds[devId]) { - throw new IllegalArgumentException("Conflicting device id for two different nics: " + devId); - } - - deviceIds[devId] = true; - nics.add(vo); - nicProfiles.add(new NicProfile(vo, network.first(), vo.getBroadcastUri(), vo.getIsolationUri())); - } - - if (defaultNic == null && nics.size() > 2) { - throw new IllegalArgumentException("Default Nic was not set."); - } else if (nics.size() == 1) { - nics.get(0).setDefaultNic(true); - } - - txn.commit(); - - return nicProfiles; - } - - protected Integer applyProfileToNic(NicVO vo, NicProfile profile, Integer deviceId) { - if (profile.getDeviceId() != null) { - vo.setDeviceId(profile.getDeviceId()); - } else if (deviceId != null ) { - vo.setDeviceId(deviceId++); - } - - vo.setDefaultNic(profile.isDefaultNic()); - - if (profile.getIp4Address() != null) { - vo.setIp4Address(profile.getIp4Address()); - vo.setState(NicVO.State.Reserved); - } - - if (profile.getMacAddress() != null) { - vo.setMacAddress(profile.getMacAddress()); - } - - vo.setMode(profile.getMode()); - vo.setNetmask(profile.getNetmask()); - vo.setGateway(profile.getGateway()); - - return deviceId; - } - - protected NicTO toNicTO(NicVO nic, NicProfile profile, NetworkConfigurationVO config) { - NicTO to = new NicTO(); - to.setDeviceId(nic.getDeviceId()); - to.setBroadcastType(config.getBroadcastDomainType()); - to.setType(config.getTrafficType()); - to.setIp(nic.getIp4Address()); - to.setNetmask(nic.getNetmask()); - to.setMac(nic.getMacAddress()); - if (config.getDns() != null) { - String[] tokens = config.getDns().split(","); - to.setDns1(tokens[0]); - if (tokens.length > 2) { - to.setDns2(tokens[1]); - } - } - if (nic.getGateway() != null) { - to.setGateway(nic.getGateway()); - } else { - to.setGateway(config.getGateway()); - } - to.setDefaultNic(nic.isDefaultNic()); - to.setBroadcastUri(nic.getBroadcastUri()); - to.setIsolationuri(nic.getIsolationUri()); - if (profile != null) { - to.setDns1(profile.getDns1()); - to.setDns2(profile.getDns2()); - } - - return to; - } - - @Override - public NicTO[] prepare(VirtualMachineProfile vmProfile, DeployDestination dest) throws InsufficientAddressCapacityException, InsufficientVirtualNetworkCapcityException { - List nics = _nicDao.listBy(vmProfile.getId()); - NicTO[] nicTos = new NicTO[nics.size()]; - int i = 0; - for (NicVO nic : nics) { - NetworkConfigurationVO config = _networkProfileDao.findById(nic.getNetworkConfigurationId()); - NicProfile profile = null; - if (nic.getReservationStrategy() == ReservationStrategy.Start) { - NetworkGuru concierge = _networkGurus.get(config.getGuruName()); - nic.setState(Resource.State.Reserving); - _nicDao.update(nic.getId(), nic); - profile = toNicProfile(nic); - String reservationId = concierge.reserve(profile, config, vmProfile, dest); - nic.setIp4Address(profile.getIp4Address()); - nic.setIp6Address(profile.getIp6Address()); - nic.setMacAddress(profile.getMacAddress()); - nic.setIsolationUri(profile.getIsolationUri()); - nic.setBroadcastUri(profile.getBroadCastUri()); - nic.setReservationId(reservationId); - nic.setReserver(concierge.getName()); - nic.setState(Resource.State.Reserved); - nic.setNetmask(profile.getNetmask()); - nic.setGateway(profile.getGateway()); - nic.setAddressFormat(profile.getFormat()); - _nicDao.update(nic.getId(), nic); - for (NetworkElement element : _networkElements) { - if (!element.prepare(config, profile, vmProfile, null)) { - s_logger.warn("Unable to prepare " + nic + " for element " + element.getName()); - return null; - } - } - } - - nicTos[i++] = toNicTO(nic, profile, config); - - } - return nicTos; - } - - @Override - public void release(VirtualMachineProfile vmProfile) { - List nics = _nicDao.listBy(vmProfile.getId()); - for (NicVO nic : nics) { - NetworkConfigurationVO config = _networkProfileDao.findById(nic.getNetworkConfigurationId()); - if (nic.getReservationStrategy() == ReservationStrategy.Start) { - NetworkGuru concierge = _networkGurus.get(config.getGuruName()); - nic.setState(Resource.State.Releasing); - _nicDao.update(nic.getId(), nic); - concierge.release(nic.getReservationId()); - } - } - } - - NicProfile toNicProfile(NicVO nic) { - NetworkConfiguration config = _networkProfileDao.findById(nic.getNetworkConfigurationId()); - NicProfile profile = new NicProfile(nic, config, nic.getBroadcastUri(), nic.getIsolationUri()); - return profile; - } - - public void release(long vmId) { - List nics = _nicDao.listBy(vmId); - - for (NicVO nic : nics) { - nic.setState(Resource.State.Releasing); - _nicDao.update(nic.getId(), nic); - NetworkGuru concierge = _networkGurus.get(nic.getReserver()); - if (!concierge.release(nic.getReservationId())) { - s_logger.warn("Unable to release " + nic + " using " + concierge.getName()); - } - nic.setState(Resource.State.Allocated); - _nicDao.update(nic.getId(), nic); - } - } - - @Override - public void create(K vm) { - } - - @Override - public List getNics(K vm) { - return _nicDao.listBy(vm.getId()); - } - protected class NetworkUsageTask implements Runnable { public NetworkUsageTask() {