public CacheManager() { this.buckets = new ConcurrentHashMap<>(); this.bucketConfigs = new HashMap<>(); this.defaultConfig = new CacheConfig(false, 0, 0); }
@Override public void configure(CacheConfig config) throws CoreConfigException { this.cacheConfig = config; log.info("CacheBucket: {} settings maxMemSize: {} bytes, maxItems: {}", bucketName, config.getMaxMemSize(), config.getMaxSize()); }
private Bucket createOrGetBucket(String bucketName) throws CoreConfigException { if(!buckets.containsKey(bucketName)) { CacheConfig usedConfig = null; if(bucketConfigs.containsKey(bucketName)) { usedConfig = bucketConfigs.get(bucketName); } else { usedConfig = defaultConfig; } Bucket bucket; if(usedConfig.isEnabled()) { bucket = new CacheBucket(bucketName); } else { bucket = new DummyBucket(); } bucket.configure(usedConfig); buckets.put(bucketName, bucket); return bucket; } else { return buckets.get(bucketName); } } }
private boolean checkOverflow() { lock.lock(); try { int itemSize = cachedItems.size(); long totalMemoryUsage = totalMemorySize.get(); if(cacheConfig.getMaxSize() != -1 && itemSize > cacheConfig.getMaxSize()) { log.debug("Bucket overflow: Maximum bucket size has been exceeded: {} on bucket: {}", itemSize, bucketName); return true; } else if(cacheConfig.getMaxMemSize() != -1 && totalMemoryUsage > cacheConfig.getMaxMemSize()) { log.debug("Bucket overflow: Maximum bucket MemorySize has been exceeded: {} bytes on bucket: {}", totalMemoryUsage, bucketName); return true; } else { return false; } } finally { lock.unlock(); } }
protected CacheBucket(String bucketName) { this.bucketName = bucketName; cachedItems = new OrderedBalancedTree<>(); lruItems = new OrderedBalancedTree<>(); this.cacheConfig = new CacheConfig(false, -1, -1); }
private CacheConfig getCacheConfig(Configuration config) throws CoreConfigException { boolean enabled = config.getAttribute(CACHE_ENABLED, DEFAULT_ENABLED); String memSize = getValue(config, "MaxCacheMemSize", DEFAULT_MEM_SIZE); String size = getValue(config, "MaxItems", DEFAULT_SIZE); CacheConfig cacheConfig = new CacheConfig(enabled, ValueConverterUtil.convertToBytes(memSize, 134217728L), ValueConverterUtil.safeConvertInteger(size, 1024)); return cacheConfig; }