From f2561a0fdfda71b0834e10ea2fca05fa40ba62ee Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Mon, 16 Jul 2007 13:24:35 +0000
Subject: [PATCH] - [Issue 1591] consolidate common exclude/include EntryCache functionality:   this fix consolidates exclude and include filter sets functionality under the   single filtersAllowCaching() method, common to all cache implementations.

---
 opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java    |   98 -----------
 opends/src/server/org/opends/server/extensions/FIFOEntryCache.java          |  133 ---------------
 opends/src/server/org/opends/server/api/EntryCache.java                     |   94 +++++++++++
 opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java |  132 ---------------
 4 files changed, 112 insertions(+), 345 deletions(-)

diff --git a/opends/src/server/org/opends/server/api/EntryCache.java b/opends/src/server/org/opends/server/api/EntryCache.java
index 113016d..cddfc66 100644
--- a/opends/src/server/org/opends/server/api/EntryCache.java
+++ b/opends/src/server/org/opends/server/api/EntryCache.java
@@ -29,6 +29,7 @@
 
 
 import java.util.List;
+import java.util.HashSet;
 import java.util.concurrent.locks.Lock;
 
 import org.opends.server.core.DirectoryServer;
@@ -38,6 +39,7 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LockType;
 import org.opends.server.types.LockManager;
+import org.opends.server.types.SearchFilter;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.admin.std.server.EntryCacheCfg;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -104,6 +106,22 @@
 
 
   /**
+   * The set of filters that define the entries that should
+   * be excluded from the cache.
+   */
+  protected HashSet<SearchFilter> excludeFilters;
+
+
+
+  /**
+   * The set of filters that define the entries that should
+   * be included in the cache.
+   */
+  protected HashSet<SearchFilter> includeFilters;
+
+
+
+  /**
    * Initializes this entry cache implementation so that it will be
    * available for storing and retrieving entries.
    *
@@ -511,6 +529,82 @@
 
 
   /**
+   * Indicates whether the current set of exclude and include filters
+   * allow caching of the specified entry.
+   * @param  entry  The entry to evaluate against exclude and include
+   *                filter sets.
+   * @return <CODE>true</CODE> if current set of filters allow caching
+   * the entry and <CODE>false</CODE> otherwise.
+   */
+  protected boolean filtersAllowCaching(Entry entry)
+  {
+    // If there is a set of exclude filters, then make sure that the
+    // provided entry doesn't match any of them.
+    if (! excludeFilters.isEmpty())
+    {
+      for (SearchFilter f : excludeFilters)
+      {
+        try
+        {
+          if (f.matchesEntry(entry))
+          {
+            return false;
+          }
+        }
+        catch (Exception e)
+        {
+          if (debugEnabled())
+          {
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+          }
+
+          // This shouldn't happen, but if it does then we can't be
+          // sure whether the entry should be excluded, so we will
+          // by default.
+          return false;
+        }
+      }
+    }
+
+    // If there is a set of include filters, then make sure that the
+    // provided entry matches at least one of them.
+    if (! includeFilters.isEmpty())
+    {
+      boolean matchFound = false;
+      for (SearchFilter f : includeFilters)
+      {
+        try
+        {
+          if (f.matchesEntry(entry))
+          {
+            matchFound = true;
+            break;
+          }
+        }
+        catch (Exception e)
+        {
+          if (debugEnabled())
+          {
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+          }
+
+          // This shouldn't happen, but if it does, then
+          // just ignore it.
+        }
+      }
+
+      if (! matchFound)
+      {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+
+
+  /**
    * {@inheritDoc}
    */
   public void performBackendInitializationProcessing(Backend backend)
diff --git a/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java b/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
index d5cb968..9a170d3 100644
--- a/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
+++ b/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
@@ -100,7 +100,6 @@
 
 
 
-
   /**
    * The set of time units that will be used for expressing the task retention
    * time.
@@ -124,14 +123,6 @@
   // The mapping between entry backends/IDs and entries.
   private HashMap<Backend,HashMap<Long,CacheEntry>> idMap;
 
-  // The set of filters that define the entries that should be excluded from the
-  // cache.
-  private HashSet<SearchFilter> excludeFilters;
-
-  // The set of filters that define the entries that should be included in the
-  // cache.
-  private HashSet<SearchFilter> includeFilters;
-
   // The maximum percentage of JVM memory that should be used by the cache.
   private int maxMemoryPercent;
 
@@ -303,67 +294,11 @@
    */
   public void putEntry(Entry entry, Backend backend, long entryID)
   {
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty())
-    {
-      for (SearchFilter f : excludeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            return;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return;
-        }
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return;
     }
 
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty())
-    {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            matchFound = true;
-            break;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound)
-      {
-        return;
-      }
-    }
-
-
     // Create the cache entry based on the provided information.
     CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID);
 
