/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis; import java.io.Serializable; import java.net.URI; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.DataObject; import com.emc.storageos.exceptions.DeviceControllerException; import com.emc.storageos.svcs.errorhandling.model.ServiceCoded; import com.emc.storageos.volumecontroller.impl.ControllerServiceImpl; /** * Job for Array Affinity data collection. */ public class DataCollectionArrayAffinityJob extends DataCollectionJob implements Serializable { private static final long serialVersionUID = -6256870762267299638L; private static final Logger logger = LoggerFactory .getLogger(DataCollectionArrayAffinityJob.class); private List<URI> _hostIds; private List<URI> _systemIds; private ArrayAffinityDataCollectionTaskCompleter _completer; private String _namespace; public DataCollectionArrayAffinityJob(List<URI> hostIds, List<URI> systemIds, ArrayAffinityDataCollectionTaskCompleter completer, String namespace) { this(hostIds, systemIds, completer, JobOrigin.USER_API, namespace); } DataCollectionArrayAffinityJob(List<URI> hostIds, List<URI> systemIds, ArrayAffinityDataCollectionTaskCompleter completer, JobOrigin origin, String namespace) { super(origin); _hostIds = hostIds; _systemIds = systemIds; _completer = completer; _namespace = namespace; } @Override public DataCollectionTaskCompleter getCompleter() { return _completer; } @Override public void ready(DbClient dbClient) throws DeviceControllerException { _completer.ready(dbClient); } @Override public void error(DbClient dbClient, ServiceCoded serviceCoded) throws DeviceControllerException { _completer.error(dbClient, serviceCoded); } @Override public void schedule(DbClient dbClient) { _completer.schedule(dbClient); } @Override final public void setTaskError(DbClient dbClient, ServiceCoded code) { _completer.statusError(dbClient, code); } @Override final public void setTaskReady(DbClient dbClient, String message) { _completer.statusReady(dbClient, message); } @Override final public void updateTask(DbClient dbClient, String message) { _completer.statusPending(dbClient, message); } public String getType() { return ControllerServiceImpl.ARRAYAFFINITY_DISCOVERY; } public String systemString() { String sys = null; try { sys = getCompleter().getId().toString(); } catch (Exception ex) { logger.error("Exception occurred while geting system id from completer", ex); } return sys; } public boolean isActiveJob(DbClient dbClient) { DataObject dbObject = dbClient.queryObject(_completer.getType(), _completer.getId()); return (dbObject != null && !dbObject.getInactive()); } public String getNamespace() { return _namespace; } public List<URI> getHostIds() { return _hostIds; } public List<URI> getSystemIds() { return _systemIds; } private boolean uriListsMatch(List<URI> list1, List<URI> list2) { if (list1 == null && list2 == null) { return true; } if ((list1 == null && list2 != null) || (list1 != null && list2 == null) || list1.size() != list2.size()) { return false; } return list1.containsAll(list2); } @Override public boolean matches(DataCollectionJob job) { return (this.getClass().equals(job.getClass()) && getCompleter().getJobType().equals(job.getCompleter().getJobType()) && getNamespace().equals(job.getNamespace()) && uriListsMatch(getHostIds(), ((DataCollectionArrayAffinityJob) job).getHostIds()) && uriListsMatch(getSystemIds(), ((DataCollectionArrayAffinityJob) job).getSystemIds()) ); } }