Sergey Gotliv has uploaded a new change for review. Change subject: engine: Ties more consistently between vm nic device and vm nic entities. ......................................................................
engine: Ties more consistently between vm nic device and vm nic entities. Fixes copy of vm nic devices in the same way the http://gerrit.ovirt.org/#/c/17854/ fixes the copy of disk devices. Change-Id: Iee9267ade386ab83a6c353b4206f4dfe003f24bc Signed-off-by: Sergey Gotliv <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java 4 files changed, 30 insertions(+), 34 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/18362/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java index bd226c5..49e7fd1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java @@ -82,6 +82,7 @@ private String cachedDiskSharedLockMessage; private Map<Guid, Guid> srcDiskIdToTargetDiskIdMapping = new HashMap<>(); + private Map<Guid, Guid> srcVmNicIdToTargetVmNicIdMapping = new HashMap<>(); public AddVmCommand(T parameters) { super(parameters); @@ -413,7 +414,7 @@ protected boolean checkCpuSockets() { return AddVmCommand.CheckCpuSockets(getParameters().getVmStaticData().getNumOfSockets(), getParameters().getVmStaticData().getCpuPerSocket(), getVdsGroup().getcompatibility_version() - .toString(), getReturnValue().getCanDoActionMessages()); + .toString(), getReturnValue().getCanDoActionMessages()); } protected boolean buildAndCheckDestStorageDomains() { @@ -602,8 +603,7 @@ protected void copyVmDevices() { VmDeviceUtils.copyVmDevices(getVmTemplateId(), getVmId(), - srcDiskIdToTargetDiskIdMapping, - _vmInterfaces, + getSrcDeviceIdToTargetDeviceIdMapping(), getParameters().isSoundDeviceEnabled(), getParameters().isConsoleEnabled()); } @@ -641,7 +641,9 @@ protected void addVmNetwork() { // Add interfaces from template for (VmNic iface : getVmInterfaces()) { - iface.setId(Guid.newGuid()); + Guid id = Guid.newGuid(); + srcVmNicIdToTargetVmNicIdMapping.put(iface.getId(), id); + iface.setId(id); iface.setMacAddress(MacPoolManager.getInstance().allocateNewMac()); iface.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed()); iface.setVmTemplateId(null); @@ -926,4 +928,11 @@ public Map<Guid, Guid> getSrcDiskIdToTargetDiskIdMapping() { return srcDiskIdToTargetDiskIdMapping; } + + public Map<Guid, Guid> getSrcDeviceIdToTargetDeviceIdMapping() { + Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping = new HashMap<>(); + srcDeviceIdToTargetDeviceIdMapping.putAll(srcVmNicIdToTargetVmNicIdMapping); + srcDeviceIdToTargetDeviceIdMapping.putAll(srcDiskIdToTargetDiskIdMapping); + return srcDeviceIdToTargetDeviceIdMapping; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java index 54d566f..eba6f10 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java @@ -247,8 +247,7 @@ getVm().getStaticData(), true, devices, - getSrcDiskIdToTargetDiskIdMapping(), - _vmInterfaces, + getSrcDeviceIdToTargetDeviceIdMapping(), getParameters().isSoundDeviceEnabled(), getParameters().isConsoleEnabled()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java index e823b15..cab1bcb 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java @@ -70,12 +70,6 @@ private boolean isVmInDb; /** - * A mapping between source disk id and target disk id. - * This mapping is used when creating new devices for this template. - */ - private Map<Guid, Guid> srcDiskToTargetDiskMapping = new HashMap<>(); - - /** * Constructor for command creation when compensation is applied on startup * * @param commandId @@ -196,6 +190,8 @@ getParameters().setVmTemplateId(getVmTemplateId()); getParameters().setEntityInfo(new EntityInfo(VdcObjectType.VmTemplate, getVmTemplateId())); + final Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping = new HashMap<>(); + TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override @@ -210,13 +206,12 @@ @Override public Void runInTransaction() { addPermission(); - AddVmTemplateImages(); - List<VmNic> vmInterfaces = addVmInterfaces(); + AddVmTemplateImages(srcDeviceIdToTargetDeviceIdMapping); + addVmInterfaces(srcDeviceIdToTargetDeviceIdMapping); if (isVmInDb) { VmDeviceUtils.copyVmDevices(getVmId(), getVmTemplateId(), - srcDiskToTargetDiskMapping, - vmInterfaces, + srcDeviceIdToTargetDeviceIdMapping, getParameters().isSoundDeviceEnabled(), getParameters().isConsoleEnabled()); } else { @@ -227,8 +222,7 @@ getVmTemplate(), true, Collections.<VmDevice> emptyList(), - srcDiskToTargetDiskMapping, - vmInterfaces, + srcDeviceIdToTargetDeviceIdMapping, getParameters().isSoundDeviceEnabled(), getParameters().isConsoleEnabled()); } @@ -432,8 +426,7 @@ setActionReturnValue(getVmTemplate().getId()); } - protected List<VmNic> addVmInterfaces() { - List<VmNic> templateInterfaces = new ArrayList<>(); + protected void addVmInterfaces(Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping) { List<VmNic> interfaces = getVmNicDao().getAllForVm(getParameters().getMasterVm().getId()); for (VmNic iface : interfaces) { VmNic iDynamic = new VmNic(); @@ -444,13 +437,12 @@ iDynamic.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed()); iDynamic.setType(iface.getType()); iDynamic.setLinked(iface.isLinked()); - templateInterfaces.add(iDynamic); getVmNicDao().save(iDynamic); + srcDeviceIdToTargetDeviceIdMapping.put(iface.getId(), iDynamic.getId()); } - return templateInterfaces; } - protected void AddVmTemplateImages() { + protected void AddVmTemplateImages(Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping) { Guid vmSnapshotId = Guid.newGuid(); for (DiskImage diskImage : mImages) { // The return value of this action is the 'copyImage' task GUID: @@ -462,7 +454,7 @@ getReturnValue().getVdsmTaskIdList().addAll(retValue.getInternalVdsmTaskIdList()); DiskImage newImage = (DiskImage) retValue.getActionReturnValue(); - srcDiskToTargetDiskMapping.put(diskImage.getId(), newImage.getId()); + srcDeviceIdToTargetDeviceIdMapping.put(diskImage.getId(), newImage.getId()); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java index 9c2a237..bafc9c9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java @@ -231,8 +231,7 @@ VmBase vmBase, boolean isVm, List<VmDevice> devicesDataToUse, - Map<Guid, Guid> srcDiskToTargetDiskMapping, - List<VmNic> ifaces, + Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping, boolean soundDeviceEnabled, boolean isConsoleEnabled) { Guid id; @@ -264,7 +263,7 @@ switch(device.getType()) { case DISK: if (VmDeviceType.DISK.getName().equals(device.getDevice())) { - id = srcDiskToTargetDiskMapping.get(device.getDeviceId()); + id = srcDeviceIdToTargetDeviceIdMapping.get(device.getDeviceId()); } else if (VmDeviceType.CDROM.getName().equals(device.getDevice())) { // check here is source VM had CD (Vm from snapshot) String srcCdPath = (String) device.getSpecParams().get(VdsProperties.Path); @@ -279,9 +278,7 @@ break; case INTERFACE: - if (ifaceCount < ifaces.size()) { - id = ifaces.get(ifaceCount++).getId(); - } + id = srcDeviceIdToTargetDeviceIdMapping.get(device.getDeviceId()); break; case CONTROLLER: @@ -383,8 +380,7 @@ public static void copyVmDevices(Guid srcId, Guid dstId, - Map<Guid, Guid> srcDiskToTargetDiskMapping, - List<VmNic> ifaces, + Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping, boolean soundDeviceEnabled, boolean isConsoleEnabled) { VM vm = DbFacade.getInstance().getVmDao().get(dstId); @@ -396,8 +392,8 @@ } List<VmDevice> devices = dao.getVmDeviceByVmId(srcId); - copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, srcDiskToTargetDiskMapping, - ifaces, soundDeviceEnabled, isConsoleEnabled); + copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, srcDeviceIdToTargetDeviceIdMapping, + soundDeviceEnabled, isConsoleEnabled); } private static void addVideoDevice(VmBase vm) { -- To view, visit http://gerrit.ovirt.org/18362 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iee9267ade386ab83a6c353b4206f4dfe003f24bc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sergey Gotliv <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
