Example usage for com.google.common.cache CacheBuilder maximumWeight

List of usage examples for com.google.common.cache CacheBuilder maximumWeight

Introduction

In this page you can find the example usage for com.google.common.cache CacheBuilder maximumWeight.

Prototype

long maximumWeight

To view the source code for com.google.common.cache CacheBuilder maximumWeight.

Click Source Link

Usage

From source file:org.locationtech.geogig.storage.postgresql.PGCache.java

private static PGCache build(Integer initialCapacityCount, Integer concurrencyLevel2, Long maxWeightBytes,
        Optional<Integer> expireSeconds) {
    CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder();
    cacheBuilder = cacheBuilder.maximumWeight(maxWeightBytes);
    cacheBuilder.weigher(weigher);/*from  ww w  .  j  a v a  2 s. co m*/
    if (expireSeconds.isPresent()) {
        long seconds = expireSeconds.get();
        Preconditions.checkArgument(seconds > -1);
        cacheBuilder.expireAfterAccess(seconds, TimeUnit.SECONDS);
    }
    cacheBuilder.initialCapacity(initialCapacityCount);
    cacheBuilder.concurrencyLevel(concurrencyLevel2);
    cacheBuilder.recordStats();

    SizeTracker sizeTracker = new SizeTracker();
    cacheBuilder.removalListener(sizeTracker);

    Cache<ObjectId, byte[]> byteCache = cacheBuilder.build();

    return new PGCache(byteCache, sizeTracker);
}

From source file:com.google.gitiles.ConfigUtil.java

/**
 * Get a {@link CacheBuilder} from a config.
 *
 * @param config JGit config object./*w ww. j a  va  2  s  .c o m*/
 * @param name name of the cache subsection under the "cache" section.
 * @return a new cache builder.
 */
public static CacheBuilder<Object, Object> getCacheBuilder(Config config, String name) {
    CacheBuilder<Object, Object> b = CacheBuilder.newBuilder();
    try {
        if (config.getString("cache", name, "maximumWeight") != null) {
            b.maximumWeight(config.getLong("cache", name, "maximumWeight", 20 << 20));
        }
        if (config.getString("cache", name, "maximumSize") != null) {
            b.maximumSize(config.getLong("cache", name, "maximumSize", 16384));
        }
        Duration expireAfterWrite = getDuration(config, "cache", name, "expireAfterWrite", null);
        if (expireAfterWrite != null) {
            b.expireAfterWrite(expireAfterWrite.getMillis(), TimeUnit.MILLISECONDS);
        }
        Duration expireAfterAccess = getDuration(config, "cache", name, "expireAfterAccess", null);
        if (expireAfterAccess != null) {
            b.expireAfterAccess(expireAfterAccess.getMillis(), TimeUnit.MILLISECONDS);
        }
        // Add other methods as needed.
    } catch (IllegalArgumentException e) {
        throw new IllegalArgumentException("Error getting CacheBuilder for " + name, e);
    } catch (IllegalStateException e) {
        throw new IllegalStateException("Error getting CacheBuilder for " + name, e);
    }
    return b;
}

From source file:org.locationtech.geogig.storage.cache.SharedCache.java

@VisibleForTesting
static SharedCache build(int L1capacity, long maxCacheSizeBytes) {
    checkArgument(L1capacity >= 0);/*from w  w w  .ja v a2 s . c  o  m*/
    checkArgument(maxCacheSizeBytes >= 0, "Cache size can't be < 0, 0 meaning no cache at all");

    if (0L == maxCacheSizeBytes) {
        return NO_CACHE;
    }

    int initialCapacityCount = 1_000_000;
    int concurrencyLevel = 16;

    CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder();
    cacheBuilder = cacheBuilder.maximumWeight(maxCacheSizeBytes);
    cacheBuilder.weigher(Impl.SizeTracker.WEIGHER);

    cacheBuilder.initialCapacity(initialCapacityCount);
    cacheBuilder.concurrencyLevel(concurrencyLevel);
    cacheBuilder.recordStats();

    Impl.SizeTracker sizeTracker = new Impl.SizeTracker();
    cacheBuilder.removalListener(sizeTracker);

    Cache<Key, byte[]> byteCache = cacheBuilder.build();

    return new Impl(L1capacity, byteCache, sizeTracker);
}

From source file:com.vsct.dt.hesperides.util.HesperidesCacheBuilder.java

/**
 * Create cache with easy setup./* w  ww . ja v a2s.  c o  m*/
 *
 * @param config setup
 * @param weigher Guava weighter
 *
 * @return cache
 */
