Gilad Chaplik has uploaded a new change for review.

Change subject: core: scheduler: separate policy unit per class
......................................................................

core: scheduler: separate policy unit per class

Each policy unit should implement a single file so
None, EvenDistribution and PowerSaving policy units will be divided into
two policy units, weight and balance.

Change-Id: Id25cd653246e14a109b08d91adfb12ceccc505b4
Signed-off-by: Gilad Chaplik <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PolicyUnitImpl.java
R 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionBalancePolicyUnit.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionWeightPolicyUnit.java
R 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneBalancePolicyUnit.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneWeightPolicyUnit.java
R 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingBalancePolicyUnit.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingWeightPolicyUnit.java
7 files changed, 158 insertions(+), 79 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/18561/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PolicyUnitImpl.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PolicyUnitImpl.java
index 7b13cff..31a7588 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PolicyUnitImpl.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/PolicyUnitImpl.java
@@ -6,14 +6,17 @@
 
 import org.apache.commons.lang.NotImplementedException;
 import org.ovirt.engine.core.bll.scheduling.policyunits.CPUPolicyUnit;
-import 
org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionPolicyUnit;
+import 
org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionBalancePolicyUnit;
+import 
org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionWeightPolicyUnit;
 import org.ovirt.engine.core.bll.scheduling.policyunits.MemoryPolicyUnit;
 import 
org.ovirt.engine.core.bll.scheduling.policyunits.MigrationDomainPolicyUnit;
 import org.ovirt.engine.core.bll.scheduling.policyunits.MigrationPolicyUnit;
 import org.ovirt.engine.core.bll.scheduling.policyunits.NetworkPolicyUnit;
-import org.ovirt.engine.core.bll.scheduling.policyunits.NonePolicyUnit;
+import org.ovirt.engine.core.bll.scheduling.policyunits.NoneBalancePolicyUnit;
+import org.ovirt.engine.core.bll.scheduling.policyunits.NoneWeightPolicyUnit;
 import org.ovirt.engine.core.bll.scheduling.policyunits.PinToHostPolicyUnit;
-import org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingPolicyUnit;
+import 
org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingBalancePolicyUnit;
+import 
org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingWeightPolicyUnit;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -44,11 +47,26 @@
         case "Network":
             return new NetworkPolicyUnit(policyUnit);
         case "None":
-            return new NonePolicyUnit(policyUnit);
+            if (policyUnit.getPolicyUnitType() == PolicyUnitType.Weight) {
+                return new NoneWeightPolicyUnit(policyUnit);
+            }
+            else if (policyUnit.getPolicyUnitType() == 
PolicyUnitType.LoadBalancing) {
+                return new NoneBalancePolicyUnit(policyUnit);
+            }
         case "PowerSaving":
-            return new PowerSavingPolicyUnit(policyUnit);
+            if (policyUnit.getPolicyUnitType() == PolicyUnitType.Weight) {
+                return new PowerSavingWeightPolicyUnit(policyUnit);
+            }
+            else if (policyUnit.getPolicyUnitType() == 
PolicyUnitType.LoadBalancing) {
+                return new PowerSavingBalancePolicyUnit(policyUnit);
+            }
         case "EvenDistribution":
-            return new EvenDistributionPolicyUnit(policyUnit);
+            if (policyUnit.getPolicyUnitType() == PolicyUnitType.Weight) {
+                return new EvenDistributionWeightPolicyUnit(policyUnit);
+            }
+            else if (policyUnit.getPolicyUnitType() == 
PolicyUnitType.LoadBalancing) {
+                return new EvenDistributionBalancePolicyUnit(policyUnit);
+            }
         default:
             throw new NotImplementedException("policyUnit: " + 
policyUnit.getName());
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionPolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionBalancePolicyUnit.java
similarity index 80%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionPolicyUnit.java
rename to 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionBalancePolicyUnit.java
index 0b8974eb..ad5922b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionPolicyUnit.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionBalancePolicyUnit.java
@@ -27,52 +27,11 @@
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
 