@@ -475,67 +410,11 @@
    */
   public boolean putEntryIfAbsent(Entry entry, Backend backend, long entryID)
   {
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty())
-    {
-      for (SearchFilter f : excludeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            return true;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return false;
-        }
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return true;
     }
 
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty())
-    {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            matchFound = true;
-            break;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound)
-      {
-        return true;
-      }
-    }
-
-
     // Create the cache entry based on the provided information.
     CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID);
 
diff --git a/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java b/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
index bddb334..1ca983c 100644
--- a/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
+++ b/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
@@ -124,14 +124,6 @@
   // The DN of the configuration entry for this entry cache.
   private DN configEntryDN;
 
-  // The set of filters that define the entries that should be excluded from the
-  // cache.
-  private Set<SearchFilter> excludeFilters;
-
-  // The set of filters that define the entries that should be included in the
-  // cache.
-  private Set<SearchFilter> includeFilters;
-
   // The maximum amount of space in bytes that can be consumed in the filesystem
   // before we need to start purging entries.
   private long maxAllowedMemory;
@@ -748,48 +740,9 @@
    */
   public void putEntry(Entry entry, Backend backend, long entryID) {
 
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty()) {
-      for (SearchFilter f : excludeFilters) {
-        try {
-          if (f.matchesEntry(entry)) {
-            return;
-          }
-        } catch (Exception e) {
-          if (debugEnabled()) {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return;
-        }
-      }
-    }
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty()) {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters) {
-        try {
-          if (f.matchesEntry(entry)) {
-            matchFound = true;
-            break;
-          }
-        } catch (Exception e) {
-          if (debugEnabled()) {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound) {
-        return;
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return;
     }
 
     // Obtain a lock on the cache.  If this fails, then don't do anything.
@@ -813,48 +766,9 @@
    */
   public boolean putEntryIfAbsent(Entry entry, Backend backend, long entryID)
   {
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty()) {
-      for (SearchFilter f : excludeFilters) {
-        try {
-          if (f.matchesEntry(entry)) {
-            return true;
-          }
-        } catch (Exception e) {
-          if (debugEnabled()) {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return false;
-        }
-      }
-    }
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty()) {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters) {
-        try {
-          if (f.matchesEntry(entry)) {
-            matchFound = true;
-            break;
-          }
-        } catch (Exception e) {
-          if (debugEnabled()) {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound) {
-        return true;
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return true;
     }
 
     try {
diff --git a/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java b/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
index 101f382..1ec80a3 100644
--- a/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
+++ b/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
@@ -95,14 +95,6 @@
   // The DN of the configuration entry for this entry cache implementation.
   private DN configEntryDN;
 
-  // The set of filters that define the entries that should be excluded from the
-  // cache.
-  private HashSet<SearchFilter> excludeFilters;
-
-  // The set of filters that define the entries that should be included in the
-  // cache.
-  private HashSet<SearchFilter> includeFilters;
-
   // The reference queue that will be used to notify us whenever a soft
   // reference is freed.
   private ReferenceQueue<CacheEntry> referenceQueue;
@@ -269,67 +261,11 @@
    */
   public void putEntry(Entry entry, Backend backend, long entryID)
   {
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty())
-    {
-      for (SearchFilter f : excludeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            return;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return;
-        }
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return;
     }
 
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty())
-    {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            matchFound = true;
-            break;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound)
-      {
-        return;
-      }
-    }
-
-
     // Create the cache entry based on the provided information.
     CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID);
     SoftReference<CacheEntry> ref =
@@ -365,67 +301,11 @@
   public boolean putEntryIfAbsent(Entry entry, Backend backend,
                                   long entryID)
   {
-    // If there is a set of exclude filters, then make sure that the provided
-    // entry doesn't match any of them.
-    if (! excludeFilters.isEmpty())
-    {
-      for (SearchFilter f : excludeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            return true;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does then we can't be sure whether
-          // the entry should be excluded, so we will by default.
-          return false;
-        }
-      }
+    // Check exclude and include filters first.
+    if (!filtersAllowCaching(entry)) {
+      return true;
     }
 
-
-    // If there is a set of include filters, then make sure that the provided
-    // entry matches at least one of them.
-    if (! includeFilters.isEmpty())
-    {
-      boolean matchFound = false;
-      for (SearchFilter f : includeFilters)
-      {
-        try
-        {
-          if (f.matchesEntry(entry))
-          {
-            matchFound = true;
-            break;
-          }
-        }
-        catch (Exception e)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          }
-
-          // This shouldn't happen, but if it does, then just ignore it.
-        }
-      }
-
-      if (! matchFound)
-      {
-        return true;
-      }
-    }
-
-
     // See if the entry already exists.  If so, then return false.
     if (dnMap.containsKey(entry.getDN()))
     {

--
Gitblit v1.10.0