This is an automated email from the ASF dual-hosted git repository. bhaisaab pushed a commit to branch 4.10 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit e9f526e221480ea783f704db947fa030c40a9578 Merge: c1f30d9 0ead11e Author: Rohit Yadav <rohit.ya...@shapeblue.com> AuthorDate: Fri Jul 28 10:47:47 2017 +0200 Merge branch '4.9' into 4.10 Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> agent/conf/agent.properties | 4 ++ .../affinitygroup/UpdateVMAffinityGroupCmd.java | 12 +++-- .../virtualnetwork/VirtualRoutingResource.java | 9 ++-- .../network/guru/NuageVspGuestNetworkGuru.java | 36 +++++++------- .../src/com/cloud/util/NuageVspEntityBuilder.java | 56 +++++++++++++++------- .../com/cloud/util/NuageVspEntityBuilderTest.java | 33 ++++++------- server/src/com/cloud/server/StatsCollector.java | 4 +- systemvm/patches/debian/config/etc/vpcdnsmasq.conf | 2 +- test/integration/component/test_affinity_groups.py | 27 ++++++++++- 9 files changed, 121 insertions(+), 62 deletions(-) diff --cc agent/conf/agent.properties index c15b78e,8b99ee3..3ed382a --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@@ -158,21 -153,6 +158,25 @@@ hypervisor.type=kv # Some newer linux kernels are incapable of reliably migrating vms with kvmclock # This is a workaround for the bug, admin can set this to true per-host # -#router.aggregation.command.each.timeout=600 -#timeout value for aggregation commands send to virtual router +# vm.rng.enable=false +# This enabled the VirtIO Random Number Generator device for guests. +# +# vm.rng.model=random +# The model of VirtIO Random Number Generator (RNG) to present to the Guest. +# Currently only 'random' is supported. +# +# vm.rng.path=/dev/random +# Local Random Number Device Generator to use for VirtIO RNG for Guests. +# This is usually /dev/random, but per platform this might be different +# +# vm.rng.rate.bytes=2048 +# The amount of bytes the Guest may request/obtain from the RNG in the period +# specified below. +# +# vm.rng.rate.period=1000 +# The number of milliseconds in which the guest is allowed to obtain the bytes +# specified above. ++ ++# router.aggregation.command.each.timeout=600 ++# timeout value for aggregation commands send to virtual router + # diff --cc core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 1ea007e,e424bac..75f55f9 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@@ -387,11 -390,11 +390,11 @@@ public class VirtualRoutingResource ScriptConfigItem scriptConfigItem = new ScriptConfigItem(VRScripts.VR_CFG, "-c " + VRScripts.CONFIG_CACHE_LOCATION + cfgFileName); // 120s is the minimal timeout Duration timeout = _eachTimeout.withDurationAdded(_eachTimeout.getStandardSeconds(), answerCounts); - if (timeout.isShorterThan(VRScripts.VR_SCRIPT_EXEC_TIMEOUT)) { - timeout = VRScripts.VR_SCRIPT_EXEC_TIMEOUT; + if (s_logger.isDebugEnabled()){ + s_logger.debug("Aggregate action timeout in seconds is " + timeout.getStandardSeconds()); } - ExecutionResult result = applyConfigToVR(cmd.getRouterAccessIp(), fileConfigItem); + ExecutionResult result = applyConfigToVR(cmd.getRouterAccessIp(), fileConfigItem, timeout); if (!result.isSuccess()) { return new Answer(cmd, false, result.getDetails()); } diff --cc plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java index 80f6aab,d99c71d..735356a --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java @@@ -25,25 -23,17 +25,9 @@@ import java.util.Set import javax.inject.Inject; - import com.google.common.collect.FluentIterable; - import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; - import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; - import net.nuage.vsp.acs.client.api.model.VspDomain; --import net.nuage.vsp.acs.client.api.model.VspNetwork; --import net.nuage.vsp.acs.client.api.model.VspNic; --import net.nuage.vsp.acs.client.api.model.VspStaticNat; --import net.nuage.vsp.acs.client.api.model.VspVm; -- --import org.apache.log4j.Logger; -- --import com.google.common.base.Strings; - import com.google.common.collect.Iterables; - import com.google.common.collect.LinkedListMultimap; - import com.google.common.collect.Lists; - import com.google.common.collect.Maps; -- import org.apache.cloudstack.resourcedetail.VpcDetailVO; import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao; ++import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@@ -94,10 -82,7 +78,24 @@@ import com.cloud.vm.Nic import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.VMInstanceDao; ++import com.google.common.base.Strings; ++import com.google.common.collect.FluentIterable; ++import com.google.common.collect.Iterables; ++import com.google.common.collect.LinkedListMultimap; ++import com.google.common.collect.Lists; ++import com.google.common.collect.Maps; ++ ++import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; ++import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; ++import net.nuage.vsp.acs.client.api.model.VspDomain; ++import net.nuage.vsp.acs.client.api.model.VspNetwork; ++import net.nuage.vsp.acs.client.api.model.VspNic; ++import net.nuage.vsp.acs.client.api.model.VspStaticNat; ++import net.nuage.vsp.acs.client.api.model.VspVm; public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class); @@@ -335,12 -261,11 +333,12 @@@ VspStaticNat vspStaticNat = null; if (staticNatIp != null) { VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId()); - vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null); + vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, vspNic); } - HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); - ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat); + boolean defaultHasDns = getDefaultHasDns(networkHasDnsCache, nicFromDb); + VspDhcpVMOption dhcpOption = _nuageVspEntityBuilder.buildVmDhcpOption(nicFromDb, defaultHasDns, networkHasDns); + ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat, dhcpOption); Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { @@@ -563,36 -396,16 +561,36 @@@ return super.trash(network, offering); } - private HostVO getNuageVspHost(long physicalNetworkId) { - HostVO nuageVspHost; - List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listByPhysicalNetwork(physicalNetworkId); - if (nuageVspDevices != null && (!nuageVspDevices.isEmpty())) { - NuageVspDeviceVO config = nuageVspDevices.iterator().next(); - nuageVspHost = _hostDao.findById(config.getHostId()); - _hostDao.loadDetails(nuageVspHost); - } else { - throw new CloudRuntimeException("There is no Nuage VSP device configured on physical network " + physicalNetworkId); + private boolean networkHasDns(Network network) { + + if (network != null) { + List<String> dnsProviders = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(network.getNetworkOfferingId(), Network.Service.Dns); + return dnsProviders.contains(Network.Provider.VirtualRouter.getName()) + || dnsProviders.contains(Network.Provider.VPCVirtualRouter.getName()); + } - return nuageVspHost; + + return false; } -} + + private boolean getDefaultHasDns(Map<Long, Boolean> cache, Nic nic) { + Long networkId = nic.isDefaultNic() + ? Long.valueOf(nic.getNetworkId()) + : getDefaultNetwork(nic.getInstanceId()); + + Boolean hasDns = cache.get(networkId); + if (hasDns == null) { + hasDns = networkHasDns(_networkDao.findById(networkId)); + cache.put(networkId, hasDns); + } + return hasDns; + } + + private Long getDefaultNetwork(long vmId) { + NicVO defaultNic = _nicDao.findDefaultNicForVM(vmId); + if (defaultNic != null) return defaultNic.getNetworkId(); + return null; + } + + - } ++} diff --cc plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java index 84afa29,db24050..4e6ccb3 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java @@@ -19,10 -19,32 +19,24 @@@ package com.cloud.util; + import java.util.HashSet; + import java.util.Iterator; + import java.util.List; ++import java.util.Map; + import java.util.Set; + import java.util.TreeSet; + ++import javax.annotation.Nullable; + import javax.inject.Inject; + -import net.nuage.vsp.acs.client.api.model.VspAclRule; -import net.nuage.vsp.acs.client.api.model.VspDomain; -import net.nuage.vsp.acs.client.api.model.VspNetwork; -import net.nuage.vsp.acs.client.api.model.VspNic; -import net.nuage.vsp.acs.client.api.model.VspStaticNat; -import net.nuage.vsp.acs.client.api.model.VspVm; -import net.nuage.vsp.acs.client.common.model.Pair; - ++import org.apache.cloudstack.framework.config.dao.ConfigurationDao; + import org.apache.commons.lang.StringUtils; + import org.apache.log4j.Logger; + -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; - +import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.VlanDao; +import com.cloud.dc.dao.VlanDetailsDao; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; @@@ -49,37 -67,7 +63,26 @@@ import com.cloud.utils.exception.CloudR import com.cloud.utils.net.NetUtils; import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; +import com.cloud.vm.dao.VMInstanceDao; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; ++ +import net.nuage.vsp.acs.client.api.model.VspAclRule; - import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; +import net.nuage.vsp.acs.client.api.model.VspAddressRange; ++import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption; +import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption; +import net.nuage.vsp.acs.client.api.model.VspDomain; +import net.nuage.vsp.acs.client.api.model.VspDomainCleanUp; +import net.nuage.vsp.acs.client.api.model.VspNetwork; +import net.nuage.vsp.acs.client.api.model.VspNic; +import net.nuage.vsp.acs.client.api.model.VspStaticNat; +import net.nuage.vsp.acs.client.api.model.VspVm; +import net.nuage.vsp.acs.client.common.model.Pair; - import org.apache.cloudstack.framework.config.dao.ConfigurationDao; - import org.apache.commons.lang.StringUtils; - import org.apache.log4j.Logger; - - import javax.annotation.Nullable; - import javax.inject.Inject; - import java.util.HashSet; - import java.util.Iterator; - import java.util.List; - import java.util.Map; - import java.util.Set; - import java.util.TreeSet; public class NuageVspEntityBuilder { private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class); @@@ -386,13 -281,12 +389,13 @@@ .ipAddress(staticNatIp.getAddress().addr()) .revoke(forRevoke) .oneToOneNat(staticNatIp.isOneToOneNat()) + .state(getEnumValue(staticNatIp.getState(), VspStaticNat.State.class)) .vlanUuid(staticNatVlan.getUuid()) .vlanGateway(staticNatVlan.getVlanGateway()) - .vlanNetmask(staticNatVlan.getVlanNetmask()); + .vlanNetmask(staticNatVlan.getVlanNetmask()) + .vlanUnderlay(NuageVspUtil.isUnderlayEnabledForVlan(_vlanDetailsDao, staticNatVlan)); - if (nic != null) { - VspNic vspNic = buildVspNic(nic); + if (vspNic != null) { vspStaticNatBuilder.nic(vspNic); } @@@ -479,31 -378,19 +487,47 @@@ return vspAclRuleBuilder.build(); } + /** Build VspDhcpVMOption to put on the VM interface */ + public VspDhcpVMOption buildVmDhcpOption (NicVO userNic, boolean defaultHasDns, boolean networkHasDns) { + VMInstanceVO userVm = _vmInstanceDao.findById(userNic.getInstanceId()); + VspDhcpVMOption.Builder vspDhcpVMOptionBuilder = new VspDhcpVMOption.Builder() + .nicUuid(userNic.getUuid()) + .defaultHasDns(defaultHasDns) + .hostname(userVm.getHostName()) + .networkHasDns(networkHasDns) + .isDefaultInterface(userNic.isDefaultNic()) + .domainRouter(VirtualMachine.Type.DomainRouter.equals(userNic.getVmType())); + return vspDhcpVMOptionBuilder.build(); + } + + /** Build VspDhcpVMOption to put on the subnet */ + public VspDhcpDomainOption buildNetworkDhcpOption(Network network, NetworkOffering offering) { + List<String> dnsProvider = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), Network.Service.Dns); + boolean isVrDnsProvider = dnsProvider.contains("VirtualRouter") || dnsProvider.contains("VpcVirtualRouter"); + VspDhcpDomainOption.Builder vspDhcpDomainBuilder = new VspDhcpDomainOption.Builder() + .dnsServers(_nuageVspManager.getDnsDetails(network.getDataCenterId())) + .vrIsDnsProvider(isVrDnsProvider); + + if (isVrDnsProvider) { + vspDhcpDomainBuilder.networkDomain(network.getVpcId() != null ? _vpcDao.findById(network.getVpcId()).getNetworkDomain() : network.getNetworkDomain()); + } + + return vspDhcpDomainBuilder.build(); + } ++ + private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, Class<E> target) { + try { + return Enum.valueOf(target, cloudstackValue.name()); + } catch (IllegalArgumentException e) { + return null; + } + } + + private <E extends Enum<E>> E getEnumValue(Enum cloudstackValue, E defaultValue) { + try { + return Enum.valueOf(defaultValue.getDeclaringClass(), cloudstackValue.name()); + } catch (IllegalArgumentException e) { + return defaultValue; + } + } } diff --cc plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java index a3f8752,ef63220..7ebdeb3 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java @@@ -19,26 -19,12 +19,25 @@@ package com.cloud.util; - import net.nuage.vsp.acs.client.api.model.Protocol; - import net.nuage.vsp.acs.client.api.model.VspAclRule; - import net.nuage.vsp.acs.client.api.model.VspDomain; - import net.nuage.vsp.acs.client.api.model.VspNetwork; - import net.nuage.vsp.acs.client.api.model.VspNic; - import net.nuage.vsp.acs.client.api.model.VspStaticNat; - import net.nuage.vsp.acs.client.api.model.VspVm; ++import static org.junit.Assert.assertEquals; ++import static org.junit.Assert.assertNotNull; ++import static org.junit.Assert.assertNull; ++import static org.mockito.Matchers.anyLong; ++import static org.mockito.Matchers.anyString; ++import static org.mockito.Mockito.mock; ++import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; + - import com.google.common.collect.Lists; - import com.cloud.NuageTest; +import com.cloud.dc.VlanDetailsVO; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.VlanDao; +import com.cloud.dc.dao.VlanDetailsDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; + import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; @@@ -58,14 -43,24 +57,15 @@@ import com.cloud.utils.net.Ip import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; import com.cloud.vm.VirtualMachine; + import com.google.common.collect.Lists; + - import static org.junit.Assert.assertEquals; - import static org.junit.Assert.assertNotNull; - import static org.junit.Assert.assertNull; - import static org.mockito.Matchers.anyLong; - import static org.mockito.Matchers.anyString; - import static org.mockito.Mockito.mock; - import static org.mockito.Mockito.when; ++import net.nuage.vsp.acs.client.api.model.Protocol; + import net.nuage.vsp.acs.client.api.model.VspAclRule; + import net.nuage.vsp.acs.client.api.model.VspDomain; + import net.nuage.vsp.acs.client.api.model.VspNetwork; + import net.nuage.vsp.acs.client.api.model.VspNic; + import net.nuage.vsp.acs.client.api.model.VspStaticNat; + import net.nuage.vsp.acs.client.api.model.VspVm; -import net.nuage.vsp.acs.client.common.model.Pair; -import org.junit.Before; -import org.junit.Test; - -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class NuageVspEntityBuilderTest extends NuageTest { -- To stop receiving notification emails like this one, please contact "commits@cloudstack.apache.org" <commits@cloudstack.apache.org>.