From 279e9cbe4975d7938e1ebf848dbe75b0d91c4381 Mon Sep 17 00:00:00 2001 From: Jayapal Date: Tue, 7 Jan 2014 16:59:17 +0530 Subject: [PATCH] CLOUDSTACK-5552 fixed private gateway DB clean up on router upgrade required --- .../VirtualNetworkApplianceManagerImpl.java | 5 +++-- ...VpcVirtualNetworkApplianceManagerImpl.java | 22 ++++++++++++++----- .../com/cloud/network/vpc/VpcManagerImpl.java | 3 ++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 47020afeb18..1a37c9baa8e 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -3897,8 +3897,9 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V List nics = _nicDao.listByVmId(routerId); for (NicVO n : nics) { NetworkVO nc = _networkDao.findById(n.getNetworkId()); - if (nc.getTrafficType() == TrafficType.Control) { + if (nc !=null && nc.getTrafficType() == TrafficType.Control) { routerControlIpAddress = n.getIp4Address(); + break; } } @@ -4088,7 +4089,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V //Checks if the router is at the required version // Compares MS version and router version - private boolean checkRouterVersion(VirtualRouter router){ + protected boolean checkRouterVersion(VirtualRouter router){ if(!routerVersionCheckEnabled.value()){ //Router version check is disabled. return true; diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index c9cdb1f538d..f65c8b0d122 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -914,6 +914,11 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian try { Network network = _networkModel.getNetwork(gateway.getNetworkId()); NicProfile requested = createPrivateNicProfileForGateway(gateway); + + if (!checkRouterVersion(router)) { + s_logger.warn("Router requires upgrade. Unable to send command to router: " + router.getId()); + return false; + } NicProfile guestNic = _itMgr.addVmToNetwork(router, network, requested); @@ -963,12 +968,17 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian privateIps.add(ip); Commands cmds = new Commands(Command.OnError.Stop); createVpcAssociatePrivateIPCommands(router, privateIps, cmds, add); - - if (sendCommandsToRouter(router, cmds)) { - s_logger.debug("Successfully applied ip association for ip " + ip + " in vpc network " + network); - return true; - } else { - s_logger.warn("Failed to associate ip address " + ip + " in vpc network " + network); + + try{ + if (sendCommandsToRouter(router, cmds)) { + s_logger.debug("Successfully applied ip association for ip " + ip + " in vpc network " + network); + return true; + } else { + s_logger.warn("Failed to associate ip address " + ip + " in vpc network " + network); + return false; + } + }catch (Exception ex) { + s_logger.warn("Failed to send " + (add ?"add ":"delete ") + " private network " + network + " commands to rotuer "); return false; } } else if (router.getState() == State.Stopped || router.getState() == State.Stopping) { diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 017d38df3bb..0d1c5373f04 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -1513,7 +1513,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis if (!success) { if (destroyOnFailure) { s_logger.debug("Destroying private gateway " + vo + " that failed to start"); - if (deleteVpcPrivateGateway(gatewayId)) { + // calling deleting from db because on createprivategateway fail, destroyPrivateGateway is already called + if (deletePrivateGatewayFromTheDB(getVpcPrivateGateway(gatewayId))) { s_logger.warn("Successfully destroyed vpc " + vo + " that failed to start"); } else { s_logger.warn("Failed to destroy vpc " + vo + " that failed to start");