From b0154aeb5c5258954c69b315f9f0ee591b042d96 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 25 Jan 2012 11:44:36 -0800 Subject: [PATCH] bug 12957: sort volume by device id to make sure ROOT disk device is configured at the very first --- .../vmware/resource/VmwareResource.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 2c6380160f5..e90940b333a 100755 --- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1323,7 +1323,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa i++; } - for (VolumeTO vol : disks) { + for (VolumeTO vol : sortVolumesByDeviceId(disks)) { deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); if (vol.getType() == Volume.Type.ISO) { @@ -1525,7 +1525,31 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa }); return listForSort.toArray(new NicTO[0]); - } + } + + private VolumeTO[] sortVolumesByDeviceId(VolumeTO[] volumes) { + + List listForSort = new ArrayList(); + for (VolumeTO vol : volumes) { + listForSort.add(vol); + } + Collections.sort(listForSort, new Comparator() { + + @Override + public int compare(VolumeTO arg0, VolumeTO arg1) { + if (arg0.getDeviceId() < arg1.getDeviceId()) { + return -1; + } else if (arg0.getDeviceId() == arg1.getDeviceId()) { + return 0; + } + + return 1; + } + }); + + return listForSort.toArray(new VolumeTO[0]); + } + private HashMap> inferDatastoreDetailsFromDiskInfo(VmwareHypervisorHost hyperHost, VmwareContext context, VolumeTO[] disks) throws Exception { HashMap> poolMors = new HashMap>();