/* * ProActive Parallel Suite(TM): * The Open Source library for parallel and distributed * Workflows & Scheduling, Orchestration, Cloud Automation * and Big Data Analysis on Enterprise Grids & Clouds. * * Copyright (c) 2007 - 2017 ActiveEon * Contact: contact@activeeon.com * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation: version 3 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * If needed, contact us to obtain a release under GPL Version 2 or 3 * or a different license than the AGPL. */ package org.ow2.proactive.scheduler.task; import java.io.File; import java.util.List; import java.util.UUID; import java.util.concurrent.Semaphore; import org.objectweb.proactive.extensions.dataspaces.core.naming.NamingService; import org.objectweb.proactive.extensions.dataspaces.exceptions.FileSystemException; import org.ow2.proactive.scheduler.common.task.TaskId; import org.ow2.proactive.scheduler.common.task.dataspaces.InputSelector; import org.ow2.proactive.scheduler.common.task.dataspaces.OutputSelector; import org.ow2.proactive.scheduler.task.data.TaskDataspaces; import org.ow2.proactive.scheduler.task.executors.InProcessTaskExecutor; import org.ow2.proactive.scheduler.task.executors.TaskExecutor; public class SlowDataspacesTaskLauncherFactory extends ProActiveForkedTaskLauncherFactory { private Semaphore taskRunning; public SlowDataspacesTaskLauncherFactory() { } public SlowDataspacesTaskLauncherFactory(Semaphore taskRunning) { this.taskRunning = taskRunning; } @Override public TaskDataspaces createTaskDataspaces(TaskId taskId, NamingService namingService, boolean isRunAsUser) { return new SlowDataspaces(taskRunning); } @Override public TaskExecutor createTaskExecutor(File workingDir) { return new InProcessTaskExecutor(); } private static class SlowDataspaces implements TaskDataspaces { private Semaphore taskRunning; public SlowDataspaces(Semaphore taskRunning) { this.taskRunning = taskRunning; } @Override public File getScratchFolder() { return new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); } @Override public String getScratchURI() { return null; } @Override public String getCacheURI() { return null; } @Override public String getInputURI() { return null; } @Override public String getOutputURI() { return null; } @Override public String getUserURI() { return null; } @Override public String getGlobalURI() { return null; } @Override public void copyInputDataToScratch(List<InputSelector> inputFiles) throws FileSystemException { if (taskRunning != null) { taskRunning.release(); } try { Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } } @Override public void copyScratchDataToOutput(List<OutputSelector> outputFiles) throws FileSystemException { } @Override public void close() { } } }