Arik Hadas has uploaded a new change for review. Change subject: core: setting NIC boot order by NIC name ......................................................................
core: setting NIC boot order by NIC name The default sorting of network interfaces is according to their MAC addresses. The boot order of network interfaces was also used to be set such that the NIC with the lowest MAC address was getting the lowest boot index and the one with the highest MAC address was getting the highest boot index. We're now changing the way we set the boot order for NICs such that it will be set according to their names instead of their MAC addresses. Change-Id: I7916c3873361ef5bc4331ddfd3c60506f3c99fa3 Bug-Url: https://bugzilla.redhat.com/737564 Signed-off-by: Arik Hadas <aha...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java 2 files changed, 55 insertions(+), 18 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/22560/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java index 75eac41..d8dd8d8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VmDeviceCommonUtils.java @@ -1,5 +1,9 @@ package org.ovirt.engine.core.common.utils; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -9,6 +13,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.Guid; @@ -87,15 +92,15 @@ case CDN: bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); bootOrder = setCDBootOrder(devices, bootOrder); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); break; case CN: bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); break; case CND: bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setCDBootOrder(devices, bootOrder); break; case D: @@ -108,35 +113,35 @@ case DCN: bootOrder = setCDBootOrder(devices, bootOrder); bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); break; case DN: bootOrder = setCDBootOrder(devices, bootOrder); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); break; case DNC: bootOrder = setCDBootOrder(devices, bootOrder); - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); break; case N: - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); break; case NC: - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); break; case NCD: - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); bootOrder = setCDBootOrder(devices, bootOrder); break; case ND: - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setCDBootOrder(devices, bootOrder); break; case NDC: - bootOrder = setNetworkBootOrder(devices, bootOrder); + bootOrder = setNetworkBootOrder(vm, devices, bootOrder); bootOrder = setCDBootOrder(devices, bootOrder); bootOrder = setDiskBootOrder(vm, devices, bootOrder, isOldCluster); break; @@ -150,15 +155,47 @@ * @param bootOrder * @return */ - private static int setNetworkBootOrder(List<VmDevice> devices, int bootOrder) { + private static int setNetworkBootOrder(VM vm, List<VmDevice> devices, int bootOrder) { + for (VmDevice pluggedInterface : sortInterfacesByName(vm, getPluggedInterfaces(devices))) { + pluggedInterface.setBootOrder(++bootOrder); + } + + return bootOrder; + } + + private static List<VmDevice> getPluggedInterfaces(List<VmDevice> devices) { + ArrayList<VmDevice> result = new ArrayList<VmDevice>(); for (VmDevice device : devices) { - if (isBridge(device)) { - if (device.getIsPlugged()) { - device.setBootOrder(++bootOrder); - } + if (isBridge(device) && device.getIsPlugged()) { + result.add(device); } } - return bootOrder; + + return result; + } + + private static List<VmDevice> sortInterfacesByName(VM vm, List<VmDevice> pluggedInterfaces) { + if (pluggedInterfaces.size() < 2) { + return pluggedInterfaces; + } + + final HashMap<Guid, String> deviceIdToIfaceName = new HashMap<Guid, String>(); + for (VmNetworkInterface iface : vm.getInterfaces()) { + deviceIdToIfaceName.put(iface.getId(), iface.getName()); + } + + Collections.sort(pluggedInterfaces, new Comparator<VmDevice>() { + @Override + public int compare(VmDevice first, VmDevice second) { + Guid firstDeviceId = first.getId().getDeviceId(); + Guid secondDeviceId = second.getId().getDeviceId(); + String firstIfaceName = deviceIdToIfaceName.get(firstDeviceId); + String secondIfaceName = deviceIdToIfaceName.get(secondDeviceId); + return firstIfaceName.compareTo(secondIfaceName); + } + }); + + return pluggedInterfaces; } /** diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index 90cae81..735b6be 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -435,7 +435,7 @@ @Override protected void buildVmBootSequence() { - // Check if boot sequence in parameters is diffrent from default boot sequence + // Check if boot sequence in parameters is different from default boot sequence if (managedDevices != null) { // recalculate boot order from source devices and set it to target devices VmDeviceCommonUtils.updateVmDevicesBootOrder(vm, -- To view, visit http://gerrit.ovirt.org/22560 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7916c3873361ef5bc4331ddfd3c60506f3c99fa3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <aha...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches