diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 33aaa146fa1..2e7e287befe 100644 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -770,6 +770,9 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager if(s_logger.isDebugEnabled()) s_logger.debug("Lock on router " + routerId + " is acquired"); + boolean started = false; + String vnet = null; + boolean vnetAllocated = false; try { final State state = router.getState(); if (state == State.Running) { @@ -816,10 +819,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager throw new ConcurrentOperationException("Someone else is starting the router: " + router.toString()); } - String vnet = null; - boolean vnetAllocated = false; final boolean mirroredVols = router.isMirroredVols(); - boolean started = false; try { event = new EventVO(); event.setUserId(1L); @@ -832,6 +832,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager for (final UserVmVO vm : vms) { if (vm.getVnet() != null) { vnet = vm.getVnet(); + break; } } } @@ -969,28 +970,6 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager return _routerDao.findById(routerId); } catch (final Throwable th) { - Transaction txn = Transaction.currentTxn(); - if (!started) { - txn.start(); - if (vnetAllocated == true && vnet != null) { - _dcDao.releaseVnet(vnet, router.getDataCenterId(), router.getAccountId()); - } - - router.setVnet(null); - String privateIpAddress = router.getPrivateIpAddress(); - - router.setPrivateIpAddress(null); - - if (privateIpAddress != null) { - _dcDao.releasePrivateIpAddress(privateIpAddress, router.getDataCenterId(), router.getId()); - } - - - if (_routerDao.updateIf(router, Event.OperationFailed, null)) { - txn.commit(); - } - } - if (th instanceof ExecutionException) { s_logger.error("Error while starting router due to " + th.getMessage()); } else if (th instanceof ConcurrentOperationException) { @@ -1003,8 +982,30 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager return null; } } finally { + + if (!started){ + Transaction txn = Transaction.currentTxn(); + txn.start(); + if (vnetAllocated == true && vnet != null) { + _dcDao.releaseVnet(vnet, router.getDataCenterId(), router.getAccountId()); + } + + router.setVnet(null); + String privateIpAddress = router.getPrivateIpAddress(); + + router.setPrivateIpAddress(null); + + if (privateIpAddress != null) { + _dcDao.releasePrivateIpAddress(privateIpAddress, router.getDataCenterId(), router.getId()); + } + + + if (_routerDao.updateIf(router, Event.OperationFailed, null)) { + txn.commit(); + } + } + if (router != null) { - if(s_logger.isDebugEnabled()) s_logger.debug("Releasing lock on router " + routerId); _routerDao.release(routerId);