From 042b01a7f8476852bc8610abbd44d49c8119959d Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 28 Jun 2007 15:07:54 +0000
Subject: [PATCH] Migrate the work queue configuration to the admin framework.

---
 opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java |  436 +++--------------------------------------------------
 1 files changed, 30 insertions(+), 406 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
index 648c88b..97d43bd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
@@ -37,12 +37,10 @@
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.opends.server.api.ConfigurableComponent;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.TraditionalWorkQueueCfg;
 import org.opends.server.api.WorkQueue;
-import org.opends.server.config.ConfigAttribute;
-import org.opends.server.config.ConfigEntry;
 import org.opends.server.config.ConfigException;
-import org.opends.server.config.IntegerConfigAttribute;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.monitors.TraditionalWorkQueueMonitor;
 import org.opends.server.types.CancelRequest;
@@ -71,8 +69,8 @@
  * Directory Server work queue.
  */
 public class TraditionalWorkQueue
-       extends WorkQueue
-       implements ConfigurableComponent
+       extends WorkQueue<TraditionalWorkQueueCfg>
+       implements ConfigurationChangeListener<TraditionalWorkQueueCfg>
 {
   /**
    * The tracer object for the debug logger.
@@ -145,7 +143,8 @@
   /**
    * {@inheritDoc}
    */
-  public void initializeWorkQueue(ConfigEntry configEntry)
+  @Override()
+  public void initializeWorkQueue(TraditionalWorkQueueCfg configuration)
          throws ConfigException, InitializationException
   {
     shutdownRequested = false;
@@ -155,104 +154,14 @@
     queueLock         = new ReentrantLock();
 
 
+    // Register to be notified of any configuration changes.
+    configuration.addTraditionalChangeListener(this);
+
+
     // Get the necessary configuration from the provided entry.
-    configEntryDN = configEntry.getDN();
-
-    int msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS;
-    IntegerConfigAttribute numThreadsStub =
-      new IntegerConfigAttribute(ATTR_NUM_WORKER_THREADS, getMessage(msgID),
-                                 true, false, false, true, 1, false, 0,
-                                 DEFAULT_NUM_WORKER_THREADS);
-    try
-    {
-      IntegerConfigAttribute numThreadsAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(numThreadsStub);
-      if (numThreadsAttr == null)
-      {
-        numWorkerThreads = DEFAULT_NUM_WORKER_THREADS;
-      }
-      else
-      {
-        numWorkerThreads = numThreadsAttr.activeIntValue();
-        if (numWorkerThreads <= 0)
-        {
-          //This is not valid.  The number of worker threads must be a positive
-          // integer.
-          msgID = MSGID_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(configEntryDN),
-                                      numWorkerThreads);
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
-          numWorkerThreads = DEFAULT_NUM_WORKER_THREADS;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
-
-      numWorkerThreads = DEFAULT_NUM_WORKER_THREADS;
-    }
-
-
-    msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY;
-    IntegerConfigAttribute capacityStub =
-      new IntegerConfigAttribute(ATTR_MAX_WORK_QUEUE_CAPACITY,
-                                 getMessage(msgID), true, false, false, true,
-                                 0, false, 0,
-                                 DEFAULT_MAX_WORK_QUEUE_CAPACITY);
-    try
-    {
-      IntegerConfigAttribute capacityAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(capacityStub);
-      if (capacityAttr == null)
-      {
-        maxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-      }
-      else
-      {
-        maxCapacity = capacityAttr.activeIntValue();
-        if (maxCapacity < 0)
-        {
-          // This is not valid.  The maximum capacity must be greater than or
-          // equal to zero.
-          msgID = MSGID_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      maxCapacity);
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
-
-          maxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
-
-      maxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-    }
+    configEntryDN    = configuration.dn();
+    numWorkerThreads = configuration.getNumWorkerThreads();
+    maxCapacity      = configuration.getMaxWorkQueueCapacity();
 
 
     // Create the actual work queue.
@@ -279,10 +188,6 @@
     }
 
 
-    // Register with the Directory Server as a configurable component.
-    DirectoryServer.registerConfigurableComponent(this);
-
-
     // Create and register a monitor provider for the work queue.
     try
     {
@@ -299,7 +204,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR;
+      int msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR;
       String message = getMessage(msgID, TraditionalWorkQueueMonitor.class,
                                   String.valueOf(e));
       logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
@@ -312,6 +217,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public void finalizeWorkQueue(String reason)
   {
     shutdownRequested = true;
@@ -389,6 +295,7 @@
    *                              down or the pending operation queue is already
    *                              at its maximum capacity).
    */
+  @Override()
   public void submitOperation(Operation operation)
          throws DirectoryException
   {
@@ -659,291 +566,29 @@
 
 
   /**
-   * Retrieves the DN of the configuration entry with which this component is
-   * associated.
-   *
-   * @return  The DN of the configuration entry with which this component is
-   *          associated.
+   * {@inheritDoc}
    */
-  public DN getConfigurableComponentEntryDN()
+  @Override()
+  public boolean isConfigurationChangeAcceptable(
+                      TraditionalWorkQueueCfg configuration,
+                      List<String> unacceptableReasons)
   {
-    return configEntryDN;
+    // The provided configuration will always be acceptable.
+    return true;
   }
 
 
 
   /**
-   * Retrieves the set of configuration attributes that are associated with this
-   * configurable component.
-   *
-   * @return  The set of configuration attributes that are associated with this
-   *          configurable component.
+   * {@inheritDoc}
    */
-  public List<ConfigAttribute> getConfigurationAttributes()
-  {
-    LinkedList<ConfigAttribute> attrList = new LinkedList<ConfigAttribute>();
-
-
-    int msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS;
-    IntegerConfigAttribute numThreadsAttr =
-      new IntegerConfigAttribute(ATTR_NUM_WORKER_THREADS, getMessage(msgID),
-                                 true, false, false, true, 1, false, 0,
-                                 workerThreads.size());
-    attrList.add(numThreadsAttr);
-
-
-    msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY;
-    IntegerConfigAttribute capacityAttr =
-      new IntegerConfigAttribute(ATTR_MAX_WORK_QUEUE_CAPACITY,
-                                 getMessage(msgID), true, false, false, true,
-                                 0, false, 0, maxCapacity);
-    attrList.add(capacityAttr);
-
-
-    return attrList;
-  }
-
-
-
-  /**
-   * Indicates whether the provided configuration entry has an acceptable
-   * configuration for this component.  If it does not, then detailed
-   * information about the problem(s) should be added to the provided list.
-   *
-   * @param  configEntry          The configuration entry for which to make the
-   *                              determination.
-   * @param  unacceptableReasons  A list that can be used to hold messages about
-   *                              why the provided entry does not have an
-   *                              acceptable configuration.
-   *
-   * @return  <CODE>true</CODE> if the provided entry has an acceptable
-   *          configuration for this component, or <CODE>false</CODE> if not.
-   */
-  public boolean hasAcceptableConfiguration(ConfigEntry configEntry,
-                                            List<String> unacceptableReasons)
-  {
-    boolean configIsAcceptable = true;
-
-
-    // Check the configuration for the number of worker threads.
-    int msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS;
-    IntegerConfigAttribute numThreadsStub =
-      new IntegerConfigAttribute(ATTR_NUM_WORKER_THREADS, getMessage(msgID),
-                                 true, false, false, true, 1, false, 0,
-                                 workerThreads.size());
-    try
-    {
-      IntegerConfigAttribute numThreadsAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(numThreadsStub);
-      if (numThreadsAttr == null)
-      {
-        // This means that the entry doesn't contain the attribute.  This is
-        // fine, since we'll just use the default.
-      }
-      else
-      {
-        int numWorkerThreads = numThreadsAttr.activeIntValue();
-        if (numWorkerThreads <= 0)
-        {
-          //This is not valid.  The number of worker threads must be a positive
-          // integer.
-          msgID = MSGID_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(configEntryDN),
-                                      numWorkerThreads);
-          unacceptableReasons.add(message);
-          configIsAcceptable = false;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      unacceptableReasons.add(message);
-      configIsAcceptable = false;
-    }
-
-
-    // Check the configuration for the maximum work queue capacity.
-    msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY;
-    IntegerConfigAttribute capacityStub =
-      new IntegerConfigAttribute(ATTR_MAX_WORK_QUEUE_CAPACITY,
-                                 getMessage(msgID), true, false, false, true,
-                                 0, false, 0,
-                                 maxCapacity);
-    try
-    {
-      IntegerConfigAttribute capacityAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(capacityStub);
-      if (capacityAttr == null)
-      {
-        //This means that the entry doesn't contain the attribute.  This is
-        // fine, since we'll just use the default.
-      }
-      else
-      {
-        int newMaxCapacity = capacityAttr.activeIntValue();
-        if (newMaxCapacity < 0)
-        {
-          // This is not valid.  The maximum capacity must be greater than or
-          // equal to zero.
-          msgID = MSGID_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      newMaxCapacity);
-          unacceptableReasons.add(message);
-          configIsAcceptable = false;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      unacceptableReasons.add(message);
-      configIsAcceptable = false;
-    }
-
-
-    return configIsAcceptable;
-  }
-
-
-
-  /**
-   * Makes a best-effort attempt to apply the configuration contained in the
-   * provided entry.  Information about the result of this processing should be
-   * added to the provided message list.  Information should always be added to
-   * this list if a configuration change could not be applied.  If detailed
-   * results are requested, then information about the changes applied
-   * successfully (and optionally about parameters that were not changed) should
-   * also be included.
-   *
-   * @param  configEntry      The entry containing the new configuration to
-   *                          apply for this component.
-   * @param  detailedResults  Indicates whether detailed information about the
-   *                          processing should be added to the list.
-   *
-   * @return  Information about the result of the configuration update.
-   */
-  public ConfigChangeResult applyNewConfiguration(ConfigEntry configEntry,
-                                                  boolean detailedResults)
+  @Override()
+  public ConfigChangeResult applyConfigurationChange(
+                                 TraditionalWorkQueueCfg configuration)
   {
     ArrayList<String> resultMessages = new ArrayList<String>();
-    int newNumThreads;
-    int newMaxCapacity;
-
-
-    // Check the configuration for the number of worker threads.
-    int msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS;
-    IntegerConfigAttribute numThreadsStub =
-      new IntegerConfigAttribute(ATTR_NUM_WORKER_THREADS, getMessage(msgID),
-                                 true, false, false, true, 1, false, 0,
-                                 workerThreads.size());
-    try
-    {
-      IntegerConfigAttribute numThreadsAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(numThreadsStub);
-      if (numThreadsAttr == null)
-      {
-        // This means that the entry doesn't contain the attribute.  This is
-        // fine, since we'll just use the default.
-        newNumThreads = DEFAULT_NUM_WORKER_THREADS;
-      }
-      else
-      {
-        newNumThreads = numThreadsAttr.activeIntValue();
-        if (newNumThreads <= 0)
-        {
-          //This is not valid.  The number of worker threads must be a positive
-          // integer.  This should never happen since it should be filtered out
-          // by the hasAcceptableConfiguration method, but if it does for some
-          // reason then handle it.
-          msgID = MSGID_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(configEntryDN),
-                                      newNumThreads);
-          resultMessages.add(message);
-          newNumThreads = DEFAULT_NUM_WORKER_THREADS;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      resultMessages.add(message);
-      newNumThreads = DEFAULT_NUM_WORKER_THREADS;
-    }
-
-
-    // Check the configuration for the maximum work queue capacity.
-    msgID = MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY;
-    IntegerConfigAttribute capacityStub =
-      new IntegerConfigAttribute(ATTR_MAX_WORK_QUEUE_CAPACITY,
-                                 getMessage(msgID), true, false, false, true,
-                                 0, false, 0,
-                                 maxCapacity);
-    try
-    {
-      IntegerConfigAttribute capacityAttr =
-        (IntegerConfigAttribute)
-        configEntry.getConfigAttribute(capacityStub);
-      if (capacityAttr == null)
-      {
-        //This means that the entry doesn't contain the attribute.  This is
-        // fine, since we'll just use the default.
-        newMaxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-      }
-      else
-      {
-        newMaxCapacity = capacityAttr.activeIntValue();
-        if (newMaxCapacity < 0)
-        {
-          // This is not valid.  The maximum capacity must be greater than or
-          // equal to zero.
-          msgID = MSGID_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      newMaxCapacity);
-          resultMessages.add(message);
-          newMaxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-        }
-      }
-    }
-    catch (Exception e)
-    {
-      if (debugEnabled())
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-      }
-
-      msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(e));
-      resultMessages.add(message);
-      newMaxCapacity = DEFAULT_MAX_WORK_QUEUE_CAPACITY;
-    }
+    int newNumThreads  = configuration.getNumWorkerThreads();
+    int newMaxCapacity = configuration.getMaxWorkQueueCapacity();
 
 
     // Apply a change to the number of worker threads if appropriate.
@@ -965,25 +610,10 @@
             t.start();
           }
 
-          if (detailedResults)
-          {
-            msgID = MSGID_CONFIG_WORK_QUEUE_CREATED_THREADS;
-            String message = getMessage(msgID, threadsToAdd, newNumThreads);
-            resultMessages.add(message);
-          }
-
           killThreads = false;
         }
         else
         {
-          if (detailedResults)
-          {
-            msgID = MSGID_CONFIG_WORK_QUEUE_DESTROYING_THREADS;
-            String message = getMessage(msgID, Math.abs(threadsToAdd),
-                                        newNumThreads);
-            resultMessages.add(message);
-          }
-
           killThreads = true;
         }
 
@@ -1058,13 +688,6 @@
           }
         }
 
-        if (detailedResults)
-        {
-          msgID = MSGID_CONFIG_WORK_QUEUE_NEW_CAPACITY;
-          String message = getMessage(msgID, newMaxCapacity);
-          resultMessages.add(message);
-        }
-
         maxCapacity = newMaxCapacity;
       }
       catch (Exception e)
@@ -1089,6 +712,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override()
   public boolean isIdle()
   {
     if (opQueue.size() > 0)

--
Gitblit v1.10.0