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

Reply via email to