Skip to content

Commit 41e7a2a

Browse files
committed
Merge release branch 4.19 to main
2 parents 94a47ac + 075f981 commit 41e7a2a

File tree

12 files changed

+293
-236
lines changed

12 files changed

+293
-236
lines changed

core/src/main/java/com/cloud/network/HAProxyConfigurator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ private List<String> getRulesForPool(final LoadBalancerTO lbTO, final boolean ke
485485
sb.append("\tbind ").append(publicIP).append(":").append(publicPort);
486486
result.add(sb.toString());
487487
sb = new StringBuilder();
488-
sb.append("\t").append("balance ").append(algorithm);
488+
sb.append("\t").append("balance ").append(algorithm.toLowerCase());
489489
result.add(sb.toString());
490490

491491
int i = 0;

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java

Lines changed: 9 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1973,16 +1973,8 @@ protected void ensureDiskControllers(VirtualMachineMO vmMo, Pair<String, String>
19731973
return;
19741974
}
19751975

1976-
String msg;
1977-
String rootDiskController = controllerInfo.first();
1978-
String dataDiskController = controllerInfo.second();
1979-
String scsiDiskController;
1980-
String recommendedDiskController = null;
1981-
1982-
if (VmwareHelper.isControllerOsRecommended(dataDiskController) || VmwareHelper.isControllerOsRecommended(rootDiskController)) {
1983-
recommendedDiskController = vmMo.getRecommendedDiskController(null);
1984-
}
1985-
scsiDiskController = HypervisorHostHelper.getScsiController(new Pair<String, String>(rootDiskController, dataDiskController), recommendedDiskController);
1976+
Pair<String, String> chosenDiskControllers = VmwareHelper.chooseRequiredDiskControllers(controllerInfo, vmMo, null, null);
1977+
String scsiDiskController = HypervisorHostHelper.getScsiController(chosenDiskControllers);
19861978
if (scsiDiskController == null) {
19871979
return;
19881980
}
@@ -2335,6 +2327,7 @@ protected StartAnswer execute(StartCommand cmd) {
23352327
}
23362328

23372329
int controllerKey;
2330+
Pair<String, String> chosenDiskControllers = VmwareHelper.chooseRequiredDiskControllers(controllerInfo,vmMo, null, null);
23382331

23392332
//
23402333
// Setup ROOT/DATA disk devices
@@ -2359,10 +2352,7 @@ protected StartAnswer execute(StartCommand cmd) {
23592352
}
23602353

23612354
VirtualMachineDiskInfo matchingExistingDisk = getMatchingExistingDisk(diskInfoBuilder, vol, hyperHost, context);
2362-
String diskController = getDiskController(vmMo, matchingExistingDisk, vol, controllerInfo, deployAsIs);
2363-
if (DiskControllerType.getType(diskController) == DiskControllerType.osdefault) {
2364-
diskController = vmMo.getRecommendedDiskController(null);
2365-
}
2355+
String diskController = getDiskController(vmMo, matchingExistingDisk, vol, chosenDiskControllers, deployAsIs);
23662356
if (DiskControllerType.getType(diskController) == DiskControllerType.ide) {
23672357
controllerKey = vmMo.getIDEControllerKey(ideUnitNumber);
23682358
if (vol.getType() == Volume.Type.DATADISK) {
@@ -2846,27 +2836,10 @@ private String getGuestOsIdFromVmSpec(VirtualMachineTO vmSpec, boolean deployAsI
28462836
}
28472837

28482838
private Pair<String, String> getControllerInfoFromVmSpec(VirtualMachineTO vmSpec) throws CloudRuntimeException {
2849-
String dataDiskController = vmSpec.getDetails().get(VmDetailConstants.DATA_DISK_CONTROLLER);
2850-
String rootDiskController = vmSpec.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER);
2851-
2852-
// If root disk controller is scsi, then data disk controller would also be scsi instead of using 'osdefault'
2853-
// This helps avoid mix of different scsi subtype controllers in instance.
2854-
if (DiskControllerType.osdefault == DiskControllerType.getType(dataDiskController) && DiskControllerType.lsilogic == DiskControllerType.getType(rootDiskController)) {
2855-
dataDiskController = DiskControllerType.scsi.toString();
2856-
}
2857-
2858-
// Validate the controller types
2859-
dataDiskController = DiskControllerType.getType(dataDiskController).toString();
2860-
rootDiskController = DiskControllerType.getType(rootDiskController).toString();
2861-
2862-
if (DiskControllerType.getType(rootDiskController) == DiskControllerType.none) {
2863-
throw new CloudRuntimeException("Invalid root disk controller detected : " + rootDiskController);
2864-
}
2865-
if (DiskControllerType.getType(dataDiskController) == DiskControllerType.none) {
2866-
throw new CloudRuntimeException("Invalid data disk controller detected : " + dataDiskController);
2867-
}
2868-
2869-
return new Pair<>(rootDiskController, dataDiskController);
2839+
String rootDiskControllerDetail = vmSpec.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER);
2840+
String dataDiskControllerDetail = vmSpec.getDetails().get(VmDetailConstants.DATA_DISK_CONTROLLER);
2841+
VmwareHelper.validateDiskControllerDetails(rootDiskControllerDetail, dataDiskControllerDetail);
2842+
return new Pair<>(rootDiskControllerDetail, dataDiskControllerDetail);
28702843
}
28712844

28722845
private String getBootModeFromVmSpec(VirtualMachineTO vmSpec, boolean deployAsIs) {
@@ -3614,15 +3587,7 @@ private String getDiskController(VirtualMachineMO vmMo, VirtualMachineDiskInfo m
36143587
return controllerType.toString();
36153588
}
36163589

3617-
if (vol.getType() == Volume.Type.ROOT) {
3618-
logger.info("Chose disk controller for vol " + vol.getType() + " -> " + controllerInfo.first()
3619-
+ ", based on root disk controller settings at global configuration setting.");
3620-
return controllerInfo.first();
3621-
} else {
3622-
logger.info("Chose disk controller for vol " + vol.getType() + " -> " + controllerInfo.second()
3623-
+ ", based on default data disk controller setting i.e. Operating system recommended."); // Need to bring in global configuration setting & template level setting.
3624-
return controllerInfo.second();
3625-
}
3590+
return VmwareHelper.getControllerBasedOnDiskType(controllerInfo, vol);
36263591
}
36273592

36283593
private void postDiskConfigBeforeStart(VirtualMachineMO vmMo, VirtualMachineTO vmSpec, DiskTO[] sortedDisks, int ideControllerKey,

plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,15 +2101,18 @@ private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean
21012101
AttachAnswer answer = new AttachAnswer(disk);
21022102

21032103
if (isAttach) {
2104-
String diskController = getLegacyVmDataDiskController();
2105-
2104+
String rootDiskControllerDetail = DiskControllerType.ide.toString();
2105+
if (controllerInfo != null && StringUtils.isNotEmpty(controllerInfo.get(VmDetailConstants.ROOT_DISK_CONTROLLER))) {
2106+
rootDiskControllerDetail = controllerInfo.get(VmDetailConstants.ROOT_DISK_CONTROLLER);
2107+
}
2108+
String dataDiskControllerDetail = getLegacyVmDataDiskController();
21062109
if (controllerInfo != null && StringUtils.isNotEmpty(controllerInfo.get(VmDetailConstants.DATA_DISK_CONTROLLER))) {
2107-
diskController = controllerInfo.get(VmDetailConstants.DATA_DISK_CONTROLLER);
2110+
dataDiskControllerDetail = controllerInfo.get(VmDetailConstants.DATA_DISK_CONTROLLER);
21082111
}
21092112

2110-
if (DiskControllerType.getType(diskController) == DiskControllerType.osdefault) {
2111-
diskController = vmMo.getRecommendedDiskController(null);
2112-
}
2113+
VmwareHelper.validateDiskControllerDetails(rootDiskControllerDetail, dataDiskControllerDetail);
2114+
Pair<String, String> chosenDiskControllers = VmwareHelper.chooseRequiredDiskControllers(new Pair<>(rootDiskControllerDetail, dataDiskControllerDetail), vmMo, null, null);
2115+
String diskController = VmwareHelper.getControllerBasedOnDiskType(chosenDiskControllers, disk);
21132116

21142117
vmMo.attachDisk(new String[] { datastoreVolumePath }, morDs, diskController, storagePolicyId, volumeTO.getIopsReadRate() + volumeTO.getIopsWriteRate());
21152118
VirtualMachineDiskInfoBuilder diskInfoBuilder = vmMo.getDiskInfoBuilder();

server/src/main/java/com/cloud/network/IpAddressManagerImpl.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
import com.cloud.network.dao.PublicIpQuarantineDao;
3737
import com.cloud.network.vo.PublicIpQuarantineVO;
38+
import com.cloud.resourcelimit.CheckedReservation;
3839
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
3940
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
4041
import org.apache.cloudstack.annotation.AnnotationService;
@@ -53,6 +54,7 @@
5354
import org.apache.cloudstack.region.PortableIpDao;
5455
import org.apache.cloudstack.region.PortableIpVO;
5556
import org.apache.cloudstack.region.Region;
57+
import org.apache.cloudstack.reservation.dao.ReservationDao;
5658
import org.apache.commons.collections.CollectionUtils;
5759

5860
import com.cloud.agent.AgentManager;
@@ -259,6 +261,8 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage
259261
@Inject
260262
ResourceLimitService _resourceLimitMgr;
261263

264+
@Inject
265+
ReservationDao reservationDao;
262266
@Inject
263267
NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
264268
@Inject
@@ -1548,21 +1552,25 @@ public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean
15481552

15491553
logger.debug("Associating ip " + ipToAssoc + " to network " + network);
15501554

1551-
IPAddressVO ip = _ipAddressDao.findById(ipId);
1552-
//update ip address with networkId
1553-
ip.setAssociatedWithNetworkId(networkId);
1554-
ip.setSourceNat(isSourceNat);
1555-
_ipAddressDao.update(ipId, ip);
1556-
15571555
boolean success = false;
1558-
try {
1556+
IPAddressVO ip = null;
1557+
try (CheckedReservation publicIpReservation = new CheckedReservation(owner, ResourceType.public_ip, 1l, reservationDao, _resourceLimitMgr)) {
1558+
ip = _ipAddressDao.findById(ipId);
1559+
//update ip address with networkId
1560+
ip.setAssociatedWithNetworkId(networkId);
1561+
ip.setSourceNat(isSourceNat);
1562+
_ipAddressDao.update(ipId, ip);
1563+
15591564
success = applyIpAssociations(network, false);
15601565
if (success) {
15611566
logger.debug("Successfully associated ip address " + ip.getAddress().addr() + " to network " + network);
15621567
} else {
15631568
logger.warn("Failed to associate ip address " + ip.getAddress().addr() + " to network " + network);
15641569
}
15651570
return _ipAddressDao.findById(ipId);
1571+
} catch (Exception e) {
1572+
s_logger.error(String.format("Failed to associate ip address %s to network %s", ipToAssoc, network), e);
1573+
throw new CloudRuntimeException(String.format("Failed to associate ip address %s to network %s", ipToAssoc, network), e);
15661574
} finally {
15671575
if (!success && releaseOnFailure) {
15681576
if (ip != null) {

server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@
4343
import javax.naming.ConfigurationException;
4444

4545
import com.cloud.configuration.ConfigurationManager;
46-
import com.cloud.dc.Vlan;
47-
import com.cloud.network.dao.NsxProviderDao;
48-
import com.cloud.network.element.NsxProviderVO;
4946
import com.cloud.configuration.ConfigurationManagerImpl;
50-
import com.cloud.dc.ASNumberVO;
5147
import com.cloud.bgp.BGPService;
48+
import com.cloud.dc.ASNumberVO;
5249
import com.cloud.dc.dao.ASNumberDao;
50+
import com.cloud.dc.Vlan;
51+
import com.cloud.network.dao.NsxProviderDao;
52+
import com.cloud.network.element.NsxProviderVO;
53+
import com.cloud.resourcelimit.CheckedReservation;
5354
import com.google.common.collect.Sets;
5455
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
5556
import org.apache.cloudstack.alert.AlertService;
@@ -75,6 +76,7 @@
7576
import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
7677
import org.apache.cloudstack.network.RoutedIpv4Manager;
7778
import org.apache.cloudstack.query.QueryService;
79+
import org.apache.cloudstack.reservation.dao.ReservationDao;
7880
import org.apache.commons.collections.CollectionUtils;
7981
import org.apache.commons.lang3.EnumUtils;
8082
import org.apache.commons.lang3.ObjectUtils;
@@ -250,6 +252,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
250252
@Inject
251253
ResourceLimitService _resourceLimitMgr;
252254
@Inject
255+
ReservationDao reservationDao;
256+
@Inject
253257
VpcServiceMapDao _vpcSrvcDao;
254258
@Inject
255259
DataCenterDao _dcDao;
@@ -3175,9 +3179,10 @@ public IpAddress associateIPToVpc(final long ipId, final long vpcId) throws Reso
31753179
logger.debug("Associating ip " + ipToAssoc + " to vpc " + vpc);
31763180

31773181
final boolean isSourceNatFinal = isSrcNatIpRequired(vpc.getVpcOfferingId()) && getExistingSourceNatInVpc(vpc.getAccountId(), vpcId, false) == null;
3178-
Transaction.execute(new TransactionCallbackNoReturn() {
3179-
@Override
3180-
public void doInTransactionWithoutResult(final TransactionStatus status) {
3182+
try (CheckedReservation publicIpReservation = new CheckedReservation(owner, ResourceType.public_ip, 1l, reservationDao, _resourceLimitMgr)) {
3183+
Transaction.execute(new TransactionCallbackNoReturn() {
3184+
@Override
3185+
public void doInTransactionWithoutResult(final TransactionStatus status) {
31813186
final IPAddressVO ip = _ipAddressDao.findById(ipId);
31823187
// update ip address with networkId
31833188
ip.setVpcId(vpcId);
@@ -3187,8 +3192,12 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
31873192

31883193
// mark ip as allocated
31893194
_ipAddrMgr.markPublicIpAsAllocated(ip);
3190-
}
3191-
});
3195+
}
3196+
});
3197+
} catch (Exception e) {
3198+
s_logger.error("Failed to associate ip " + ipToAssoc + " to vpc " + vpc, e);
3199+
throw new CloudRuntimeException("Failed to associate ip " + ipToAssoc + " to vpc " + vpc, e);
3200+
}
31923201

31933202
logger.debug("Successfully assigned ip " + ipToAssoc + " to vpc " + vpc);
31943203
CallContext.current().putContextParameter(IpAddress.class, ipToAssoc.getUuid());

0 commit comments

Comments
 (0)