public static CacheBuilder<Object, Object> newBuilder(final HesperidesCacheParameter config,
        final Weigher<? extends Object, ? extends Object> weigher) {
    final CacheBuilder<Object, Object> cache = CacheBuilder.newBuilder();

    if (config != null) {
        final int maxSize = config.getMaxSize();
        final int weight = config.getWeight();
        final String expire = config.getItemExpireAfter();

        if (maxSize != HesperidesCacheParameter.NOT_SET) {
            cache.maximumSize(maxSize);
        }

        if (weight != HesperidesCacheParameter.NOT_SET) {
            if (weigher == null) {
                throw new IllegalArgumentException("Parameter 'weight' is not supported for this cache.");
            }

            cache.maximumWeight(weight);
        }

        if (expire != null) {
            final Pattern p = Pattern.compile("^([0-9]+)(m|s|h|d)");
            final Matcher m = p.matcher(expire);

            if (m.find()) {
                final int time = Integer.valueOf(m.group(1));
                TimeUnit unit = TimeUnit.SECONDS;

                switch (m.group(2)) {
                case "m":
                    unit = TimeUnit.MINUTES;
                    break;
                case "h":
                    unit = TimeUnit.HOURS;
                    break;
                case "d":
                    unit = TimeUnit.DAYS;
                    break;
                default:
                    // Nothing
                }

                cache.expireAfterWrite(time, unit);
                cache.expireAfterAccess(time, unit);
            } else {
                throw new IllegalArgumentException(
                        "Parameter 'itemExpireAfter' is not valid. Valid usage is [0-9]+(m|h|d|s). (Where 'm' is minutes, 'h' is hours, 'd' is days, 's' seconds.");
            }
        }
    }

    return cache;
}

From source file:com.github.benmanes.caffeine.cache.testing.GuavaLocalCache.java

/** Returns a Guava-backed cache. */
@SuppressWarnings("CheckReturnValue")
public static <K, V> Cache<K, V> newGuavaCache(CacheContext context) {
    checkState(!context.isAsync(), "Guava caches are synchronous only");

    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
    if (context.initialCapacity != InitialCapacity.DEFAULT) {
        builder.initialCapacity(context.initialCapacity.size());
    }//from   w ww .  java 2  s.  c om
    if (context.isRecordingStats()) {
        builder.recordStats();
    }
    if (context.maximumSize != MaximumSize.DISABLED) {
        if (context.weigher == CacheWeigher.DEFAULT) {
            builder.maximumSize(context.maximumSize.max());
        } else {
            builder.weigher(new GuavaWeigher<Object, Object>(context.weigher));
            builder.maximumWeight(context.maximumWeight());
        }
    }
    if (context.afterAccess != Expire.DISABLED) {
        builder.expireAfterAccess(context.afterAccess.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.afterWrite != Expire.DISABLED) {
        builder.expireAfterWrite(context.afterWrite.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.refresh != Expire.DISABLED) {
        builder.refreshAfterWrite(context.refresh.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.expires() || context.refreshes()) {
        builder.ticker(context.ticker());
    }
    if (context.keyStrength == ReferenceType.WEAK) {
        builder.weakKeys();
    } else if (context.keyStrength == ReferenceType.SOFT) {
        throw new IllegalStateException();
    }
    if (context.valueStrength == ReferenceType.WEAK) {
        builder.weakValues();
    } else if (context.valueStrength == ReferenceType.SOFT) {
        builder.softValues();
    }
    if (context.removalListenerType != Listener.DEFAULT) {
        boolean translateZeroExpire = (context.afterAccess == Expire.IMMEDIATELY)
                || (context.afterWrite == Expire.IMMEDIATELY);
        builder.removalListener(new GuavaRemovalListener<>(translateZeroExpire, context.removalListener));
    }
    Ticker ticker = (context.ticker == null) ? Ticker.systemTicker() : context.ticker;
    if (context.loader == null) {
        context.cache = new GuavaCache<>(builder.<Integer, Integer>build(), ticker);
    } else if (context.loader().isBulk()) {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new BulkLoader<Integer, Integer>(context.loader())), ticker);
    } else {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new SingleLoader<Integer, Integer>(context.loader())), ticker);
    }
    @SuppressWarnings("unchecked")
    Cache<K, V> castedCache = (Cache<K, V>) context.cache;
    return castedCache;
}

From source file:com.google.gerrit.server.cache.h2.DefaultCacheFactory.java

