From f20c725827fd2cf3e2fc331323262efaff9fc45b Mon Sep 17 00:00:00 2001 From: alena Date: Tue, 18 Jan 2011 11:20:11 -0800 Subject: [PATCH] bug 8062: fixed releasing vnet when corresponding network is shutdown. Used to happen because reservation_id for the network didn't match reservation_id for the vnet, and cleanup thread couldn't find vnet to cleanup status 8062: resolved fixed Also set broadcastUri to null when shutdown the corresponding network. --- server/src/com/cloud/network/NetworkManager.java | 2 ++ .../src/com/cloud/network/NetworkManagerImpl.java | 13 +++++++++++-- .../com/cloud/network/guru/GuestNetworkGuru.java | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 465268360be..77c61950a14 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -145,5 +145,7 @@ public interface NetworkManager extends NetworkService { List listNetworksUsedByVm(long vmId, boolean isSystem); void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest); + + void resetBroadcastUri(long networkId); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index e25fea93439..86e57042d07 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1019,7 +1019,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); network.setState(Network.State.Implementing); - network.setReservationId(context.getReservationId()); + _networksDao.update(networkId, network); Network result = guru.implement(network, offering, dest, context); @@ -1038,6 +1038,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag element.implement(network, offering, dest, context); } + network.setReservationId(context.getReservationId()); network.setState(Network.State.Implemented); _networksDao.update(network.getId(), network); implemented.set(guru, network); @@ -1675,6 +1676,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.start(); if (success) { if (s_logger.isDebugEnabled()) { + s_logger.debug("Network id=" + networkId + " is shutdown successfully, cleaning up corresponding resources now."); } NetworkGuru guru = _networkGurus.get(network.getGuruName()); guru.destroy(network, _networkOfferingDao.findById(network.getNetworkOfferingId())); @@ -1732,7 +1734,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("We found network " + networkId + " to be free for the first time. Adding it to the list: " + currentTime); } stillFree.put(networkId, currentTime); - } else if (time < (currentTime + _networkGcWait)) { + } else if (time > (currentTime - _networkGcWait)) { if (s_logger.isDebugEnabled()) { s_logger.debug("Network " + networkId + " is still free but it's not time to shutdown yet: " + time); } @@ -1920,5 +1922,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return networks; } + + @Override + public void resetBroadcastUri(long networkId) { + NetworkVO network = _networksDao.findById(networkId); + network.setBroadcastUri(null); + _networksDao.update(networkId, network); + } } diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java index da71e5ac8c1..4be7be4a8b5 100644 --- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java @@ -241,7 +241,9 @@ public class GuestNetworkGuru extends AdapterBase implements NetworkGuru { @Override public void destroy(Network network, NetworkOffering offering) { + s_logger.debug("Releasing vnet for the network id=" + network.getId()); _dcDao.releaseVnet(network.getBroadcastUri().getHost(), network.getDataCenterId(), network.getAccountId(), network.getReservationId()); + _networkMgr.resetBroadcastUri(network.getId()); } @Override