Gilad Chaplik has uploaded a new change for review. Change subject: core: shceduling: destination host isn't guaranteed ......................................................................
core: shceduling: destination host isn't guaranteed when migrating VM to a specific host, or running once VM on a specific host, and the specified host isn't suitable for running the VM, another host could be selected. this patch fixes that, and the operation would fail. Change-Id: I6894c0d8d42bd57026ccc36b52d9d266add14384 Bug-Url: https://bugzilla.redhat.com/999630 Signed-off-by: Gilad Chaplik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java 7 files changed, 41 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/19970/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java index aff7f7c..149a69a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java @@ -92,7 +92,7 @@ SchedulingManager.getInstance().schedule(getVdsGroup(), getVm(), getVdsBlackList(), - getParameters().getInitialHosts(), + getVdsWhiteList(), destVds == null ? null : destVds.getId(), new ArrayList<String>(), new VdsFreeMemoryChecker(this)); @@ -389,4 +389,10 @@ } return blackList; } + + // initial hosts list picked for scheduling, currently + // passed by load balancing process. + protected List<Guid> getVdsWhiteList() { + return getParameters().getInitialHosts(); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java index eae49ce..680e7a1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmToServerCommand.java @@ -1,5 +1,8 @@ package org.ovirt.engine.core.bll; +import java.util.Arrays; +import java.util.List; + import org.ovirt.engine.core.common.action.MigrateVmToServerParameters; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; @@ -51,4 +54,9 @@ determineMigrationFailureForAuditLog(); log(); } + + @Override + protected List<Guid> getVdsWhiteList() { + return Arrays.asList(getVdsDestinationId()); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 17f074a..1c3023d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -661,7 +661,7 @@ SchedulingManager.getInstance().schedule(getVdsGroup(), getVm(), getRunVdssList(), - null, + getVdsWhiteList(), destinationVds == null ? null : destinationVds.getId(), new ArrayList<String>(), new VdsFreeMemoryChecker(this)); @@ -792,6 +792,7 @@ getParameters().getFloppyPath(), getParameters().getRunAsStateless(), getRunVdssList(), + getVdsWhiteList(), getDestinationVds() != null ? getDestinationVds().getId() : null, getVdsGroup())) { return false; @@ -1085,4 +1086,9 @@ super.reportCompleted(); } } + + // initial white list (null == all hosts) + protected List<Guid> getVdsWhiteList() { + return null; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java index 1ee287b..2079a2d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.ovirt.engine.core.bll.job.ExecutionContext; @@ -13,9 +14,11 @@ import org.ovirt.engine.core.common.action.RunVmParams; import org.ovirt.engine.core.common.action.SysPrepParams; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.vdscommands.CreateVmVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; @NonTransactiveCommandAttribute public class RunVmOnceCommand<T extends RunVmOnceParams> extends RunVmCommand<T> implements QuotaStorageDependent { @@ -105,4 +108,13 @@ } return list; } + + @Override + protected List<Guid> getVdsWhiteList() { + VDS destinationVds = getDestinationVds(); + if (destinationVds != null) { + return Arrays.asList(destinationVds.getId()); + } + return super.getVdsWhiteList(); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java index f15b454..b2521a7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java @@ -239,6 +239,7 @@ runVmParams.getRunAsStateless(), new ArrayList<Guid>(), null, + null, vdsGroup); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java index f0ec12b..e2f6070 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java @@ -309,6 +309,7 @@ /** * A general method for run vm validations. used in runVmCommand and in VmPoolCommandBase + * * @param vm * @param messages * @param vmDisks @@ -321,6 +322,8 @@ * @param vdsSelector * @param vdsBlackList * - hosts that we already tried to run on + * @param vdsWhiteList + * - initial host list, mainly runOnSpecificHost (runOnce/migrateToHost) * @return */ public boolean canRunVm(VM vm, @@ -333,6 +336,7 @@ String floppyPath, Boolean runAsStateless, List<Guid> vdsBlackList, + List<Guid> vdsWhiteList, Guid destVds, VDSGroup vdsGroup) { @@ -357,7 +361,7 @@ } if (!SchedulingManager.getInstance().canSchedule( - vdsGroup, vm, vdsBlackList, null, destVds, messages)) { + vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, messages)) { return false; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java index 391c41d..82cf634 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java @@ -371,6 +371,7 @@ anyString(), anyBoolean(), Matchers.anyListOf(Guid.class), + Matchers.anyListOf(Guid.class), any(Guid.class), any(VDSGroup.class))).thenReturn(true); doReturn(runVmValidator).when(command).getRunVmValidator(); -- To view, visit http://gerrit.ovirt.org/19970 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6894c0d8d42bd57026ccc36b52d9d266add14384 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