-public class EvenDistributionPolicyUnit extends PolicyUnitImpl {
+public class EvenDistributionBalancePolicyUnit extends PolicyUnitImpl {
 
-    public EvenDistributionPolicyUnit(PolicyUnit policyUnit) {
+    public EvenDistributionBalancePolicyUnit(PolicyUnit policyUnit) {
         super(policyUnit);
     }
-
-    /**
-     * Calculate a single host weight score according to various parameters.
-     * @param vds
-     * @param vm
-     * @param hostCores - threads/cores according to cluster
-     * @return
-     */
-    private double calcDistributeMetric(VDS vds, VM vm, int hostCores) {
-        int vcpu = Config.<Integer> 
GetValue(ConfigValues.VcpuConsumptionPercentage);
-        int spmCpu = (vds.getSpmStatus() == VdsSpmStatus.None) ? 0 : Config
-                .<Integer> GetValue(ConfigValues.SpmVCpuConsumption);
-        double hostCpu = vds.getUsageCpuPercent();
-        double pendingVcpus = vds.getPendingVcpusCount();
-
-        return (hostCpu / vcpu) + (pendingVcpus + vm.getNumOfCpus() + spmCpu) 
/ hostCores;
-    }
-
-    protected int calcEvenDistributionScore(VDS vds, VM vm, boolean 
countThreadsAsCores) {
-        int score = MaxSchedulerWeight - 1;
-        Integer effectiveCpuCores = SlaValidator.getEffectiveCpuCores(vds, 
countThreadsAsCores);
-        if (effectiveCpuCores != null
-                && vds.getUsageCpuPercent() != null
-                && vds.getPendingVcpusCount() != null) {
-            // round up result, fractions matters
-            score = Math.min((int) Math.ceil(calcDistributeMetric(vds, vm, 
effectiveCpuCores)), MaxSchedulerWeight);
-        }
-        return score;
-    }
-
-    @Override
-    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
-        VDSGroup vdsGroup = 
DbFacade.getInstance().getVdsGroupDao().get(hosts.get(0).getVdsGroupId());
-        boolean countThreadsAsCores = vdsGroup != null ? 
vdsGroup.getCountThreadsAsCores() : false;
-        List<Pair<Guid, Integer>> scores = new ArrayList<Pair<Guid, 
Integer>>();
-        for (VDS vds : hosts) {
-            scores.add(new Pair<Guid, Integer>(vds.getId(), 
calcEvenDistributionScore(vds, vm, countThreadsAsCores)));
-        }
-        return scores;
-    }
-
 
     @Override
     public Pair<List<Guid>, Guid> balance(VDSGroup cluster,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionWeightPolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionWeightPolicyUnit.java
new file mode 100644
index 0000000..a549a3d
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/EvenDistributionWeightPolicyUnit.java
@@ -0,0 +1,66 @@
+package org.ovirt.engine.core.bll.scheduling.policyunits;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.bll.scheduling.PolicyUnitImpl;
+import org.ovirt.engine.core.bll.scheduling.SlaValidator;
+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.businessentities.VdsSpmStatus;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.scheduling.PolicyUnit;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+public class EvenDistributionWeightPolicyUnit extends PolicyUnitImpl {
+
+    public EvenDistributionWeightPolicyUnit(PolicyUnit policyUnit) {
+        super(policyUnit);
+    }
+
+    /**
+     * Calculate a single host weight score according to various parameters.
+     * @param vds
+     * @param vm
+     * @param hostCores - threads/cores according to cluster
+     * @return
+     */
+    private double calcDistributeMetric(VDS vds, VM vm, int hostCores) {
+        int vcpu = Config.<Integer> 
GetValue(ConfigValues.VcpuConsumptionPercentage);
+        int spmCpu = (vds.getSpmStatus() == VdsSpmStatus.None) ? 0 : Config
+                .<Integer> GetValue(ConfigValues.SpmVCpuConsumption);
+        double hostCpu = vds.getUsageCpuPercent();
+        double pendingVcpus = vds.getPendingVcpusCount();
+
+        return (hostCpu / vcpu) + (pendingVcpus + vm.getNumOfCpus() + spmCpu) 
/ hostCores;
+    }
+
+    protected int calcEvenDistributionScore(VDS vds, VM vm, boolean 
countThreadsAsCores) {
+        int score = MaxSchedulerWeight - 1;
+        Integer effectiveCpuCores = SlaValidator.getEffectiveCpuCores(vds, 
countThreadsAsCores);
+        if (effectiveCpuCores != null
+                && vds.getUsageCpuPercent() != null
+                && vds.getPendingVcpusCount() != null) {
+            // round up result, fractions matters
+            score = Math.min((int) Math.ceil(calcDistributeMetric(vds, vm, 
effectiveCpuCores)), MaxSchedulerWeight);
+        }
+        return score;
+    }
+
+    @Override
+    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
+        VDSGroup vdsGroup = 
DbFacade.getInstance().getVdsGroupDao().get(hosts.get(0).getVdsGroupId());
+        boolean countThreadsAsCores = vdsGroup != null ? 
vdsGroup.getCountThreadsAsCores() : false;
+        List<Pair<Guid, Integer>> scores = new ArrayList<Pair<Guid, 
Integer>>();
+        for (VDS vds : hosts) {
+            scores.add(new Pair<Guid, Integer>(vds.getId(), 
calcEvenDistributionScore(vds, vm, countThreadsAsCores)));
+        }
+        return scores;
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NonePolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneBalancePolicyUnit.java
similarity index 65%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NonePolicyUnit.java
rename to 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneBalancePolicyUnit.java
index 8227895..7785ff1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NonePolicyUnit.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneBalancePolicyUnit.java
@@ -4,22 +4,17 @@
 import java.util.List;
 import java.util.Map;
 
+import org.ovirt.engine.core.bll.scheduling.PolicyUnitImpl;
 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.scheduling.PolicyUnit;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
 
-public class NonePolicyUnit extends EvenDistributionPolicyUnit {
+public class NoneBalancePolicyUnit extends PolicyUnitImpl {
 
-    public NonePolicyUnit(PolicyUnit policyUnit) {
+    public NoneBalancePolicyUnit(PolicyUnit policyUnit) {
         super(policyUnit);
-    }
-
-    @Override
-    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
-        return super.score(hosts, vm, parameters);
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneWeightPolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneWeightPolicyUnit.java
new file mode 100644
index 0000000..8a517e5
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/NoneWeightPolicyUnit.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.bll.scheduling.policyunits;
+
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.scheduling.PolicyUnit;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+
+public class NoneWeightPolicyUnit extends EvenDistributionWeightPolicyUnit {
+
+    public NoneWeightPolicyUnit(PolicyUnit policyUnit) {
+        super(policyUnit);
+    }
+
+    @Override
+    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
+        return super.score(hosts, vm, parameters);
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingPolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingBalancePolicyUnit.java
similarity index 80%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingPolicyUnit.java
rename to 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingBalancePolicyUnit.java
index 22337fa..10ffbfa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingPolicyUnit.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingBalancePolicyUnit.java
@@ -9,38 +9,18 @@
 
 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.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.scheduling.PolicyUnit;
 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.LinqUtils;
 import org.ovirt.engine.core.utils.linq.Predicate;
 
-public class PowerSavingPolicyUnit extends EvenDistributionPolicyUnit {
+public class PowerSavingBalancePolicyUnit extends 
EvenDistributionBalancePolicyUnit {
 
-    public PowerSavingPolicyUnit(PolicyUnit policyUnit) {
+    public PowerSavingBalancePolicyUnit(PolicyUnit policyUnit) {
         super(policyUnit);
-    }
-
-    @Override
-    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
-        VDSGroup vdsGroup = null;
-        List<Pair<Guid, Integer>> scores = new ArrayList<Pair<Guid, 
Integer>>();
-        for (VDS vds : hosts) {
-            int score = MaxSchedulerWeight - 1;
-            if (vds.getVmCount() > 0) {
-                if (vdsGroup == null) {
-                    vdsGroup = 
DbFacade.getInstance().getVdsGroupDao().get(hosts.get(0).getVdsGroupId());
-                }
-                score -=
-                        calcEvenDistributionScore(vds, vm, vdsGroup != null ? 
vdsGroup.getCountThreadsAsCores() : false);
-            }
-            scores.add(new Pair<Guid, Integer>(vds.getId(), score));
-        }
-        return scores;
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingWeightPolicyUnit.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingWeightPolicyUnit.java
new file mode 100644
index 0000000..54b2586
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/policyunits/PowerSavingWeightPolicyUnit.java
@@ -0,0 +1,38 @@
+package org.ovirt.engine.core.bll.scheduling.policyunits;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+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.scheduling.PolicyUnit;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+public class PowerSavingWeightPolicyUnit extends 
EvenDistributionWeightPolicyUnit {
+
+    public PowerSavingWeightPolicyUnit(PolicyUnit policyUnit) {
+        super(policyUnit);
+    }
+
+    @Override
+    public List<Pair<Guid, Integer>> score(List<VDS> hosts, VM vm, Map<String, 
String> parameters) {
+        VDSGroup vdsGroup = null;
+        List<Pair<Guid, Integer>> scores = new ArrayList<Pair<Guid, 
Integer>>();
+        for (VDS vds : hosts) {
+            int score = MaxSchedulerWeight - 1;
+            if (vds.getVmCount() > 0) {
+                if (vdsGroup == null) {
+                    vdsGroup = 
DbFacade.getInstance().getVdsGroupDao().get(hosts.get(0).getVdsGroupId());
+                }
+                score -=
+                        calcEvenDistributionScore(vds, vm, vdsGroup != null ? 
vdsGroup.getCountThreadsAsCores() : false);
+            }
+            scores.add(new Pair<Guid, Integer>(vds.getId(), score));
+        }
+        return scores;
+    }
+}


-- 
To view, visit http://gerrit.ovirt.org/18561
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id25cd653246e14a109b08d91adfb12ceccc505b4
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

Reply via email to