imdg eviction policy for ExecutionCurrencyHistoryMapStore/RegistryHistoryMapStore
This commit is contained in:
parent
f888e27bea
commit
4c0dd1739b
5 changed files with 116 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue