You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2010/05/30 06:53:01 UTC
svn commit: r949476 - in /lucene/solr/branches/branch-1.4: ./ CHANGES.txt
src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
src/java/org/apache/solr/search/FastLRUCache.java
Author: hossman
Date: Sun May 30 04:53:00 2010
New Revision: 949476
URL: http://svn.apache.org/viewvc?rev=949476&view=rev
Log:
merging r919871 from solr/branches/branch-1.5-dev for SOLR-1798
Modified:
lucene/solr/branches/branch-1.4/ (props changed)
lucene/solr/branches/branch-1.4/CHANGES.txt
lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
lucene/solr/branches/branch-1.4/src/java/org/apache/solr/search/FastLRUCache.java
Propchange: lucene/solr/branches/branch-1.4/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun May 30 04:53:00 2010
@@ -1 +1 @@
-/lucene/solr/trunk:881642,881906,883566,891596,891889,903271,911245,925898
+/lucene/solr/trunk:881642,881906,883566,891596,891889,903271,911245,919871,925898
Modified: lucene/solr/branches/branch-1.4/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/CHANGES.txt?rev=949476&r1=949475&r2=949476&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/CHANGES.txt (original)
+++ lucene/solr/branches/branch-1.4/CHANGES.txt Sun May 30 04:53:00 2010
@@ -74,6 +74,9 @@ Bug Fixes
* SOLR-1797: fix ConcurrentModificationException and potential memory
leaks in ResourceLoader. (yonik)
+* SOLR-1798: Small memory leak (~100 bytes) in fastLRUCache for every
+ commit. (yonik)
+
================== Release 1.4.0 ==================
Release Date: See http://lucene.apache.org/solr for the official release date.
Modified: lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java?rev=949476&r1=949475&r2=949476&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java (original)
+++ lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/ConcurrentLRUCache.java Sun May 30 04:53:00 2010
@@ -384,7 +384,7 @@ public class ConcurrentLRUCache<K,V> {
CacheEntry<K,V> o = map.remove(key);
if (o == null) return;
stats.size.decrementAndGet();
- stats.evictionCounter++;
+ stats.evictionCounter.incrementAndGet();
if(evictionListener != null) evictionListener.evictedEntry(o.key,o.value);
}
@@ -518,7 +518,7 @@ public class ConcurrentLRUCache<K,V> {
nonLivePutCounter = new AtomicLong(0),
missCounter = new AtomicLong();
private final AtomicInteger size = new AtomicInteger();
- private long evictionCounter = 0;
+ private AtomicLong evictionCounter = new AtomicLong();
public long getCumulativeLookups() {
return (accessCounter.get() - putCounter.get() - nonLivePutCounter.get()) + missCounter.get();
@@ -533,7 +533,7 @@ public class ConcurrentLRUCache<K,V> {
}
public long getCumulativeEvictions() {
- return evictionCounter;
+ return evictionCounter.get();
}
public int getCurrentSize() {
@@ -547,6 +547,15 @@ public class ConcurrentLRUCache<K,V> {
public long getCumulativeMisses() {
return missCounter.get();
}
+
+ public void add(Stats other) {
+ accessCounter.addAndGet(other.accessCounter.get());
+ putCounter.addAndGet(other.putCounter.get());
+ nonLivePutCounter.addAndGet(other.nonLivePutCounter.get());
+ missCounter.addAndGet(other.missCounter.get());
+ evictionCounter.addAndGet(other.evictionCounter.get());
+ size.set(Math.max(size.get(), other.size.get()));
+ }
}
public static interface EvictionListener<K,V>{
Modified: lucene/solr/branches/branch-1.4/src/java/org/apache/solr/search/FastLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/src/java/org/apache/solr/search/FastLRUCache.java?rev=949476&r1=949475&r2=949476&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/src/java/org/apache/solr/search/FastLRUCache.java (original)
+++ lucene/solr/branches/branch-1.4/src/java/org/apache/solr/search/FastLRUCache.java Sun May 30 04:53:00 2010
@@ -45,7 +45,8 @@ import java.util.concurrent.CopyOnWriteA
*/
public class FastLRUCache implements SolrCache {
- private List<ConcurrentLRUCache.Stats> cumulativeStats;
+ // contains the statistics objects for all open caches of the same type
+ private List<ConcurrentLRUCache.Stats> statsList;
private long warmupTime = 0;
@@ -104,16 +105,18 @@ public class FastLRUCache implements Sol
cache = new ConcurrentLRUCache(limit, minLimit, acceptableLimit, initialSize, newThread, false, null);
cache.setAlive(false);
- if (persistence == null) {
+ statsList = (List<ConcurrentLRUCache.Stats>) persistence;
+ if (statsList == null) {
// must be the first time a cache of this type is being created
// Use a CopyOnWriteArrayList since puts are very rare and iteration may be a frequent operation
// because it is used in getStatistics()
- persistence = new CopyOnWriteArrayList<ConcurrentLRUCache.Stats>();
- }
+ statsList = new CopyOnWriteArrayList<ConcurrentLRUCache.Stats>();
- cumulativeStats = (List<ConcurrentLRUCache.Stats>) persistence;
- cumulativeStats.add(cache.getStats());
- return cumulativeStats;
+ // the first entry will be for cumulative stats of caches that have been closed.
+ statsList.add(new ConcurrentLRUCache.Stats());
+ }
+ statsList.add(cache.getStats());
+ return statsList;
}
public String name() {
@@ -131,7 +134,6 @@ public class FastLRUCache implements Sol
public Object get(Object key) {
return cache.get(key);
-
}
public void clear() {
@@ -177,6 +179,9 @@ public class FastLRUCache implements Sol
public void close() {
+ // add the stats to the cumulative stats object (the first in the statsList)
+ statsList.get(0).add(cache.getStats());
+ statsList.remove(cache.getStats());
cache.destroy();
}
@@ -243,7 +248,7 @@ public class FastLRUCache implements Sol
long cevictions = 0;
// NOTE: It is safe to iterate on a CopyOnWriteArrayList
- for (ConcurrentLRUCache.Stats statistiscs : cumulativeStats) {
+ for (ConcurrentLRUCache.Stats statistiscs : statsList) {
clookups += statistiscs.getCumulativeLookups();
chits += statistiscs.getCumulativeHits();
cinserts += statistiscs.getCumulativePuts();