From ac27a41b85595ecd2444a64d822ab37aa8722fed Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Thu, 21 May 2015 09:34:32 +0000
Subject: [PATCH] Use backendID for entry cache rather than backend instance.  RootContainer is now directly constructed with the Storage rather than getting it from the Backend.

---
 opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java |   45 ++++++++++++++++++++++-----------------------
 1 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java b/opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java
index 1303a94..9df143e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java
@@ -76,7 +76,7 @@
   private ConcurrentMap<DN, Reference<CacheEntry>> dnMap;
 
   /** The mapping between backend+ID and their corresponding entries. */
-  private ConcurrentMap<Backend, ConcurrentMap<Long, Reference<CacheEntry>>> idMap;
+  private ConcurrentMap<String, ConcurrentMap<Long, Reference<CacheEntry>>> idMap;
 
   /**
    * The reference queue that will be used to notify us whenever a soft
@@ -208,10 +208,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public DN getEntryDN(Backend backend, long entryID)
+  public DN getEntryDN(String backendID, long entryID)
   {
     // Locate specific backend map and return the entry DN by ID.
-    ConcurrentMap<Long, Reference<CacheEntry>> backendMap = idMap.get(backend);
+    ConcurrentMap<Long, Reference<CacheEntry>> backendMap = idMap.get(backendID);
     if (backendMap != null) {
       Reference<CacheEntry> ref = backendMap.get(entryID);
       if (ref != null) {
@@ -226,10 +226,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public void putEntry(Entry entry, Backend backend, long entryID)
+  public void putEntry(Entry entry, String backendID, long entryID)
   {
     // Create the cache entry based on the provided information.
-    CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID);
+    CacheEntry cacheEntry = new CacheEntry(entry, backendID, entryID);
     Reference<CacheEntry> ref = new SoftReference<>(cacheEntry, referenceQueue);
 
     Reference<CacheEntry> oldRef = dnMap.put(entry.getName(), ref);
@@ -238,12 +238,12 @@
       oldRef.clear();
     }
 
-    ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backend);
+    ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backendID);
     if (map == null)
     {
       map = new ConcurrentHashMap<>();
       map.put(entryID, ref);
-      idMap.put(backend, map);
+      idMap.put(backendID, map);
     }
     else
     {
@@ -257,8 +257,7 @@
 
   /** {@inheritDoc} */
   @Override
-  public boolean putEntryIfAbsent(Entry entry, Backend backend,
-                                  long entryID)
+  public boolean putEntryIfAbsent(Entry entry, String backendID, long entryID)
   {
     // See if the entry already exists.  If so, then return false.
     if (dnMap.containsKey(entry.getName()))
@@ -268,17 +267,17 @@
 
 
     // Create the cache entry based on the provided information.
-    CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID);
+    CacheEntry cacheEntry = new CacheEntry(entry, backendID, entryID);
     Reference<CacheEntry> ref = new SoftReference<>(cacheEntry, referenceQueue);
 
     dnMap.put(entry.getName(), ref);
 
-    ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backend);
+    ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backendID);
     if (map == null)
     {
       map = new ConcurrentHashMap<>();
       map.put(entryID, ref);
-      idMap.put(backend, map);
+      idMap.put(backendID, map);
     }
     else
     {
@@ -300,9 +299,9 @@
       CacheEntry cacheEntry = ref.get();
       if (cacheEntry != null)
       {
-        Backend<?> backend = cacheEntry.getBackend();
+        final String backendID = cacheEntry.getBackendID();
 
-        ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backend);
+        ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backendID);
         if (map != null)
         {
           ref = map.remove(cacheEntry.getEntryID());
@@ -314,7 +313,7 @@
           // it from the idMap map.
           if (map.isEmpty())
           {
-            idMap.remove(backend);
+            idMap.remove(backendID);
           }
         }
       }
@@ -331,15 +330,15 @@
 
   /** {@inheritDoc} */
   @Override
-  public void clearBackend(Backend backend)
+  public void clearBackend(String backendID)
   {
     // FIXME -- Would it be better just to dump everything?
-    ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.remove(backend);
+    final ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.remove(backendID);
     if (map != null)
     {
       for (Reference<CacheEntry> ref : map.values())
       {
-        CacheEntry cacheEntry = ref.get();
+        final CacheEntry cacheEntry = ref.get();
         if (cacheEntry != null)
         {
           dnMap.remove(cacheEntry.getDN());
@@ -364,7 +363,7 @@
     }
     else
     {
-      clearBackend(backend);
+      clearBackend(backend.getBackendID());
     }
   }
 
@@ -515,8 +514,8 @@
             {
               ref.clear();
 
-              Backend<?> backend = freedEntry.getBackend();
-              ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backend);
+              final String backendID = freedEntry.getBackendID();
+              final ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backendID);
               if (map != null)
               {
                 ref = map.remove(freedEntry.getEntryID());
@@ -527,7 +526,7 @@
                 // If this backend becomes empty now remove
                 // it from the idMap map.
                 if (map.isEmpty()) {
-                  idMap.remove(backend);
+                  idMap.remove(backendID);
                 }
               }
             }
@@ -584,7 +583,7 @@
       sb.append(":");
       sb.append(ce.get().getEntryID());
       sb.append(":");
-      sb.append(ce.get().getBackend().getBackendID());
+      sb.append(ce.get().getBackendID());
       sb.append(ServerConstants.EOL);
     }
 

--
Gitblit v1.10.0