Gilad Chaplik has uploaded a new change for review.

Change subject: core: scheduling: optimize filters run
......................................................................

core: scheduling: optimize filters run

This patch include 2 optimizations in scheduling process:
1) Check destination host is already included with the rest of the hosts,
so there is no need to invoke runFilters only for destHost.
2) run external filters should be invoked only in actual scheduling and not
in validation process.

Change-Id: I319ca2a5d9dbbc6634639e7b842beac1cf6c6ad9
Signed-off-by: Gilad Chaplik <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
1 file changed, 13 insertions(+), 57 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/54/18354/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
index fc6695c..3314118 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
@@ -16,7 +16,6 @@
 import 
org.ovirt.engine.core.bll.scheduling.external.ExternalSchedulerDiscoveryThread;
 import org.ovirt.engine.core.bll.scheduling.external.ExternalSchedulerFactory;
 import org.ovirt.engine.core.common.businessentities.BusinessEntity;
-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.VDSStatus;
@@ -178,19 +177,6 @@
             updateInitialHostList(vdsList, hostWhiteList, false);
             ClusterPolicy policy = policyMap.get(cluster.getClusterPolicyId());
             Map<String, String> parameters = 
createClusterPolicyParameters(cluster);
-            if (destHostId != null) {
-                if (checkDestinationHost(vm,
-                        vdsList,
-                        destHostId,
-                        messages,
-                        policy,
-                        parameters,
-                        memoryChecker)) {
-                    return destHostId;
-                } else if (vm.getMigrationSupport() == 
MigrationSupport.PINNED_TO_HOST) {
-                    return null;
-                }
-            }
             vdsList =
                     runFilters(policy.getFilters(),
                             vdsList,
@@ -198,10 +184,14 @@
                             parameters,
                             policy.getFilterPositionMap(),
                             messages,
-                            memoryChecker);
+                            memoryChecker,
+                            true);
 
             if (vdsList == null || vdsList.size() == 0) {
                 return null;
+            }
+            if (destHostId != null && vdsList.contains(destHostId)) {
+                return destHostId;
             }
             if (policy.getFunctions() == null || 
policy.getFunctions().isEmpty()) {
                 return vdsList.get(0).getId();
@@ -232,19 +222,6 @@
         updateInitialHostList(vdsList, vdsWhiteList, false);
         ClusterPolicy policy = policyMap.get(cluster.getClusterPolicyId());
         Map<String, String> parameters = 
createClusterPolicyParameters(cluster);
-        if (destVdsId != null) {
-            if (checkDestinationHost(vm,
-                    vdsList,
-                    destVdsId,
-                    messages,
-                    policy,
-                    parameters,
-                    noWaitingMemoryChecker)) {
-                return true;
-            } else if (vm.getMigrationSupport() == 
MigrationSupport.PINNED_TO_HOST) {
-                return false;
-            }
-        }
         vdsList =
                 runFilters(policy.getFilters(),
                         vdsList,
@@ -252,38 +229,13 @@
                         parameters,
                         policy.getFilterPositionMap(),
                         messages,
-                        noWaitingMemoryChecker);
+                        noWaitingMemoryChecker,
+                        false);
 
         if (vdsList == null || vdsList.size() == 0) {
             return false;
         }
         return true;
-    }
-
-    protected boolean checkDestinationHost(VM vm,
-            List<VDS> vdsList,
-            Guid destVdsId,
-            List<String> messages,
-            ClusterPolicy policy,
-            Map<String, String> parameters,
-            VdsFreeMemoryChecker memoryChecker) {
-        List<VDS> destVdsList = new ArrayList<VDS>();
-        for (VDS vds : vdsList) {
-            if (vds.getId().equals(destVdsId)) {
-                destVdsList.add(vds);
-                break;
-            }
-        }
-        destVdsList =
-                runFilters(policy.getFilters(),
-                        destVdsList,
-                        vm,
-                        parameters,
-                        policy.getFilterPositionMap(),
-                        messages,
-                        memoryChecker);
-
-        return destVdsList != null && destVdsList.size() == 1;
     }
 
     static List<Guid> getEntityIds(List<? extends BusinessEntity<Guid>> 
entities) {
@@ -320,7 +272,9 @@
             VM vm,
             Map<String, String> parameters,
             Map<Guid, Integer> filterPositionMap,
-            List<String> messages, VdsFreeMemoryChecker memoryChecker) {
+            List<String> messages,
+            VdsFreeMemoryChecker memoryChecker,
+            boolean runExternalFilters) {
         ArrayList<PolicyUnitImpl> internalFilters = new 
ArrayList<PolicyUnitImpl>();
         ArrayList<PolicyUnitImpl> externalFilters = new 
ArrayList<PolicyUnitImpl>();
         sortFilters(filters, filterPositionMap);
@@ -340,7 +294,9 @@
         hostList =
                 runInternalFilters(internalFilters, hostList, vm, parameters, 
filterPositionMap, messages, memoryChecker);
 
-        if (Config.<Boolean> GetValue(ConfigValues.ExternalSchedulerEnabled) 
&& externalFilters.size() > 0
+        if (Config.<Boolean> GetValue(ConfigValues.ExternalSchedulerEnabled)
+                && runExternalFilters
+                && externalFilters.size() > 0
                 && hostList != null && hostList.size() > 0) {
             hostList = runExternalFilters(externalFilters, hostList, vm, 
parameters, messages);
         }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I319ca2a5d9dbbc6634639e7b842beac1cf6c6ad9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to