Lose the spammy debug logging, collect some histogram information instead. These are not currently hooked up to Depot's Stat mechanism.
This commit is contained in:
@@ -27,6 +27,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.samskivert.util.Histogram;
|
||||||
|
|
||||||
import net.sf.ehcache.CacheManager;
|
import net.sf.ehcache.CacheManager;
|
||||||
import net.sf.ehcache.Ehcache;
|
import net.sf.ehcache.Ehcache;
|
||||||
@@ -49,10 +50,18 @@ import static com.samskivert.depot.Log.log;
|
|||||||
public class EHCacheAdapter
|
public class EHCacheAdapter
|
||||||
implements CacheAdapter
|
implements CacheAdapter
|
||||||
{
|
{
|
||||||
protected static final String EHCACHE_RECORD_CACHE = "depotRecord";
|
public static final String EHCACHE_RECORD_CACHE = "depotRecord";
|
||||||
protected static final String EHCACHE_KEYSET_CACHE = "depotKeyset";
|
public static final String EHCACHE_KEYSET_CACHE = "depotKeyset";
|
||||||
protected static final String EHCACHE_RESULT_CACHE = "depotResult";
|
public static final String EHCACHE_RESULT_CACHE = "depotResult";
|
||||||
|
|
||||||
|
public static class EHCachePerformance
|
||||||
|
{
|
||||||
|
public Histogram lookups;
|
||||||
|
public Histogram stores;
|
||||||
|
public Histogram removes;
|
||||||
|
public Histogram enumerations;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an adapter using the supplied cache manager. Note: this adapter does not shut down
|
* Creates an adapter using the supplied cache manager. Note: this adapter does not shut down
|
||||||
* the supplied manager when it is shutdown. The caller is responsible for shutting down the
|
* the supplied manager when it is shutdown. The caller is responsible for shutting down the
|
||||||
@@ -75,12 +84,7 @@ public class EHCacheAdapter
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
CachedValue<T> result = lookup(bin.getCache(), cacheId, key);
|
CachedValue<T> result = lookup(bin.getCache(), cacheId, key);
|
||||||
long dT = System.currentTimeMillis() - now;
|
_lookups.addValue((int) (System.currentTimeMillis() - now));
|
||||||
if (dT > 100) {
|
|
||||||
log.warning("Aii! A simple ehcache lookup took over 100 ms!", "cacheId", cacheId,
|
|
||||||
"key", key, "dT", dT, "lookups", _lookups);
|
|
||||||
}
|
|
||||||
_lookups ++;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,12 +103,7 @@ public class EHCacheAdapter
|
|||||||
_bins.put(cacheId, bin);
|
_bins.put(cacheId, bin);
|
||||||
}
|
}
|
||||||
bin.getCache().put(new Element(new EHCacheKey(cacheId, key), value != null ? value : NULL));
|
bin.getCache().put(new Element(new EHCacheKey(cacheId, key), value != null ? value : NULL));
|
||||||
long dT = System.currentTimeMillis() - now;
|
_stores.addValue((int) (System.currentTimeMillis() - now));
|
||||||
if (dT > 100) {
|
|
||||||
log.warning("Aii! A simple ehcache store took over 100 ms!", "cacheId", cacheId,
|
|
||||||
"key", key, "dT", dT, "stores", _stores);
|
|
||||||
}
|
|
||||||
_stores ++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// from CacheAdapter
|
// from CacheAdapter
|
||||||
@@ -115,12 +114,7 @@ public class EHCacheAdapter
|
|||||||
if (bin != null) {
|
if (bin != null) {
|
||||||
bin.getCache().remove(new EHCacheKey(cacheId, key));
|
bin.getCache().remove(new EHCacheKey(cacheId, key));
|
||||||
}
|
}
|
||||||
long dT = System.currentTimeMillis() - now;
|
_removes.addValue((int) (System.currentTimeMillis() - now));
|
||||||
if (dT > 100) {
|
|
||||||
log.warning("Aii! A simple ehcache remove took over 100 ms!", "cacheId", cacheId,
|
|
||||||
"key", key, "dT", dT, "removes", _removes);
|
|
||||||
}
|
|
||||||
_removes ++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// from CacheAdapter
|
// from CacheAdapter
|
||||||
@@ -134,18 +128,29 @@ public class EHCacheAdapter
|
|||||||
|
|
||||||
// let's return a simple copy of the bin's fancy concurrent hashset
|
// let's return a simple copy of the bin's fancy concurrent hashset
|
||||||
Set<Serializable> result = Sets.newHashSet(bin.getKeys());
|
Set<Serializable> result = Sets.newHashSet(bin.getKeys());
|
||||||
long dT = System.currentTimeMillis() - now;
|
_enumerations.addValue((int) (System.currentTimeMillis() - now));
|
||||||
if (dT > 250) {
|
|
||||||
log.warning("Aii! A cache enumeration took over 250 ms!", "cacheId", cacheId,
|
|
||||||
"dT", dT, "enumerations", _enumerations);
|
|
||||||
}
|
|
||||||
_enumerations ++;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from CacheAdapter
|
// from CacheAdapter
|
||||||
public void shutdown ()
|
public void shutdown ()
|
||||||
{
|
{
|
||||||
|
log.info("EHCacheAdapter shutting down", "lookups", _lookups,
|
||||||
|
"stores", _stores, "removes", _removes, "enumerations", _enumerations);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a snapshot of the current histograms detailing how much time the different
|
||||||
|
* operations lookup, store, remove and enumerate take.
|
||||||
|
*/
|
||||||
|
public EHCachePerformance getPerformanceSnapshot ()
|
||||||
|
{
|
||||||
|
EHCachePerformance result = new EHCachePerformance();
|
||||||
|
result.lookups = _lookups.clone();
|
||||||
|
result.stores = _stores.clone();
|
||||||
|
result.removes = _removes.clone();
|
||||||
|
result.enumerations = _enumerations.clone();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected <T> CachedValue<T> lookup (Ehcache cache, String cacheId, Serializable key)
|
protected <T> CachedValue<T> lookup (Ehcache cache, String cacheId, Serializable key)
|
||||||
@@ -166,7 +171,6 @@ public class EHCacheAdapter
|
|||||||
return String.valueOf(value);
|
return String.valueOf(value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Ehcache bindEHCache (CacheManager cachemgr, CacheCategory category, String cacheName)
|
protected Ehcache bindEHCache (CacheManager cachemgr, CacheCategory category, String cacheName)
|
||||||
@@ -181,7 +185,10 @@ public class EHCacheAdapter
|
|||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int _lookups, _stores, _removes, _enumerations;
|
protected Histogram _lookups = new Histogram(0, 50, 20);
|
||||||
|
protected Histogram _stores = new Histogram(0, 50, 20);
|
||||||
|
protected Histogram _removes = new Histogram(0, 50, 20);
|
||||||
|
protected Histogram _enumerations = new Histogram(0, 50, 20);
|
||||||
|
|
||||||
protected Map<CacheCategory, Ehcache> _categories =
|
protected Map<CacheCategory, Ehcache> _categories =
|
||||||
Collections.synchronizedMap(Maps.<CacheCategory, Ehcache>newHashMap());
|
Collections.synchronizedMap(Maps.<CacheCategory, Ehcache>newHashMap());
|
||||||
|
|||||||
Reference in New Issue
Block a user