Liron Aravot has uploaded a new change for review.

Change subject: core: VdsUpdateRunTimeInfo - update device logical name
......................................................................

core: VdsUpdateRunTimeInfo - update device logical name

This patch adds support to update disks logical names as retrieved from
vdsm.

Change-Id: I08b13ba18ded824d7c62f72766fa7055da6ec49c
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1063597
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
6 files changed, 71 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/83/34483/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
index 9230cbd..bccc0e6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
@@ -417,6 +417,16 @@
     /**
      * @param version
      *            Compatibility version to check for.
+     * @return <code>true</code> if reported disk logical names is supported 
for the given version.
+     */
+    public static boolean reportedDisksLogicalNames(Version version) {
+        return supportedInConfig(ConfigValues.ReportedDisksLogicalNames, 
version);
+
+    }
+
+    /**
+     * @param version
+     *            Compatibility version to check for.
      * @return <code>true</code> if skip fencing when host connected to SD 
feature is supported for the given version.
      */
     public static boolean isSkipFencingIfSDActiveSupported(Version version) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index df651a7..9e3a1d9 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1854,6 +1854,10 @@
     @DefaultValueAttribute("true")
     LiveMergeSupported,
 
+    @TypeConverterAttribute(Boolean.class)
+    @DefaultValueAttribute("true")
+    ReportedDisksLogicalNames,
+
     @TypeConverterAttribute(Integer.class)
     @DefaultValueAttribute("300")
     AlertOnNumberOfLVs,
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
index 5aac6f8..2d152af 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
@@ -19,6 +19,7 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.businessentities.CpuStatistics;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
@@ -1256,11 +1257,23 @@
 
             Guid deviceId = getDeviceId(device, deviceMap);
             VmDevice vmDevice = deviceMap.get(new VmDeviceId(deviceId, vmId));
+            String logicalName = null;
+            if (deviceId != null && 
FeatureSupported.reportedDisksLogicalNames(_vds.getVdsGroupCompatibilityVersion())
 &&
+                    
VmDeviceType.DISK.getName().equals(device.get(VdsProperties.Device))) {
+                try {
+                    logicalName = getDeviceLogicalName((Map<?, ?>) 
vm.get(VdsProperties.GuestDiskMapping), deviceId);
+                } catch (Exception e) {
+                    log.errorFormat("error while getting device name when 
processing, vm {0}, device info {1} with exception, skipping",
+                            vmId, device, e);
+                }
+            }
+
             if (deviceId == null || vmDevice == null) {
-                deviceId = addNewVmDevice(vmId, device);
+                deviceId = addNewVmDevice(vmId, device, logicalName);
             } else {
                 vmDevice.setAddress(((Map<String, String>) 
device.get(VdsProperties.Address)).toString());
                 vmDevice.setAlias(StringUtils.defaultString((String) 
device.get(VdsProperties.Alias)));
+                vmDevice.setLogicalName(logicalName);
                 addVmDeviceToList(vmDevice);
             }
 
@@ -1268,6 +1281,25 @@
         }
 
         handleRemovedDevices(vmId, processedDevices, devices);
+    }
+
+
+    private String getDeviceLogicalName(Map<?, ?> diskMapping, Guid deviceId) {
+        if (diskMapping == null) {
+            return null;
+        }
+
+        Map<?, ?> deviceMapping = null;
+        String modifiedDeviceId = deviceId.toString().substring(0, 20);
+        for (Entry<?, ?> entry : diskMapping.entrySet()) {
+            String serial = (String) entry.getKey();
+            if (serial != null && serial.contains(modifiedDeviceId)) {
+                deviceMapping = (Map<?, ?>) entry.getValue();
+                break;
+            }
+        }
+
+        return deviceMapping == null ? null : (String) 
deviceMapping.get(VdsProperties.Name);
     }
 
     /**
@@ -1308,7 +1340,7 @@
      * @param vmId
      * @param device
      */
-    private Guid addNewVmDevice(Guid vmId, Map device) {
+    private Guid addNewVmDevice(Guid vmId, Map device, String logicalName) {
         Guid newDeviceId = Guid.Empty;
         String typeName = (String) device.get(VdsProperties.Type);
         String deviceName = (String) device.get(VdsProperties.Device);
@@ -1331,7 +1363,7 @@
                     alias,
                     null,
                     null,
-                    null);
+                    logicalName);
             newVmDevices.add(newDevice);
             log.debugFormat("New device was marked for adding to VM {0} 
Devices : {1}", vmId, newDevice);
         }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index 999d5ad5..2eaa0f4 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -297,6 +297,8 @@
     public static final String Device = "device";
     public static final String DeviceType = "deviceType";
     public static final String Devices = "devices";
