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