mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	bug 11264: merge fix from 2.2.10
This commit is contained in:
		
							parent
							
								
									1fefdd628d
								
							
						
					
					
						commit
						fcd26a999b
					
				| @ -18,6 +18,7 @@ import com.cloud.utils.db.GlobalLock; | |||||||
| import com.cloud.utils.net.NetUtils; | import com.cloud.utils.net.NetUtils; | ||||||
| import com.vmware.vim25.DynamicProperty; | import com.vmware.vim25.DynamicProperty; | ||||||
| import com.vmware.vim25.HostNetworkTrafficShapingPolicy; | import com.vmware.vim25.HostNetworkTrafficShapingPolicy; | ||||||
|  | import com.vmware.vim25.HostPortGroupSpec; | ||||||
| import com.vmware.vim25.HostVirtualSwitch; | import com.vmware.vim25.HostVirtualSwitch; | ||||||
| import com.vmware.vim25.HttpNfcLeaseDeviceUrl; | import com.vmware.vim25.HttpNfcLeaseDeviceUrl; | ||||||
| import com.vmware.vim25.HttpNfcLeaseInfo; | import com.vmware.vim25.HttpNfcLeaseInfo; | ||||||
| @ -117,13 +118,23 @@ public class HypervisorHostHelper { | |||||||
| 			shapingPolicy.setBurstSize(5*shapingPolicy.getAverageBandwidth()/8); | 			shapingPolicy.setBurstSize(5*shapingPolicy.getAverageBandwidth()/8); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		if (!hostMo.hasPortGroup(vSwitch, networkName)) { | 		boolean bWaitPortGroupReady = false; | ||||||
| 			hostMo.createPortGroup(vSwitch, networkName, vid, shapingPolicy); | 		if (!hostMo.hasPortGroup(vSwitch, networkName)) { | ||||||
| 		} else { | 			hostMo.createPortGroup(vSwitch, networkName, vid, shapingPolicy); | ||||||
| 			hostMo.updatePortGroup(vSwitch, networkName, vid, shapingPolicy); | 			bWaitPortGroupReady = true; | ||||||
| 		} | 		} else { | ||||||
| 
 | 			HostPortGroupSpec spec = hostMo.getPortGroupSpec(networkName); | ||||||
| 		ManagedObjectReference morNetwork = waitForNetworkReady(hostMo, networkName, timeOutMs); | 			if(!isSpecMatch(spec, vid, shapingPolicy)) { | ||||||
|  | 				hostMo.updatePortGroup(vSwitch, networkName, vid, shapingPolicy); | ||||||
|  | 				bWaitPortGroupReady = true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		ManagedObjectReference morNetwork; | ||||||
|  | 		if(bWaitPortGroupReady)  | ||||||
|  | 			morNetwork = waitForNetworkReady(hostMo, networkName, timeOutMs); | ||||||
|  | 		else | ||||||
|  | 			morNetwork = hostMo.getNetworkMor(networkName); | ||||||
| 		if (morNetwork == null) { | 		if (morNetwork == null) { | ||||||
| 			String msg = "Failed to create public network on vSwitch " + vSwitchName; | 			String msg = "Failed to create public network on vSwitch " + vSwitchName; | ||||||
| 			s_logger.error(msg); | 			s_logger.error(msg); | ||||||
| @ -261,13 +272,23 @@ public class HypervisorHostHelper { | |||||||
| 			shapingPolicy.setBurstSize(5*shapingPolicy.getAverageBandwidth()/8); | 			shapingPolicy.setBurstSize(5*shapingPolicy.getAverageBandwidth()/8); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!hostMo.hasPortGroup(vSwitch, networkName)) { | 		boolean bWaitPortGroupReady = false; | ||||||
| 			hostMo.createPortGroup(vSwitch, networkName, vid, shapingPolicy); | 		if (!hostMo.hasPortGroup(vSwitch, networkName)) { | ||||||
| 		} else { | 			hostMo.createPortGroup(vSwitch, networkName, vid, shapingPolicy); | ||||||
| 			hostMo.updatePortGroup(vSwitch, networkName, vid, shapingPolicy); | 			bWaitPortGroupReady = true; | ||||||
| 		} | 		} else { | ||||||
| 
 | 			HostPortGroupSpec spec = hostMo.getPortGroupSpec(networkName); | ||||||
| 		ManagedObjectReference morNetwork = waitForNetworkReady(hostMo, networkName, timeOutMs); | 			if(!isSpecMatch(spec, vid, shapingPolicy)) { | ||||||
|  | 				hostMo.updatePortGroup(vSwitch, networkName, vid, shapingPolicy); | ||||||
|  | 				bWaitPortGroupReady = true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		ManagedObjectReference morNetwork; | ||||||
|  | 		if(bWaitPortGroupReady)  | ||||||
|  | 			morNetwork = waitForNetworkReady(hostMo, networkName, timeOutMs); | ||||||
|  | 		else | ||||||
|  | 			morNetwork = hostMo.getNetworkMor(networkName); | ||||||
| 		if (morNetwork == null) { | 		if (morNetwork == null) { | ||||||
| 			String msg = "Failed to create guest network " + networkName; | 			String msg = "Failed to create guest network " + networkName; | ||||||
| 			s_logger.error(msg); | 			s_logger.error(msg); | ||||||
| @ -316,7 +337,44 @@ public class HypervisorHostHelper { | |||||||
| 
 | 
 | ||||||
| 		s_logger.info("Network " + networkName + " is ready on vSwitch " + vSwitchName); | 		s_logger.info("Network " + networkName + " is ready on vSwitch " + vSwitchName); | ||||||
| 		return new Pair<ManagedObjectReference, String>(morNetwork, networkName); | 		return new Pair<ManagedObjectReference, String>(morNetwork, networkName); | ||||||
| 	} | 	} | ||||||
|  | 	 | ||||||
|  | 	private static boolean isSpecMatch(HostPortGroupSpec spec, Integer vlanId, HostNetworkTrafficShapingPolicy shapingPolicy) { | ||||||
|  | 		// check VLAN configuration | ||||||
|  | 		if(vlanId != null) { | ||||||
|  | 			if(vlanId.intValue() != spec.getVlanId()) | ||||||
|  | 				return false; | ||||||
|  | 		} else { | ||||||
|  | 			if(spec.getVlanId() != 0) | ||||||
|  | 				return false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// check traffic shaping configuration | ||||||
|  | 		HostNetworkTrafficShapingPolicy policyInSpec = null; | ||||||
|  | 		if(spec.getPolicy() != null) | ||||||
|  | 			policyInSpec = spec.getPolicy().getShapingPolicy(); | ||||||
|  | 		 | ||||||
|  | 		if(policyInSpec != null && shapingPolicy == null || policyInSpec == null && shapingPolicy != null) | ||||||
|  | 			return false; | ||||||
|  | 		 | ||||||
|  | 		if(policyInSpec == null && shapingPolicy == null) | ||||||
|  | 			return true; | ||||||
|  | 		 | ||||||
|  | 		// so far policyInSpec and shapingPolicy should both not be null | ||||||
|  | 		if(policyInSpec.getEnabled() == null || !policyInSpec.getEnabled().booleanValue()) | ||||||
|  | 			return false; | ||||||
|  | 		 | ||||||
|  | 		if(policyInSpec.getAverageBandwidth() == null || policyInSpec.getAverageBandwidth().longValue() != shapingPolicy.getAverageBandwidth().longValue()) | ||||||
|  | 			return false; | ||||||
|  | 
 | ||||||
|  | 		if(policyInSpec.getPeakBandwidth() == null || policyInSpec.getPeakBandwidth().longValue() != shapingPolicy.getPeakBandwidth().longValue()) | ||||||
|  | 			return false; | ||||||
|  | 
 | ||||||
|  | 		if(policyInSpec.getBurstSize() == null || policyInSpec.getBurstSize().longValue() != shapingPolicy.getBurstSize().longValue()) | ||||||
|  | 			return false; | ||||||
|  | 		 | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 	public static ManagedObjectReference waitForNetworkReady(HostMO hostMo, | 	public static ManagedObjectReference waitForNetworkReady(HostMO hostMo, | ||||||
| 			String networkName, long timeOutMs) throws Exception { | 			String networkName, long timeOutMs) throws Exception { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user