@SuppressWarnings("unchecked")
<K, V> CacheBuilder<K, V> create(CacheBinding<K, V> def, boolean unwrapValueHolder) {
    CacheBuilder<K, V> builder = newCacheBuilder();
    builder.recordStats();/*from   ww  w .  j a  v a 2 s .  c om*/
    builder.maximumWeight(cfg.getLong("cache", def.name(), "memoryLimit", def.maximumWeight()));

    builder.removalListener(forwardingRemovalListenerFactory.create(def.name()));

    Weigher<K, V> weigher = def.weigher();
    if (weigher != null && unwrapValueHolder) {
        final Weigher<K, V> impl = weigher;
        weigher = (Weigher<K, V>) new Weigher<K, ValueHolder<V>>() {
            @Override
            public int weigh(K key, ValueHolder<V> value) {
                return impl.weigh(key, value.value);
            }
        };
    } else if (weigher == null) {
        weigher = unitWeight();
    }
    builder.weigher(weigher);

    Long age = def.expireAfterWrite(TimeUnit.SECONDS);
    if (has(def.name(), "maxAge")) {
        builder.expireAfterWrite(ConfigUtil.getTimeUnit(cfg, "cache", def.name(), "maxAge",
                age != null ? age : 0, TimeUnit.SECONDS), TimeUnit.SECONDS);
    } else if (age != null) {
        builder.expireAfterWrite(age, TimeUnit.SECONDS);
    }

    return builder;
}

From source file:com.github.benmanes.caffeine.cache.testing.GuavaCacheFromContext.java

/** Returns a Guava-backed cache. */
@SuppressWarnings("CheckReturnValue")
public static <K, V> Cache<K, V> newGuavaCache(CacheContext context) {
    checkState(!context.isAsync(), "Guava caches are synchronous only");

    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
    context.guava = builder;/*from   w w  w  .  j a  v a2 s . c om*/

    builder.concurrencyLevel(1);
    if (context.initialCapacity != InitialCapacity.DEFAULT) {
        builder.initialCapacity(context.initialCapacity.size());
    }
    if (context.isRecordingStats()) {
        builder.recordStats();
    }
    if (context.maximumSize != Maximum.DISABLED) {
        if (context.weigher == CacheWeigher.DEFAULT) {
            builder.maximumSize(context.maximumSize.max());
        } else {
            builder.weigher(new GuavaWeigher<Object, Object>(context.weigher));
            builder.maximumWeight(context.maximumWeight());
        }
    }
    if (context.afterAccess != Expire.DISABLED) {
        builder.expireAfterAccess(context.afterAccess.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.afterWrite != Expire.DISABLED) {
        builder.expireAfterWrite(context.afterWrite.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.refresh != Expire.DISABLED) {
        builder.refreshAfterWrite(context.refresh.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.expires() || context.refreshes()) {
        builder.ticker(context.ticker());
    }
    if (context.keyStrength == ReferenceType.WEAK) {
        builder.weakKeys();
    } else if (context.keyStrength == ReferenceType.SOFT) {
        throw new IllegalStateException();
    }
    if (context.valueStrength == ReferenceType.WEAK) {
        builder.weakValues();
    } else if (context.valueStrength == ReferenceType.SOFT) {
        builder.softValues();
    }
    if (context.removalListenerType != Listener.DEFAULT) {
        boolean translateZeroExpire = (context.afterAccess == Expire.IMMEDIATELY)
                || (context.afterWrite == Expire.IMMEDIATELY);
        builder.removalListener(new GuavaRemovalListener<>(translateZeroExpire, context.removalListener));
    }
    Ticker ticker = (context.ticker == null) ? Ticker.systemTicker() : context.ticker;
    if (context.loader == null) {
        context.cache = new GuavaCache<>(builder.<Integer, Integer>build(), ticker, context.isRecordingStats());
    } else if (context.loader().isBulk()) {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new BulkLoader<Integer, Integer>(context.loader())), ticker,
                context.isRecordingStats());
    } else {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new SingleLoader<Integer, Integer>(context.loader())), ticker,
                context.isRecordingStats());
    }
    @SuppressWarnings("unchecked")
    Cache<K, V> castedCache = (Cache<K, V>) context.cache;
    return castedCache;
}

From source file:org.elasticsearch.indices.fielddata.cache.IndicesFieldDataCache.java

