imdg eviction policy for ExecutionCurrencyHistoryMapStore/RegistryHistoryMapStore

This commit is contained in:
ialbert 2024-08-02 17:48:16 +03:00
parent f888e27bea
commit 4c0dd1739b
5 changed files with 116 additions and 11 deletions

View file

@ -1,7 +1,9 @@
package ru.spcex.clearing.imdg.base;
import java.util.Optional;
import com.hazelcast.config.MapIndexConfig;
import com.hazelcast.core.MapLoader;
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
public interface AutoconfiguredMap<T> extends MapLoader<Long, T> {
MapIndexConfig[] emptyIndexes = new MapIndexConfig[0];
@ -12,6 +14,8 @@ public interface AutoconfiguredMap<T> extends MapLoader<Long, T> {
*/
String getMapName();
default Optional<ImdgHzEvictionConfig> evictionConfig() {return Optional.empty();}
/**
* Список индексируемых полей, для быстрого поиска
* @return

View file

@ -1,11 +1,15 @@
package ru.spcex.clearing.imdg.businessevent;
import java.util.Optional;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.MaxSizeConfig;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
import ru.clearing.classes.statics.data.execution.ExecutionCurrencyHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
import ru.spcex.platform.utils.time.TimeUtil;
@Component
@ -15,6 +19,16 @@ public class ExecutionCurrencyHistoryMapStore extends TemplateEventMapStore<Exec
super(jdbcTemplate);
}
@Override
public Optional<ImdgHzEvictionConfig> evictionConfig() {
ImdgHzEvictionConfig evctCfg = new ImdgHzEvictionConfig();
evctCfg.setSize(5000);
evctCfg.setMaxSizePolicy(MaxSizeConfig.MaxSizePolicy.PER_NODE);
evctCfg.setEvictionPolicy(EvictionConfig.DEFAULT_EVICTION_POLICY);
evctCfg.setTimeToLiveSeconds(1800);
return Optional.of(evctCfg);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_ExecutionCurrencyHistory;

View file

@ -1,5 +1,18 @@
package ru.spcex.clearing.imdg.businessevent;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.MaxSizeConfig;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@ -7,13 +20,9 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.RegistryHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
@Component
public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHistory> {
@ -21,6 +30,16 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
super(jdbcTemplate);
}
@Override
public Optional<ImdgHzEvictionConfig> evictionConfig() {
ImdgHzEvictionConfig evctCfg = new ImdgHzEvictionConfig();
evctCfg.setSize(5000);
evctCfg.setMaxSizePolicy(MaxSizeConfig.MaxSizePolicy.PER_NODE);
evctCfg.setEvictionPolicy(EvictionConfig.DEFAULT_EVICTION_POLICY);
evctCfg.setTimeToLiveSeconds(1800);
return Optional.of(evctCfg);
}
@Override
public String getTableName() {
return "REGISTRY_HISTORY";

View file

@ -1,6 +1,16 @@
package ru.spcex.clearing.imdg.config;
import com.hazelcast.config.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import com.hazelcast.config.InMemoryFormat;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.MapIndexConfig;
import com.hazelcast.config.MapStoreConfig;
import com.hazelcast.config.MaxSizeConfig;
import com.hazelcast.config.NearCacheConfig;
import com.hazelcast.config.ScheduledExecutorConfig;
import com.hazelcast.core.MapLoader;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -15,11 +25,6 @@ import ru.spcex.clearing.imdg.businessevent.CompanyHistoryMapStore;
import ru.spcex.clearing.imdg.businessobject.CompanyMapStore;
import ru.spcex.clearing.imdg.config.element.ImdgSettings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@Configuration
public class PoolMapConfigs implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
@ -112,6 +117,16 @@ public class PoolMapConfigs implements InitializingBean {
}
existMapStores.add(mapStore.getMapName()); // IMDGDistributedNames
MapConfig mapCfg = makeDefaultMapConfig(mapStore.getMapName(), mapStore);
mapStore.evictionConfig().ifPresent(evctCfg -> {
log.debug("eviction config is enabled for {}: {}", mapStore.getMapName(), evctCfg);
MaxSizeConfig mxc = new MaxSizeConfig();
mxc.setSize(evctCfg.getSize());
mxc.setMaxSizePolicy(evctCfg.getMaxSizePolicy());
mapCfg.setMaxSizeConfig(mxc);
mapCfg.setEvictionPolicy(evctCfg.getEvictionPolicy());
mapCfg.setTimeToLiveSeconds(evctCfg.getTimeToLiveSeconds());
});
if (mapStore.getIndexes().length > 0) {
if (log.isTraceEnabled()) {
log.trace("Create indexing filed on {}: {}", mapStore.getMapName(), Arrays.toString(mapStore.getIndexes()));

View file

@ -0,0 +1,53 @@
package ru.spcex.clearing.imdg.config.element;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.MaxSizeConfig;
public class ImdgHzEvictionConfig {
private int size;
private MaxSizeConfig.MaxSizePolicy maxSizePolicy;
private EvictionPolicy evictionPolicy;
private int timeToLiveSeconds;
@Override
public String toString() {
return "ImdgHzEvictionConfig{" +
"size=" + size +
", maxSizePolicy=" + maxSizePolicy +
", evictionPolicy=" + evictionPolicy +
", timeToLiveSeconds=" + timeToLiveSeconds +
'}';
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public MaxSizeConfig.MaxSizePolicy getMaxSizePolicy() {
return maxSizePolicy;
}
public void setMaxSizePolicy(MaxSizeConfig.MaxSizePolicy maxSizePolicy) {
this.maxSizePolicy = maxSizePolicy;
}
public EvictionPolicy getEvictionPolicy() {
return evictionPolicy;
}
public void setEvictionPolicy(EvictionPolicy evictionPolicy) {
this.evictionPolicy = evictionPolicy;
}
public int getTimeToLiveSeconds() {
return timeToLiveSeconds;
}
public void setTimeToLiveSeconds(int timeToLiveSeconds) {
this.timeToLiveSeconds = timeToLiveSeconds;
}
}