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
