opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/extensions/DefaultEntryCache.java
@@ -26,7 +26,7 @@ */ package org.opends.server.extensions; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.SortedMap; @@ -289,10 +289,8 @@ /** {@inheritDoc} */ @Override public ArrayList<Attribute> getMonitorData() public List<Attribute> getMonitorData() { ArrayList<Attribute> attrs = new ArrayList<Attribute>(); // The sum of cache hits of all active entry cache implementations. long entryCacheHits = 0; // Common for all active entry cache implementations. @@ -307,7 +305,7 @@ } try { attrs = EntryCacheCommon.getGenericMonitorData( return EntryCacheCommon.getGenericMonitorData( entryCacheHits, entryCacheMisses, null, @@ -317,9 +315,8 @@ ); } catch (Exception e) { logger.traceException(e); return Collections.emptyList(); } return attrs; } /** {@inheritDoc} */ opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/extensions/EntryCacheCommon.java
@@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedSet; import org.forgerock.i18n.LocalizableMessage; @@ -92,7 +93,7 @@ private List<LocalizableMessage> _unacceptableReasons; /** Error messages. Used when _configPhase is PHASE_APPLY. */ private ArrayList<LocalizableMessage> _errorMessages; private List<LocalizableMessage> _errorMessages; /** Result code. Used when _configPhase is PHASE_APPLY. */ private ResultCode _resultCode; @@ -122,7 +123,7 @@ public ConfigErrorHandler ( EntryCacheCommon.ConfigPhase configPhase, List<LocalizableMessage> unacceptableReasons, ArrayList<LocalizableMessage> errorMessages List<LocalizableMessage> errorMessages ) { _configPhase = configPhase; @@ -255,7 +256,7 @@ * * @return the list of error messages */ public ArrayList<LocalizableMessage> getErrorMessages() public List<LocalizableMessage> getErrorMessages() { return _errorMessages; } @@ -296,12 +297,12 @@ * * @return the set of search filters */ public static HashSet<SearchFilter> getFilters(SortedSet<String> filters, public static Set<SearchFilter> getFilters(SortedSet<String> filters, LocalizableMessageDescriptor.Arg3<Object, Object, Object> decodeErrorMsg, ConfigErrorHandler errorHandler, DN configEntryDN) { // Returned value HashSet<SearchFilter> searchFilters = new HashSet<SearchFilter>(); Set<SearchFilter> searchFilters = new HashSet<>(); // Convert the string filters to search filters. if ((filters != null) && (! filters.isEmpty())) @@ -344,7 +345,7 @@ public static ConfigErrorHandler getConfigErrorHandler ( EntryCacheCommon.ConfigPhase configPhase, List<LocalizableMessage> unacceptableReasons, ArrayList<LocalizableMessage> errorMessages List<LocalizableMessage> errorMessages ) { EntryCacheCommon ec = new EntryCacheCommon(); @@ -369,7 +370,7 @@ * * @return A set of generic attributes containing monitor data. */ public static ArrayList<Attribute> getGenericMonitorData( public static List<Attribute> getGenericMonitorData( Long cacheHits, Long cacheMisses, Long cacheSize, @@ -377,7 +378,7 @@ Long cacheCount, Long maxCacheCount) { ArrayList<Attribute> attrs = new ArrayList<Attribute>(); List<Attribute> attrs = new ArrayList<>(); if (cacheHits != null) { opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/extensions/FIFOEntryCache.java
@@ -31,6 +31,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.forgerock.i18n.LocalizableMessage; @@ -90,7 +91,7 @@ private static final Runtime runtime = Runtime.getRuntime(); /** The mapping between entry backends/IDs and entries. */ private HashMap<Backend<?>, HashMap<Long, CacheEntry>> idMap; private Map<Backend<?>, Map<Long, CacheEntry>> idMap; /** The mapping between DNs and entries. */ private LinkedHashMap<DN,CacheEntry> dnMap; @@ -99,7 +100,7 @@ * The lock used to provide threadsafe access when changing the contents of * the cache. */ private ReentrantReadWriteLock cacheLock; private ReadWriteLock cacheLock; private Lock cacheWriteLock; private Lock cacheReadLock; @@ -134,8 +135,8 @@ configuration.addFIFOChangeListener (this); // Initialize the cache structures. idMap = new HashMap<Backend<?>, HashMap<Long, CacheEntry>>(); dnMap = new LinkedHashMap<DN,CacheEntry>(); idMap = new HashMap<>(); dnMap = new LinkedHashMap<>(); // Initialize locks. cacheLock = new ReentrantReadWriteLock(true); @@ -144,7 +145,7 @@ // Read configuration and apply changes. boolean applyChanges = true; ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>(); List<LocalizableMessage> errorMessages = new ArrayList<>(); EntryCacheCommon.ConfigErrorHandler errorHandler = EntryCacheCommon.getConfigErrorHandler ( EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages @@ -206,11 +207,10 @@ // Indicate cache miss. cacheMisses.getAndIncrement(); return null; } else { // Indicate cache hit. cacheHits.getAndIncrement(); return e.getEntry(); } // Indicate cache hit. cacheHits.getAndIncrement(); return e.getEntry(); } finally { cacheReadLock.unlock(); } @@ -237,7 +237,7 @@ // Locate specific backend map and return the entry DN by ID. cacheReadLock.lock(); try { HashMap<Long, CacheEntry> backendMap = idMap.get(backend); Map<Long, CacheEntry> backendMap = idMap.get(backend); if (backendMap != null) { CacheEntry e = backendMap.get(entryID); if (e != null) { @@ -295,7 +295,7 @@ CacheEntry ce = iterator.next(); iterator.remove(); HashMap<Long,CacheEntry> m = idMap.get(ce.getBackend()); Map<Long,CacheEntry> m = idMap.get(ce.getBackend()); if (m != null) { m.remove(ce.getEntryID()); @@ -324,10 +324,10 @@ // present and add it if it isn't. dnMap.put(entry.getName(), cacheEntry); HashMap<Long,CacheEntry> map = idMap.get(backend); Map<Long,CacheEntry> map = idMap.get(backend); if (map == null) { map = new HashMap<Long,CacheEntry>(); map = new HashMap<>(); map.put(entryID, cacheEntry); idMap.put(backend, map); } @@ -349,7 +349,7 @@ CacheEntry ce = iterator.next(); iterator.remove(); HashMap<Long,CacheEntry> m = idMap.get(ce.getBackend()); Map<Long,CacheEntry> m = idMap.get(ce.getBackend()); if (m != null) { m.remove(ce.getEntryID()); @@ -420,7 +420,7 @@ CacheEntry ce = iterator.next(); iterator.remove(); HashMap<Long,CacheEntry> m = idMap.get(ce.getBackend()); Map<Long,CacheEntry> m = idMap.get(ce.getBackend()); if (m != null) { m.remove(ce.getEntryID()); @@ -433,10 +433,10 @@ // present and add it if it isn't. dnMap.put(entry.getName(), cacheEntry); HashMap<Long,CacheEntry> map = idMap.get(backend); Map<Long,CacheEntry> map = idMap.get(backend); if (map == null) { map = new HashMap<Long,CacheEntry>(); map = new HashMap<>(); map.put(entryID, cacheEntry); idMap.put(backend, map); } @@ -458,7 +458,7 @@ CacheEntry ce = iterator.next(); iterator.remove(); HashMap<Long,CacheEntry> m = idMap.get(ce.getBackend()); Map<Long,CacheEntry> m = idMap.get(ce.getBackend()); if (m != null) { m.remove(ce.getEntryID()); @@ -587,7 +587,7 @@ try { // Remove all references to entries for this backend from the ID cache. HashMap<Long,CacheEntry> map = idMap.remove(backend); Map<Long,CacheEntry> map = idMap.remove(backend); if (map == null) { // No entries were in the cache for this backend, so we can return @@ -677,7 +677,7 @@ { // See if there are any entries for the provided backend in the cache. If // not, then return. HashMap<Long,CacheEntry> map = idMap.get(backend); Map<Long,CacheEntry> map = idMap.get(backend); if (map == null) { // No entries were in the cache for this backend, so we can return without @@ -764,7 +764,7 @@ CacheEntry entry = iterator.next(); iterator.remove(); HashMap<Long,CacheEntry> m = idMap.get(entry.getBackend()); Map<Long,CacheEntry> m = idMap.get(entry.getBackend()); if (m != null) { m.remove(entry.getEntryID()); @@ -819,7 +819,7 @@ public ConfigChangeResult applyConfigurationChange( FIFOEntryCacheCfg configuration ) { boolean applyChanges = true; ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>(); List<LocalizableMessage> errorMessages = new ArrayList<>(); EntryCacheCommon.ConfigErrorHandler errorHandler = EntryCacheCommon.getConfigErrorHandler ( EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages @@ -856,8 +856,8 @@ ) { // Local variables to read configuration. HashSet<SearchFilter> newIncludeFilters = null; HashSet<SearchFilter> newExcludeFilters = null; Set<SearchFilter> newIncludeFilters = null; Set<SearchFilter> newExcludeFilters = null; // Read configuration. DN newConfigEntryDN = configuration.dn(); @@ -905,12 +905,10 @@ /** {@inheritDoc} */ @Override public ArrayList<Attribute> getMonitorData() public List<Attribute> getMonitorData() { ArrayList<Attribute> attrs = new ArrayList<Attribute>(); try { attrs = EntryCacheCommon.getGenericMonitorData( return EntryCacheCommon.getGenericMonitorData( Long.valueOf(cacheHits.longValue()), // If cache misses is maintained by default cache // get it from there and if not point to itself. @@ -923,9 +921,8 @@ ); } catch (Exception e) { logger.traceException(e); return Collections.emptyList(); } return attrs; } /** {@inheritDoc} */ @@ -942,7 +939,7 @@ StringBuilder sb = new StringBuilder(); Map<DN,CacheEntry> dnMapCopy; Map<Backend<?>, HashMap<Long, CacheEntry>> idMapCopy; Map<Backend<?>, Map<Long, CacheEntry>> idMapCopy; // Grab cache lock to prevent any modifications // to the cache maps until a snapshot is taken. @@ -951,8 +948,8 @@ // Examining the real maps will hold the lock and can cause map // modifications in case of any access order maps, make copies // instead. dnMapCopy = new LinkedHashMap<DN,CacheEntry>(dnMap); idMapCopy = new HashMap<Backend<?>, HashMap<Long, CacheEntry>>(idMap); dnMapCopy = new LinkedHashMap<>(dnMap); idMapCopy = new HashMap<>(idMap); } finally { cacheWriteLock.unlock(); } opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/extensions/SoftReferenceEntryCache.java
@@ -28,12 +28,16 @@ import static org.opends.messages.ExtensionMessages.*; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; @@ -69,11 +73,10 @@ private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); /** The mapping between entry DNs and their corresponding entries. */ private ConcurrentHashMap<DN,SoftReference<CacheEntry>> dnMap; private ConcurrentMap<DN, Reference<CacheEntry>> dnMap; /** The mapping between backend+ID and their corresponding entries. */ private ConcurrentHashMap<Backend, ConcurrentHashMap<Long,SoftReference<CacheEntry>>> idMap; private ConcurrentMap<Backend, ConcurrentMap<Long, Reference<CacheEntry>>> idMap; /** * The reference queue that will be used to notify us whenever a soft @@ -98,13 +101,12 @@ { super(); dnMap = new ConcurrentHashMap<DN,SoftReference<CacheEntry>>(); idMap = new ConcurrentHashMap<Backend, ConcurrentHashMap<Long,SoftReference<CacheEntry>>>(); dnMap = new ConcurrentHashMap<>(); idMap = new ConcurrentHashMap<>(); setExcludeFilters(new HashSet<SearchFilter>()); setIncludeFilters(new HashSet<SearchFilter>()); referenceQueue = new ReferenceQueue<CacheEntry>(); referenceQueue = new ReferenceQueue<>(); } /** {@inheritDoc} */ @@ -127,7 +129,7 @@ // Read configuration and apply changes. boolean applyChanges = true; ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>(); List<LocalizableMessage> errorMessages = new ArrayList<>(); EntryCacheCommon.ConfigErrorHandler errorHandler = EntryCacheCommon.getConfigErrorHandler ( EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages @@ -172,36 +174,30 @@ @Override public Entry getEntry(DN entryDN) { SoftReference<CacheEntry> ref = dnMap.get(entryDN); Reference<CacheEntry> ref = dnMap.get(entryDN); if (ref == null) { // Indicate cache miss. cacheMisses.getAndIncrement(); return null; } else CacheEntry cacheEntry = ref.get(); if (cacheEntry == null) { CacheEntry cacheEntry = ref.get(); if (cacheEntry == null) { // Indicate cache miss. cacheMisses.getAndIncrement(); return null; } else { // Indicate cache hit. cacheHits.getAndIncrement(); return cacheEntry.getEntry(); } // Indicate cache miss. cacheMisses.getAndIncrement(); return null; } // Indicate cache hit. cacheHits.getAndIncrement(); return cacheEntry.getEntry(); } /** {@inheritDoc} */ @Override public long getEntryID(DN entryDN) { SoftReference<CacheEntry> ref = dnMap.get(entryDN); Reference<CacheEntry> ref = dnMap.get(entryDN); if (ref != null) { CacheEntry cacheEntry = ref.get(); @@ -215,10 +211,9 @@ public DN getEntryDN(Backend backend, long entryID) { // Locate specific backend map and return the entry DN by ID. ConcurrentHashMap<Long,SoftReference<CacheEntry>> backendMap = idMap.get(backend); ConcurrentMap<Long, Reference<CacheEntry>> backendMap = idMap.get(backend); if (backendMap != null) { SoftReference<CacheEntry> ref = backendMap.get(entryID); Reference<CacheEntry> ref = backendMap.get(entryID); if (ref != null) { CacheEntry cacheEntry = ref.get(); if (cacheEntry != null) { @@ -235,19 +230,18 @@ { // Create the cache entry based on the provided information. CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID); SoftReference<CacheEntry> ref = new SoftReference<CacheEntry>(cacheEntry, referenceQueue); Reference<CacheEntry> ref = new SoftReference<>(cacheEntry, referenceQueue); SoftReference<CacheEntry> oldRef = dnMap.put(entry.getName(), ref); Reference<CacheEntry> oldRef = dnMap.put(entry.getName(), ref); if (oldRef != null) { oldRef.clear(); } ConcurrentHashMap<Long,SoftReference<CacheEntry>> map = idMap.get(backend); ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backend); if (map == null) { map = new ConcurrentHashMap<Long,SoftReference<CacheEntry>>(); map = new ConcurrentHashMap<>(); map.put(entryID, ref); idMap.put(backend, map); } @@ -275,15 +269,14 @@ // Create the cache entry based on the provided information. CacheEntry cacheEntry = new CacheEntry(entry, backend, entryID); SoftReference<CacheEntry> ref = new SoftReference<CacheEntry>(cacheEntry, referenceQueue); Reference<CacheEntry> ref = new SoftReference<>(cacheEntry, referenceQueue); dnMap.put(entry.getName(), ref); ConcurrentHashMap<Long,SoftReference<CacheEntry>> map = idMap.get(backend); ConcurrentMap<Long,Reference<CacheEntry>> map = idMap.get(backend); if (map == null) { map = new ConcurrentHashMap<Long,SoftReference<CacheEntry>>(); map = new ConcurrentHashMap<>(); map.put(entryID, ref); idMap.put(backend, map); } @@ -299,7 +292,7 @@ @Override public void removeEntry(DN entryDN) { SoftReference<CacheEntry> ref = dnMap.remove(entryDN); Reference<CacheEntry> ref = dnMap.remove(entryDN); if (ref != null) { ref.clear(); @@ -309,8 +302,7 @@ { Backend<?> backend = cacheEntry.getBackend(); ConcurrentHashMap<Long,SoftReference<CacheEntry>> map = idMap.get(backend); ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backend); if (map != null) { ref = map.remove(cacheEntry.getEntryID()); @@ -342,11 +334,10 @@ public void clearBackend(Backend backend) { // FIXME -- Would it be better just to dump everything? ConcurrentHashMap<Long,SoftReference<CacheEntry>> map = idMap.remove(backend); ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.remove(backend); if (map != null) { for (SoftReference<CacheEntry> ref : map.values()) for (Reference<CacheEntry> ref : map.values()) { CacheEntry cacheEntry = ref.get(); if (cacheEntry != null) @@ -419,7 +410,7 @@ public ConfigChangeResult applyConfigurationChange(SoftReferenceEntryCacheCfg configuration) { boolean applyChanges = true; ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>(); List<LocalizableMessage> errorMessages = new ArrayList<>(); EntryCacheCommon.ConfigErrorHandler errorHandler = EntryCacheCommon.getConfigErrorHandler ( EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages @@ -455,9 +446,9 @@ ) { // Local variables to read configuration. DN newConfigEntryDN; HashSet<SearchFilter> newIncludeFilters = null; HashSet<SearchFilter> newExcludeFilters = null; DN newConfigEntryDN; Set<SearchFilter> newIncludeFilters = null; Set<SearchFilter> newExcludeFilters = null; // Read configuration. newConfigEntryDN = configuration.dn(); @@ -509,7 +500,7 @@ if (freedEntry != null) { SoftReference<CacheEntry> ref = dnMap.remove(freedEntry.getDN()); Reference<CacheEntry> ref = dnMap.remove(freedEntry.getDN()); if (ref != null) { @@ -525,8 +516,7 @@ ref.clear(); Backend<?> backend = freedEntry.getBackend(); ConcurrentHashMap<Long,SoftReference<CacheEntry>> map = idMap.get(backend); ConcurrentMap<Long, Reference<CacheEntry>> map = idMap.get(backend); if (map != null) { ref = map.remove(freedEntry.getEntryID()); @@ -553,12 +543,10 @@ /** {@inheritDoc} */ @Override public ArrayList<Attribute> getMonitorData() public List<Attribute> getMonitorData() { ArrayList<Attribute> attrs = new ArrayList<Attribute>(); try { attrs = EntryCacheCommon.getGenericMonitorData( return EntryCacheCommon.getGenericMonitorData( Long.valueOf(cacheHits.longValue()), // If cache misses is maintained by default cache // get it from there and if not point to itself. @@ -570,9 +558,8 @@ ); } catch (Exception e) { logger.traceException(e); return Collections.emptyList(); } return attrs; } /** {@inheritDoc} */ @@ -592,7 +579,7 @@ // Examine dnMap only since its more likely to be up to date than idMap. // Do not bother with copies either since this // is SoftReference based implementation. for(SoftReference<CacheEntry> ce : dnMap.values()) { for(Reference<CacheEntry> ce : dnMap.values()) { sb.append(ce.get().getDN()); sb.append(":"); sb.append(ce.get().getEntryID());