Gilad Chaplik has uploaded a new change for review.

Change subject: engine: enable balance in new arch
......................................................................

engine: enable balance in new arch

Change-Id: I2f20928f3be5a04e3cea069d8e254956860758f7
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/scheduling/MigrationHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MigrateVmParameters.java
5 files changed, 81 insertions(+), 20 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/16375/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 1353faf..d12875d 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,6 +1,6 @@
 package org.ovirt.engine.core.bll;
 
-import java.util.List;
+import java.util.ArrayList;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.DependsOn;
@@ -12,11 +12,10 @@
 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.scheduling.SchedulingManager;
 import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler;
-import org.ovirt.engine.core.common.action.MigrateVmToServerParameters;
+import org.ovirt.engine.core.common.action.MigrateVmParameters;
 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;
@@ -49,17 +48,15 @@
         AsyncTaskManager.getInstance().InitAsyncTaskManager();
         OvfDataUpdater.getInstance().initOvfDataUpdater();
 
-        VdsLoadBalancer.getInstance().setMigrationHandler(new 
MigrationHandler() {
+        SchedulingManager.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());
-                }
+            public void migrateVM(ArrayList<Guid> initialHosts, Guid 
vmToMigrate) {
+                MigrateVmParameters parameters = new 
MigrateVmParameters(false, vmToMigrate);
+                parameters.setInitialHosts(initialHosts);
+                
Backend.getInstance().runInternalAction(VdcActionType.MigrateVm,
+                        parameters,
+                        ExecutionHandler.createInternalJobContext());
             }
         });
 
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
index 7e53bfc..8c35545 100644
--- 
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
@@ -1,14 +1,14 @@
 package org.ovirt.engine.core.bll.scheduling;
 
-import java.util.List;
+import java.util.ArrayList;
 
-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
+     * delegate for migrating a vm to a set of hosts provided by the scheduler
+     * @param initialHosts
+     * @param vmToMigrate
      */
-    void migrateVMs(List<Pair<Guid, Guid>> list);
+    void migrateVM(ArrayList<Guid> initialHosts, Guid vmToMigrate);
 }
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 38ce876..1eb97b9 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
@@ -8,12 +8,15 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
 
 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.VDSType;
 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.ClusterPolicy;
 import org.ovirt.engine.core.common.scheduling.PolicyUnit;
 import org.ovirt.engine.core.common.utils.Pair;
@@ -24,8 +27,13 @@
 import org.ovirt.engine.core.dao.VdsGroupDAO;
 import org.ovirt.engine.core.dao.scheduling.ClusterPolicyDao;
 import org.ovirt.engine.core.dao.scheduling.PolicyUnitDao;
+import org.ovirt.engine.core.utils.log.Log;
+import org.ovirt.engine.core.utils.log.LogFactory;
+import org.ovirt.engine.core.utils.timer.OnTimerMethodAnnotation;
+import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl;
 
 public class SchedulingManager {
+    private static Log log = LogFactory.getLog(SchedulingManager.class);
     /**
      * singleton
      */
@@ -36,6 +44,7 @@
             synchronized (SchedulingManager.class) {
                 if (instance == null) {
                     instance = new SchedulingManager();
+                    EnableLoadBalancer();
                 }
             }
         }
@@ -54,6 +63,7 @@
     private final ConcurrentHashMap<Guid, Object> clusterLockMap = new 
ConcurrentHashMap<Guid, Object>();
 
     private final VdsFreeMemoryChecker noWaitingMemoryChecker = new 
