/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.curate; import java.io.IOException; import java.util.Set; /** * TaskQueue objects manage access to named queues of task entries. * Entries represent curation task requests that have been deferred. * The queue supports concurrent non-blocking writers, but controls * read access to a single reader possessing a ticket (first come, * first serve). After the read, the queue remains locked until * released by the reader, after which it is typically purged. * * @author richardrodgers */ public interface TaskQueue { /** * Returns list of queue names. * * @return queues * the list of names of active queues */ String[] queueNames(); /** * Queues a single entry to a named queue. * * @param queueName * the name of the queue on which to write * @param entry * the task entry * @throws IOException */ void enqueue(String queueName, TaskQueueEntry entry) throws IOException; /** * Queues a set of task entries to a named queue. * * @param queueName * the name of the queue on which to write * @param entrySet * the set of task entries * @throws IOException */ void enqueue(String queueName, Set<TaskQueueEntry> entrySet) throws IOException; /** * Returns the set of task entries from the named queue. The operation locks * the queue from any further enqueue or dequeue operations until a * <code>release</code> is called. The ticket may be any number, but a * timestamp should guarantee sufficient uniqueness. * * @param queueName * the name of the queue to read * @param ticket * a token which must be presented to release the queue * @return set * the current set of queued task entries * @throws IOException */ Set<TaskQueueEntry> dequeue(String queueName, long ticket) throws IOException; /** * Releases the lock upon the named queue, deleting it if <code>removeEntries</code> * is set to true. * * @param queueName * the name of the queue to release * @param ticket * a token that was presented when queue was dequeued. * @param removeEntries * flag to indicate whether entries may be deleted */ void release(String queueName, long ticket, boolean removeEntries); }