From a79aa3ddbd25b8c7c0abc6c8d5a00c7ed27dd81d Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Sun, 02 Dec 2007 17:54:15 +0000
Subject: [PATCH] - [Issue 2007] generic mechanism for using mulitple caches. - [Issue 2049] dsconfig is unable to configure the entry cache.
---
opends/src/server/org/opends/server/api/EntryCache.java | 85 ++++++++++++++++++++++++++++++++++++------
1 files changed, 73 insertions(+), 12 deletions(-)
diff --git a/opends/src/server/org/opends/server/api/EntryCache.java b/opends/src/server/org/opends/server/api/EntryCache.java
index 75dae36..aa60026 100644
--- a/opends/src/server/org/opends/server/api/EntryCache.java
+++ b/opends/src/server/org/opends/server/api/EntryCache.java
@@ -30,10 +30,10 @@
import java.util.List;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.locks.Lock;
-import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicLong;
import org.opends.server.core.DirectoryServer;
@@ -45,9 +45,10 @@
import org.opends.server.types.LockManager;
import org.opends.server.types.SearchFilter;
import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.Attribute;
import org.opends.server.admin.std.server.EntryCacheCfg;
import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.monitors.EntryCacheMonitorProvider;
+import org.opends.server.types.Attribute;
import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -70,8 +71,8 @@
* mechanism to determine which entries to store, and entries
* not matching the appropriate criteria may not be stored.</LI>
* <LI>The entry cache may not actually store any entries (this is
- * the behavior of the default cache that will be used if none
- * is configured).</LI>
+ * the behavior of the default cache if no implementation
+ * specific entry cache is available).</LI>
* </UL>
*
* @param <T> The type of configuration handled by this entry
@@ -92,14 +93,12 @@
*/
private static final DebugTracer TRACER = getTracer();
-
-
- // The set of filters that define the entries that should be
+ // The set of filters that define the entries that should be
// excluded from the cache.
private Set<SearchFilter> excludeFilters =
new HashSet<SearchFilter>(0);
- // The set of filters that define the entries that should be
+ // The set of filters that define the entries that should be
// included in the cache.
private Set<SearchFilter> includeFilters =
new HashSet<SearchFilter>(0);
@@ -118,6 +117,8 @@
*/
protected AtomicLong cacheMisses = new AtomicLong(0);
+ // The monitor associated with this entry cache.
+ private EntryCacheMonitorProvider entryCacheMonitor = null;
/**
@@ -253,7 +254,7 @@
if (!containsEntry(entryDN)) {
// Indicate cache miss.
- cacheMisses.set(cacheMisses.incrementAndGet());
+ cacheMisses.getAndIncrement();
return null;
}
@@ -408,7 +409,7 @@
DN entryDN = getEntryDN(backend, entryID);
if (entryDN == null) {
// Indicate cache miss.
- cacheMisses.set(cacheMisses.incrementAndGet());
+ cacheMisses.getAndIncrement();
return null;
}
@@ -450,7 +451,7 @@
* @return The entry DN for the requested entry, or
* {@code null} if it is not present in the cache.
*/
- protected abstract DN getEntryDN(Backend backend, long entryID);
+ public abstract DN getEntryDN(Backend backend, long entryID);
@@ -545,6 +546,33 @@
/**
+ * Retrieves the monitor that is associated with this entry
+ * cache.
+ *
+ * @return The monitor that is associated with this entry
+ * cache, or {@code null} if none has been assigned.
+ */
+ public final EntryCacheMonitorProvider getEntryCacheMonitor()
+ {
+ return entryCacheMonitor;
+ }
+
+
+
+ /**
+ * Sets the monitor for this entry cache.
+ *
+ * @param entryCacheMonitor The monitor for this entry cache.
+ */
+ public final void setEntryCacheMonitor(
+ EntryCacheMonitorProvider entryCacheMonitor)
+ {
+ this.entryCacheMonitor = entryCacheMonitor;
+ }
+
+
+
+ /**
* Retrieves a set of attributes containing monitor data that should
* be returned to the client if the corresponding monitor entry is
* requested.
@@ -558,6 +586,39 @@
/**
+ * Retrieves the curent number of entries stored within the cache.
+ *
+ * @return The current number of entries stored within the cache.
+ */
+ public abstract Long getCacheCount();
+
+
+
+ /**
+ * Retrieves the curent number of cache hits for this cache.
+ *
+ * @return The current number of cache hits for this cache.
+ */
+ public Long getCacheHits()
+ {
+ return new Long(cacheHits.longValue());
+ }
+
+
+
+ /**
+ * Retrieves the curent number of cache misses for this cache.
+ *
+ * @return The current number of cache misses for this cache.
+ */
+ public Long getCacheMisses()
+ {
+ return new Long(cacheMisses.longValue());
+ }
+
+
+
+ /**
* Retrieves the maximum length of time in milliseconds to wait for
* a lock before giving up.
*
@@ -667,7 +728,7 @@
* @return {@code true} if current set of filters allow caching the
* entry and {@code false} otherwise.
*/
- protected boolean filtersAllowCaching(Entry entry)
+ public 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.
--
Gitblit v1.10.0