/* * Copyright (c) 2008-2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.placement; import com.emc.storageos.db.client.model.Project; import com.emc.storageos.db.client.model.VirtualArray; import com.emc.storageos.db.client.model.VirtualPool; import com.emc.storageos.volumecontroller.Recommendation; import com.emc.storageos.volumecontroller.impl.utils.VirtualPoolCapabilityValuesWrapper; import java.util.List; import java.util.Map; import java.util.Set; public interface Scheduler { List getRecommendationsForResources(VirtualArray vArray, Project project, VirtualPool vPool, VirtualPoolCapabilityValuesWrapper capabilities); /** * Returns the String Name of a scheduler. * @return String name */ public String getSchedulerName(); /** * Returns true if this specific scheduler can schedule storage for the indicated * vpool and vpool use. * @param vPool -- Virtual Pool * @param vPoolUse - VpoolUse (indicates what type of Vpool it is) * @return -- true if this scheduler can schedules storage for this vpool */ public boolean handlesVpool(VirtualPool vPool, VpoolUse vPoolUse); /** * Gets a List of Recommendations for a given VirtualPool and capabilities in specified varray. * The VpoolUse must be specified (ROOT Vpool or alternate like SRDF_COPY or VPLEX_HA). * @param vArray -- Virtual Array * @param project -- Project * @param vPool -- Virtual Pool * @param vPoolUse -- Use of Virtual Pool (i.e. whether this Virtual Pool is nested inside * the ROOT virtual pool, e.g. a VPLEX_HA or SRDF_COPY virtual pool within the outer ROOT.) * @param capabilities -- the capabilites needed * @param currentRecommendations -- any existing recommendations in the current solution set. * This is used to let recommendations be based on previously generated recommendations, e.g. * SRDF_COPY recommendations are generated from the SRDF source recommendation. * @return -- A scheduling solution containing a List of Recommendations. * The Recommendations may be any subclass of Recommendation. */ public List<Recommendation> getRecommendationsForVpool( VirtualArray vArray, Project project, VirtualPool vPool, VpoolUse vPoolUse, VirtualPoolCapabilityValuesWrapper capabilities, Map<VpoolUse, List<Recommendation>> currentRecommendations); }