/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.placement; import java.util.List; import java.util.Map; import com.emc.storageos.api.service.impl.resource.utils.FilePolicyServiceUtils; import com.emc.storageos.db.client.DbClient; 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.impl.utils.VirtualPoolCapabilityValuesWrapper; /** * * this call specific implementation of Scheduler based on Vpool capability(default, local, remote) * */ public class FilePlacementManager { private DbClient dbClient; // Storage schedulers private Map<String, Scheduler> storageSchedulers; public void setDbClient(DbClient dbClient) { this.dbClient = dbClient; } public void setStorageSchedulers(Map<String, Scheduler> storageSchedulers) { this.storageSchedulers = storageSchedulers; } public Scheduler getStorageScheduler(String type) { return storageSchedulers.get(type); } public List<FileRecommendation> getRecommendationsForFileCreateRequest(VirtualArray virtualArray, Project project, VirtualPool vPool, VirtualPoolCapabilityValuesWrapper capabilities) { // Get the file placement based on passed parameters. Scheduler scheduler = getFileServiceImpl(capabilities); return scheduler.getRecommendationsForResources(virtualArray, project, vPool, capabilities); } /** * Returns the scheduler responsible for scheduling resources * * @param vpool Virtual Pool * @return storage scheduler */ private Scheduler getFileServiceImpl(VirtualPoolCapabilityValuesWrapper caps) { // Select an implementation of the right scheduler Scheduler scheduler = storageSchedulers.get("file"); if (FilePolicyServiceUtils.vPoolSpecifiesFileReplication(caps)) { scheduler = storageSchedulers.get("mirrorfile"); } return scheduler; } }