VdsFreeMemoryChecker(new NonWaitingDelayer());
+    private MigrationHandler migrationHandler;
 
     private SchedulingManager() {
         policyMap = new ConcurrentHashMap<Guid, ClusterPolicy>();
@@ -84,6 +94,13 @@
         for (ClusterPolicy clusterPolicy : allClusterPolicies) {
             policyMap.put(clusterPolicy.getId(), clusterPolicy);
         }
+    }
+
+    public void setMigrationHandler(MigrationHandler migrationHandler) {
+        if (this.migrationHandler != null) {
+            throw new RuntimeException("Load balance migration handler should 
be set only once");
+        }
+        this.migrationHandler = migrationHandler;
     }
 
     protected void loadPolicyUnits() {
@@ -194,7 +211,9 @@
 
     protected Map<String, Object> createClusterPolicyParameters(VDSGroup 
cluster, VM vm) {
         Map<String, Object> parameters = new HashMap<String, Object>();
-        parameters.put(PolicyUnitImpl.VM, vm);
+        if (vm != null) {
+            parameters.put(PolicyUnitImpl.VM, vm);
+        }
         if (cluster.getClusterPolicyProperties() != null) {
             parameters.putAll(cluster.getClusterPolicyProperties());
         }
@@ -290,4 +309,38 @@
     protected ClusterPolicyDao getClusterPolicyDao() {
         return DbFacade.getInstance().getClusterPolicyDao();
     }
+
+    public static void EnableLoadBalancer() {
+        if (Config.<Boolean> GetValue(ConfigValues.EnableVdsLoadBalancing)) {
+            log.info("Start scheduling to enable vds load balancer");
+            
SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(instance,
+                    "PerformLoadBalancing",
+                    new Class[] {},
+                    new Object[] {},
+                    Config.<Integer> 
GetValue(ConfigValues.VdsLoadBalancingeIntervalInMinutes),
+                    Config.<Integer> 
GetValue(ConfigValues.VdsLoadBalancingeIntervalInMinutes),
+                    TimeUnit.MINUTES);
+            log.info("Finished scheduling to enable vds load balancer");
+        }
+    }
+
+    @OnTimerMethodAnnotation("PerformLoadBalancing")
+    public void PerformLoadBalancing() {
+        log.debugFormat("Load Balancer timer entered.");
+        List<VDSGroup> clusters = 
DbFacade.getInstance().getVdsGroupDao().getAll();
+        for (VDSGroup cluster : clusters) {
+            ClusterPolicy policy = policyMap.get(cluster.getClusterPolicyId());
+            PolicyUnitImpl policyUnit = policyUnits.get(policy.getBalance());
+            List<VDS> hosts = getVdsDAO()
+                    .getAllOfTypes(new VDSType[] { VDSType.VDS, 
VDSType.oVirtNode });
+            Pair<List<Guid>, Guid> pair = policyUnit.balance(cluster,
+                    hosts,
+                    cluster.getClusterPolicyProperties(),
+                    new ArrayList<String>());
+            if (pair != null && pair.getSecond() != null) {
+                migrationHandler.migrateVM((ArrayList<Guid>) pair.getFirst(), 
pair.getSecond());
+            }
+        }
+    }
+
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
index 438cfdd..f210c6b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/VdsLoadBalancer.java
@@ -54,7 +54,7 @@
                         group.gethigh_utilization(), 
group.getlow_utilization(),
                         group.getcpu_over_commit_duration_minutes(),
                         Config.<Integer> 
GetValue(ConfigValues.UtilizationThresholdInPercent));
-                
migrationHandler.migrateVMs(loadBalancingAlgorithm.LoadBalance());
+                // 
migrationHandler.migrateVMs(loadBalancingAlgorithm.LoadBalance());
             } else {
                 log.debugFormat("VdsLoadBalancer: Cluster {0} skipped because 
no selection algorithm selected.",
                         group.getName());
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MigrateVmParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MigrateVmParameters.java
index aa2ffb1..d5799f5 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MigrateVmParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/MigrateVmParameters.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.common.action;
 
+import java.util.ArrayList;
+
 import org.ovirt.engine.core.compat.Guid;
 
 /**
@@ -9,6 +11,7 @@
 public class MigrateVmParameters extends VmOperationParameterBase {
     private static final long serialVersionUID = -7523728706659584319L;
     protected boolean forceMigrationForNonMigratableVM;
+    ArrayList<Guid> initialHosts;
 
     public MigrateVmParameters() {
     }
@@ -35,4 +38,12 @@
         this.forceMigrationForNonMigratableVM = 
forceMigrationForNonMigratableVM;
     }
 
+    public ArrayList<Guid> getInitialHosts() {
+        return initialHosts;
+    }
+
+    public void setInitialHosts(ArrayList<Guid> initialHosts) {
+        this.initialHosts = initialHosts;
+    }
+
 }


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

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