org.opends.server.extensions
Class TraditionalWorkQueue

java.lang.Object
  extended by org.opends.server.api.WorkQueue<TraditionalWorkQueueCfg>
      extended by org.opends.server.extensions.TraditionalWorkQueue
All Implemented Interfaces:
ConfigurationChangeListener<TraditionalWorkQueueCfg>

public class TraditionalWorkQueue
extends WorkQueue<TraditionalWorkQueueCfg>
implements ConfigurationChangeListener<TraditionalWorkQueueCfg>

This class defines a data structure for storing and interacting with the Directory Server work queue.


Constructor Summary
TraditionalWorkQueue()
          Creates a new instance of this work queue.
 
Method Summary
 ConfigChangeResult applyConfigurationChange(TraditionalWorkQueueCfg configuration)
          Applies the configuration changes to this change listener.
 void finalizeWorkQueue(Message reason)
          Performs any necessary finalization for this work queue, including ensuring that all active operations are interrupted or will be allowed to complete, and that all pending operations will be cancelled.
 long getOpsRejectedDueToQueueFull()
          Retrieves the total number of operations that have been rejected because the work queue was already at its maximum capacity.
 long getOpsSubmitted()
          Retrieves the total number of operations that have been successfully submitted to this work queue for processing since server startup.
 void initializeWorkQueue(TraditionalWorkQueueCfg configuration)
          Initializes this work queue based on the information in the provided configuration entry.
 boolean isConfigurationChangeAcceptable(TraditionalWorkQueueCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the proposed change to the configuration is acceptable to this change listener.
 boolean isIdle()
          Indicates whether the work queue is currently processing any requests.
 AbstractOperation nextOperation(TraditionalWorkerThread workerThread)
          Retrieves the next operation that should be processed by one of the worker threads, blocking if necessary until a new request arrives.
 boolean removeOperation(AbstractOperation operation)
          Attempts to remove the specified operation from this queue if it has not yet been picked up for processing by one of the worker threads.
 boolean shutdownRequested()
          Indicates whether this work queue has received a request to shut down.
 int size()
          Retrieves the number of pending operations in the queue that have not yet been picked up for processing.
 void submitOperation(AbstractOperation operation)
          Submits an operation to be processed by one of the worker threads associated with this work queue.
 
Methods inherited from class org.opends.server.api.WorkQueue
waitUntilIdle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TraditionalWorkQueue

public TraditionalWorkQueue()
Creates a new instance of this work queue. All initialization should be performed in the initializeWorkQueue method.

Method Detail

initializeWorkQueue

public void initializeWorkQueue(TraditionalWorkQueueCfg configuration)
                         throws ConfigException,
                                InitializationException
Initializes this work queue based on the information in the provided configuration entry.

Specified by:
initializeWorkQueue in class WorkQueue<TraditionalWorkQueueCfg>
Parameters:
configuration - The configuration to use to initialize the work queue.
Throws:
ConfigException - If the provided configuration entry does not have a valid work queue configuration.
InitializationException - If a problem occurs during initialization that is not related to the server configuration.

finalizeWorkQueue

public void finalizeWorkQueue(Message reason)
Performs any necessary finalization for this work queue, including ensuring that all active operations are interrupted or will be allowed to complete, and that all pending operations will be cancelled.

Specified by:
finalizeWorkQueue in class WorkQueue<TraditionalWorkQueueCfg>
Parameters:
reason - The human-readable reason that the work queue is being shut down.

shutdownRequested

public boolean shutdownRequested()
Indicates whether this work queue has received a request to shut down.

Returns:
true if the work queue has recieved a request to shut down, or false if not.

submitOperation

public void submitOperation(AbstractOperation operation)
                     throws DirectoryException
Submits an operation to be processed by one of the worker threads associated with this work queue.

Specified by:
submitOperation in class WorkQueue<TraditionalWorkQueueCfg>
Parameters:
operation - The operation to be processed.
Throws:
DirectoryException - If the provided operation is not accepted for some reason (e.g., if the server is shutting down or the pending operation queue is already at its maximum capacity).

nextOperation

public AbstractOperation nextOperation(TraditionalWorkerThread workerThread)
Retrieves the next operation that should be processed by one of the worker threads, blocking if necessary until a new request arrives. This method should only be called by a worker thread associated with this work queue.

Parameters:
workerThread - The worker thread that is requesting the operation.
Returns:
The next operation that should be processed, or null if the server is shutting down and no more operations will be processed.

removeOperation

public boolean removeOperation(AbstractOperation operation)
Attempts to remove the specified operation from this queue if it has not yet been picked up for processing by one of the worker threads.

Parameters:
operation - The operation to remove from the queue.
Returns:
true if the provided request was present in the queue and was removed successfully, or false it not.

getOpsSubmitted

public long getOpsSubmitted()
Retrieves the total number of operations that have been successfully submitted to this work queue for processing since server startup. This does not include operations that have been rejected for some reason like the queue already at its maximum capacity.

Returns:
The total number of operations that have been successfully submitted to this work queue since startup.

getOpsRejectedDueToQueueFull

public long getOpsRejectedDueToQueueFull()
Retrieves the total number of operations that have been rejected because the work queue was already at its maximum capacity.

Returns:
The total number of operations that have been rejected because the work queue was already at its maximum capacity.

size

public int size()
Retrieves the number of pending operations in the queue that have not yet been picked up for processing. Note that this method is not a constant-time operation and can be relatively inefficient, so it should be used sparingly.

Returns:
The number of pending operations in the queue that have not yet been picked up for processing.

isConfigurationChangeAcceptable

public boolean isConfigurationChangeAcceptable(TraditionalWorkQueueCfg configuration,
                                               java.util.List<Message> unacceptableReasons)
Indicates whether the proposed change to the configuration is acceptable to this change listener.

Specified by:
isConfigurationChangeAcceptable in interface ConfigurationChangeListener<TraditionalWorkQueueCfg>
Parameters:
configuration - The new configuration containing the changes.
unacceptableReasons - A list that can be used to hold messages about why the provided configuration is not acceptable.
Returns:
Returns true if the proposed change is acceptable, or false if it is not.

applyConfigurationChange

public ConfigChangeResult applyConfigurationChange(TraditionalWorkQueueCfg configuration)
Applies the configuration changes to this change listener.

Specified by:
applyConfigurationChange in interface ConfigurationChangeListener<TraditionalWorkQueueCfg>
Parameters:
configuration - The new configuration containing the changes.
Returns:
Returns information about the result of changing the configuration.

isIdle

public boolean isIdle()
Indicates whether the work queue is currently processing any requests. Note that this is a point-in-time determination, and if any component of the server wishes to depend on a quiescent state then it should use some external mechanism to ensure that no other requests are submitted to the queue.

Specified by:
isIdle in class WorkQueue<TraditionalWorkQueueCfg>
Returns:
true if the work queue is currently idle, or false if it is being used to process one or more operations.