Repository: usergrid Updated Branches: refs/heads/hotfix-20160819 [created] 6a54d0db0
Reduce the cache size for graph shards. Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6a54d0db Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6a54d0db Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6a54d0db Branch: refs/heads/hotfix-20160819 Commit: 6a54d0db03b4a990a44d3afe6255e4b7d2ce716e Parents: f9196037 Author: Michael Russo <[email protected]> Authored: Fri Aug 19 10:26:31 2016 -0700 Committer: Michael Russo <[email protected]> Committed: Fri Aug 19 10:26:31 2016 -0700 ---------------------------------------------------------------------- .../usergrid/persistence/graph/GraphFig.java | 2 +- .../impl/shard/impl/NodeShardCacheImpl.java | 46 +++++--------------- 2 files changed, 13 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/6a54d0db/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/GraphFig.java ---------------------------------------------------------------------- diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/GraphFig.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/GraphFig.java index efd94ed..46f6f0c 100644 --- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/GraphFig.java +++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/GraphFig.java @@ -134,7 +134,7 @@ public interface GraphFig extends GuicyFig { long getShardMinDelta(); - @Default("250000") + @Default("100000") @Key(SHARD_CACHE_SIZE) long getShardCacheSize(); http://git-wip-us.apache.org/repos/asf/usergrid/blob/6a54d0db/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/NodeShardCacheImpl.java ---------------------------------------------------------------------- diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/NodeShardCacheImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/NodeShardCacheImpl.java index 545ac37..0a259f0 100644 --- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/NodeShardCacheImpl.java +++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/shard/impl/NodeShardCacheImpl.java @@ -72,18 +72,8 @@ import com.google.inject.Inject; @Singleton public class NodeShardCacheImpl implements NodeShardCache { - /** - * Only cache shards that have < 10k groups. This is an arbitrary amount, and may change with profiling and - * testing - */ - private static final int MAX_WEIGHT_PER_ELEMENT = 10000; - - private final NodeShardAllocation nodeShardAllocation; private final GraphFig graphFig; - - - private ListeningScheduledExecutorService refreshExecutors; private LoadingCache<CacheKey, CacheEntry> graphs; @@ -111,8 +101,8 @@ public class NodeShardCacheImpl implements NodeShardCache { final String propertyName = evt.getPropertyName(); if ( propertyName.equals( GraphFig.SHARD_CACHE_SIZE ) || propertyName - .equals( GraphFig.SHARD_CACHE_TIMEOUT ) || propertyName - .equals( GraphFig.SHARD_CACHE_REFRESH_WORKERS ) ) { + .equals( GraphFig.SHARD_CACHE_TIMEOUT ) || propertyName + .equals( GraphFig.SHARD_CACHE_REFRESH_WORKERS ) ) { updateCache(); @@ -206,20 +196,20 @@ public class NodeShardCacheImpl implements NodeShardCache { } this.refreshExecutors = MoreExecutors - .listeningDecorator( Executors.newScheduledThreadPool( graphFig.getShardCacheRefreshWorkerCount() ) ); + .listeningDecorator( Executors.newScheduledThreadPool( graphFig.getShardCacheRefreshWorkerCount() ) ); this.graphs = CacheBuilder.newBuilder() - //we want to asynchronously load new values for existing ones, that way we wont' have to - //wait for a trip to cassandra - .refreshAfterWrite( graphFig.getShardCacheTimeout(), TimeUnit.MILLISECONDS ) + //we want to asynchronously load new values for existing ones, that way we wont' have to + //wait for a trip to cassandra + .refreshAfterWrite( graphFig.getShardCacheTimeout(), TimeUnit.MILLISECONDS ) - //set our weight function, since not all shards are equal - .maximumWeight(MAX_WEIGHT_PER_ELEMENT * graphFig.getShardCacheSize() ).weigher( new ShardWeigher() ) + //set a static cache entry size here + .maximumSize(graphFig.getShardCacheSize()) - //set our shard loader - .build( new ShardCacheLoader() ); + //set our shard loader + .build( new ShardCacheLoader() ); } @@ -282,7 +272,7 @@ public class NodeShardCacheImpl implements NodeShardCache { private CacheEntry( final Iterator<ShardEntryGroup> shards ) { Preconditions.checkArgument( shards.hasNext(), - "More than 1 entry must be present in the shard to load into cache" ); + "More than 1 entry must be present in the shard to load into cache" ); this.shards = new TreeMap<>(); /** @@ -340,7 +330,7 @@ public class NodeShardCacheImpl implements NodeShardCache { final Iterator<ShardEntryGroup> edges = - nodeShardAllocation.getShards( key.scope, Optional.<Shard>absent(), key.directedEdgeMeta ); + nodeShardAllocation.getShards( key.scope, Optional.<Shard>absent(), key.directedEdgeMeta ); final CacheEntry cacheEntry = new CacheEntry( edges ); @@ -363,16 +353,4 @@ public class NodeShardCacheImpl implements NodeShardCache { //TODO, use RX for sliding window buffering and duplicate removal } - - - /** - * Calculates the weight of the entry by geting the size of the cache - */ - final class ShardWeigher implements Weigher<CacheKey, CacheEntry> { - - @Override - public int weigh( final CacheKey key, final CacheEntry value ) { - return value.getCacheSize(); - } - } }
