Roy Golan has uploaded a new change for review. Change subject: core: Hot set number of CPUs on update VM ......................................................................
core: Hot set number of CPUs on update VM * allow editing the number of cpus in the when the VM is UP * if the VM is up and Version is > 3.3 call VDSM's setNumberOfCpus * audit log on success, failure Change-Id: I464a3dda5f143d1fcef63fd903eb615b01efe081 Signed-off-by: Roy Golan <rgo...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetNumberOfCpusVdsCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 10 files changed, 86 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/22757/1 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 921bef7..33b91b5 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 @@ -28,6 +28,7 @@ import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; import org.ovirt.engine.core.common.businessentities.VmDeviceId; @@ -43,8 +44,11 @@ import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.validation.group.UpdateEntity; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.DateTime; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.VmDeviceDAO; @@ -53,6 +57,9 @@ import org.ovirt.engine.core.utils.customprop.VmPropertiesUtils.VMCustomProperties; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; +import org.ovirt.engine.core.vdsbroker.SetNumberOfCpusVdsCommand; + +import static org.ovirt.engine.core.vdsbroker.SetNumberOfCpusVdsCommand.*; @LockIdNameAttribute public class UpdateVmCommand<T extends VmManagementParametersBase> extends VmManagementCommandBase<T> @@ -93,6 +100,7 @@ VmDeviceUtils.updateVmDevices(getParameters(), oldVm); updateWatchdog(); checkTrustedService(); + hotPlugUnplugCpus(); setSucceeded(true); } @@ -198,6 +206,28 @@ } } + private void hotPlugUnplugCpus() { + if (canHotPlugUnplugCpu()) { + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.SetNumberOfCpus, + new Params( + getVm().getRunOnVds(), + getVm().getId(), + getParameters().getVm().getNumOfCpus())); + + AuditLogableBase logable = new AuditLogableBase(); + logable.setVmId(getVmId()); + logable.addCustomValue("numberOfCpus", String.valueOf(getParameters().getVm().getNumOfCpus())); + AuditLogDirector.log(logable, vdsReturnValue.getSucceeded() ? + AuditLogType.FAILED_SET_NUMBER_OF_CPUS : AuditLogType.SET_NUMBER_OF_CPUS); + } + + } + + private boolean canHotPlugUnplugCpu() { + return getVm().getVdsGroupCompatibilityVersion().compareTo(Version.v3_3) > 0 && + getVm().getNumOfCpus() != getParameters().getVm().getNumOfCpus(); + } + @Override protected List<Class<?>> getValidationGroups() { addValidationGroup(UpdateEntity.class); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index b41f93f..9c5e4c4 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -194,6 +194,8 @@ USER_EXPORT_IMAGE(2030), USER_EXPORT_IMAGE_FINISHED_SUCCESS(2031), USER_EXPORT_IMAGE_FINISHED_FAILURE(2032), + SET_NUMBER_OF_CPUS(2033), + FAILED_SET_NUMBER_OF_CPUS(2034), // Used only from SQL script, therefor should not have severity & message USER_RUN_UNLOCK_ENTITY_SCRIPT(2024), 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 c0cf842..b26efc0 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 @@ -66,7 +66,7 @@ @EditableOnTemplate private int memSizeMb; - @EditableOnVmStatusField + @EditableOnVmStatusField(statuses = {VMStatus.Down, VMStatus.Up} ) @EditableOnTemplate private int numOfSockets; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 27b7ab0..c67c41a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -152,7 +152,8 @@ GetGlusterVolumeRebalanceStatus("org.ovirt.engine.core.vdsbroker.gluster"), GetDiskAlignment("org.ovirt.engine.core.vdsbroker.vdsbroker"), GlusterTasksList("org.ovirt.engine.core.vdsbroker.gluster"), - GetGlusterVolumeRemoveBricksStatus("org.ovirt.engine.core.vdsbroker.gluster"); + GetGlusterVolumeRemoveBricksStatus("org.ovirt.engine.core.vdsbroker.gluster"), + SetNumberOfCpus("org.ovirt.engine.core.vdsbroker"); String packageName; diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index a76e936..04507b4 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -467,6 +467,8 @@ severities.put(AuditLogType.USER_EXPORT_IMAGE, AuditLogSeverity.NORMAL); severities.put(AuditLogType.USER_EXPORT_IMAGE_FINISHED_SUCCESS, AuditLogSeverity.NORMAL); severities.put(AuditLogType.USER_EXPORT_IMAGE_FINISHED_FAILURE, AuditLogSeverity.ERROR); + severities.put(AuditLogType.SET_NUMBER_OF_CPUS, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.FAILED_SET_NUMBER_OF_CPUS, AuditLogSeverity.ERROR); } private static void initQuotaSeverities() { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index ef647fe..f5d569c 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -90,6 +90,8 @@ USER_EXPORT_IMAGE=User ${UserName} exporting image ${RepoImageName} to domain ${DestinationStorageDomainName}. USER_EXPORT_IMAGE_FINISHED_SUCCESS=User ${UserName} successfully exported image ${RepoImageName} to domain ${DestinationStorageDomainName}. USER_EXPORT_IMAGE_FINISHED_FAILURE=User ${UserName} failed to export image ${RepoImageName} to domain ${DestinationStorageDomainName}. +SET_NUMBER_OF_CPUS=VM ${vmName} number of CPUs is hot set to ${numberOfCpus} +FAILED_SET_NUMBER_OF_CPUS= Faild to hot set number of CPUS to VM ${vmName}. Underlying error message: ${ErrorMessage}} USER_MOVE_IMAGE_GROUP_FAILED_TO_DELETE_SRC_IMAGE=Possible failure while deleting ${DiskAlias} from the source Storage Domain ${StorageDomainName} during the move operation. The Storage Domain may be manually cleaned-up from possible leftovers (User:${UserName}). USER_MOVE_IMAGE_GROUP_FAILED_TO_DELETE_DST_IMAGE=Possible failure while clearing possible leftovers of ${DiskAlias} from the target Storage Domain ${StorageDomainName} after the move operation failed to copy the image to it properly. The Storage Domain may be manually cleaned-up from possible leftovers (User:${UserName}). USER_REMOVE_DISK_FROM_VM=Disk was removed from VM ${VmName} by ${UserName}. diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetNumberOfCpusVdsCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetNumberOfCpusVdsCommand.java new file mode 100644 index 0000000..42e0ade --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/SetNumberOfCpusVdsCommand.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.vdsbroker; + +import org.ovirt.engine.core.common.vdscommands.VdsAndVmIDVDSParametersBase; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand; + +public class SetNumberOfCpusVdsCommand<P extends SetNumberOfCpusVdsCommand.Params> extends VdsBrokerCommand<P> { + + public SetNumberOfCpusVdsCommand(P parameters) { + super(parameters); + } + + @Override + protected void executeVdsBrokerCommand() { + getBroker().setNumberOfCpus( + getParameters().getVmId().toString(), + String.valueOf(getParameters().getNumberOfCpus())); + proceedProxyReturnValue(); + } + + public static class Params extends VdsAndVmIDVDSParametersBase{ + + private int numberOfCpus; + + public Params(Guid vdsId, Guid vmId, int numberOfCpus) { + super(vdsId, vmId); + this.numberOfCpus = numberOfCpus; + } + + public int getNumberOfCpus() { + return numberOfCpus; + } + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 8fa530d..f07e9e6 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -295,4 +295,6 @@ GlusterVolumeTaskReturnForXmlRpc glusterVolumeRebalanceStatus(String volumeName); GlusterVolumeTaskReturnForXmlRpc glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); + + StatusOnlyReturnForXmlRpc setNumberOfCpus(String vmId, String numberOfCpus); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 0cd2d0f..676e018 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -279,4 +279,6 @@ public Map<String, Object> glusterVolumeRebalanceStatus(String volumeName); public Map<String, Object> glusterVolumeRemoveBrickStatus(String volumeName, String[] bricksList); + + public Map<String,Object> setNumberOfCpus(String vmId, String numberOfCpus); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index bc4ad53..870af62 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -1349,6 +1349,15 @@ } @Override + public StatusOnlyReturnForXmlRpc setNumberOfCpus(String vmId, String numberOfCpus) { + try { + return new StatusOnlyReturnForXmlRpc(vdsServer.setNumberOfCpus(vmId, numberOfCpus)); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override public StatusOnlyReturnForXmlRpc setMOMPolicyParameters(Map<String, Object> key_value_store) { try { Map<String, Object> xmlRpcReturnValue = vdsServer.setMOMPolicyParameters(key_value_store); -- To view, visit http://gerrit.ovirt.org/22757 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I464a3dda5f143d1fcef63fd903eb615b01efe081 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <rgo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches