Roy Golan has uploaded a new change for review. Change subject: core: SchedulingManager as CDI Singleton ......................................................................
core: SchedulingManager as CDI Singleton - Singleton bean - care for proper init during Backend load - inject dependencies - replace all getInstnace in commands with injection Change-Id: I8adc52a3084f9bb539d808e0d8a066ef6fd6b92a Signed-off-by: Roy Golan <[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/MaintenanceVdsCommand.java 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/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.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/commands/AddClusterPolicyCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.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/scheduling/commands/ClusterPolicyCRUDCommandTest.java 21 files changed, 200 insertions(+), 129 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/40560/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 0ee566e..e97a90f 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,31 +1,26 @@ package org.ovirt.engine.core.bll; -import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.ejb.DependsOn; import javax.ejb.Singleton; import javax.ejb.Startup; +import javax.enterprise.inject.Instance; import javax.inject.Inject; import org.ovirt.engine.core.bll.aaa.SessionDataContainer; import org.ovirt.engine.core.bll.dwh.DwhHeartBeat; import org.ovirt.engine.core.bll.gluster.GlusterJobsManager; import org.ovirt.engine.core.bll.hostdev.HostDeviceManager; -import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.network.macpoolmanager.MacPoolPerDcSingleton; import org.ovirt.engine.core.bll.pm.PmHealthCheckManager; -import org.ovirt.engine.core.bll.scheduling.MigrationHandler; import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler; import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; -import org.ovirt.engine.core.common.action.MigrateVmParameters; -import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils; import org.ovirt.engine.core.common.utils.exceptions.InitializationException; -import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.di.Injector; import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils; @@ -54,6 +49,9 @@ @Inject private HostDeviceManager hostDeviceManager; + @Inject + Instance<SchedulingManager> schedulingManagerProvider; + /** * This method is called upon the bean creation as part * of the management Service bean life cycle. @@ -74,18 +72,6 @@ CommandCoordinatorUtil.initAsyncTaskManager(); Injector.get(ResourceManager.class); OvfDataUpdater.getInstance().initOvfDataUpdater(); - SchedulingManager.getInstance().setMigrationHandler(new MigrationHandler() { - - @Override - public void migrateVM(List<Guid> initialHosts, Guid vmToMigrate) { - MigrateVmParameters parameters = new MigrateVmParameters(false, vmToMigrate); - parameters.setInitialHosts(new ArrayList<Guid>(initialHosts)); - Backend.getInstance().runInternalAction(VdcActionType.MigrateVm, - parameters, - ExecutionHandler.createInternalJobContext()); - } - }); - ThreadPoolUtil.execute(new Runnable() { @Override public void run() { @@ -110,7 +96,7 @@ log.error("Initialization of device custom properties failed.", e); } - SchedulingManager.getInstance().init(); + schedulingManagerProvider.get(); SessionDataContainer.getInstance().cleanupEngineSessionsOnStartup(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java index 3f57e6d..1f75b74 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java @@ -32,12 +32,16 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.job.ExecutionMessageDirector; +import javax.inject.Inject; + @NonTransactiveCommandAttribute public class MaintenanceVdsCommand<T extends MaintenanceVdsParameters> extends VdsCommand<T> { private final boolean _isInternal; private List<VM> vms; private boolean haMaintenanceFailed; + @Inject + SchedulingManager schedulingManager; public MaintenanceVdsCommand(T parameters) { this(parameters, null); @@ -108,14 +112,14 @@ if (getVdsId() != null) { blacklist.add(getVdsId()); } - return SchedulingManager.getInstance().canSchedule( - getVdsGroup(), - vm, - blacklist, //blacklist only contains the host we're putting to maintenance - Collections.<Guid> emptyList(), //no whitelist - vm.getDedicatedVmForVds(), - new ArrayList<String>() - ); + return schedulingManager.canSchedule( + getVdsGroup(), + vm, + blacklist, //blacklist only contains the host we're putting to maintenance + Collections.<Guid>emptyList(), //no whitelist + vm.getDedicatedVmForVds(), + new ArrayList<String>() + ); } /** * Note: you must call {@link #orderListOfRunningVmsOnVds(Guid)} before calling this method 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 c7348c6..d286e1f 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 @@ -42,6 +42,8 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.NetworkUtils; +import javax.inject.Inject; + @NonTransactiveCommandAttribute public class MigrateVmCommand<T extends MigrateVmParameters> extends RunVmCommandBase<T> { @@ -50,6 +52,9 @@ /** Used to log the migration error. */ private VdcBllErrors migrationErrorCode; + + @Inject + SchedulingManager schedulingManager; public MigrateVmCommand(T parameters) { this(parameters, null); @@ -110,7 +115,7 @@ protected boolean initVdss() { setVdsIdRef(getVm().getRunOnVds()); Guid vdsToRunOn = - SchedulingManager.getInstance().schedule(getVdsGroup(), + schedulingManager.schedule(getVdsGroup(), getVm(), getVdsBlackList(), getVdsWhiteList(), @@ -418,7 +423,7 @@ // This check was added to prevent migration of VM while its disks are being migrated // TODO: replace it with a better solution && validate(new DiskImagesValidator(ImagesHandler.getPluggedActiveImagesForVm(vm.getId())).diskImagesNotLocked()) - && SchedulingManager.getInstance().canSchedule(getVdsGroup(), + && schedulingManager.canSchedule(getVdsGroup(), getVm(), getVdsBlackList(), getParameters().getInitialHosts(), 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 dc44c8e..ddb7199 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 @@ -115,6 +115,8 @@ @Inject private HostDeviceManager hostDeviceManager; + @Inject + private SchedulingManager schedulingManager; protected RunVmCommand(Guid commandId) { super(commandId); @@ -786,7 +788,7 @@ protected boolean getVdsToRunOn() { Guid vdsToRunOn = - SchedulingManager.getInstance().schedule(getVdsGroup(), + schedulingManager.schedule(getVdsGroup(), getVm(), getRunVdssList(), getVdsWhiteList(), diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index c894476..a9fc63f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -84,10 +84,12 @@ @Inject Instance<ResourceManager> resourceManagerProvider; + @Inject + private SchedulingManager schedulingManager; + @Inject + private AuditLogDirector auditLogDirector; private static final Logger log = LoggerFactory.getLogger(VdsEventListener.class); - - private final AuditLogDirector auditLogDirector = new AuditLogDirector(); @Override public void vdsMovedToMaintenance(VDS vds) { @@ -449,7 +451,7 @@ @Override public void updateSchedulingStats(VDS vds) { - SchedulingManager.getInstance().updateHostSchedulingStats(vds); + schedulingManager.updateHostSchedulingStats(vds); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java index 3228143..cd67cac 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java @@ -25,8 +25,13 @@ import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.dao.VdsGroupDAO; +import javax.inject.Inject; + public abstract class VdsGroupOperationCommandBase<T extends VdsGroupOperationParameters> extends VdsGroupCommandBase<T> { + + @Inject + SchedulingManager schedulingManager; // If the CPU thresholds are set to -1 then we should get the value from the configuration public static final int GET_CPU_THRESHOLDS_FROM_CONFIGURATION = -1; @@ -93,17 +98,17 @@ ClusterPolicy clusterPolicy = null; if (getVdsGroup().getClusterPolicyId() != null) { clusterPolicy = - SchedulingManager.getInstance().getClusterPolicy(getVdsGroup().getClusterPolicyId()); + schedulingManager.getClusterPolicy(getVdsGroup().getClusterPolicyId()); } if (clusterPolicy == null) { - clusterPolicy = SchedulingManager.getInstance().getClusterPolicy(getVdsGroup().getClusterPolicyName()); + clusterPolicy = schedulingManager.getClusterPolicy(getVdsGroup().getClusterPolicyName()); if (clusterPolicy == null) { return false; } getVdsGroup().setClusterPolicyId(clusterPolicy.getId()); } - Map<String, String> customPropertiesRegexMap = SchedulingManager.getInstance() - .getCustomPropertiesRegexMap(clusterPolicy); + Map<String, String> customPropertiesRegexMap = + schedulingManager.getCustomPropertiesRegexMap(clusterPolicy); updateClusterPolicyProperties(getVdsGroup(), clusterPolicy, customPropertiesRegexMap); List<ValidationError> validationErrors = SimpleCustomPropertiesUtil.getInstance().validateProperties(customPropertiesRegexMap, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java new file mode 100644 index 0000000..eb26739 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/BasicMigrationHandler.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.core.bll.scheduling; + +import org.ovirt.engine.core.bll.Backend; +import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.common.action.MigrateVmParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.compat.Guid; + +import java.util.ArrayList; +import java.util.List; + +public class BasicMigrationHandler implements MigrationHandler { + + @Override + public void migrateVM(List<Guid> initialHosts, Guid vmToMigrate) { + MigrateVmParameters parameters = new MigrateVmParameters(false, vmToMigrate); + parameters.setInitialHosts(new ArrayList<Guid>(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/SchedulingManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/SchedulingManager.java index d789241..2141e53 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 @@ -51,26 +51,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SchedulingManager { - private static final Logger log = LoggerFactory.getLogger(SchedulingManager.class); - private AuditLogDirector auditLogDirector = new AuditLogDirector(); - /** - * singleton - */ - private static volatile SchedulingManager instance = null; +import javax.annotation.PostConstruct; +import javax.enterprise.inject.Instance; +import javax.inject.Inject; +import javax.inject.Singleton; - public static SchedulingManager getInstance() { - if (instance == null) { - synchronized (SchedulingManager.class) { - if (instance == null) { - instance = new SchedulingManager(); - enableLoadBalancer(); - enableHaReservationCheck(); - } - } - } - return instance; - } +@Singleton +public class SchedulingManager { + + private AuditLogDirector auditLogDirector; + @Inject + private Instance<ExternalSchedulerDiscoveryThread> exSchedulerDiscoveryProvider; + + private static final Logger log = LoggerFactory.getLogger(SchedulingManager.class); private static final String HIGH_UTILIZATION = "HighUtilization"; private static final String LOW_UTILIZATION = "LowUtilization"; @@ -93,23 +86,29 @@ private final Map<Guid, Boolean> clusterId2isHaReservationSafe = new HashMap<>(); - private SchedulingManager() { + @Inject + private SchedulingManager(AuditLogDirector auditLogDirector, MigrationHandler migrationHandler) { + this.auditLogDirector = auditLogDirector; + this.migrationHandler = migrationHandler; policyMap = new ConcurrentHashMap<Guid, ClusterPolicy>(); policyUnits = new ConcurrentHashMap<Guid, PolicyUnitImpl>(); } + @PostConstruct public void init() { log.info("Initializing Scheduling manager"); loadPolicyUnits(); loadClusterPolicies(); - ExternalSchedulerDiscoveryThread discoveryThread = new ExternalSchedulerDiscoveryThread(); - if(Config.<Boolean> getValue(ConfigValues.ExternalSchedulerEnabled)) { - log.info("Starting external scheduler dicovery thread"); + ExternalSchedulerDiscoveryThread discoveryThread = exSchedulerDiscoveryProvider.get(); + if (Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled)) { + log.info("Starting external scheduler discovery thread"); discoveryThread.start(); } else { discoveryThread.markAllExternalPoliciesAsDisabled(); log.info("External scheduler disabled, discovery skipped"); } + enableLoadBalancer(); + enableHaReservationCheck(); log.info("Initialized Scheduling manager"); } @@ -149,10 +148,6 @@ return null; } - public List<VDSGroup> getClustersByClusterPolicyId(Guid clusterPolicyId) { - return getVdsGroupDao().getClustersByClusterPolicyId(clusterPolicyId); - } - public Map<Guid, PolicyUnitImpl> getPolicyUnitsMap() { synchronized (policyUnitsLock) { return policyUnits; @@ -164,13 +159,6 @@ 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() { @@ -217,7 +205,7 @@ public Collection<String> getReasonMessages() { List<String> lines = new ArrayList<>(); - for (Entry<Guid, Pair<VdcBllMessages, String>> line: filteredOutReasons.entrySet()) { + for (Entry<Guid, Pair<VdcBllMessages, String>> line : filteredOutReasons.entrySet()) { lines.add(line.getValue().getFirst().name()); lines.add(String.format("$%1$s %2$s", "hostName", hostNames.get(line.getKey()))); lines.add(String.format("$%1$s %2$s", "filterName", line.getValue().getSecond())); @@ -225,8 +213,7 @@ final List<String> detailMessages = details.getMessages(line.getKey()); if (detailMessages == null || detailMessages.isEmpty()) { lines.add(VdcBllMessages.SCHEDULING_HOST_FILTERED_REASON.name()); - } - else { + } else { lines.addAll(detailMessages); lines.add(VdcBllMessages.SCHEDULING_HOST_FILTERED_REASON_WITH_DETAIL.name()); } @@ -309,7 +296,7 @@ /** * @param destHostId - used for RunAt preselection, overrides the ordering in vdsList - * @param vdsList - presorted list of hosts (better hosts first) that are available + * @param vdsList - presorted list of hosts (better hosts first) that are available */ private Guid selectBestHost(VDSGroup cluster, VM vm, @@ -350,14 +337,14 @@ */ protected void checkAllowOverbooking(VDSGroup cluster) { if (OptimizationType.ALLOW_OVERBOOKING == cluster.getOptimizationType() - && Config.<Boolean> getValue(ConfigValues.SchedulerAllowOverBooking) + && Config.<Boolean>getValue(ConfigValues.SchedulerAllowOverBooking) && clusterLockMap.get(cluster.getId()).getQueueLength() >= - Config.<Integer> getValue(ConfigValues.SchedulerOverBookingThreshold)) { + Config.<Integer>getValue(ConfigValues.SchedulerOverBookingThreshold)) { log.info("Scheduler: cluster '{}' lock is skipped (cluster is allowed to overbook)", cluster.getName()); // release pending threads (requests) and current one (+1) clusterLockMap.get(cluster.getId()) - .release(Config.<Integer> getValue(ConfigValues.SchedulerOverBookingThreshold) + 1); + .release(Config.<Integer>getValue(ConfigValues.SchedulerOverBookingThreshold) + 1); } } @@ -372,14 +359,15 @@ * @return */ protected boolean shouldWeighClusterHosts(VDSGroup cluster, List<VDS> vdsList) { - Integer threshold = Config.<Integer> getValue(ConfigValues.SpeedOptimizationSchedulingThreshold); + Integer threshold = Config.<Integer>getValue(ConfigValues.SpeedOptimizationSchedulingThreshold); // threshold is crossed only when cluster is configured for optimized for speed boolean crossedThreshold = OptimizationType.OPTIMIZE_FOR_SPEED == cluster.getOptimizationType() && clusterLockMap.get(cluster.getId()).getQueueLength() > threshold; if (crossedThreshold) { - log.info("Scheduler: skipping whinging hosts in cluster '{}', since there are more than '{}' parallel requests", + log.info( + "Scheduler: skipping whinging hosts in cluster '{}', since there are more than '{}' parallel requests", cluster.getName(), threshold); } @@ -481,7 +469,7 @@ memoryChecker, correlationId, result); if (shouldRunExternalFilters - && Config.<Boolean> getValue(ConfigValues.ExternalSchedulerEnabled) + && Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled) && !externalFilters.isEmpty() && hostList != null && !hostList.isEmpty()) { @@ -496,12 +484,12 @@ } private List<VDS> runInternalFilters(ArrayList<PolicyUnitImpl> filters, - List<VDS> hostList, - VM vm, - Map<String, String> parameters, - Map<Guid, Integer> filterPositionMap, - VdsFreeMemoryChecker memoryChecker, - String correlationId, SchedulingResult result) { + List<VDS> hostList, + VM vm, + Map<String, String> parameters, + Map<Guid, Integer> filterPositionMap, + VdsFreeMemoryChecker memoryChecker, + String correlationId, SchedulingResult result) { if (filters != null) { for (PolicyUnitImpl filterPolicyUnit : filters) { if (hostList == null || hostList.isEmpty()) { @@ -532,12 +520,12 @@ } private void logFilterActions(List<VDS> oldList, - Set<Guid> newSet, - VdcBllMessages actionName, - String filterName, - SchedulingResult result, - String correlationId) { - for (VDS host: oldList) { + Set<Guid> newSet, + VdcBllMessages actionName, + String filterName, + SchedulingResult result, + String correlationId) { + for (VDS host : oldList) { if (!newSet.contains(host.getId())) { result.addReason(host.getId(), host.getName(), actionName, filterName); log.info("Candidate host '{}' ('{}') was filtered out by '{}' filter '{}' (correlation id: {})", @@ -636,7 +624,7 @@ Map<Guid, Integer> hostCostTable = runInternalFunctions(internalScoreFunctions, hostList, vm, parameters); - if (Config.<Boolean> getValue(ConfigValues.ExternalSchedulerEnabled) && !externalScoreFunctions.isEmpty()) { + if (Config.<Boolean>getValue(ConfigValues.ExternalSchedulerEnabled) && !externalScoreFunctions.isEmpty()) { runExternalFunctions(externalScoreFunctions, hostList, vm, parameters, hostCostTable); } Entry<Guid, Integer> bestHostEntry = null; @@ -767,26 +755,28 @@ return DbFacade.getInstance().getClusterPolicyDao(); } - public static void enableLoadBalancer() { - if (Config.<Boolean> getValue(ConfigValues.EnableVdsLoadBalancing)) { + public void enableLoadBalancer() { + if (Config.<Boolean>getValue(ConfigValues.EnableVdsLoadBalancing)) { log.info("Start scheduling to enable vds load balancer"); - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(instance, + SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob( + this, "performLoadBalancing", new Class[] {}, new Object[] {}, - Config.<Integer> getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes), - Config.<Integer> getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes), + Config.<Integer>getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes), + Config.<Integer>getValue(ConfigValues.VdsLoadBalancingIntervalInMinutes), TimeUnit.MINUTES); log.info("Finished scheduling to enable vds load balancer"); } } - public static void enableHaReservationCheck() { + public void enableHaReservationCheck() { - if (Config.<Boolean> getValue(ConfigValues.EnableVdsLoadBalancing)) { + if (Config.<Boolean>getValue(ConfigValues.EnableVdsLoadBalancing)) { log.info("Start HA Reservation check"); - Integer interval = Config.<Integer> getValue(ConfigValues.VdsHaReservationIntervalInMinutes); - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(instance, + Integer interval = Config.<Integer>getValue(ConfigValues.VdsHaReservationIntervalInMinutes); + SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob( + this, "performHaResevationCheck", new Class[] {}, new Object[] {}, @@ -842,7 +832,6 @@ } log.debug("HA Reservation check timer finished."); } - @OnTimerMethodAnnotation("performLoadBalancing") public void performLoadBalancing() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java index 1d8db2f..fc6dbec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/AddClusterPolicyCommand.java @@ -1,6 +1,5 @@ package org.ovirt.engine.core.bll.scheduling.commands; -import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters; @@ -20,7 +19,7 @@ @Override protected void executeCommand() { getClusterPolicy().setId(Guid.newGuid()); - SchedulingManager.getInstance().addClusterPolicy(getClusterPolicy()); + schedulingManager.addClusterPolicy(getClusterPolicy()); getReturnValue().setActionReturnValue(getClusterPolicy().getId()); setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java index 1df5bcc..76a66ab 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommand.java @@ -20,8 +20,13 @@ import org.ovirt.engine.core.common.utils.customprop.ValidationError; import org.ovirt.engine.core.compat.Guid; +import javax.inject.Inject; + public abstract class ClusterPolicyCRUDCommand extends CommandBase<ClusterPolicyCRUDParameters> { private ClusterPolicy clusterPolicy; + + @Inject + SchedulingManager schedulingManager; public ClusterPolicyCRUDCommand(ClusterPolicyCRUDParameters parameters) { super(parameters); @@ -31,7 +36,7 @@ } protected boolean checkAddEditValidations() { - List<ClusterPolicy> clusterPolicies = SchedulingManager.getInstance().getClusterPolicies(); + List<ClusterPolicy> clusterPolicies = schedulingManager.getClusterPolicies(); if (getClusterPolicy() == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID); } @@ -41,7 +46,7 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_NAME_INUSE); } } - Map<Guid, PolicyUnitImpl> map = SchedulingManager.getInstance().getPolicyUnitsMap(); + Map<Guid, PolicyUnitImpl> map = schedulingManager.getPolicyUnitsMap(); Set<Guid> existingPolicyUnits = new HashSet<>(); // check filter policy units if (getClusterPolicy().getFilters() != null) { @@ -108,7 +113,7 @@ } List<ValidationError> validationErrors = - SimpleCustomPropertiesUtil.getInstance().validateProperties(SchedulingManager.getInstance() + SimpleCustomPropertiesUtil.getInstance().validateProperties(schedulingManager .getCustomPropertiesRegexMap(getClusterPolicy()), getClusterPolicy().getParameterMap()); if (!validationErrors.isEmpty()) { @@ -128,7 +133,7 @@ if (clusterPolicyId == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID); } - ClusterPolicy clusterPolicy = SchedulingManager.getInstance().getClusterPolicy(clusterPolicyId); + ClusterPolicy clusterPolicy = schedulingManager.getClusterPolicy(clusterPolicyId); if (clusterPolicy == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java index 65462ad..9711bbf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/EditClusterPolicyCommand.java @@ -1,6 +1,5 @@ package org.ovirt.engine.core.bll.scheduling.commands; -import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters; @@ -18,7 +17,7 @@ @Override protected void executeCommand() { - SchedulingManager.getInstance().editClusterPolicy(getClusterPolicy()); + schedulingManager.editClusterPolicy(getClusterPolicy()); setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java index 2051544..a0feb24 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveClusterPolicyCommand.java @@ -1,6 +1,5 @@ package org.ovirt.engine.core.bll.scheduling.commands; -import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters; @@ -16,7 +15,7 @@ if (!checkRemoveEditValidations()) { return false; } - if (SchedulingManager.getInstance().getClustersByClusterPolicyId(getParameters().getClusterPolicyId()).size() > 0) { + if (getVdsGroupDAO().getClustersByClusterPolicyId(getParameters().getClusterPolicyId()).size() > 0) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_PARAMETERS_INVALID); } return true; @@ -24,7 +23,7 @@ @Override protected void executeCommand() { - SchedulingManager.getInstance().removeClusterPolicy(getParameters().getClusterPolicyId()); + schedulingManager.removeClusterPolicy(getParameters().getClusterPolicyId()); setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java index ec720b8..f43120f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/commands/RemoveExternalPolicyUnitCommand.java @@ -12,19 +12,24 @@ import org.ovirt.engine.core.common.scheduling.parameters.RemoveExternalPolicyUnitParameters; import org.ovirt.engine.core.compat.Guid; +import javax.inject.Inject; + public class RemoveExternalPolicyUnitCommand extends CommandBase<RemoveExternalPolicyUnitParameters> { public RemoveExternalPolicyUnitCommand(RemoveExternalPolicyUnitParameters parameters) { super(parameters); } + @Inject + private SchedulingManager schedulingManager; + @Override protected boolean canDoAction() { - if(!SchedulingManager.getInstance().getPolicyUnitsMap().containsKey(getPolicyUnitId())){ + if(!schedulingManager.getPolicyUnitsMap().containsKey(getPolicyUnitId())){ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_POLICY_UNKNOWN_POLICY_UNIT); } List<String> clusterPoliciesNames = - SchedulingManager.getInstance().getClusterPoliciesNamesByPolicyUnitId(getPolicyUnitId()); + schedulingManager.getClusterPoliciesNamesByPolicyUnitId(getPolicyUnitId()); if (clusterPoliciesNames != null && clusterPoliciesNames.size() > 0) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_REMOVE_POLICY_UNIT_ATTACHED_TO_CLUSTER_POLICY, String.format("$cpNames %1$s", StringUtils.join(clusterPoliciesNames, ','))); @@ -34,7 +39,7 @@ @Override protected void executeCommand() { - SchedulingManager.getInstance().removeExternalPolicyUnit(getPolicyUnitId()); + schedulingManager.removeExternalPolicyUnit(getPolicyUnitId()); setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java index 2c93f13..314ef1f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/external/ExternalSchedulerDiscoveryThread.java @@ -19,9 +19,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.inject.Inject; + public class ExternalSchedulerDiscoveryThread extends Thread { + @Inject + private SchedulingManager schedulingManager; + private final static Logger log = LoggerFactory.getLogger(ExternalSchedulerDiscoveryThread.class); + + private ExternalSchedulerDiscoveryThread() {} @Override public void run() { @@ -63,7 +70,7 @@ // found in the db but not found in discovery, mark as such markExternalPoliciesAsDisabled(allPolicyUnits); - SchedulingManager.getInstance().reloadPolicyUnits(); + schedulingManager.reloadPolicyUnits(); } private void markExternalPoliciesAsDisabled(List<PolicyUnit> units) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java index c3c4225..c7ce0de 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAllPolicyUnitsQuery.java @@ -11,14 +11,19 @@ import org.ovirt.engine.core.common.scheduling.PolicyUnit; import org.ovirt.engine.core.compat.Guid; +import javax.inject.Inject; + public class GetAllPolicyUnitsQuery extends QueriesCommandBase<VdcQueryParametersBase> { public GetAllPolicyUnitsQuery(VdcQueryParametersBase parameters) { super(parameters); } + @Inject + SchedulingManager schedulingManager; + @Override protected void executeQueryCommand() { - Map<Guid, PolicyUnitImpl> map = SchedulingManager.getInstance().getPolicyUnitsMap(); + Map<Guid, PolicyUnitImpl> map = schedulingManager.getPolicyUnitsMap(); List<PolicyUnit> retList = new ArrayList<PolicyUnit>(); for (PolicyUnitImpl policyUnitImpl : map.values()) { retList.add(policyUnitImpl.getPolicyUnit()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java index 050597c..841cb24 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetAttachedClustersByClusterPolicyIdQuery.java @@ -1,17 +1,22 @@ package org.ovirt.engine.core.bll.scheduling.queries; import org.ovirt.engine.core.bll.QueriesCommandBase; -import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.dao.VdsGroupDAO; + +import javax.inject.Inject; public class GetAttachedClustersByClusterPolicyIdQuery extends QueriesCommandBase<IdQueryParameters> { public GetAttachedClustersByClusterPolicyIdQuery(IdQueryParameters parameters) { super(parameters); } + @Inject + VdsGroupDAO vdsGroupDAO; + @Override protected void executeQueryCommand() { - getQueryReturnValue().setReturnValue(SchedulingManager.getInstance() - .getClustersByClusterPolicyId(getParameters().getId())); + getQueryReturnValue().setReturnValue( + vdsGroupDAO.getClustersByClusterPolicyId(getParameters().getId())); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java index b0a0128..6bf827f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPoliciesQuery.java @@ -4,13 +4,18 @@ import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import javax.inject.Inject; + public class GetClusterPoliciesQuery extends QueriesCommandBase<VdcQueryParametersBase> { public GetClusterPoliciesQuery(VdcQueryParametersBase parameters) { super(parameters); } + @Inject + private SchedulingManager schedulingManager; + @Override protected void executeQueryCommand() { - getQueryReturnValue().setReturnValue(SchedulingManager.getInstance().getClusterPolicies()); + getQueryReturnValue().setReturnValue(schedulingManager.getClusterPolicies()); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java index 6d6b933..a5c463a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetClusterPolicyByIdQuery.java @@ -4,13 +4,18 @@ import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.queries.IdQueryParameters; +import javax.inject.Inject; + public class GetClusterPolicyByIdQuery extends QueriesCommandBase<IdQueryParameters> { public GetClusterPolicyByIdQuery(IdQueryParameters parameters) { super(parameters); } + @Inject + private SchedulingManager schedulingManager; + @Override protected void executeQueryCommand() { - getQueryReturnValue().setReturnValue(SchedulingManager.getInstance().getClusterPolicy(getParameters().getId())); + getQueryReturnValue().setReturnValue(schedulingManager.getClusterPolicy(getParameters().getId())); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java index cb5faa8..02cd6f1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/scheduling/queries/GetPolicyUnitByIdQuery.java @@ -5,14 +5,19 @@ import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.queries.IdQueryParameters; +import javax.inject.Inject; + public class GetPolicyUnitByIdQuery extends QueriesCommandBase<IdQueryParameters> { public GetPolicyUnitByIdQuery(IdQueryParameters parameters) { super(parameters); } + @Inject + private SchedulingManager schedulingManager; + @Override protected void executeQueryCommand() { - PolicyUnitImpl value = SchedulingManager.getInstance() + PolicyUnitImpl value = schedulingManager .getPolicyUnitsMap() .get(getParameters().getId()); if (value != null) { 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 4ac9578..c21cb16 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 @@ -55,6 +55,7 @@ import org.ovirt.engine.core.dao.VdsDynamicDAO; import org.ovirt.engine.core.dao.network.NetworkDao; import org.ovirt.engine.core.dao.network.VmNicDao; +import org.ovirt.engine.core.di.Injector; import org.ovirt.engine.core.utils.NetworkUtils; public class RunVmValidator { @@ -113,8 +114,8 @@ validate(vmDuringInitialization(vm), messages) && validate(validateStorageDomains(vm, isInternalExecution, getVmImageDisks()), messages) && validate(validateImagesForRunVm(vm, getVmImageDisks()), messages) && - SchedulingManager.getInstance().canSchedule( - vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, messages); + getSchedulingManager().canSchedule( + vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, messages); } return @@ -132,10 +133,14 @@ validate(validateStorageDomains(vm, isInternalExecution, getVmImageDisks()), messages) && validate(validateImagesForRunVm(vm, getVmImageDisks()), messages) && validate(validateMemorySize(vm), messages) && - SchedulingManager.getInstance().canSchedule( + getSchedulingManager().canSchedule( vdsGroup, vm, vdsBlackList, vdsWhiteList, destVds, messages); } + private SchedulingManager getSchedulingManager() { + return Injector.get(SchedulingManager.class); + } + protected ValidationResult validateMemorySize(VM vm) { int maxSize; if (getOsRepository().get64bitOss().contains(vm.getOs())) { diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java index 6da77e0..7055120 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/scheduling/commands/ClusterPolicyCRUDCommandTest.java @@ -1,10 +1,13 @@ package org.ovirt.engine.core.bll.scheduling.commands; +import java.util.Collections; import java.util.HashMap; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; +import org.mockito.Mockito; +import org.ovirt.engine.core.bll.scheduling.SchedulingManager; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.scheduling.ClusterPolicy; import org.ovirt.engine.core.common.scheduling.parameters.ClusterPolicyCRUDParameters; @@ -31,6 +34,7 @@ protected void executeCommand() { } }; + command.schedulingManager = mockScheduler(); Assert.assertTrue(command.checkAddEditValidations()); } @@ -50,7 +54,14 @@ protected void executeCommand() { } }; + command.schedulingManager = mockScheduler(); Assert.assertFalse(command.checkAddEditValidations()); } + private SchedulingManager mockScheduler() { + SchedulingManager mock = Mockito.mock(SchedulingManager.class); + Mockito.when(mock.getClusterPolicies()).thenReturn(Collections.<ClusterPolicy>emptyList()); + return mock; + } + } -- To view, visit https://gerrit.ovirt.org/40560 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8adc52a3084f9bb539d808e0d8a066ef6fd6b92a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
