From 6879422aae675cfe26a7f3be0d748b97d91b40cc Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Tue, 9 Nov 2010 02:17:44 +0000 Subject: [PATCH] upgrade to ConcurrentLinkedHashMap 1.1 patch by mdennis; reviewed by jbellis for CASSANDRA-975 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1032815 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + lib/clhm-production.jar | Bin 24360 -> 0 bytes lib/concurrentlinkedhashmap-lru-1.1.jar | Bin 0 -> 41823 bytes ...xt => concurrentlinkedhashmap-lru-1.1.txt} | 0 .../cassandra/cache/InstrumentedCache.java | 22 +++++++++++++----- 5 files changed, 17 insertions(+), 6 deletions(-) delete mode 100644 lib/clhm-production.jar create mode 100644 lib/concurrentlinkedhashmap-lru-1.1.jar rename lib/licenses/{clhm-production.txt => concurrentlinkedhashmap-lru-1.1.txt} (100%) 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 028f505bb95320b33a9c24ad210c41d5baa3c45b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24360 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 s$aUh4EF0kkGh#;ZXU`%Gv>9aiEMn { - 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)