Gustavo Frederico Temple Pedrosa has uploaded a new change for review.

Change subject: webadmin: Disk hotplug validation - Patch 2 of 2
......................................................................

webadmin: Disk hotplug validation - Patch 2 of 2

This change prevents the hot (un)plugging of disks in VMs that do not
support it. The parameter used to determine if hotplugging is supported
was changed from a field hard-coded to a property in the osinfo file.

Change-Id: Ibaf9f42976ea5fc0c7fbc79e3ebe4f9386c94a71
Signed-off-by: Gustavo Pedrosa <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
2 files changed, 48 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/19628/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index c27ba13..d115a9f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -164,6 +165,9 @@
     // cached NIC hotplug support map
     private static Map<Pair<Integer, Version>, Boolean> nicHotplugSupportMap;
 
+    // cached disk hotpluggable interfaces map
+    private static Map<Pair<Integer, Version>, ArrayList<String>> 
diskHotpluggableInterfacesMap;
+
     // cached windows OS
     private static List<Integer> windowsOsIds;
 
@@ -208,6 +212,7 @@
         initWindowsOsTypes();
         initHasSpiceSupport();
         initNicHotplugSupportMap();
+        initDiskHotpluggableInterfacesMap();
     }
 
     public static void initNicHotplugSupportMap() {
@@ -237,6 +242,43 @@
         return false;
     }
 
+    public static void initDiskHotpluggableInterfacesMap() {
+        AsyncQuery callback = new AsyncQuery();
+        callback.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object model, Object returnValue) {
+                diskHotpluggableInterfacesMap = (Map<Pair<Integer, Version>, 
ArrayList<String>>) ((VdcQueryReturnValue) returnValue)
+                        .getReturnValue();
+            }
+        };
+        Frontend.RunQuery(VdcQueryType.OsRepository, new OsQueryParameters(
+                OsRepositoryVerb.GetDiskHotpluggableInterfacesMap), callback);
+    }
+
+    public static Map<Pair<Integer, Version>, ArrayList<String>> 
getDiskHotpluggableInterfacesMap() {
+        return diskHotpluggableInterfacesMap;
+    }
+
+    public static Collection<DiskInterface> 
getDiskHotpluggableInterfaces(Integer osId, Version version) {
+        Pair<Integer, Version> pair = new Pair<Integer, Version>(osId, 
version);
+
+        if (getDiskHotpluggableInterfacesMap().containsKey(pair)) {
+            List<String> diskHotpluggableInterfaces = 
getDiskHotpluggableInterfacesMap().get(pair);
+
+            if (diskHotpluggableInterfaces != null && 
!diskHotpluggableInterfaces.isEmpty()) {
+                Collection<DiskInterface> diskInterfaces = new 
HashSet<DiskInterface>();
+
+                for (String diskHotpluggableInterface : 
diskHotpluggableInterfaces) {
+                    
diskInterfaces.add(DiskInterface.valueOf(diskHotpluggableInterface));
+                }
+
+                return diskInterfaces;
+            }
+        }
+
+        return Collections.emptyList();
+    }
+
     public static void getDomainListViaPublic(AsyncQuery aQuery, boolean 
filterInternalDomain) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
index 9cffc49..a568b5b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
@@ -16,7 +16,6 @@
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.ImageStatus;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -627,8 +626,12 @@
                     disk.getDiskStorageType() == DiskStorageType.IMAGE
                             && ((DiskImage) disk).getImageStatus() == 
ImageStatus.LOCKED;
 
-            if (disk.getPlugged() == plug || isLocked || 
(disk.getDiskInterface() == DiskInterface.IDE && !isVmDown()))
-            {
+            if (disk.getPlugged() == plug
+                    || isLocked
+                    || (!AsyncDataProvider.getDiskHotpluggableInterfaces(
+                            getEntity().getOs(),
+                            getEntity().getVdsGroupCompatibilityVersion())
+                            .contains(disk.getDiskInterface()) && 
!isVmDown())) {
                 return false;
             }
         }


-- 
To view, visit http://gerrit.ovirt.org/19628
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibaf9f42976ea5fc0c7fbc79e3ebe4f9386c94a71
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gustavo Frederico Temple Pedrosa <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to