/** * Returns the configured maximum entry count per node if the max * size policy is {@link MaxSizeConfig.MaxSizePolicy#PER_NODE} * and is not the default, otherwise returns {@code -1}. * * @param maxSizeConfig the max size configuration * @return the max size per node or {@code -1} if not configured or is the default * @see MaxSizeConfig#getMaxSizePolicy() * @see MaxSizeConfig#getSize() */ public static int getMaxSizePerNode(MaxSizeConfig maxSizeConfig) { // max size or -1 if policy is different or not set double maxSizePerNode = maxSizeConfig.getMaxSizePolicy() == PER_NODE ? maxSizeConfig.getSize() : -1D; if (maxSizePerNode == MaxSizeConfig.DEFAULT_MAX_SIZE) { // unlimited return -1; } return (int) maxSizePerNode; }
/** * Returns the configured maximum entry count per node if the max * size policy is {@link MaxSizeConfig.MaxSizePolicy#PER_NODE} * and is not the default, otherwise returns {@code -1}. * * @param maxSizeConfig the max size configuration * @return the max size per node or {@code -1} if not configured or is the default * @see MaxSizeConfig#getMaxSizePolicy() * @see MaxSizeConfig#getSize() */ public static int getMaxSizePerNode(MaxSizeConfig maxSizeConfig) { // max size or -1 if policy is different or not set double maxSizePerNode = maxSizeConfig.getMaxSizePolicy() == PER_NODE ? maxSizeConfig.getSize() : -1D; if (maxSizePerNode == MaxSizeConfig.DEFAULT_MAX_SIZE) { // unlimited return -1; } return (int) maxSizePerNode; }
@Nullable @Override public Integer currentMaxEntries() { int maxSize = getConfig().getMaxSizeConfig().getSize(); return maxSize > 0 ? maxSize : null; }
protected boolean checkHeapSizeEviction(String mapName, MaxSizeConfig maxSizeConfig) { long usedHeapBytes = getUsedHeapInBytes(mapName); if (usedHeapBytes == -1L) { return false; } int maxUsableHeapMegaBytes = maxSizeConfig.getSize(); return MEGABYTES.toBytes(maxUsableHeapMegaBytes) < usedHeapBytes; }
protected boolean checkFreeHeapSizeEviction(MaxSizeConfig maxSizeConfig) { long currentFreeHeapBytes = getAvailableMemory(); int minFreeHeapMegaBytes = maxSizeConfig.getSize(); return MEGABYTES.toBytes(minFreeHeapMegaBytes) > currentFreeHeapBytes; }
protected boolean checkPerPartitionEviction(String mapName, MaxSizeConfig maxSizeConfig, int partitionId) { final double maxSize = maxSizeConfig.getSize(); final PartitionContainer container = mapServiceContext.getPartitionContainer(partitionId); if (container == null) { return false; } final int size = getRecordStoreSize(mapName, container); return size > maxSize; }
protected boolean checkHeapPercentageEviction(String mapName, MaxSizeConfig maxSizeConfig) { long usedHeapBytes = getUsedHeapInBytes(mapName); if (usedHeapBytes == -1L) { return false; } double maxOccupiedHeapPercentage = maxSizeConfig.getSize(); long maxMemory = getMaxMemory(); if (maxMemory <= 0) { return true; } return maxOccupiedHeapPercentage < (ONE_HUNDRED_PERCENT * usedHeapBytes / maxMemory); }
public HazelcastCacheProvider(HazelcastLoader loader) { configured = loader.isConfigured(); // If the Hazelcast instance is configured, then the other // cacheProvider parameters are defined if (configured) { map = loader.getInstance().getMap(HAZELCAST_MAP_DEFINITION); totalSize = loader.getInstance() .getConfig() .getMapConfig(HAZELCAST_MAP_DEFINITION) .getMaxSizeConfig() .getSize() * MB_TO_BYTES; if (LOGGER.isDebugEnabled()) { LOGGER.debug("Configured Hazelcast Cache"); } } else { map = null; totalSize = 0; if (LOGGER.isDebugEnabled()) { LOGGER.debug("Hazelcast Cache not configured"); } } }
void cleanup() { final int maxSize; final long timeToLive; if (config != null) { maxSize = config.getMaxSizeConfig().getSize(); timeToLive = config.getTimeToLiveSeconds() * SEC_TO_MS; } else { maxSize = MAX_SIZE; timeToLive = CacheEnvironment.getDefaultCacheTimeoutInMillis(); } boolean limitSize = maxSize > 0 && maxSize != Integer.MAX_VALUE; if (limitSize || timeToLive > 0) { List<EvictionEntry> entries = searchEvictableEntries(timeToLive, limitSize); final int diff = cache.size() - maxSize; final int evictionRate = calculateEvictionRate(diff, maxSize); if (evictionRate > 0 && entries != null) { evictEntries(entries, evictionRate); } } }
void cleanup() { final int maxSize; final long timeToLive; if (config != null) { maxSize = config.getMaxSizeConfig().getSize(); timeToLive = config.getTimeToLiveSeconds() * SEC_TO_MS; } else { maxSize = MAX_SIZE; timeToLive = CacheEnvironment.getDefaultCacheTimeoutInMillis(); } boolean limitSize = maxSize > 0 && maxSize != Integer.MAX_VALUE; if (limitSize || timeToLive > 0) { List<EvictionEntry> entries = searchEvictableEntries(timeToLive, limitSize); final int diff = cache.size() - maxSize; final int evictionRate = calculateEvictionRate(diff, maxSize); if (evictionRate > 0 && entries != null) { evictEntries(entries, evictionRate); } } }
void cleanup() { final int maxSize; final long timeToLive; if (config != null) { maxSize = config.getMaxSizeConfig().getSize(); timeToLive = config.getTimeToLiveSeconds() * SEC_TO_MS; } else { maxSize = MAX_SIZE; timeToLive = CacheEnvironment.getDefaultCacheTimeoutInMillis(); } boolean limitSize = maxSize > 0 && maxSize != Integer.MAX_VALUE; if (limitSize || timeToLive > 0) { List<EvictionEntry> entries = searchEvictableEntries(timeToLive, limitSize); final int diff = cache.size() - maxSize; final int evictionRate = calculateEvictionRate(diff, maxSize); if (evictionRate > 0 && entries != null) { evictEntries(entries, evictionRate); } } }
void cleanup() { final int maxSize; final long timeToLive; if (config != null) { maxSize = config.getMaxSizeConfig().getSize(); timeToLive = config.getTimeToLiveSeconds() * SEC_TO_MS; } else { maxSize = MAX_SIZE; timeToLive = CacheEnvironment.getDefaultCacheTimeoutInMillis(); } boolean limitSize = maxSize > 0 && maxSize != Integer.MAX_VALUE; if (limitSize || timeToLive > 0) { List<EvictionEntry> entries = searchEvictableEntries(timeToLive, limitSize); final int diff = cache.size() - maxSize; final int evictionRate = calculateEvictionRate(diff, maxSize); if (evictionRate > 0 && entries != null) { evictEntries(entries, evictionRate); } } }
/** * Calculates and returns the expected maximum size of an evicted record-store * when {@link com.hazelcast.config.MaxSizeConfig.MaxSizePolicy#PER_NODE PER_NODE} max-size-policy is used. */ public double translatePerNodeSizeToPartitionSize(RecordStore recordStore) { MapConfig mapConfig = recordStore.getMapContainer().getMapConfig(); MaxSizeConfig maxSizeConfig = mapConfig.getMaxSizeConfig(); NodeEngine nodeEngine = mapServiceContext.getNodeEngine(); int configuredMaxSize = maxSizeConfig.getSize(); int memberCount = nodeEngine.getClusterService().getSize(DATA_MEMBER_SELECTOR); int partitionCount = nodeEngine.getPartitionService().getPartitionCount(); double translatedPartitionSize = (1D * configuredMaxSize * memberCount / partitionCount); if (translatedPartitionSize < 1) { translatedPartitionSize = MIN_TRANSLATED_PARTITION_SIZE; if (misconfiguredPerNodeMaxSizeWarningLogged.compareAndSet(false, true)) { int minMaxSize = (int) Math.ceil((1D * partitionCount / memberCount)); int newSize = MIN_TRANSLATED_PARTITION_SIZE * partitionCount / memberCount; logger.warning(format("The max size configuration for map \"%s\" does not allow any data in the map. " + "Given the current cluster size of %d members with %d partitions, max size should be at " + "least %d. Map size is forced set to %d for backward compatibility", mapConfig.getName(), memberCount, partitionCount, minMaxSize, newSize)); } } return translatedPartitionSize; }
protected boolean checkFreeHeapPercentageEviction(MaxSizeConfig maxSizeConfig) { long totalMemory = getTotalMemory(); long freeMemory = getFreeMemory(); long maxMemory = getMaxMemory(); long availableMemory = freeMemory + (maxMemory - totalMemory); boolean evictable; double actualFreePercentage = 0; double configuredFreePercentage = 0; if (totalMemory <= 0 || freeMemory <= 0 || maxMemory <= 0 || availableMemory <= 0) { evictable = true; } else { actualFreePercentage = ONE_HUNDRED_PERCENT * availableMemory / maxMemory; configuredFreePercentage = maxSizeConfig.getSize(); evictable = configuredFreePercentage > actualFreePercentage; } if (evictable && logger.isFinestEnabled()) { logger.finest(format("runtime.max=%s, runtime.used=%s, configuredFree%%=%.2f, actualFree%%=%.2f", toPrettyString(maxMemory), toPrettyString(totalMemory - freeMemory), configuredFreePercentage, actualFreePercentage)); } return evictable; }
@Setup public void setUp() { map = targetInstance.getMap(name); operationCounterList = targetInstance.getList(name + "OperationCounter"); mapOperationSelectorBuilder .addOperation(MapOperation.PUT, putProb) .addOperation(MapOperation.GET, getProb) .addOperation(MapOperation.CHECK_SIZE, checkProb); mapPutOperationSelectorBuilder .addOperation(MapPutOperation.PUT_ASYNC, putUsingAsyncProb) .addDefaultOperation(MapPutOperation.PUT_SYNC); if (isMemberNode(targetInstance)) { MaxSizeConfig maxSizeConfig = targetInstance.getConfig().getMapConfig(name).getMaxSizeConfig(); maxSizePerNode = maxSizeConfig.getSize(); assertEqualsStringFormat("Expected MaxSizePolicy %s, but was %s", PER_NODE, maxSizeConfig.getMaxSizePolicy()); assertTrue("Expected MaxSizePolicy.getSize() < Integer.MAX_VALUE", maxSizePerNode < Integer.MAX_VALUE); logger.info("MapSizeConfig of " + name + ": " + maxSizeConfig); } }
@Setup public void setUp() { map = targetInstance.getMap(name); operationCounterList = targetInstance.getList(name + "OperationCounter"); mapOperationSelectorBuilder .addOperation(MapOperation.PUT, putProb) .addOperation(MapOperation.GET, getProb) .addOperation(MapOperation.CHECK_SIZE, checkProb); mapPutOperationSelectorBuilder .addOperation(MapPutOperation.PUT_ASYNC, putUsingAsyncProb) .addDefaultOperation(MapPutOperation.PUT_SYNC); if (isMemberNode(targetInstance)) { MaxSizeConfig maxSizeConfig = targetInstance.getConfig().getMapConfig(name).getMaxSizeConfig(); maxSizePerNode = maxSizeConfig.getSize(); assertEqualsStringFormat("Expected MaxSizePolicy %s, but was %s", PER_NODE, maxSizeConfig.getMaxSizePolicy()); assertTrue("Expected MaxSizePolicy.getSize() < Integer.MAX_VALUE", maxSizePerNode < Integer.MAX_VALUE); logger.info("MapSizeConfig of " + name + ": " + maxSizeConfig); } }
@Override public void writeData(ObjectDataOutput out) throws IOException { out.writeUTF(config.getName()); out.writeUTF(config.getInMemoryFormat().toString()); out.writeInt(config.getBackupCount()); out.writeInt(config.getAsyncBackupCount()); out.writeInt(config.getEvictionPercentage()); out.writeLong(config.getMinEvictionCheckMillis()); out.writeInt(config.getTimeToLiveSeconds()); out.writeInt(config.getMaxIdleSeconds()); out.writeInt(config.getMaxSizeConfig().getSize()); out.writeUTF(config.getMaxSizeConfig().getMaxSizePolicy().toString()); out.writeBoolean(config.isReadBackupData()); out.writeUTF(config.getEvictionPolicy().name()); out.writeUTF(config.getMergePolicy()); }
@Override public void writeData(ObjectDataOutput out) throws IOException { out.writeUTF(config.getName()); out.writeUTF(config.getInMemoryFormat().toString()); out.writeInt(config.getBackupCount()); out.writeInt(config.getAsyncBackupCount()); out.writeInt(config.getEvictionPercentage()); out.writeLong(config.getMinEvictionCheckMillis()); out.writeInt(config.getTimeToLiveSeconds()); out.writeInt(config.getMaxIdleSeconds()); out.writeInt(config.getMaxSizeConfig().getSize()); out.writeUTF(config.getMaxSizeConfig().getMaxSizePolicy().toString()); out.writeBoolean(config.isReadBackupData()); out.writeUTF(config.getEvictionPolicy().name()); out.writeUTF(config.getMergePolicy()); }
public JsonObject toJson() { JsonObject root = new JsonObject(); root.add("name", config.getName()); root.add("memoryFormat", config.getInMemoryFormat().toString()); root.add("backupCount", config.getBackupCount()); root.add("asyncBackupCount", config.getAsyncBackupCount()); root.add("evictionPercentage", config.getEvictionPercentage()); root.add("minEvictionCheckMillis", config.getMinEvictionCheckMillis()); root.add("ttl", config.getTimeToLiveSeconds()); root.add("maxIdle", config.getMaxIdleSeconds()); root.add("maxSize", config.getMaxSizeConfig().getSize()); root.add("maxSizePolicy", config.getMaxSizeConfig().getMaxSizePolicy().toString()); root.add("readBackupData", config.isReadBackupData()); root.add("evictionPolicy", config.getEvictionPolicy().name()); root.add("mergePolicy", config.getMergePolicy()); return root; }
public JsonObject toJson() { JsonObject root = new JsonObject(); root.add("name", config.getName()); root.add("memoryFormat", config.getInMemoryFormat().toString()); root.add("backupCount", config.getBackupCount()); root.add("asyncBackupCount", config.getAsyncBackupCount()); root.add("evictionPercentage", config.getEvictionPercentage()); root.add("minEvictionCheckMillis", config.getMinEvictionCheckMillis()); root.add("ttl", config.getTimeToLiveSeconds()); root.add("maxIdle", config.getMaxIdleSeconds()); root.add("maxSize", config.getMaxSizeConfig().getSize()); root.add("maxSizePolicy", config.getMaxSizeConfig().getMaxSizePolicy().toString()); root.add("readBackupData", config.isReadBackupData()); root.add("evictionPolicy", config.getEvictionPolicy().name()); root.add("mergePolicy", config.getMergePolicy()); return root; }