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;
|
package ru.spcex.clearing.imdg.base;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
import com.hazelcast.config.MapIndexConfig;
|
import com.hazelcast.config.MapIndexConfig;
|
||||||
import com.hazelcast.core.MapLoader;
|
import com.hazelcast.core.MapLoader;
|
||||||
|
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
|
||||||
|
|
||||||
public interface AutoconfiguredMap<T> extends MapLoader<Long, T> {
|
public interface AutoconfiguredMap<T> extends MapLoader<Long, T> {
|
||||||
MapIndexConfig[] emptyIndexes = new MapIndexConfig[0];
|
MapIndexConfig[] emptyIndexes = new MapIndexConfig[0];
|
||||||
|
|
@ -12,6 +14,8 @@ public interface AutoconfiguredMap<T> extends MapLoader<Long, T> {
|
||||||
*/
|
*/
|
||||||
String getMapName();
|
String getMapName();
|
||||||
|
|
||||||
|
default Optional<ImdgHzEvictionConfig> evictionConfig() {return Optional.empty();}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список индексируемых полей, для быстрого поиска
|
* Список индексируемых полей, для быстрого поиска
|
||||||
* @return
|
* @return
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
package ru.spcex.clearing.imdg.businessevent;
|
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.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||||
import ru.clearing.classes.statics.data.execution.ExecutionCurrencyHistory;
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrencyHistory;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
||||||
|
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
|
@ -15,6 +19,16 @@ public class ExecutionCurrencyHistoryMapStore extends TemplateEventMapStore<Exec
|
||||||
super(jdbcTemplate);
|
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
|
@Override
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return IMDGDistributedNames.Map_ExecutionCurrencyHistory;
|
return IMDGDistributedNames.Map_ExecutionCurrencyHistory;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,18 @@
|
||||||
package ru.spcex.clearing.imdg.businessevent;
|
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.dao.support.DataAccessUtils;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
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.clearing.classes.statics.data.registry.RegistryHistory;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
||||||
|
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHistory> {
|
public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHistory> {
|
||||||
|
|
||||||
|
|
@ -21,6 +30,16 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
|
||||||
super(jdbcTemplate);
|
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
|
@Override
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return "REGISTRY_HISTORY";
|
return "REGISTRY_HISTORY";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,16 @@
|
||||||
package ru.spcex.clearing.imdg.config;
|
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 com.hazelcast.core.MapLoader;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
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.businessobject.CompanyMapStore;
|
||||||
import ru.spcex.clearing.imdg.config.element.ImdgSettings;
|
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
|
@Configuration
|
||||||
public class PoolMapConfigs implements InitializingBean {
|
public class PoolMapConfigs implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
@ -112,6 +117,16 @@ public class PoolMapConfigs implements InitializingBean {
|
||||||
}
|
}
|
||||||
existMapStores.add(mapStore.getMapName()); // IMDGDistributedNames
|
existMapStores.add(mapStore.getMapName()); // IMDGDistributedNames
|
||||||
MapConfig mapCfg = makeDefaultMapConfig(mapStore.getMapName(), mapStore);
|
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 (mapStore.getIndexes().length > 0) {
|
||||||
if (log.isTraceEnabled()) {
|
if (log.isTraceEnabled()) {
|
||||||
log.trace("Create indexing filed on {}: {}", mapStore.getMapName(), Arrays.toString(mapStore.getIndexes()));
|
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