winterhazel commented on code in PR #9433:
URL: https://github.com/apache/cloudstack/pull/9433#discussion_r1727823850


##########
server/src/main/java/com/cloud/vm/UserVmManagerImpl.java:
##########
@@ -4650,16 +4650,20 @@ private void updateVMDiskController(UserVmVO vm, 
Map<String, String> customParam
                 vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
dataDiskControllerSetting);
             }
 
-            String controllerSetting = 
StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
-                    Config.VmwareRootDiskControllerType.getDefaultValue());
-
             // Don't override if VM already has root/data disk controller 
detail
             if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
-                vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, 
controllerSetting);
+                String vmwareRootDiskControllerTypeFromSetting = 
StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
+                        Config.VmwareRootDiskControllerType.getDefaultValue());
+                vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, 
vmwareRootDiskControllerTypeFromSetting);
             }
+
             if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
-                if (controllerSetting.equalsIgnoreCase("scsi")) {
-                    vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
"scsi");
+                String finalRootDiskController = 
vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER);
+                // Set the data disk controller detail same as the final scsi 
root disk controller if VM doesn't have data disk controller detail
+                // This is to ensure the disk controller is available for the 
data disks, as all the SCSI controllers are created with same controller type
+                String scsiControllerPattern = 
"(?i)\\b(scsi|lsilogic|lsilogicsas|lsisas1068|buslogic|pvscsi)\\b";
+                if (finalRootDiskController.matches(scsiControllerPattern)) {
+                    vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
finalRootDiskController);
                 } else {
                     vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
"osdefault");

Review Comment:
   ```suggestion
                       s_logger.info("Data disk controller was not defined; 
defaulting to 'osdefault'.");
                       vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
"osdefault");
   ```



##########
server/src/main/java/com/cloud/vm/UserVmManagerImpl.java:
##########
@@ -4650,16 +4650,20 @@ private void updateVMDiskController(UserVmVO vm, 
Map<String, String> customParam
                 vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
dataDiskControllerSetting);
             }
 
-            String controllerSetting = 
StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
-                    Config.VmwareRootDiskControllerType.getDefaultValue());
-
             // Don't override if VM already has root/data disk controller 
detail
             if (vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER) == null) {
-                vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, 
controllerSetting);
+                String vmwareRootDiskControllerTypeFromSetting = 
StringUtils.defaultIfEmpty(_configDao.getValue(Config.VmwareRootDiskControllerType.key()),
+                        Config.VmwareRootDiskControllerType.getDefaultValue());
+                vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, 
vmwareRootDiskControllerTypeFromSetting);
             }
+
             if (vm.getDetail(VmDetailConstants.DATA_DISK_CONTROLLER) == null) {
-                if (controllerSetting.equalsIgnoreCase("scsi")) {
-                    vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
"scsi");
+                String finalRootDiskController = 
vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER);
+                // Set the data disk controller detail same as the final scsi 
root disk controller if VM doesn't have data disk controller detail
+                // This is to ensure the disk controller is available for the 
data disks, as all the SCSI controllers are created with same controller type
+                String scsiControllerPattern = 
"(?i)\\b(scsi|lsilogic|lsilogicsas|lsisas1068|buslogic|pvscsi)\\b";
+                if (finalRootDiskController.matches(scsiControllerPattern)) {
+                    vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
finalRootDiskController);

Review Comment:
   ```suggestion
                       s_logger.info(String.format("Data disk controller was 
not defined, but root disk is using SCSI controller [%s]. To ensure disk 
controllers are available for the data disks, we will update the data disk 
controllers to match the root disk controller.", finalRootDiskController))
                       vm.setDetail(VmDetailConstants.DATA_DISK_CONTROLLER, 
finalRootDiskController);
   ```
   
   Also, I would like to add some logs here to inform how we're choosing data 
disk controllers 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to