@Inject
public IndicesFieldDataCache(Settings settings, IndicesFieldDataCacheListener indicesFieldDataCacheListener) {
    super(settings);
    this.indicesFieldDataCacheListener = indicesFieldDataCacheListener;
    String size = componentSettings.get("size", "-1");
    long sizeInBytes = componentSettings.getAsMemory("size", "-1").bytes();
    if (sizeInBytes > ByteSizeValue.MAX_GUAVA_CACHE_SIZE.bytes()) {
        logger.warn("reducing requested field data cache size of [{}] to the maximum allowed size of [{}]",
                new ByteSizeValue(sizeInBytes), ByteSizeValue.MAX_GUAVA_CACHE_SIZE);
        sizeInBytes = ByteSizeValue.MAX_GUAVA_CACHE_SIZE.bytes();
        size = ByteSizeValue.MAX_GUAVA_CACHE_SIZE.toString();
    }/*from  w ww. jav  a 2 s.com*/
    final TimeValue expire = componentSettings.getAsTime("expire", null);
    CacheBuilder<Key, RamUsage> cacheBuilder = CacheBuilder.newBuilder().removalListener(this);
    if (sizeInBytes > 0) {
        cacheBuilder.maximumWeight(sizeInBytes).weigher(new FieldDataWeigher());
    }
    // defaults to 4, but this is a busy map for all indices, increase it a bit
    cacheBuilder.concurrencyLevel(16);
    if (expire != null && expire.millis() > 0) {
        cacheBuilder.expireAfterAccess(expire.millis(), TimeUnit.MILLISECONDS);
    }
    logger.debug("using size [{}] [{}], expire [{}]", size, new ByteSizeValue(sizeInBytes), expire);
    cache = cacheBuilder.build();
}

From source file:com.addthis.hydra.data.tree.ReadTree.java

public ReadTree(File root, boolean metrics) throws Exception {
    this.metrics = metrics;

    if (!root.isDirectory()) {
        throw new IOException("Unable to open root directory '" + root + "'");
    }/*from  ww w.  j ava2 s .  co  m*/

    this.root = root;
    this.advanced = TreeConfig.readFromDataDirectory(root.toPath());
    source = initSource();
    try {
        CacheBuilder<? super CacheKey, ? super ReadTreeNode> cacheBuilder = CacheBuilder.newBuilder();
        if (nodeCacheWeight != 0) {
            // limit by weight
            cacheBuilder = cacheBuilder.maximumWeight((long) (nodeCacheWeight * advanced.cacheWeight))
                    .weigher((key, value) -> {
                        /* A lean node goes from 24 to 24 + its string name and + cacheKey. the 24 becomes a
                        small percentage.
                                
                        Dangerous, fat nodes typically have lots of serialized strings in their value payload.
                        The inflation ratio there is actually probably less than for lean nodes since the various
                        pointers for the string objects may not be nearly as large as the strings themselves.
                        Therefore, holding them to the lean node's expansion standard is probably conservative
                        enough. */
                        return value.getWeight();
                    });
        } else {
            // Limit by the number of nodes
            cacheBuilder = cacheBuilder.maximumSize((long) (nodeCacheSize * advanced.cacheWeight));
        }
        loadingNodeCache = cacheBuilder.build(new CacheLoader<CacheKey, ReadTreeNode>() {
            @Override
            public ReadTreeNode load(CacheKey key) throws Exception {
                ReadTreeNode node = sourceGet(key.dbkey());
                if (node != null) {
                    node.init(ReadTree.this, key.name);
                    return node;
                } else {
                    return MISSING;
                }
            }
        });
        rootNode = getNode(1, "root");
        if (rootNode == null) {
            throw new IllegalStateException("missing root in readonly tree");
        }
    } catch (Exception e) {
        source.close();
        throw e;
    }
}

From source file:uk.q3c.krail.core.user.opt.GuavaCacheConfiguration.java

public CacheBuilder<Object, Object> builder() {
    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
    if (initialCapacity != null) {
        builder.initialCapacity(initialCapacity);
    }//from ww  w  .j a v a 2s. com
    if (maximumSize != null) {
        builder.maximumSize(maximumSize);
    }
    if (maximumWeight != null) {
        builder.maximumWeight(maximumWeight);
    }
    if (concurrencyLevel != null) {
        builder.concurrencyLevel(concurrencyLevel);
    }
    if (weakKeys) {
        builder.weakKeys();
    }

    if (weakValues) {
    }
    builder.weakValues();
    if (softValues) {
        builder.softValues();
    }

    if (expireAfterWriteDuration != null) {
        builder.expireAfterWrite(expireAfterWriteDuration, expireAfterWriteTimeUnit);
    }
    if (expireAfterAccessDuration != null) {
        builder.expireAfterAccess(expireAfterAccessDuration, expireAfterAccessTimeUnit);
    }
    if (refreshAfterWriteDuration != null) {
        builder.refreshAfterWrite(refreshAfterWriteDuration, refreshAfterWriteTimeUnit);
    }

    if (ticker != null) {
        builder.ticker(ticker);
    }

    if (removalListener != null) {
        builder.removalListener(removalListener);
    }

    if (recordStats) {
        builder.recordStats();
    }
    return builder;
}