CLOUDSTACK-9184: Fixes #2631 VMware dvs portgroup autogrowth (#2634)

* CLOUDSTACK-9184: Fixes #2631 VMware dvs portgroup autogrowth

This deprecates the vmware.ports.per.dvportgroup global setting.

The vSphere Auto Expand feature (introduced in vSphere 5.0) will take
care of dynamically increasing/decreasing the dvPorts when running out
of distributed ports . But in case of vSphere 4.1/4.0 (If used), as this
feature is not there, the new default value (=> 8) have an impact in the
existing deployments. Action item for vSphere 4.1/4.0: Admin should
modify the global configuration setting "vmware.ports.per.dvportgroup"
from 8 to any number based on their environment because the proposal
default value of 8 would be very less without auto expand feature in
general. The current default value of 256 may not need immediate
modification after deployment, but 8 would be very less which means
admin need to update immediately after upgrade.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2018-05-11 22:16:13 +05:30 committed by GitHub
parent a77ed56b86
commit 1b3046e376
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 18 deletions

View File

@ -17,4 +17,6 @@
--;
-- Schema upgrade from 4.11.0.0 to 4.11.1.0
--;
--;
DELETE FROM `cloud`.`configuration` WHERE `name`='vmware.ports.per.dvportgroup';

View File

@ -136,6 +136,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
private static final Logger s_logger = Logger.getLogger(VmwareManagerImpl.class);
private static final long SECONDS_PER_MINUTE = 60;
private static final int DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x = 256;
private static final int DEFAULT_PORTS_PER_DV_PORT_GROUP = 8;
private int _timeout;
@ -194,7 +196,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
private StorageLayer _storage;
private final String _privateNetworkVSwitchName = "vSwitch0";
private int _portsPerDvPortGroup = 256;
private int _portsPerDvPortGroup = DEFAULT_PORTS_PER_DV_PORT_GROUP;
private boolean _fullCloneFlag;
private boolean _instanceNameFlag;
private String _serviceConsoleName;
@ -279,8 +281,6 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
_instanceNameFlag = Boolean.parseBoolean(value);
}
_portsPerDvPortGroup = NumbersUtil.parseInt(_configDao.getValue(Config.VmwarePortsPerDVPortGroup.key()), _portsPerDvPortGroup);
_serviceConsoleName = _configDao.getValue(Config.VmwareServiceConsole.key());
if (_serviceConsoleName == null) {
_serviceConsoleName = "Service Console";
@ -394,8 +394,16 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
HypervisorHostHelper.prepareNetwork(vSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false, BroadcastDomainType.Vlan, null, null);
}
else {
int portsPerDvPortGroup = _portsPerDvPortGroup;
AboutInfo about = hostMo.getHostAboutInfo();
if (about != null) {
String version = about.getApiVersion();
if (version != null && (version.equals("4.0") || version.equals("4.1")) && _portsPerDvPortGroup < DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x) {
portsPerDvPortGroup = DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x;
}
}
HypervisorHostHelper.prepareNetwork(vSwitchName, "cloud.private", hostMo, vlanId, null, null, null, 180000,
vsType, _portsPerDvPortGroup, null, false, BroadcastDomainType.Vlan, null, null);
vsType, portsPerDvPortGroup, null, false, BroadcastDomainType.Vlan, null, null);
}
}

View File

@ -1139,14 +1139,6 @@ public enum Config {
"false",
"Enable/Disable Nexus/Vmware dvSwitch in VMware environment",
null),
VmwarePortsPerDVPortGroup(
"Network",
ManagementServer.class,
Integer.class,
"vmware.ports.per.dvportgroup",
"256",
"Default number of ports per Vmware dvPortGroup in VMware environment",
null),
VmwareCreateFullClone(
"Advanced",
ManagementServer.class,

View File

@ -755,9 +755,8 @@ public class HypervisorHostHelper {
dvsPortSetting = createVmwareDVPortSettingSpec(shapingPolicy, secPolicy, pvlanSpec);
}
newDvPortGroupSpec = createDvPortGroupSpec(networkName, dvsPortSetting, numPorts, autoExpandSupported);
if (portGroupPolicy != null)
{
newDvPortGroupSpec = createDvPortGroupSpec(networkName, dvsPortSetting, autoExpandSupported);
if (portGroupPolicy != null) {
newDvPortGroupSpec.setPolicy(portGroupPolicy);
}
@ -765,6 +764,7 @@ public class HypervisorHostHelper {
s_logger.info("Distributed Virtual Port group " + networkName + " not found.");
// TODO(sateesh): Handle Exceptions
try {
newDvPortGroupSpec.setNumPorts(numPorts);
dvSwitchMo.createDVPortGroup(newDvPortGroupSpec);
} catch (Exception e) {
String msg = "Failed to create distributed virtual port group " + networkName + " on dvSwitch " + physicalNetwork;
@ -994,13 +994,12 @@ public class HypervisorHostHelper {
return true;
}
public static DVPortgroupConfigSpec createDvPortGroupSpec(String dvPortGroupName, DVPortSetting portSetting, int numPorts, boolean autoExpandSupported) {
public static DVPortgroupConfigSpec createDvPortGroupSpec(String dvPortGroupName, DVPortSetting portSetting, boolean autoExpandSupported) {
DVPortgroupConfigSpec spec = new DVPortgroupConfigSpec();
spec.setName(dvPortGroupName);
spec.setDefaultPortConfig(portSetting);
spec.setPortNameFormat("vnic<portIndex>");
spec.setType("earlyBinding");
spec.setNumPorts(numPorts);
spec.setAutoExpand(autoExpandSupported);
return spec;
}