diff --git a/CHANGES.txt b/CHANGES.txt index e796105e9f..7b432b0ac5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,7 @@ dev * enable skipping bad rows on LazilyCompacted path (CASSANDRA-1702) * r/m extra subcomparator line in cli keyspaces output (CASSANDRA-1712) * add read repair chance to cli "show keyspaces" + * upgrade to ConcurrentLinkedHashMap 1.1 (CASSANDRA-975) 0.7.0-beta3 diff --git a/lib/clhm-production.jar b/lib/clhm-production.jar deleted file mode 100644 index 028f505bb9..0000000000 Binary files a/lib/clhm-production.jar and /dev/null differ diff --git a/lib/concurrentlinkedhashmap-lru-1.1.jar b/lib/concurrentlinkedhashmap-lru-1.1.jar new file mode 100644 index 0000000000..a7a54af83f Binary files /dev/null and b/lib/concurrentlinkedhashmap-lru-1.1.jar differ diff --git a/lib/licenses/clhm-production.txt b/lib/licenses/concurrentlinkedhashmap-lru-1.1.txt similarity index 100% rename from lib/licenses/clhm-production.txt rename to lib/licenses/concurrentlinkedhashmap-lru-1.1.txt diff --git a/src/java/org/apache/cassandra/cache/InstrumentedCache.java b/src/java/org/apache/cassandra/cache/InstrumentedCache.java index c610061bc4..4443574b54 100644 --- a/src/java/org/apache/cassandra/cache/InstrumentedCache.java +++ b/src/java/org/apache/cassandra/cache/InstrumentedCache.java @@ -24,11 +24,13 @@ package org.apache.cassandra.cache; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; -import com.reardencommerce.kernel.collections.shared.evictable.ConcurrentLinkedHashMap; +import com.googlecode.concurrentlinkedhashmap.Weighers; +import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap; public class InstrumentedCache { - private int capacity; + public static final int DEFAULT_CONCURENCY_LEVEL = 64; + private final ConcurrentLinkedHashMap map; private final AtomicLong requests = new AtomicLong(0); private final AtomicLong hits = new AtomicLong(0); @@ -38,8 +40,17 @@ public class InstrumentedCache public InstrumentedCache(int capacity) { - this.capacity = capacity; - map = ConcurrentLinkedHashMap.create(ConcurrentLinkedHashMap.EvictionPolicy.SECOND_CHANCE, capacity); + this(capacity, DEFAULT_CONCURENCY_LEVEL); + } + + public InstrumentedCache(int capacity, int concurency) + { + map = new ConcurrentLinkedHashMap.Builder() + .weigher(Weighers.singleton()) + .initialCapacity(capacity) + .maximumWeightedCapacity(capacity) + .concurrencyLevel(concurency) + .build(); } public void put(K key, V value) @@ -68,7 +79,7 @@ public class InstrumentedCache public int getCapacity() { - return capacity; + return map.capacity(); } public boolean isCapacitySetManually() @@ -79,7 +90,6 @@ public class InstrumentedCache public void updateCapacity(int capacity) { map.setCapacity(capacity); - this.capacity = capacity; } public void setCapacity(int capacity)