Dudi Maroshi has uploaded a new change for review. Change subject: core: Pinning vm to multiple hosts - persistency ......................................................................
core: Pinning vm to multiple hosts - persistency In order to suport pinning to multiple hosts. First stage is to provide list of pinned hosts, while preserving the current mechanisms for single host pinning. 1. We refactored the core entity VmBase, replace field private Guid dedicatedVmForVds with --> private ArrayList<Guid> dedicatedVmForVdsList; We want dedicatedVmForVdsList to be immutable. Preserve current functionality with (get/set)SingleDedicatedVmForVds methods Lay progamatic foundation for (get/set)MultipleDedicatedVmForVds methods 2. Create table and view prefered_hosts prefered_hosts_view 3. Create database stored procedure to mange prefered_hosts prefered_host_sp.sql https://bugzilla.redhat.com/show_bug.cgi?id=1107512 Change-Id: If358803c75a57f908152f8fc43e901bcc14b13d0 Signed-off-by: Dudi Maroshi <[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/AddVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/VmManagementCommandBaseTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmBaseDaoDbFacade.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsUnitToVmBaseBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsVmBaseToVmBaseBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java M packaging/dbscripts/create_views.sql A packaging/dbscripts/dedicated_hosts_sp.sql A packaging/dbscripts/upgrade/03_06_1450_add_multiple_dedicated_hosts_to_vm.sql 27 files changed, 137 insertions(+), 49 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/41619/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 bcb64b7..1ce7888 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 @@ -415,8 +415,8 @@ } protected boolean hostToRunExist() { - if (getParameters().getVmStaticData().getDedicatedVmForVds() != null) { - if (DbFacade.getInstance().getVdsDao().get(getParameters().getVmStaticData().getDedicatedVmForVds()) == null) { + if (getParameters().getVmStaticData().getSingleDedicatedVmForVds() != null) { + if (DbFacade.getInstance().getVdsDao().get(getParameters().getVmStaticData().getSingleDedicatedVmForVds()) == null) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_HOST_NOT_EXIST); return false; } @@ -1027,7 +1027,7 @@ List<VmNumaNode> numaNodes = getParameters().getVmStaticData().getvNumaNodeList(); VmNumaNodeOperationParameters params = new VmNumaNodeOperationParameters(getVmId(), numaNodes); params.setNumaTuneMode(getParameters().getVmStaticData().getNumaTuneMode()); - params.setDedicatedHost(getParameters().getVmStaticData().getDedicatedVmForVds()); + params.setDedicatedHost(getParameters().getVmStaticData().getSingleDedicatedVmForVds()); params.setMigrationSupport(getParameters().getVmStaticData().getMigrationSupport()); if (numaNodes == null || numaNodes.isEmpty()) { return; @@ -1283,7 +1283,7 @@ } // host-specific parameters can be changed by administration role only - if (vmFromParams.getDedicatedVmForVds() != null || !StringUtils.isEmpty(vmFromParams.getCpuPinning())) { + if (vmFromParams.getSingleDedicatedVmForVds() != null || !StringUtils.isEmpty(vmFromParams.getCpuPinning())) { permissionList.add(new PermissionSubject(getVdsGroupId(), VdcObjectType.VdsGroups, ActionGroup.EDIT_ADMIN_VM_PROPERTIES)); } 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 d324f7f..f157a13 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 @@ -668,7 +668,7 @@ getParameters().getMasterVm().getKernelUrl(), getParameters().getMasterVm().getKernelParams(), getParameters().getMasterVm().getQuotaId(), - getParameters().getMasterVm().getDedicatedVmForVds(), + getParameters().getMasterVm().getSingleDedicatedVmForVds(), getParameters().getMasterVm().getMigrationSupport(), getParameters().getMasterVm().isAllowConsoleReconnect(), getParameters().getMasterVm().getIsoPath(), @@ -889,7 +889,7 @@ getActionType().getActionGroup())); // host-specific parameters can be changed by administration role only - if (getParameters().getMasterVm().getDedicatedVmForVds() != null || + if (getParameters().getMasterVm().getSingleDedicatedVmForVds() != null || !StringUtils.isEmpty(getParameters().getMasterVm().getCpuPinning())) { permissionCheckSubject.add( new PermissionSubject(storagePoolId, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java index 8b0cc38..9a1d7e2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java @@ -400,7 +400,7 @@ // if "run on host" field points to a non existent vds (in the current cluster) -> remove field and continue if(!VmHandler.validateDedicatedVdsExistOnSameCluster(getVmTemplate(), null)){ - getVmTemplate().setDedicatedVmForVds(null); + getVmTemplate().setSingleDedicatedVmForVds(null); } getVmTemplate().setStatus(VmTemplateStatus.Locked); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java index dc83d92..ab58bc8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java @@ -488,7 +488,7 @@ } private void addAddtionalParams(VmNumaNodeOperationParameters params) { - params.setDedicatedHost(getParameters().getVmStaticData().getDedicatedVmForVds()); + params.setDedicatedHost(getParameters().getVmStaticData().getSingleDedicatedVmForVds()); params.setNumaTuneMode(getParameters().getVmStaticData().getNumaTuneMode()); params.setMigrationSupport(getParameters().getVmStaticData().getMigrationSupport()); } @@ -822,8 +822,8 @@ private boolean isDedicatedVmForVdsChanged() { return !(getVm().getDedicatedVmForVds() == null ? - getParameters().getVmStaticData().getDedicatedVmForVds() == null : - getVm().getDedicatedVmForVds().equals(getParameters().getVmStaticData().getDedicatedVmForVds())); + getParameters().getVmStaticData().getSingleDedicatedVmForVds() == null : + getVm().getDedicatedVmForVds().equals(getParameters().getVmStaticData().getSingleDedicatedVmForVds())); } private boolean isCpuPinningChanged() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java index 771bc04..0a22ec9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java @@ -359,10 +359,10 @@ if (getVmTemplate() != null && !isInstanceType() && !isBlankTemplate()) { // host-specific parameters can be changed by administration role only - if (!(getVmTemplate().getDedicatedVmForVds() == null ? - getParameters().getVmTemplateData().getDedicatedVmForVds() == null : - getVmTemplate().getDedicatedVmForVds().equals(getParameters().getVmTemplateData() - .getDedicatedVmForVds()))) { + if (!(getVmTemplate().getSingleDedicatedVmForVds() == null ? + getParameters().getVmTemplateData().getSingleDedicatedVmForVds() == null : + getVmTemplate().getSingleDedicatedVmForVds().equals(getParameters().getVmTemplateData() + .getSingleDedicatedVmForVds()))) { permissionList.add( new PermissionSubject(getParameters().getVmTemplateId(), VdcObjectType.VmTemplate, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index 6ad2529..20228d4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -1074,9 +1074,9 @@ */ public static boolean validateDedicatedVdsExistOnSameCluster(VmBase vm, ArrayList<String> canDoActionMessages) { boolean result = true; - if (vm.getDedicatedVmForVds() != null) { + if (vm.getSingleDedicatedVmForVds() != null) { // get dedicated host id - Guid vdsId = vm.getDedicatedVmForVds(); + Guid vdsId = vm.getSingleDedicatedVmForVds(); // get dedicated host, checks if exists and compare its cluster to the VM cluster VDS vds = DbFacade.getInstance().getVdsDao().get(vdsId); if (vds == null) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java index e5e46f7..e08699c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java @@ -105,8 +105,8 @@ VDS dedicatedVds = null; // can not check if no dedicated vds was configured - if (vmStatic.getDedicatedVmForVds() != null) { - dedicatedVds = getVds(vmStatic.getDedicatedVmForVds()); + if (vmStatic.getSingleDedicatedVmForVds() != null) { + dedicatedVds = getVds(vmStatic.getSingleDedicatedVmForVds()); } else { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_CANNOT_BE_PINNED_TO_CPU_WITH_UNDEFINED_HOST); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java index 961b5a6..8c4eff4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java @@ -560,7 +560,7 @@ } // if the required dedicated host is invalid -> use current VM dedicated host if (!VmHandler.validateDedicatedVdsExistOnSameCluster(vm.getStaticData(), null)) { - vm.setDedicatedVmForVds(oldVmStatic.getDedicatedVmForVds()); + vm.setDedicatedVmForVds(oldVmStatic.getSingleDedicatedVmForVds()); } validateQuota(vm); return true; diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java index 51b8ec8..ed84318 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java @@ -227,7 +227,7 @@ doReturn(vdsDAO).when(command).getVdsDAO(); doReturn(false).when(command).isDedicatedVdsExistOnSameCluster(any(VmBase.class), any(ArrayList.class)); - vmStatic.setDedicatedVmForVds(Guid.newGuid()); + vmStatic.setSingleDedicatedVmForVds(Guid.newGuid()); assertFalse("canDoAction should have failed with invalid dedicated host.", command.canDoAction()); } @@ -242,7 +242,7 @@ doReturn(vdsDAO).when(command).getVdsDAO(); when(vdsDAO.get(any(Guid.class))).thenReturn(vds); doReturn(true).when(command).isDedicatedVdsExistOnSameCluster(any(VmBase.class), any(ArrayList.class)); - vmStatic.setDedicatedVmForVds(Guid.newGuid()); + vmStatic.setSingleDedicatedVmForVds(Guid.newGuid()); assertTrue("canDoAction should have passed.", command.canDoAction()); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/VmManagementCommandBaseTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/VmManagementCommandBaseTest.java index efa7b78..10d38fc 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/VmManagementCommandBaseTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/VmManagementCommandBaseTest.java @@ -26,7 +26,7 @@ VmStatic vmStatic = new VmStatic(); vmStatic.setNumOfSockets(6); vmStatic.setCpuPerSocket(2); - vmStatic.setDedicatedVmForVds(null); + vmStatic.setSingleDedicatedVmForVds(null); Assert.assertFalse(test.isCpuPinningValid("0#0", vmStatic)); Assert.assertFalse(test.getReturnValue() .getCanDoActionMessages() @@ -40,7 +40,7 @@ VmStatic vmStatic = new VmStatic(); vmStatic.setNumOfSockets(6); vmStatic.setCpuPerSocket(2); - vmStatic.setDedicatedVmForVds(Guid.Empty); + vmStatic.setSingleDedicatedVmForVds(Guid.Empty); final VDS dedicatedVds = new VDS(); dedicatedVds.setCpuThreads(16); dedicatedVds.setOnlineCpus("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java index f4f2345..bd1526b 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java @@ -350,11 +350,11 @@ } public Guid getDedicatedVmForVds() { - return vmStatic.getDedicatedVmForVds(); + return vmStatic.getSingleDedicatedVmForVds(); } public void setDedicatedVmForVds(Guid value) { - vmStatic.setDedicatedVmForVds(value); + vmStatic.setSingleDedicatedVmForVds(value); } public Guid getVdsGroupId() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java index fcadb2e..b220e0c 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java @@ -329,7 +329,8 @@ @CopyOnNewVersion @EditableOnVmStatusField @EditableOnTemplate - private Guid dedicatedVmForVds; + /* immutable list CopyOnWriteArrayList does not compile with GWT */ + private /*CopyOnWrite*/ ArrayList<Guid> dedicatedVmForVdsList; @EditableOnVmStatusField @EditableOnTemplate @@ -440,7 +441,7 @@ vmBase.getCreatedByUserId(), vmBase.getMigrationSupport(), vmBase.isAllowConsoleReconnect(), - vmBase.getDedicatedVmForVds(), + vmBase.getSingleDedicatedVmForVds(), vmBase.getDefaultDisplayType(), vmBase.getMigrationDowntime(), vmBase.getVmInit(), @@ -563,7 +564,7 @@ setQuotaId(quotaId); this.migrationSupport = migrationSupport; this.allowConsoleReconnect = allowConsoleReconnect; - this.dedicatedVmForVds = dedicatedVmForVds; + this.dedicatedVmForVdsList = dedicatedVmForVdsList; this.migrationDowntime = migrationDowntime; this.vmInit = vmInit; this.serialNumberPolicy = serialNumberPolicy; @@ -935,7 +936,7 @@ result = prime * result + ((vmType == null) ? 0 : vmType.hashCode()); result = prime * result + ((quotaId == null) ? 0 : quotaId.hashCode()); result = prime * result + (allowConsoleReconnect ? 1231 : 1237); - result = prime * result + ((dedicatedVmForVds == null) ? 0 : dedicatedVmForVds.hashCode()); + result = prime * result + ((dedicatedVmForVdsList == null) ? 0 : dedicatedVmForVdsList.hashCode()); result = prime * result + ((migrationSupport == null) ? 0 : migrationSupport.hashCode()); result = prime * result + ((tunnelMigration == null) ? 0 : tunnelMigration.hashCode()); result = prime * result + ((vncKeyboardLayout == null) ? 0 : vncKeyboardLayout.hashCode()); @@ -1001,7 +1002,7 @@ && vmType == other.vmType && ObjectUtils.objectsEqual(quotaId, other.quotaId) && allowConsoleReconnect == other.allowConsoleReconnect - && ObjectUtils.objectsEqual(dedicatedVmForVds, other.dedicatedVmForVds) + && ObjectUtils.objectsEqual(dedicatedVmForVdsList, other.dedicatedVmForVdsList) && migrationSupport == other.migrationSupport && ObjectUtils.objectsEqual(tunnelMigration, other.tunnelMigration) && ObjectUtils.objectsEqual(vncKeyboardLayout, other.vncKeyboardLayout) @@ -1066,12 +1067,34 @@ this.migrationSupport = migrationSupport; } - public Guid getDedicatedVmForVds() { - return dedicatedVmForVds; + public Guid getSingleDedicatedVmForVds() { + if (dedicatedVmForVdsList == null || dedicatedVmForVdsList.isEmpty()) { + return null; + } + return dedicatedVmForVdsList.get(0); } - public void setDedicatedVmForVds(Guid value) { - dedicatedVmForVds = value; + public void setSingleDedicatedVmForVds(Guid value) { + /* immutable list CopyOnWriteArrayList does not compile with GWT */ + dedicatedVmForVdsList = new /* CopyOnWrite */ ArrayList<Guid>(); + dedicatedVmForVdsList.add(value); + } + + /** + * Get immutable list of dedicated hosts Guids. + * + * @return list of dedicated hosts Guids. + */ + /* immutable list CopyOnWriteArrayList does not compile with GWT */ + public /* CopyOnWrite */ ArrayList<Guid> getDedicatedVmForVdsList() { + return dedicatedVmForVdsList; + } + + /** + * Set immutable list of dedicated hosts Guids. + */ + public void setDedicatedVmForVdsList(List<Guid> hostGuidsList) { + dedicatedVmForVdsList.addAll(hostGuidsList); } public DisplayType getDefaultDisplayType() { diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmBaseDaoDbFacade.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmBaseDaoDbFacade.java index 14e8dfa..b80055a 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmBaseDaoDbFacade.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmBaseDaoDbFacade.java @@ -65,7 +65,7 @@ .addValue("kernel_params", entity.getKernelParams()) .addValue("quota_id", entity.getQuotaId()) .addValue("migration_support", entity.getMigrationSupport().getValue()) - .addValue("dedicated_vm_for_vds", entity.getDedicatedVmForVds()) + .addValue("dedicated_vm_for_vds", entity.getSingleDedicatedVmForVds()) .addValue("min_allocated_mem", entity.getMinAllocatedMem()) .addValue("is_run_and_pause", entity.isRunAndPause()) .addValue("created_by_user_id", entity.getCreatedByUserId()) @@ -136,7 +136,7 @@ entity.setSpiceFileTransferEnabled(rs.getBoolean("is_spice_file_transfer_enabled")); entity.setSpiceCopyPasteEnabled(rs.getBoolean("is_spice_copy_paste_enabled")); entity.setMigrationSupport(MigrationSupport.forValue(rs.getInt("migration_support"))); - entity.setDedicatedVmForVds(getGuid(rs, "dedicated_vm_for_vds")); + entity.setSingleDedicatedVmForVds(getGuid(rs, "dedicated_vm_for_vds")); entity.setMinAllocatedMem(rs.getInt("min_allocated_mem")); entity.setQuotaId(getGuid(rs, "quota_id")); entity.setCpuProfileId(getGuid(rs, "cpu_profile_id")); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index decbe84..4281148 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -153,7 +153,7 @@ if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetHost() && vm.getPlacementPolicy().getHost().isSetName() && !vm.getPlacementPolicy().getHost().isSetId()) { - staticVm.setDedicatedVmForVds(asGuid(getHostId(vm.getPlacementPolicy().getHost().getName()))); + staticVm.setSingleDedicatedVmForVds(asGuid(getHostId(vm.getPlacementPolicy().getHost().getName()))); } } else { vm.setPlacementPolicy(null); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java index 12acbbf..b7966c2 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java @@ -209,7 +209,7 @@ } } if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetHost()) { - staticVm.setDedicatedVmForVds(createGuidFromString(vm.getPlacementPolicy().getHost().getId())); + staticVm.setSingleDedicatedVmForVds(createGuidFromString(vm.getPlacementPolicy().getHost().getId())); } if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetGuaranteed()) { Long memGuaranteed = vm.getMemoryPolicy().getGuaranteed() / BYTES_PER_MB; diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java index ea3c3af..8dd4fc5 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfReader.java @@ -665,7 +665,7 @@ node = content.SelectSingleNode(OvfProperties.DEDICATED_VM_FOR_VDS); if (node != null) { if (StringUtils.isNotEmpty(node.innerText)) { - vmBase.setDedicatedVmForVds(Guid.createGuidFromString(node.innerText)); + vmBase.setSingleDedicatedVmForVds(Guid.createGuidFromString(node.innerText)); } } diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java index 12daabc..2d74ef1 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfWriter.java @@ -365,9 +365,9 @@ _writer.WriteEndElement(); } - if (vmBase.getDedicatedVmForVds() != null) { + if (vmBase.getSingleDedicatedVmForVds() != null) { _writer.WriteStartElement(OvfProperties.DEDICATED_VM_FOR_VDS); - _writer.WriteRaw(String.valueOf(vmBase.getDedicatedVmForVds())); + _writer.WriteRaw(String.valueOf(vmBase.getSingleDedicatedVmForVds())); _writer.WriteEndElement(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java index 76061ed..5f27d66 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java @@ -488,7 +488,7 @@ obj.setAutoStartup(instance.isAutoStartup()); obj.setCpuPerSocket(instance.getCpuPerSocket()); obj.setCreationDate(instance.getCreationDate()); - obj.setDedicatedVmForVds(instance.getDedicatedVmForVds()); + obj.setSingleDedicatedVmForVds(instance.getSingleDedicatedVmForVds()); obj.setDescription(instance.getDescription()); obj.setComment(instance.getComment()); obj.setCustomEmulatedMachine(instance.getCustomEmulatedMachine()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsUnitToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsUnitToVmBaseBuilder.java index 66f6267..b78b0e6 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsUnitToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsUnitToVmBaseBuilder.java @@ -11,9 +11,9 @@ // host migration configuration VDS defaultHost = model.getDefaultHost().getSelectedItem(); if (model.getIsAutoAssign().getEntity()) { - vm.setDedicatedVmForVds(null); + vm.setSingleDedicatedVmForVds(null); } else { - vm.setDedicatedVmForVds(defaultHost.getId()); + vm.setSingleDedicatedVmForVds(defaultHost.getId()); } } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsVmBaseToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsVmBaseToVmBaseBuilder.java index f5ed458..2b25903 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsVmBaseToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/DedicatedVmForVdsVmBaseToVmBaseBuilder.java @@ -6,6 +6,6 @@ public class DedicatedVmForVdsVmBaseToVmBaseBuilder extends BaseSyncBuilder<VmBase, VmBase> { @Override protected void build(VmBase source, VmBase destination) { - destination.setDedicatedVmForVds(source.getDedicatedVmForVds()); + destination.setSingleDedicatedVmForVds(source.getSingleDedicatedVmForVds()); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java index b85f4ef..b5ffe8e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java @@ -86,7 +86,7 @@ } setupWindowModelFrom(template); - doChangeDefautlHost(template.getDedicatedVmForVds()); + doChangeDefautlHost(template.getSingleDedicatedVmForVds()); updateRngDevice(template.getId()); getModel().getCustomPropertySheet().deserialize(template.getCustomProperties()); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java index 79ae4bc..cf57525 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java @@ -101,7 +101,7 @@ @Override public void finished(VmBase source, UnitVmModel destination) { setSelectedOSType(template, getModel().getSelectedCluster().getArchitecture()); - doChangeDefautlHost(template.getDedicatedVmForVds()); + doChangeDefautlHost(template.getSingleDedicatedVmForVds()); getModel().getIsStateless().setEntity(template.isStateless()); getModel().getIsRunAndPause().setEntity(template.isRunAndPause()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java index 2290767..acf1135 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java @@ -173,7 +173,7 @@ protected void changeDefualtHost() { super.changeDefualtHost(); - doChangeDefautlHost(template.getDedicatedVmForVds()); + doChangeDefautlHost(template.getSingleDedicatedVmForVds()); } public void buildModel(VmBase vmBase, BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java index 6fc5b81..1b0a954 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmListModelTest.java @@ -176,7 +176,7 @@ verifyBuiltKernelOptions(vm); verifyBuiltMigrationOptions(vm); - assertEquals(HOST_ID, vm.getDedicatedVmForVds()); + assertEquals(HOST_ID, vm.getSingleDedicatedVmForVds()); assertEquals(VM_NAME, vm.getName()); assertEquals(USB_POLICY, vm.getUsbPolicy()); diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index cf69998..be51dd6 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -3275,3 +3275,13 @@ ON host_device.device_name = vm_device.device AND vm_static.dedicated_vm_for_vds = host_device.host_id WHERE vm_device.type = 'hostdev'; +-- Dedicated Hosts view +CREATE +OR REPLACE VIEW dedicated_hosts_view AS +SELECT + vds_static.vds_name, + dedicated_hosts.vds_id, + dedicated_hosts.vm_id +FROM + dedicated_hosts +INNER JOIN vds_static ON dedicated_hosts.vds_id = vds_static.vds_id; diff --git a/packaging/dbscripts/dedicated_hosts_sp.sql b/packaging/dbscripts/dedicated_hosts_sp.sql new file mode 100644 index 0000000..17a56dc --- /dev/null +++ b/packaging/dbscripts/dedicated_hosts_sp.sql @@ -0,0 +1,33 @@ +Create or replace FUNCTION AddDedicatedHostToVm(v_vm_guid UUID, v_vds_guid UUID) +RETURNS VOID + AS $procedure$ +BEGIN +INSERT INTO dedicated_hosts(vm_id, vds_id) + VALUES(v_vm_guid, v_vds_guid); +END; $procedure$ +LANGUAGE plpgsql; + + + +Create or replace FUNCTION RemoveDedicatedHostFromVm(v_vm_guid UUID, v_vds_guid UUID) +RETURNS VOID +AS $procedure$ +BEGIN + DELETE + FROM dedicated_hosts + WHERE vm_id = v_vm_guid and vds_id = v_vds_guid; +END; $procedure$ +LANGUAGE plpgsql; + + + +Create or replace FUNCTION GetHostsDedictedToVmByVmId(v_vm_guid UUID) RETURNS SETOF dedicated_hosts_view STABLE + AS $procedure$ +BEGIN + RETURN QUERY + SELECT * + FROM dedicated_hosts_view + WHERE dedicated_hosts_view.vm_id = v_vm_guid; + +END; $procedure$ +LANGUAGE plpgsql; diff --git a/packaging/dbscripts/upgrade/03_06_1450_add_multiple_dedicated_hosts_to_vm.sql b/packaging/dbscripts/upgrade/03_06_1450_add_multiple_dedicated_hosts_to_vm.sql new file mode 100644 index 0000000..48321cb --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_1450_add_multiple_dedicated_hosts_to_vm.sql @@ -0,0 +1,22 @@ +-- Add new tables for pinning multiple hosts to vm +Create or replace FUNCTION __temp_add_multiple_dedicated_hosts_to_vm() returns void +AS $procedure$ +BEGIN + -- dedicated_hosts nodes table + CREATE TABLE dedicated_hosts + ( + vds_id UUID, + vm_id UUID, + CONSTRAINT fk_host FOREIGN KEY(vds_id) REFERENCES vds_static(vds_id) ON DELETE CASCADE, + CONSTRAINT fk_vm FOREIGN KEY(vm_id) REFERENCES vm_static(vm_guid) ON DELETE CASCADE + ); + + -- Create partial index for numa nodes + CREATE INDEX fk_host ON dedicated_hosts(vds_id); + CREATE INDEX fk_vm ON dedicated_hosts(vm_id); + +END; $procedure$ +LANGUAGE plpgsql; + +select __temp_add_multiple_dedicated_hosts_to_vm(); +drop function __temp_add_multiple_dedicated_hosts_to_vm(); -- To view, visit https://gerrit.ovirt.org/41619 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If358803c75a57f908152f8fc43e901bcc14b13d0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Dudi Maroshi <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
