package uws.job.manager; /* * This file is part of UWSLibrary. * * UWSLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * UWSLibrary 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with UWSLibrary. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2012,2014 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ import java.util.Iterator; import uws.job.ExecutionPhase; import uws.job.UWSJob; /** * <p>Lets managing the execution of a set of jobs.</p> * * <p>It is used by a job list to decide whether a given job can be executed or whether it must be put in a queue.</p> * * <p> * Besides the job must notify its manager when it is asked to start ({@link #execute(UWSJob)}) * and to end ({@link #remove(UWSJob)}). * </p> * * @author Grégory Mantelet (CDS;ARI) * @version 4.1 (12/2014) */ public interface ExecutionManager { /** * Gets the list of running jobs. * * @return An iterator on the running jobs. */ public Iterator<UWSJob> getRunningJobs(); /** * Gets the total number of running jobs. * * @return The number of running jobs. */ public int getNbRunningJobs(); /** * Gets the list of queued jobs. * * @return An iterator on the queued jobs. */ public Iterator<UWSJob> getQueuedJobs(); /** * Gets the total number of queued jobs. * * @return The number of queued jobs. */ public int getNbQueuedJobs(); /** * <p>Refreshes the lists of running and queued jobs.</p> * * <p><i>Note: * If any error occurs while refreshing this manager, it SHOULD be logged using the service logger. * </i></p> */ public void refresh(); /** * <p>Lets deciding whether the given job can start immediately or whether it must be put in the queue.</p> * * <p><i>Note: * If any error occurs while executing the given job, it SHOULD be logged using the service logger. * </i></p> * * @param job The job to execute. * @return The resulting execution phase of the given job. * * @see UWSJob#start(boolean) * @see UWSJob#setPhase(ExecutionPhase) */ public ExecutionPhase execute(final UWSJob job); /** * <p>Removes the job from this manager whatever is its current execution phase.</p> * * <p><i>Note: * If any error occurs while removing a job from this manager, it SHOULD be logged using the service logger. * </i></p> * * @param jobToRemove The job to remove. */ public void remove(final UWSJob jobToRemove); /** * <p>Stop all running jobs. No more job, even the queued ones, must be executed after a call to this function. * All stopped or aborted queued jobs should be set forcedly back to the PENDING status.</p> * * <p><i>Note: * A call to {@link #execute(UWSJob)} would re-activate this manager. However jobs stopped or * aborted using this function might not be starting again. These behaviors at implementation-dependent. * </i></p> * * @since 4.1 */ public void stopAll(); }