mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Issue #: 5775
Release vnet and private IP allocation when domR fails to start
This commit is contained in:
parent
fb8e3ffec5
commit
d202ce4c7a
@ -794,6 +794,8 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
|
||||
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) {
|
||||
@ -847,8 +849,6 @@ 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();
|
||||
try {
|
||||
event = new EventVO();
|
||||
@ -862,6 +862,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
|
||||
for (final UserVmVO vm : vms) {
|
||||
if (vm.getVnet() != null) {
|
||||
vnet = vm.getVnet();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1002,28 +1003,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) {
|
||||
@ -1036,13 +1015,28 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
|
||||
return null;
|
||||
}
|
||||
} finally {
|
||||
if (router != null) {
|
||||
|
||||
if(s_logger.isDebugEnabled())
|
||||
s_logger.debug("Releasing lock on router " + routerId);
|
||||
_routerDao.release(routerId);
|
||||
}
|
||||
if (!started){
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
EventVO event = new EventVO();
|
||||
event.setUserId(1L);
|
||||
event.setAccountId(router.getAccountId());
|
||||
@ -1051,7 +1045,14 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager
|
||||
event.setLevel(EventVO.LEVEL_ERROR);
|
||||
event.setStartId(startEventId);
|
||||
_eventDao.persist(event);
|
||||
}
|
||||
|
||||
if (router != null) {
|
||||
if(s_logger.isDebugEnabled())
|
||||
s_logger.debug("Releasing lock on router " + routerId);
|
||||
_routerDao.release(routerId);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user