From 4a4abac1418bd9b98598374fec5f3dc8eb544277 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 3 Nov 2011 17:41:50 -0700 Subject: [PATCH] NaaS: Fix virtual router element id filling The physical network ID can be null in basic mode --- .../VirtualNetworkApplianceManagerImpl.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1703149df13..fe807dbab3b 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1118,7 +1118,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian type = VirtualRouterProviderType.RedundantVirtualRouterElement; typeString = "RedundantVirtualRouter"; } - PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(network.getPhysicalNetworkId(), typeString); + + //physical network id can be null in Guest Network in Basic zone, so locate the physical network + Long physicalNetworkId = network.getPhysicalNetworkId(); + if (physicalNetworkId == null) { + physicalNetworkId = _networkMgr.findPhysicalNetworkId(network.getDataCenterId(), null); + } + PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, typeString); VirtualRouterProvider vrProvider = _vrProviderDao.findByNspIdAndType(provider.getId(), type); ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(offering_id); int retry = 0; @@ -1337,9 +1343,14 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian /* Before starting router, already know the hypervisor type */ VMTemplateVO template = _templateDao.findRoutingTemplate(hType); + //physical network id can be null in Guest Network in Basic zone, so locate the physical network + Long physicalNetworkId = network.getPhysicalNetworkId(); + if (physicalNetworkId == null) { + physicalNetworkId = _networkMgr.findPhysicalNetworkId(network.getDataCenterId(), null); + } VirtualRouterProviderType type = VirtualRouterProviderType.DhcpElement; String typeString = "DhcpServer"; - PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(network.getPhysicalNetworkId(), typeString); + PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, typeString); VirtualRouterProvider vrProvider = _vrProviderDao.findByNspIdAndType(provider.getId(), type); router = new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(), VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),