From 1649148841be6bc4ac6381d0592dc9ab52438044 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Sun, 02 Sep 2007 13:05:17 +0000
Subject: [PATCH] - [Issue 1481] Ability to set any JE property in config.ldif - [Issue 2031] provide core JE configurable attributes for FileSystemEntryCache - fixes to entry cache config manager for proper configuration, re-configuration, error reporting.

---
 opends/src/server/org/opends/server/extensions/FIFOEntryCache.java |   40 ++++++++++++++++++++++++++++++++--------
 1 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java b/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
index f602d14..dd9cd90 100644
--- a/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
+++ b/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
@@ -58,10 +58,10 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 import org.opends.server.util.ServerConstants;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.messages.ExtensionMessages.*;
-
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -142,6 +142,9 @@
   // The maximum number of entries that may be held in the cache.
   private long maxEntries;
 
+  // Currently registered configuration object.
+  private FIFOEntryCacheCfg registeredConfiguration;
+
 
 
   static
@@ -175,6 +178,7 @@
       )
       throws ConfigException, InitializationException
   {
+    registeredConfiguration = configuration;
     configuration.addFIFOChangeListener (this);
     configEntryDN = configuration.dn();
 
@@ -186,11 +190,24 @@
 
     // Read configuration and apply changes.
     boolean applyChanges = true;
+    ArrayList<Message> errorMessages = new ArrayList<Message>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
-          EntryCacheCommon.ConfigPhase.PHASE_INIT, null, null
+          EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages
           );
-    processEntryCacheConfig (configuration, applyChanges, errorHandler);
+    if (!processEntryCacheConfig(configuration, applyChanges, errorHandler)) {
+      MessageBuilder buffer = new MessageBuilder();
+      if (!errorMessages.isEmpty()) {
+        Iterator<Message> iterator = errorMessages.iterator();
+        buffer.append(iterator.next());
+        while (iterator.hasNext()) {
+          buffer.append(".  ");
+          buffer.append(iterator.next());
+        }
+      }
+      Message message = ERR_FIFOCACHE_CANNOT_INITIALIZE.get(buffer.toString());
+      throw new ConfigException(message);
+    }
   }
 
 
@@ -200,9 +217,11 @@
    */
   public void finalizeEntryCache()
   {
-    // Release all memory currently in use by this cache.
     cacheLock.lock();
 
+    registeredConfiguration.removeFIFOChangeListener (this);
+
+    // Release all memory currently in use by this cache.
     try
     {
       idMap.clear();
@@ -911,10 +930,13 @@
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
           );
-    processEntryCacheConfig (configuration, applyChanges, errorHandler);
 
+    // Do not apply changes unless this cache is enabled.
+    if (configuration.isEnabled()) {
+      processEntryCacheConfig (configuration, applyChanges, errorHandler);
+    }
 
-    boolean adminActionRequired = false;
+    boolean adminActionRequired = errorHandler.getIsAdminActionRequired();
     ConfigChangeResult changeResult = new ConfigChangeResult(
         errorHandler.getResultCode(),
         adminActionRequired,
@@ -1007,8 +1029,8 @@
    * @param applyChanges   If true then take into account the new configuration.
    * @param errorHandler   An handler used to report errors.
    *
-   * @return  The mapping between strings of character set values and the
-   *          minimum number of characters required from those sets.
+   * @return  <CODE>true</CODE> if configuration is acceptable,
+   *          or <CODE>false</CODE> otherwise.
    */
   public boolean processEntryCacheConfig(
       FIFOEntryCacheCfg                   configuration,
@@ -1083,6 +1105,8 @@
       setLockTimeout(newLockTimeout);
       setIncludeFilters(newIncludeFilters);
       setExcludeFilters(newExcludeFilters);
+
+      registeredConfiguration = configuration;
     }
 
     return errorHandler.getIsAcceptable();

--
Gitblit v1.10.0