/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.placement; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.model.Initiator; import com.emc.storageos.db.client.model.StoragePort; import com.emc.storageos.db.client.model.StringSet; import com.emc.storageos.db.client.model.StringSetMap; import com.emc.storageos.util.NetworkLite; /** * Assign StoragePorts to Initiators from an existing list of pre-zoned ports. * This class contains the default implementation, which is one storage port * assigned to each initiator. It is used for the VMAX. * */ public class ZonedPortsStoragePortsAssigner extends DefaultStoragePortsAssigner { protected static final Logger _log = LoggerFactory .getLogger(ZonedPortsStoragePortsAssigner.class); private Map<NetworkLite, StringSetMap> zonesByNetwork = null; ZonedPortsStoragePortsAssigner(Map<NetworkLite, StringSetMap> zonesByNetwork) { super(); this.zonesByNetwork = zonesByNetwork; } @Override public boolean isPortAssignableToInitiator(NetworkLite initiatorNetwork, Initiator initiator, StoragePort port) { StringSetMap zoneMap = zonesByNetwork.get(initiatorNetwork); StringSet initiatorZonedPorts = zoneMap.get(initiator.getId().toString()); if (initiatorZonedPorts != null && !initiatorZonedPorts.isEmpty()) { for (String portId : initiatorZonedPorts) { if (portId.equals(port.getId().toString())) { return true; } } } return false; } }