/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource; import java.net.URI; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.FilePolicy; import com.emc.storageos.model.TaskResourceRep; import com.emc.storageos.svcs.errorhandling.model.ServiceCoded; import com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException; public class AssignFileSnapshotPolicyToProjectSchedulingThread implements Runnable { private static final Logger _log = LoggerFactory.getLogger(AssignFileSnapshotPolicyToProjectSchedulingThread.class); private final FilePolicyService filePolicyService; private Map<URI, List<URI>> vpoolToStorageSystemMap; private List<URI> projectURIs; private URI filePolicyToAssign; private FileServiceApi fileServiceImpl; private TaskResourceRep taskObject; private String task; public AssignFileSnapshotPolicyToProjectSchedulingThread(FilePolicyService fileService, URI filePolicyToAssign, Map<URI, List<URI>> vpoolToStorageSystemMap, List<URI> projectURIs, FileServiceApi fileServiceImpl, TaskResourceRep taskObject, String task) { this.filePolicyService = fileService; this.vpoolToStorageSystemMap = vpoolToStorageSystemMap; this.projectURIs = projectURIs; this.filePolicyToAssign = filePolicyToAssign; this.fileServiceImpl = fileServiceImpl; this.taskObject = taskObject; this.task = task; } @Override public void run() { _log.info("Starting scheduling placement thread for task {}", task); try { fileServiceImpl.assignFilePolicyToProjects(vpoolToStorageSystemMap, projectURIs, filePolicyToAssign, task); } catch (Exception ex) { if (ex instanceof ServiceCoded) { this.filePolicyService._dbClient .error(FilePolicy.class, taskObject.getResource().getId(), taskObject.getOpId(), (ServiceCoded) ex); } else { this.filePolicyService._dbClient.error(FilePolicy.class, taskObject.getResource().getId(), taskObject.getOpId(), InternalServerErrorException.internalServerErrors .unexpectedErrorVolumePlacement(ex)); } _log.error(ex.getMessage(), ex); taskObject.setMessage(ex.getMessage()); } _log.info("Ending scheduling/placement thread..."); } public static void executeApiTask(FilePolicyService fileService, ExecutorService executorService, DbClient dbClient, URI filePolicyToAssign, Map<URI, List<URI>> vpoolToStorageSystemMap, List<URI> projectURIs, FileServiceApi fileServiceImpl, TaskResourceRep taskObject, String task) { AssignFileSnapshotPolicyToProjectSchedulingThread schedulingThread = new AssignFileSnapshotPolicyToProjectSchedulingThread( fileService, filePolicyToAssign, vpoolToStorageSystemMap, projectURIs, fileServiceImpl, taskObject, task); try { executorService.execute(schedulingThread); } catch (Exception e) { String message = "Failed to execute file assign policy API task for resource " + taskObject.getResource().getId(); _log.error(message); taskObject.setMessage(message); } } }