+    public static final String GuestDiskMapping = "guestDiskMapping";
+    public static final String Name = "name";
 
     public static final String Index = "index";
     public static final String PoolId = "poolID";
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
index c36ef92..3ed4d4d 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
@@ -34,6 +34,7 @@
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSParametersBase;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
@@ -56,6 +57,7 @@
 public class VdsUpdateRunTimeInfoTest {
 
     private static final Guid VM_1 = 
Guid.createGuidFromString("7eeabc50-325f-49bb-acb6-15e786599423");
+    private static final Version vdsCompVersion = Version.v3_4;
 
     @ClassRule
     public static MockEJBStrategyRule mockEjbRule = new MockEJBStrategyRule();
@@ -68,6 +70,10 @@
             MockConfigRule.mockConfig(
                     ConfigValues.VdsRefreshRate,
                     3),
+            MockConfigRule.mockConfig(
+                    ConfigValues.ReportedDisksLogicalNames,
+                    vdsCompVersion.getValue(),
+                    true),
             MockConfigRule.mockConfig(
                     ConfigValues.TimeToReduceFailedRunOnVdsInMinutes,
                     3)
@@ -158,14 +164,18 @@
         
when(vmDeviceDAO.getVmDeviceByVmId(vmGuid)).thenReturn(Collections.<VmDevice> 
emptyList());
 
         HashMap vm = new HashMap();
+        String testLogicalName = "TestName";
         vm.put(VdsProperties.vm_guid, vmGuid.toString());
 
         Map<String, Object> deviceProperties = new HashMap<String, Object>();
         Guid deviceID = Guid.newGuid();
         deviceProperties.put(VdsProperties.DeviceId, deviceID.toString());
         deviceProperties.put(VdsProperties.Address, Collections.emptyMap());
-        deviceProperties.put(VdsProperties.Device, "aDevice");
+        deviceProperties.put(VdsProperties.Device, 
VmDeviceType.DISK.getName());
         deviceProperties.put(VdsProperties.Type, 
VmDeviceGeneralType.DISK.getValue());
+        vm.put(VdsProperties.GuestDiskMapping,
+                Collections.singletonMap(deviceID.toString().substring(0, 20),
+                        Collections.singletonMap(VdsProperties.Name, 
testLogicalName)));
 
         vm.put(VdsProperties.Devices, new HashMap[] { new 
HashMap(deviceProperties) });
         vmInfo = new HashMap[] { vm };
@@ -173,6 +183,8 @@
         updater.updateVmDevices(Collections.singletonList(vmGuid.toString()));
 
         assertEquals("wrong number of new devices", 1, 
updater.getNewVmDevices().size());
+        VmDevice device = updater.getNewVmDevices().get(0);
+        assertEquals(testLogicalName, device.getLogicalName());
         assertEquals("wrong number of removed devices", 0, 
updater.getRemovedVmDevices().size());
     }
 
@@ -238,7 +250,7 @@
     private void initVds() {
         vds = new VDS();
         vds.setId(new Guid("00000000-0000-0000-0000-000000000012"));
-        vds.setVdsGroupCompatibilityVersion(Version.v3_4);
+        vds.setVdsGroupCompatibilityVersion(vdsCompVersion);
     }
 
     @Test
diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
index bf9288f..5fbccdc 100644
--- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -345,6 +345,12 @@
 select fn_db_add_config_value('VmSlaPolicySupported','false','3.3');
 select fn_db_add_config_value('VmSlaPolicySupported','false','3.4');
 
+select fn_db_add_config_value('ReportedDisksLogicalNames','false','3.0');
+select fn_db_add_config_value('ReportedDisksLogicalNames','false','3.1');
+select fn_db_add_config_value('ReportedDisksLogicalNames','false','3.2');
+select fn_db_add_config_value('ReportedDisksLogicalNames','false','3.3');
+select fn_db_add_config_value('ReportedDisksLogicalNames','false','3.4');
+
 -- by default use no proxy
 select fn_db_add_config_value('SpiceProxyDefault','','general');
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I08b13ba18ded824d7c62f72766fa7055da6ec49c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Liron Aravot <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to