Hello Gilad Chaplik,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/15816
to review the following change.
Change subject: core: Introduce scheduling package
......................................................................
core: Introduce scheduling package
Move all host selection code into a separate package within
bll.
Remove all bll dependencies from these files.
This is the first part of refactoring host selection and load balancing.
Gerrit-cntr: 1
Change-Id: Icac8f7bc8a696455134bb90ffc17afd420e18dd4
Signed-off-by: Gilad Chaplik <[email protected]>
---
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java
D
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NoneComparer.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/RunVmCommandBase.java
D
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsComparer.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/EvenlyDistributeComparer.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MemoryVdsComparer.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MigrationHandler.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NonWaitingDelayer.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NoneComparer.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PowerSaveComparer.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/RunVmDelayer.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SlaValidator.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsComparer.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsCpuVdsLoadBalancingAlgorithm.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsFreeMemoryChecker.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancingAlgorithm.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsSelector.java
R
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VmCountVdsLoadBalancingAlgorithm.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
24 files changed, 246 insertions(+), 197 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/15816/1
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
index 54e9105..1353faf 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java
@@ -1,5 +1,6 @@
package org.ovirt.engine.core.bll;
+import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.DependsOn;
@@ -7,11 +8,16 @@
import javax.ejb.Startup;
import org.ovirt.engine.core.bll.gluster.GlusterJobsManager;
+import org.ovirt.engine.core.bll.job.ExecutionHandler;
import org.ovirt.engine.core.bll.network.MacPoolManager;
import org.ovirt.engine.core.bll.provider.ExternalTrustStoreInitializer;
+import org.ovirt.engine.core.bll.scheduling.MigrationHandler;
+import org.ovirt.engine.core.bll.scheduling.VdsLoadBalancer;
import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler;
-import org.ovirt.engine.core.common.config.Config;
-import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.action.MigrateVmToServerParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils;
import org.ovirt.engine.core.utils.customprop.VmPropertiesUtils;
import org.ovirt.engine.core.utils.exceptions.InitializationException;
@@ -43,9 +49,19 @@
AsyncTaskManager.getInstance().InitAsyncTaskManager();
OvfDataUpdater.getInstance().initOvfDataUpdater();
- if (Config.<Boolean> GetValue(ConfigValues.EnableVdsLoadBalancing)) {
- VdsLoadBalancer.EnableLoadBalancer();
- }
+ VdsLoadBalancer.getInstance().setMigrationHandler(new
MigrationHandler() {
+
+ @Override
+ public void migrateVMs(List<Pair<Guid, Guid>> list) {
+ for (Pair<Guid, Guid> pair : list) {
+ MigrateVmToServerParameters parameters =
+ new MigrateVmToServerParameters(false,
pair.getFirst(), pair.getSecond());
+
Backend.getInstance().runInternalAction(VdcActionType.MigrateVmToServer,
+ parameters,
+ ExecutionHandler.createInternalJobContext());
+ }
+ }
+ });
ThreadPoolUtil.execute(new Runnable() {
@Override
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 e66b63f..56a3242 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
@@ -3,6 +3,8 @@
import java.util.List;
import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
import org.ovirt.engine.core.bll.validator.DiskImagesValidator;
import org.ovirt.engine.core.common.AuditLogType;
@@ -81,6 +83,7 @@
protected void initVdss() {
setVdsIdRef(new Guid(getVm().getRunOnVds().toString()));
setVdsDestinationId(getVdsSelector().getVdsToRunOn(true));
+ VmHandler.UpdateVmGuestAgentVersion(getVm());
// make _destinationVds null in order to refresh it from db in case it
// changed.
_destinationVds = null;
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NoneComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NoneComparer.java
deleted file mode 100644
index aeb94a6..0000000
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NoneComparer.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.ovirt.engine.core.bll;
-
-public class NoneComparer extends EvenlyDistributeComparer {
-}
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 82a7301..601621b 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
@@ -19,6 +19,8 @@
import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
import org.ovirt.engine.core.bll.quota.QuotaVdsDependent;
import org.ovirt.engine.core.bll.quota.QuotaVdsGroupConsumptionParameter;
+import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
import org.ovirt.engine.core.bll.validator.RunVmValidator;
@@ -611,6 +613,7 @@
protected boolean getVdsToRunOn() {
// use destination vds or default vds or none
setVdsId(getVdsSelector().getVdsToRunOn(false));
+ VmHandler.UpdateVmGuestAgentVersion(getVm());
setVds(null);
setVdsName(null);
if (getVdsId().equals(Guid.Empty)) {
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
index baa8fe7..ec80a8c 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java
@@ -15,6 +15,8 @@
import org.ovirt.engine.core.bll.job.ExecutionContext.ExecutionMethod;
import org.ovirt.engine.core.bll.job.ExecutionHandler;
import org.ovirt.engine.core.bll.job.JobRepositoryFactory;
+import org.ovirt.engine.core.bll.scheduling.RunVmDelayer;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
import org.ovirt.engine.core.bll.storage.StorageHelperDirector;
import org.ovirt.engine.core.common.action.VmOperationParameterBase;
@@ -23,7 +25,6 @@
import org.ovirt.engine.core.common.businessentities.LunDisk;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.businessentities.VDS;
-import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
@@ -83,61 +84,6 @@
*/
private List<Guid> getRunVdssList() {
return getVdsSelector().getRunVdssList();
- }
-
- /**
- * Check if the given host has enough CPU to run the VM, without exceeding
the high utilization threshold.
- *
- * @param vds
- * The host to check.
- * @param vm
- * The VM to check.
- * @return Does this host has enough CPU (without exceeding the threshold)
to run the VM.
- */
- public static boolean hasCpuToRunVM(VDS vds, VM vm) {
- if (vds.getUsageCpuPercent() == null || vm.getUsageCpuPercent() ==
null) {
- return false;
- }
-
- // The predicted CPU is actually the CPU that the VM will take
considering how many cores it has and now many
- // cores the host has. This is why we take both parameters into
consideration.
- int predictedVmCpu = (vm.getUsageCpuPercent() * vm.getNumOfCpus()) /
VdsSelector.getEffectiveCpuCores(vds);
- boolean result = vds.getUsageCpuPercent() + predictedVmCpu <=
vds.getHighUtilization();
- if (log.isDebugEnabled()) {
- log.debugFormat("Host {0} has {1}% CPU load; VM {2} is predicted
to have {3}% CPU load; " +
- "High threshold is {4}%. Host is {5}suitable in terms of
CPU.",
- vds.getName(),
- vds.getUsageCpuPercent(),
- vm.getName(),
- predictedVmCpu,
- vds.getHighUtilization(),
- (result ? "" : "not "));
- }
-
- return result;
- }
-
- public static boolean hasMemoryToRunVM(VDS curVds, VM vm) {
- boolean retVal = false;
- if (curVds.getMemCommited() != null && curVds.getPhysicalMemMb() !=
null && curVds.getReservedMem() != null) {
- double vdsCurrentMem =
- curVds.getMemCommited() + curVds.getPendingVmemSize() +
curVds.getGuestOverhead() + curVds
- .getReservedMem() + vm.getMinAllocatedMem();
- double vdsMemLimit = curVds.getMaxVdsMemoryOverCommit() *
curVds.getPhysicalMemMb() / 100.0;
- if (log.isDebugEnabled()) {
- log.debugFormat("hasMemoryToRunVM: host {0} pending vmem size
is : {1} MB",
- curVds.getName(),
- curVds.getPendingVmemSize());
- log.debugFormat("Host Mem Conmmitted: {0}, Host Reserved Mem:
{1}, Host Guest Overhead {2}, VM Min Allocated Mem {3}",
- curVds.getMemCommited(),
- curVds.getReservedMem(),
- curVds.getGuestOverhead(),
- vm.getMinAllocatedMem());
- log.debugFormat("{0} <= ??? {1}", vdsCurrentMem, vdsMemLimit);
- }
- retVal = (vdsCurrentMem <= vdsMemLimit);
- }
- return retVal;
}
@Override
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsComparer.java
deleted file mode 100644
index f7f4bef..0000000
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsComparer.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.ovirt.engine.core.bll;
-
-import org.ovirt.engine.core.common.businessentities.VDS;
-import org.ovirt.engine.core.common.businessentities.VM;
-import org.ovirt.engine.core.common.businessentities.VdsSelectionAlgorithm;
-import org.ovirt.engine.core.compat.NotImplementedException;
-
-/**
- * Base class for comparing between vdss
- */
-public abstract class VdsComparer {
- /**
- * Factory method, creates necessary comparer
- *
- * @return
- */
- public static VdsComparer CreateComparer(VdsSelectionAlgorithm
selectionAlgorithm) {
- switch (selectionAlgorithm) {
- case EvenlyDistribute:
- return new EvenlyDistributeComparer();
- case PowerSave:
- return new PowerSaveComparer();
- case None:
- return new NoneComparer();
- default:
- throw new NotImplementedException("Uknown type of selection
algorithm: " + selectionAlgorithm);
- }
- // try
- // {
- // //return AppDomain.CurrentDomain.CreateInstanceAndUnwrap("VdcBLL",
- // GetComparerTypeName(selectionAlgorithm)) as VdsComparer;
- // java.lang.Class type =
- // java.lang.Class.forName(GetComparerTypeName(selectionAlgorithm));
- // //type.GetConstructor(BindingFlags.Instance |
BindingFlags.NonPublic,
- // null,
- // // CallingConventions.HasThis, null, null);
- // java.lang.reflect.Constructor info = type.getConstructors()[0];
- // Object TempAsCast = info.newInstance(null);
- // return (VdsComparer)((TempAsCast instanceof VdsComparer) ?
TempAsCast
- // : null);
- // //return new BestDistributionComparer();
- // }
- // catch (Exception ex)
- // {
- // throw new ApplicationException("JTODO unhandled exception", ex);
- // }
- }
-
- // private static String GetComparerTypeName(VdsSelectionAlgorithm
- // selectionAlgorithm)
- // {
- // return String.format("%1$s.%2$s%3$s",
- // "VdcBLL",selectionAlgorithm.toString(), "Comparer");
- // }
- /**
- * Base abstract function for finish best Vds treatment
- *
- * @param x
- */
- public abstract void BestVdsProcedure(VDS x);
-
- /**
- * Base abstract function to compare between two VDSs
- *
- * @param x
- * @param y
- * @param vm
- * @return
- */
- public abstract boolean IsBetter(VDS x, VDS y, VM vm);
-}
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 fd4ba8b..b3cd76f 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
@@ -5,6 +5,9 @@
import java.util.LinkedList;
import java.util.List;
+import org.ovirt.engine.core.bll.scheduling.NonWaitingDelayer;
+import org.ovirt.engine.core.bll.scheduling.VdsFreeMemoryChecker;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EvenlyDistributeComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/EvenlyDistributeComparer.java
similarity index 90%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EvenlyDistributeComparer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/EvenlyDistributeComparer.java
index 13e5356..799152f 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/EvenlyDistributeComparer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/EvenlyDistributeComparer.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
@@ -19,7 +19,7 @@
}
@Override
- public boolean IsBetter(VDS x, VDS y, VM vm) {
+ public boolean isBetter(VDS x, VDS y, VM vm) {
if (VdsSelector.getEffectiveCpuCores(x) == null
|| VdsSelector.getEffectiveCpuCores(y) == null
|| x.getUsageCpuPercent() == null
@@ -34,6 +34,6 @@
}
@Override
- public void BestVdsProcedure(VDS x) {
+ public void bestVdsProcedure(VDS x) {
}
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MemoryVdsComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MemoryVdsComparer.java
similarity index 73%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MemoryVdsComparer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MemoryVdsComparer.java
index a600e45..cd59d89 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MemoryVdsComparer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MemoryVdsComparer.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
@@ -8,13 +8,13 @@
*/
public class MemoryVdsComparer extends VdsComparer {
@Override
- public boolean IsBetter(VDS x, VDS y, VM vm) {
+ public boolean isBetter(VDS x, VDS y, VM vm) {
return ((x.getPhysicalMemMb() - x.getMemCommited()) <
(y.getPhysicalMemMb() - y.getMemCommited()));
}
@Override
- public void BestVdsProcedure(VDS x) {
+ public void bestVdsProcedure(VDS x) {
}
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MigrationHandler.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MigrationHandler.java
new file mode 100644
index 0000000..7e53bfc
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/MigrationHandler.java
@@ -0,0 +1,14 @@
+package org.ovirt.engine.core.bll.scheduling;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+
+public interface MigrationHandler {
+ /**
+ * this method holds a list of pairs VM id and Host id. each VM should be
migrated to the specified Host
+ * @param list
+ */
+ void migrateVMs(List<Pair<Guid, Guid>> list);
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NonWaitingDelayer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NonWaitingDelayer.java
similarity index 85%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NonWaitingDelayer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NonWaitingDelayer.java
index 8e600fc..5981327 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/NonWaitingDelayer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NonWaitingDelayer.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.ovirt.engine.core.compat.Guid;
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NoneComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NoneComparer.java
new file mode 100644
index 0000000..ea548e6
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/NoneComparer.java
@@ -0,0 +1,5 @@
+package org.ovirt.engine.core.bll.scheduling;
+
+
+public final class NoneComparer extends EvenlyDistributeComparer {
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PowerSaveComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PowerSaveComparer.java
similarity index 83%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PowerSaveComparer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PowerSaveComparer.java
index 125dd90..128f4b8 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PowerSaveComparer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PowerSaveComparer.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
@@ -11,7 +11,7 @@
public class PowerSaveComparer extends EvenlyDistributeComparer {
@Override
- public boolean IsBetter(VDS x, VDS y, VM vm) {
+ public boolean isBetter(VDS x, VDS y, VM vm) {
boolean returnValue = false;
@@ -23,7 +23,7 @@
returnValue = true;
}
} else if (!y_has_zero) {
- return super.IsBetter(x, y, vm);
+ return super.isBetter(x, y, vm);
}
return returnValue;
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmDelayer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/RunVmDelayer.java
similarity index 77%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmDelayer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/RunVmDelayer.java
index 884749b..131b156 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmDelayer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/RunVmDelayer.java
@@ -1,9 +1,9 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.ovirt.engine.core.compat.Guid;
/**
- * Some commands e.g RunVm may run as a bulk AKA {@link MultipleActionsRunner}
and performs logic to <br>
+ * Some commands e.g RunVm may run as a bulk and performs logic to <br>
* count and reserve memory and CPU to assure there are both enough resources
to complete them<br>
* (i.e run a VM on a selected host) and that we don't exceed those for the
subsequent executions.<br>
* Moreover bulk operations may cause a pick in VDSM resources utilization and
the engine can regulate <br>
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SlaValidator.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SlaValidator.java
new file mode 100644
index 0000000..ddd7f30
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SlaValidator.java
@@ -0,0 +1,70 @@
+package org.ovirt.engine.core.bll.scheduling;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.utils.log.Log;
+import org.ovirt.engine.core.utils.log.LogFactory;
+
+public class SlaValidator {
+ public static Log log = LogFactory.getLog(SlaValidator.class);
+
+ private static final SlaValidator instance = new SlaValidator();
+
+ public static SlaValidator getInstance() {
+ return instance;
+ }
+
+ public boolean hasMemoryToRunVM(VDS curVds, VM vm) {
+ boolean retVal = false;
+ if (curVds.getMemCommited() != null && curVds.getPhysicalMemMb() !=
null && curVds.getReservedMem() != null) {
+ double vdsCurrentMem =
+ curVds.getMemCommited() + curVds.getPendingVmemSize() +
curVds.getGuestOverhead() + curVds
+ .getReservedMem() + vm.getMinAllocatedMem();
+ double vdsMemLimit = curVds.getMaxVdsMemoryOverCommit() *
curVds.getPhysicalMemMb() / 100.0;
+ if (log.isDebugEnabled()) {
+ log.debugFormat("hasMemoryToRunVM: host {0} pending vmem size
is : {1} MB",
+ curVds.getName(),
+ curVds.getPendingVmemSize());
+ log.debugFormat("Host Mem Conmmitted: {0}, Host Reserved Mem:
{1}, Host Guest Overhead {2}, VM Min Allocated Mem {3}",
+ curVds.getMemCommited(),
+ curVds.getReservedMem(),
+ curVds.getGuestOverhead(),
+ vm.getMinAllocatedMem());
+ log.debugFormat("{0} <= ??? {1}", vdsCurrentMem, vdsMemLimit);
+ }
+ retVal = (vdsCurrentMem <= vdsMemLimit);
+ }
+ return retVal;
+ }
+
+ /**
+ * Check if the given host has enough CPU to run the VM, without exceeding
the high utilization threshold.
+ *
+ * @param vds
+ * The host to check.
+ * @param vm
+ * The VM to check.
+ * @return Does this host has enough CPU (without exceeding the threshold)
to run the VM.
+ */
+ public boolean hasCpuToRunVM(VDS vds, VM vm) {
+ if (vds.getUsageCpuPercent() == null || vm.getUsageCpuPercent() ==
null) {
+ return false;
+ }
+ // The predicted CPU is actually the CPU that the VM will take
considering how many cores it has and now many
+ // cores the host has. This is why we take both parameters into
consideration.
+ int predictedVmCpu = (vm.getUsageCpuPercent() * vm.getNumOfCpus()) /
VdsSelector.getEffectiveCpuCores(vds);
+ boolean result = vds.getUsageCpuPercent() + predictedVmCpu <=
vds.getHighUtilization();
+ if (log.isDebugEnabled()) {
+ log.debugFormat("Host {0} has {1}% CPU load; VM {2} is predicted
to have {3}% CPU load; " +
+ "High threshold is {4}%. Host is {5}suitable in terms of
CPU.",
+ vds.getName(),
+ vds.getUsageCpuPercent(),
+ vm.getName(),
+ predictedVmCpu,
+ vds.getHighUtilization(),
+ (result ? "" : "not "));
+ }
+ return result;
+ }
+
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsComparer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsComparer.java
new file mode 100644
index 0000000..417a750
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsComparer.java
@@ -0,0 +1,43 @@
+package org.ovirt.engine.core.bll.scheduling;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VdsSelectionAlgorithm;
+
+/**
+ * Base class for comparing between Hosts
+ */
+public abstract class VdsComparer {
+ /**
+ * Factory method, creates necessary comparer
+ *
+ * @return
+ */
+ public static VdsComparer CreateComparer(VdsSelectionAlgorithm
selectionAlgorithm) {
+ switch (selectionAlgorithm) {
+ case EvenlyDistribute:
+ return new EvenlyDistributeComparer();
+ case PowerSave:
+ return new PowerSaveComparer();
+ default:
+ return new NoneComparer();
+ }
+ }
+
+ /**
+ * Base abstract function for finish best Vds treatment
+ *
+ * @param x
+ */
+ public abstract void bestVdsProcedure(VDS x);
+
+ /**
+ * Base abstract function to compare between two VDSs
+ *
+ * @param x
+ * @param y
+ * @param vm
+ * @return
+ */
+ public abstract boolean isBetter(VDS x, VDS y, VM vm);
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsCpuVdsLoadBalancingAlgorithm.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsCpuVdsLoadBalancingAlgorithm.java
similarity index 99%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsCpuVdsLoadBalancingAlgorithm.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsCpuVdsLoadBalancingAlgorithm.java
index cb7f868..a5199d7 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsCpuVdsLoadBalancingAlgorithm.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsCpuVdsLoadBalancingAlgorithm.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import java.util.Collections;
import java.util.Comparator;
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsFreeMemoryChecker.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsFreeMemoryChecker.java
similarity index 87%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsFreeMemoryChecker.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsFreeMemoryChecker.java
index 57ceca6..f8f0296 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsFreeMemoryChecker.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsFreeMemoryChecker.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import org.apache.commons.logging.Log;
import org.ovirt.engine.core.common.businessentities.VDS;
@@ -18,7 +18,7 @@
public boolean evaluate(VDS vds, VM vm) {
// first check if this host has enough memory run the VM.
- if (!RunVmCommandBase.hasMemoryToRunVM(vds, vm)) {
+ if (!SlaValidator.getInstance().hasMemoryToRunVM(vds, vm)) {
if (vds.getPendingVmemSize() == 0) {
// there are no pending VMs to run - we hit the hard limit of
memory, no special treatment
@@ -35,7 +35,7 @@
vds = DbFacade.getInstance().getVdsDao().get(vds.getId());
// check free memory on the updated host
- return RunVmCommandBase.hasMemoryToRunVM(vds, vm);
+ return SlaValidator.getInstance().hasMemoryToRunVM(vds, vm);
}
return true;
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancer.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
similarity index 73%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancer.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
index b503908..12a977d 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancer.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -7,9 +7,9 @@
import org.ovirt.engine.core.common.businessentities.VdsSelectionAlgorithm;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.log.Log;
import org.ovirt.engine.core.utils.log.LogFactory;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.timer.OnTimerMethodAnnotation;
import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl;
@@ -19,8 +19,22 @@
*/
public final class VdsLoadBalancer {
private static Log log = LogFactory.getLog(VdsLoadBalancer.class);
+ private static VdsLoadBalancer instance = null;
+ private MigrationHandler migrationHandler = null;
- private static VdsLoadBalancer instance = new VdsLoadBalancer();
+ public static VdsLoadBalancer getInstance() {
+ if (instance == null) {
+ synchronized (VdsLoadBalancer.class) {
+ if (instance == null) {
+ instance = new VdsLoadBalancer();
+ if (Config.<Boolean>
GetValue(ConfigValues.EnableVdsLoadBalancing)) {
+ EnableLoadBalancer();
+ }
+ }
+ }
+ }
+ return instance;
+ }
private VdsLoadBalancer() {
}
@@ -40,7 +54,7 @@
group.gethigh_utilization(),
group.getlow_utilization(),
group.getcpu_over_commit_duration_minutes(),
Config.<Integer>
GetValue(ConfigValues.UtilizationThresholdInPercent));
- loadBalancingAlgorithm.LoadBalance();
+
migrationHandler.migrateVMs(loadBalancingAlgorithm.LoadBalance());
} else {
log.debugFormat("VdsLoadBalancer: Cluster {0} skipped because
no selection algorithm selected.",
group.getname());
@@ -55,4 +69,11 @@
Config.<Integer>
GetValue(ConfigValues.VdsLoadBalancingeIntervalInMinutes), TimeUnit.MINUTES);
log.info("Finished scheduling to enable vds load balancer");
}
+
+ public void setMigrationHandler(MigrationHandler migrationHandler) {
+ if (this.migrationHandler != null) {
+ throw new RuntimeException("Load balance migration handler should
be set only once");
+ }
+ this.migrationHandler = migrationHandler;
+ }
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancingAlgorithm.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancingAlgorithm.java
similarity index 88%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancingAlgorithm.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancingAlgorithm.java
index e149da8..f4adb51 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsLoadBalancingAlgorithm.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancingAlgorithm.java
@@ -1,5 +1,6 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
@@ -7,13 +8,11 @@
import java.util.Map;
import java.util.Set;
-import org.ovirt.engine.core.bll.job.ExecutionHandler;
-import org.ovirt.engine.core.common.action.MigrateVmToServerParameters;
-import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.MigrationSupport;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.linq.Function;
@@ -107,7 +106,14 @@
return new VdsCpuVdsLoadBalancingAlgorithm(group);
}
- public void LoadBalance() {
+ /**
+ * LoadBalace method iterates over the cluster's hosts and determine which
hosts are over/under utilized according
+ * to derivative logic, then it selects the best vm to migrate out of
these hosts.
+ * @return a list of pairs <vmId, hostID> VM and Host, which later engine
try to migrate: vm to migrate ->
+ * destination host
+ */
+ public List<Pair<Guid, Guid>> LoadBalance() {
+ List<Pair<Guid, Guid>> migrationList = new ArrayList<Pair<Guid,
Guid>>();
setAllRelevantVdss(DbFacade.getInstance().getVdsDao().getAllForVdsGroupWithoutMigrating(getVdsGroup().getId()));
log.infoFormat("VdsLoadBalancer: number of relevant vdss (no
migration, no pending): {0}.",
getAllRelevantVdss().size());
@@ -116,12 +122,13 @@
InitUnderUtilizedList();
if (getOverUtilizedServers().size() != 0
&& (getReadyToMigrationServers().size() != 0 ||
getUnderUtilizedServers().size() != 0)) {
- ProceedOverUtilizedServers();
+ migrationList.addAll(ProceedOverUtilizedServers());
}
if (getUnderUtilizedServers().size() > 0
&& (getReadyToMigrationServers().size() > 0 ||
getUnderUtilizedServers().size() > 1)) {
- ProceedUnderUtilizedServers();
+ migrationList.addAll(ProceedUnderUtilizedServers());
}
+ return migrationList;
}
protected abstract void InitOverUtilizedList();
@@ -130,7 +137,7 @@
protected abstract void InitUnderUtilizedList();
- private void ProceedOverUtilizedServers() {
+ private List<Pair<Guid, Guid>> ProceedOverUtilizedServers() {
List<Guid> overUtilizedServersIds =
LinqUtils.foreach(getOverUtilizedServers().values(),
new Function<VDS, Guid>() {
@Override
@@ -138,6 +145,7 @@
return vds.getId();
}
});
+ List<Pair<Guid, Guid>> vmVdsMigrationList = new ArrayList<Pair<Guid,
Guid>>();
for (Guid vdsId : overUtilizedServersIds) {
VDS vds = getOverUtilizedServers().get(vdsId);
log.infoFormat("VdsLoadBalancer: Server {0} decided as
overutilized", vds.getName());
@@ -178,11 +186,7 @@
/**
* Migrate vm from OverUtilezed server
*/
- MigrateVmToServerParameters parameters =
- new MigrateVmToServerParameters(false, vm.getId(),
destinationVdsId);
-
Backend.getInstance().runInternalAction(VdcActionType.MigrateVmToServer,
- parameters,
- ExecutionHandler.createInternalJobContext());
+ vmVdsMigrationList.add(new Pair<Guid, Guid>(vm.getId(),
destinationVdsId));
/**
* Remove server from list
*/
@@ -195,9 +199,10 @@
log.info("VdsLoadBalancer: No vms found to migrate on this
server");
}
}
+ return vmVdsMigrationList;
}
- private void ProceedUnderUtilizedServers() {
+ private List<Pair<Guid, Guid>> ProceedUnderUtilizedServers() {
List<Guid> underUtilizedServersIds =
LinqUtils.foreach(getUnderUtilizedServers().values(),
new Function<VDS, Guid>() {
@Override
@@ -206,6 +211,7 @@
}
});
Set<Guid> processed = new HashSet<Guid>();
+ List<Pair<Guid, Guid>> vmVdsMigrationList = new ArrayList<Pair<Guid,
Guid>>();
for (Guid vdsId : underUtilizedServersIds) {
if (!processed.contains(vdsId)) {
VDS vds = getUnderUtilizedServers().get(vdsId);
@@ -251,11 +257,7 @@
vds.getName());
} else {
Guid destinationVdsId = destinationVds.getId();
- MigrateVmToServerParameters parameters =
- new MigrateVmToServerParameters(false, vm.getId(),
destinationVdsId);
-
Backend.getInstance().runInternalAction(VdcActionType.MigrateVmToServer,
- parameters,
- ExecutionHandler.createInternalJobContext());
+ vmVdsMigrationList.add(new Pair<Guid,
Guid>(vm.getId(), destinationVdsId));
currentList.remove(destinationVdsId);
log.infoFormat(
"VdsLoadBalancer: Desktop {0} migrated from
underutilized server {1} to server {2}",
@@ -273,6 +275,7 @@
// passed vm on it
}
}
+ return vmVdsMigrationList;
}
private java.util.List<VM> getMigrableVmsRunningOnVds(Guid vdsId) {
@@ -293,8 +296,8 @@
@Override
public boolean eval(VDS p) {
return (p.getVdsGroupId().equals(vm.getVdsGroupId())
- && RunVmCommandBase.hasMemoryToRunVM(p, vm)
- && RunVmCommandBase.hasCpuToRunVM(p, vm));
+ && SlaValidator.getInstance().hasMemoryToRunVM(p, vm)
+ && SlaValidator.getInstance().hasCpuToRunVM(p, vm));
}
});
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsSelector.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsSelector.java
similarity index 95%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsSelector.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsSelector.java
index 79dc83d..ccaae49 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsSelector.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsSelector.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import java.util.ArrayList;
import java.util.Arrays;
@@ -135,7 +135,6 @@
VDS target_vds =
DbFacade.getInstance().getVdsDao().get(getDestinationVdsId());
log.infoFormat("Checking for a specific VDS only - id:{0},
name:{1}, host_name(ip):{2}",
getDestinationVdsId(), target_vds.getName(),
target_vds.getHostName());
- VmHandler.UpdateVmGuestAgentVersion(getVm());
result = getVdsToRunOn(Arrays.asList(target_vds), isMigrate);
}
return result;
@@ -183,17 +182,15 @@
for (VDS curVds : vdss) {
noVDSs = false;
- ValidationResult result = validateHostIsReadyToRun(curVds, sb,
isMigrate);
- if (result.isValid()) {
+ VdcBllMessages result = validateHostIsReadyToRun(curVds, sb,
isMigrate);
+ if (result == null) {
return true;
} else {
- if (messageToReturn.getValue() <
result.getMessage().getValue()) {
- messageToReturn = result.getMessage();
- /**
- * save version of current vds for later use
- */
- vdsVersion = curVds.getVersion();
- }
+ messageToReturn = result;
+ /**
+ * save version of current vds for later use
+ */
+ vdsVersion = curVds.getVersion();
}
}
@@ -208,7 +205,6 @@
* action message
*/
if (messageToReturn ==
VdcBllMessages.ACTION_TYPE_FAILED_VDS_VM_VERSION && vdsVersion != null) {
- VmHandler.UpdateVmGuestAgentVersion(getVm());
messages.add("$toolsVersion " + getVm().getPartialVersion());
messages.add("$serverVersion " + vdsVersion.getRpmName());
@@ -325,18 +321,18 @@
}
});
- private ValidationResult validateHostIsReadyToRun(final VDS vds,
StringBuilder sb, boolean isMigrate) {
+ private VdcBllMessages validateHostIsReadyToRun(final VDS vds,
StringBuilder sb, boolean isMigrate) {
// buffer the mismatches as we go
sb.append(" VDS ").append(vds.getName()).append("
").append(vds.getId()).append(" ");
for(HostValidator validator : this.hostValidators) {
VdcBllMessages result = validator.validate(vds, sb, isMigrate);
if(result != null) {
- return new ValidationResult(result);
+ return result;
}
}
- return ValidationResult.VALID;
+ return null;
}
/**
@@ -431,7 +427,7 @@
StringBuilder sb = new StringBuilder();
final List<VDS> readyToRun = new ArrayList<VDS>();
for (VDS curVds : vdss) {
- if (validateHostIsReadyToRun(curVds, sb, isMigrate) ==
ValidationResult.VALID) {
+ if (validateHostIsReadyToRun(curVds, sb, isMigrate) == null) {
readyToRun.add(curVds);
}
}
@@ -523,7 +519,7 @@
VDS bestVDS = list.get(0);
for (int i = 1; i < list.size(); i++) {
VDS curVds = list.get(i);
- if (comparer.IsBetter(bestVDS, curVds, getVm()))
+ if (comparer.isBetter(bestVDS, curVds, getVm()))
// if (((bestVDS.physical_mem_mb - bestVDS.mem_commited) <
// (curVds.physical_mem_mb - curVds.mem_commited)))
{
@@ -533,7 +529,7 @@
/**
* add chosen vds to running vdss list.
*/
- comparer.BestVdsProcedure(bestVDS);
+ comparer.bestVdsProcedure(bestVDS);
getRunVdssList().add(bestVDS.getId());
return bestVDS.getId();
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCountVdsLoadBalancingAlgorithm.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VmCountVdsLoadBalancingAlgorithm.java
similarity index 98%
rename from
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCountVdsLoadBalancingAlgorithm.java
rename to
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VmCountVdsLoadBalancingAlgorithm.java
index adeb99c..8e69ec2 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCountVdsLoadBalancingAlgorithm.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VmCountVdsLoadBalancingAlgorithm.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll;
+package org.ovirt.engine.core.bll.scheduling;
import java.util.Collections;
import java.util.Comparator;
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 afd891b..e62f70b 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
@@ -12,8 +12,8 @@
import org.ovirt.engine.core.bll.ImagesHandler;
import org.ovirt.engine.core.bll.IsoDomainListSyncronizer;
import org.ovirt.engine.core.bll.ValidationResult;
-import org.ovirt.engine.core.bll.VdsSelector;
import org.ovirt.engine.core.bll.interfaces.BackendInternal;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
import org.ovirt.engine.core.common.VdcActionUtils;
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 e16a91a..d4b3885 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
@@ -28,6 +28,7 @@
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.ovirt.engine.core.bll.interfaces.BackendInternal;
+import org.ovirt.engine.core.bll.scheduling.VdsSelector;
import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
import org.ovirt.engine.core.bll.validator.RunVmValidator;
import org.ovirt.engine.core.common.action.RunVmParams;
--
To view, visit http://gerrit.ovirt.org/15816
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icac8f7bc8a696455134bb90ffc17afd420e18dd4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Laszlo Hornyak <[email protected]>
Gerrit-Reviewer: Gilad Chaplik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches