SGF-657 - Add missing configuration support for Off-Heap.
This commit is contained in:
@@ -126,7 +126,9 @@ public class CacheFactoryBean extends AbstractFactoryBeanSupport<GemFireCache>
|
||||
private DynamicRegionSupport dynamicRegionSupport;
|
||||
|
||||
private Float criticalHeapPercentage;
|
||||
private Float criticalOffHeapPercentage;
|
||||
private Float evictionHeapPercentage;
|
||||
private Float evictionOffHeapPercentage;
|
||||
|
||||
private GatewayConflictResolver gatewayConflictResolver;
|
||||
|
||||
@@ -260,7 +262,7 @@ public class CacheFactoryBean extends AbstractFactoryBeanSupport<GemFireCache>
|
||||
|
||||
setCache(postProcess(resolveCache()));
|
||||
|
||||
Optional.ofNullable(this.<GemFireCache>getCache()).ifPresent(cache -> {
|
||||
Optional.<GemFireCache>ofNullable(this.getCache()).ifPresent(cache -> {
|
||||
|
||||
Optional.ofNullable(cache.getDistributedSystem()).map(DistributedSystem::getDistributedMember)
|
||||
.ifPresent(member ->
|
||||
@@ -469,35 +471,59 @@ public class CacheFactoryBean extends AbstractFactoryBeanSupport<GemFireCache>
|
||||
}
|
||||
|
||||
configureHeapPercentages(cache);
|
||||
configureOffHeapPercentages(cache);
|
||||
registerJndiDataSources();
|
||||
registerTransactionListeners(cache);
|
||||
registerTransactionWriter(cache);
|
||||
registerJndiDataSources();
|
||||
|
||||
return cache;
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private boolean isHeapPercentageValid(Float heapPercentage) {
|
||||
return (heapPercentage > 0.0f && heapPercentage <= 100.0f);
|
||||
return (heapPercentage >= 0.0f && heapPercentage <= 100.0f);
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void configureHeapPercentages(GemFireCache cache) {
|
||||
|
||||
Optional.ofNullable(getCriticalHeapPercentage()).ifPresent(criticalHeapPercentage -> {
|
||||
|
||||
Assert.isTrue(isHeapPercentageValid(criticalHeapPercentage), String.format(
|
||||
"criticalHeapPercentage [%s] is not valid; must be > 0.0 and <= 100.0", criticalHeapPercentage));
|
||||
"criticalHeapPercentage [%s] is not valid; must be >= 0.0 and <= 100.0", criticalHeapPercentage));
|
||||
|
||||
cache.getResourceManager().setCriticalHeapPercentage(criticalHeapPercentage);
|
||||
});
|
||||
|
||||
Optional.ofNullable(getEvictionHeapPercentage()).ifPresent(evictionHeapPercentage -> {
|
||||
|
||||
Assert.isTrue(isHeapPercentageValid(evictionHeapPercentage), String.format(
|
||||
"evictionHeapPercentage [%s] is not valid; must be > 0.0 and <= 100.0", evictionHeapPercentage));
|
||||
"evictionHeapPercentage [%s] is not valid; must be >= 0.0 and <= 100.0", evictionHeapPercentage));
|
||||
|
||||
cache.getResourceManager().setEvictionHeapPercentage(evictionHeapPercentage);
|
||||
});
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void configureOffHeapPercentages(GemFireCache cache) {
|
||||
|
||||
Optional.ofNullable(getCriticalOffHeapPercentage()).ifPresent(criticalOffHeapPercentage -> {
|
||||
|
||||
Assert.isTrue(isHeapPercentageValid(criticalOffHeapPercentage), String.format(
|
||||
"criticalOffHeapPercentage [%s] is not valid; must be >= 0.0 and <= 100.0", criticalOffHeapPercentage));
|
||||
|
||||
cache.getResourceManager().setCriticalOffHeapPercentage(criticalOffHeapPercentage);
|
||||
});
|
||||
|
||||
Optional.ofNullable(getEvictionOffHeapPercentage()).ifPresent(evictionOffHeapPercentage -> {
|
||||
|
||||
Assert.isTrue(isHeapPercentageValid(evictionOffHeapPercentage), String.format(
|
||||
"evictionOffHeapPercentage [%s] is not valid; must be >= 0.0 and <= 100.0", evictionOffHeapPercentage));
|
||||
|
||||
cache.getResourceManager().setEvictionOffHeapPercentage(evictionOffHeapPercentage);
|
||||
});
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void registerJndiDataSources() {
|
||||
|
||||
@@ -864,6 +890,22 @@ public class CacheFactoryBean extends AbstractFactoryBeanSupport<GemFireCache>
|
||||
return criticalHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the cache's critical off-heap percentage property.
|
||||
*
|
||||
* @param criticalOffHeapPercentage floating point value indicating the critical off-heap percentage.
|
||||
*/
|
||||
public void setCriticalOffHeapPercentage(Float criticalOffHeapPercentage) {
|
||||
this.criticalOffHeapPercentage = criticalOffHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the criticalOffHeapPercentage
|
||||
*/
|
||||
public Float getCriticalOffHeapPercentage() {
|
||||
return this.criticalOffHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an instance of the DynamicRegionSupport to support Dynamic Regions in this GemFire Cache.
|
||||
*
|
||||
@@ -916,6 +958,22 @@ public class CacheFactoryBean extends AbstractFactoryBeanSupport<GemFireCache>
|
||||
return evictionHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the cache's eviction off-heap percentage property.
|
||||
*
|
||||
* @param evictionOffHeapPercentage float-point value indicating the percentage of off-heap use triggering eviction.
|
||||
*/
|
||||
public void setEvictionOffHeapPercentage(Float evictionOffHeapPercentage) {
|
||||
this.evictionOffHeapPercentage = evictionOffHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the evictionOffHeapPercentage
|
||||
*/
|
||||
public Float getEvictionOffHeapPercentage() {
|
||||
return this.evictionOffHeapPercentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Requires GemFire 7.0 or higher
|
||||
* @param gatewayConflictResolver defined as Object in the signature for backward
|
||||
|
||||
@@ -63,6 +63,7 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
*/
|
||||
@Override
|
||||
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
|
||||
super.doParse(element, builder);
|
||||
|
||||
registerGemFireBeanFactoryPostProcessors(getRegistry(parserContext));
|
||||
@@ -73,7 +74,9 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
ParsingUtils.setPropertyValue(element, builder, "close");
|
||||
ParsingUtils.setPropertyValue(element, builder, "copy-on-read");
|
||||
ParsingUtils.setPropertyValue(element, builder, "critical-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "critical-off-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "eviction-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "eviction-off-heap-percentage");
|
||||
ParsingUtils.setPropertyValue(element, builder, "enable-auto-reconnect");
|
||||
ParsingUtils.setPropertyValue(element, builder, "lock-lease");
|
||||
ParsingUtils.setPropertyValue(element, builder, "lock-timeout");
|
||||
@@ -125,15 +128,18 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
/* (non-Javadoc) */
|
||||
void registerGemFireBeanFactoryPostProcessors(BeanDefinitionRegistry registry) {
|
||||
BeanDefinitionReaderUtils.registerWithGeneratedName(BeanDefinitionBuilder.genericBeanDefinition(
|
||||
CustomEditorBeanFactoryPostProcessor.class).getBeanDefinition(), registry);
|
||||
|
||||
BeanDefinitionReaderUtils.registerWithGeneratedName(
|
||||
BeanDefinitionBuilder.genericBeanDefinition(CustomEditorBeanFactoryPostProcessor.class)
|
||||
.getBeanDefinition(), registry);
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void parsePdxDiskStore(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
|
||||
ParsingUtils.setPropertyValue(element, builder, "pdx-disk-store", "pdxDiskStoreName");
|
||||
|
||||
final String pdxDiskStoreName = element.getAttribute("pdx-disk-store");
|
||||
String pdxDiskStoreName = element.getAttribute("pdx-disk-store");
|
||||
|
||||
if (!StringUtils.isEmpty(pdxDiskStoreName)) {
|
||||
registerPdxDiskStoreAwareBeanFactoryPostProcessor(getRegistry(parserContext), pdxDiskStoreName);
|
||||
@@ -142,20 +148,25 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
/* (non-Javadoc) */
|
||||
void registerPdxDiskStoreAwareBeanFactoryPostProcessor(BeanDefinitionRegistry registry, String pdxDiskStoreName) {
|
||||
|
||||
BeanDefinitionReaderUtils.registerWithGeneratedName(
|
||||
createPdxDiskStoreAwareBeanFactoryPostProcessorBeanDefinition(pdxDiskStoreName), registry);
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private AbstractBeanDefinition createPdxDiskStoreAwareBeanFactoryPostProcessorBeanDefinition(String pdxDiskStoreName) {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
|
||||
PdxDiskStoreAwareBeanFactoryPostProcessor.class);
|
||||
|
||||
BeanDefinitionBuilder builder =
|
||||
BeanDefinitionBuilder.genericBeanDefinition(PdxDiskStoreAwareBeanFactoryPostProcessor.class);
|
||||
|
||||
builder.addConstructorArgValue(pdxDiskStoreName);
|
||||
|
||||
return builder.getBeanDefinition();
|
||||
}
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void parseDynamicRegionFactory(Element element, BeanDefinitionBuilder builder) {
|
||||
|
||||
Element dynamicRegionFactory = DomUtils.getChildElementByTagName(element, "dynamic-region-factory");
|
||||
|
||||
if (dynamicRegionFactory != null) {
|
||||
@@ -167,7 +178,9 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private BeanDefinitionBuilder buildDynamicRegionSupport(Element dynamicRegionFactory) {
|
||||
|
||||
if (dynamicRegionFactory != null) {
|
||||
|
||||
BeanDefinitionBuilder dynamicRegionSupport = BeanDefinitionBuilder.genericBeanDefinition(
|
||||
CacheFactoryBean.DynamicRegionSupport.class);
|
||||
|
||||
@@ -203,17 +216,21 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
|
||||
/* (non-Javadoc) */
|
||||
private void parseJndiBindings(Element element, BeanDefinitionBuilder builder) {
|
||||
|
||||
List<Element> jndiBindings = DomUtils.getChildElementsByTagName(element, "jndi-binding");
|
||||
|
||||
if (!CollectionUtils.isEmpty(jndiBindings)) {
|
||||
|
||||
ManagedList<Object> jndiDataSources = new ManagedList<Object>(jndiBindings.size());
|
||||
|
||||
for (Element jndiBinding : jndiBindings) {
|
||||
|
||||
BeanDefinitionBuilder jndiDataSource = BeanDefinitionBuilder.genericBeanDefinition(
|
||||
CacheFactoryBean.JndiDataSource.class);
|
||||
|
||||
// NOTE 'jndi-name' and 'type' are required by the XSD so we should have at least 2 attributes.
|
||||
NamedNodeMap attributes = jndiBinding.getAttributes();
|
||||
|
||||
ManagedMap<String, String> jndiAttributes = new ManagedMap<String, String>(attributes.getLength());
|
||||
|
||||
for (int index = 0, length = attributes.getLength(); index < length; index++) {
|
||||
@@ -257,7 +274,8 @@ class CacheParser extends AbstractSingleBeanDefinitionParser {
|
||||
*/
|
||||
@Override
|
||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
|
||||
throws BeanDefinitionStoreException {
|
||||
throws BeanDefinitionStoreException {
|
||||
|
||||
String name = super.resolveId(element, definition, parserContext);
|
||||
|
||||
if (!StringUtils.hasText(name)) {
|
||||
|
||||
@@ -336,7 +336,7 @@ abstract class ParsingUtils {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
static void parseOptionalRegionAttributes(Element element, ParserContext parserContext,
|
||||
BeanDefinitionBuilder regionAttributesBuilder) {
|
||||
BeanDefinitionBuilder regionAttributesBuilder) {
|
||||
|
||||
setPropertyValue(element, regionAttributesBuilder, "cloning-enabled");
|
||||
setPropertyValue(element, regionAttributesBuilder, "concurrency-level");
|
||||
@@ -350,6 +350,7 @@ abstract class ParsingUtils {
|
||||
setPropertyValue(element, regionAttributesBuilder, "key-constraint");
|
||||
setPropertyValue(element, regionAttributesBuilder, "load-factor");
|
||||
setPropertyValue(element, regionAttributesBuilder, "multicast-enabled");
|
||||
setPropertyValue(element, regionAttributesBuilder, "off-heap");
|
||||
setPropertyValue(element, regionAttributesBuilder, "publisher");
|
||||
setPropertyValue(element, regionAttributesBuilder, "value-constraint");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user