SGF-547 - Configure Eviction with annotations.

(cherry picked from commit fffb2b0de6d54bae436be1ec51dee2db51e5f041)
Signed-off-by: John Blum <jblum@pivotal.io>
This commit is contained in:
John Blum
2016-12-05 11:02:32 -08:00
parent 420df4d2e3
commit ba87a716d0
10 changed files with 1356 additions and 361 deletions

View File

@@ -46,7 +46,6 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.gemfire.fork.LocatorProcess;
import org.springframework.data.gemfire.process.ProcessExecutor;
import org.springframework.data.gemfire.process.ProcessInputStreamListener;
import org.springframework.data.gemfire.process.ProcessWrapper;
import org.springframework.data.gemfire.test.support.FileUtils;
import org.springframework.data.gemfire.test.support.ThreadUtils;
@@ -81,15 +80,15 @@ public class CacheClusterConfigurationIntegrationTest {
@Rule
public TestRule watchman = new TestWatcher() {
@Override
protected void failed(final Throwable t, final Description description) {
protected void failed(Throwable throwable, Description description) {
System.err.println(String.format("Test '%1$s' failed...", description.getDisplayName()));
System.err.println(ThrowableUtils.toString(t));
System.err.println(ThrowableUtils.toString(throwable));
System.err.println("Locator process log file contents were...");
System.err.println(getLocatorProcessOutput(description));
}
@Override
protected void finished(final Description description) {
protected void finished(Description description) {
if (Boolean.valueOf(System.getProperty("spring.gemfire.fork.clean", Boolean.TRUE.toString()))) {
try {
FileUtils.write(new File(locatorWorkingDirectory.getParent(),
@@ -102,7 +101,7 @@ public class CacheClusterConfigurationIntegrationTest {
}
}
private String getLocatorProcessOutput(final Description description) {
private String getLocatorProcessOutput(Description description) {
try {
String locatorProcessOutputString = StringUtils.collectionToDelimitedString(locatorProcessOutput,
FileUtils.LINE_SEPARATOR, String.format("[%1$s] - ", description.getMethodName()), "");
@@ -128,20 +127,18 @@ public class CacheClusterConfigurationIntegrationTest {
ZipUtils.unzip(new ClassPathResource("/cluster_config.zip"), locatorWorkingDirectory);
List<String> arguments = new ArrayList<String>();
List<String> arguments = new ArrayList<>();
arguments.add("-Dgemfire.name=" + locatorName);
arguments.add("-Dgemfire.mcast-port=0");
arguments.add("-Dgemfire.log-level=error");
arguments.add("-Dspring.gemfire.enable-cluster-configuration=true");
arguments.add("-Dspring.gemfire.load-cluster-configuration=true");
locatorProcess = ProcessExecutor.launch(locatorWorkingDirectory, LocatorProcess.class,
arguments.toArray(new String[arguments.size()]));
locatorProcess.register(new ProcessInputStreamListener() {
@Override public void onInput(final String input) {
locatorProcessOutput.add(input);
}
});
locatorProcess.register(input -> locatorProcessOutput.add(input));
locatorProcess.registerShutdownHook();
@@ -191,11 +188,11 @@ public class CacheClusterConfigurationIntegrationTest {
return baseLocation.concat(File.separator).concat(configLocation);
}
protected Region getRegion(final ConfigurableApplicationContext applicationContext, final String regionBeanName) {
protected Region getRegion(ConfigurableApplicationContext applicationContext, String regionBeanName) {
return applicationContext.getBean(regionBeanName, Region.class);
}
protected ConfigurableApplicationContext newApplicationContext(final String... configLocations) {
protected ConfigurableApplicationContext newApplicationContext(String... configLocations) {
ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocations);
applicationContext.registerShutdownHook();
return applicationContext;
@@ -204,7 +201,7 @@ public class CacheClusterConfigurationIntegrationTest {
@Test
@Ignore
// TODO re-enable the test once the GemFire Cluster Configuration Service race condition has been properly fixed!
public void testClusterConfiguration() {
public void clusterConfigurationTest() {
ConfigurableApplicationContext applicationContext = newApplicationContext(
getLocation("cacheUsingClusterConfigurationIntegrationTest.xml"));
@@ -225,17 +222,18 @@ public class CacheClusterConfigurationIntegrationTest {
}
@Test
public void testLocalOnlyConfiguration() {
public void localConfigurationTest() {
try {
newApplicationContext(getLocation("cacheUsingLocalOnlyConfigurationIntegrationTest.xml"));
fail("Loading the 'cacheUsingLocalOnlyConfigurationIntegrationTest.xml' Spring ApplicationContext"
+ " configuration file should have resulted in an Exception due to the Region lookup on"
+ " 'ClusterConfigRegion' when GemFire Cluster Configuration is disabled!");
}
catch (BeanCreationException expected) {
assertTrue(expected.getCause() instanceof BeanInitializationException);
assertTrue(expected.getCause().getMessage().contains("Cannot find Region [ClusterConfigRegion] in Cache"));
assertTrue(expected.getCause().getMessage().matches(
"Region \\[ClusterConfigRegion\\] in Cache \\[.*\\] not found"));
}
}
}

View File

@@ -15,9 +15,9 @@
*/
package org.springframework.data.gemfire.client;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -55,6 +55,7 @@ import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.io.Resource;
import org.springframework.data.gemfire.TestUtils;
import org.springframework.data.gemfire.config.xml.GemfireConstants;
import org.springframework.data.gemfire.util.ArrayUtils;
/**
* @author David Turanski
@@ -66,7 +67,7 @@ public class ClientRegionFactoryBeanTest {
@Before
public void setup() {
factoryBean = new ClientRegionFactoryBean<Object, Object>();
factoryBean = new ClientRegionFactoryBean<>();
}
@After
@@ -78,7 +79,7 @@ public class ClientRegionFactoryBeanTest {
@Test
@SuppressWarnings({ "deprecation", "unchecked" })
public void testLookupFallbackUsingDefaultShortcut() throws Exception {
final String testRegionName = "TestRegion";
String testRegionName = "TestRegion";
ClientCache mockClientCache = mock(ClientCache.class);
ClientRegionFactory mockClientRegionFactory = mock(ClientRegionFactory.class);
@@ -118,15 +119,18 @@ public class ClientRegionFactoryBeanTest {
when(mockPool.getName()).thenReturn("TestPoolTwo");
when(mockSnapshot.getInputStream()).thenReturn(mock(InputStream.class));
EvictionAttributes evictionAttributes = EvictionAttributes.createLRUEntryAttributes();
factoryBean.setAttributes(mockRegionAttributes);
factoryBean.setBeanFactory(mockBeanFactory);
factoryBean.setDiskStoreName("TestDiskStoreTwo");
factoryBean.setEvictionAttributes(evictionAttributes);
factoryBean.setPersistent(false);
factoryBean.setPoolName("TestPoolTwo");
factoryBean.setSnapshot(mockSnapshot);
factoryBean.setShortcut(null);
Region actualRegion = factoryBean.lookupFallback(mockClientCache, testRegionName);
Region actualRegion = factoryBean.lookupRegion(mockClientCache, testRegionName);
assertSame(mockRegion, actualRegion);
@@ -141,7 +145,7 @@ public class ClientRegionFactoryBeanTest {
verify(mockClientRegionFactory, times(1)).setDiskSynchronous(eq(false));
verify(mockClientRegionFactory, times(1)).setEntryIdleTimeout(any(ExpirationAttributes.class));
verify(mockClientRegionFactory, times(1)).setEntryTimeToLive(any(ExpirationAttributes.class));
verify(mockClientRegionFactory, times(1)).setEvictionAttributes(any(EvictionAttributes.class));
verify(mockClientRegionFactory, times(1)).setEvictionAttributes(eq(evictionAttributes));
verify(mockClientRegionFactory, times(1)).setInitialCapacity(eq(101));
verify(mockClientRegionFactory, times(1)).setKeyConstraint(eq(Long.class));
verify(mockClientRegionFactory, times(1)).setLoadFactor(eq(0.75f));
@@ -153,7 +157,7 @@ public class ClientRegionFactoryBeanTest {
verify(mockClientRegionFactory, times(1)).setPoolName(eq("TestPoolTwo"));
verify(mockClientRegionFactory, times(1)).setDiskStoreName(eq("TestDiskStoreTwo"));
verify(mockClientRegionFactory, times(1)).create(eq(testRegionName));
verify(mockRegion, times(1)).loadSnapshot(any(InputStream.class));
verify(mockRegion, never()).loadSnapshot(any(InputStream.class));
}
@Test
@@ -176,7 +180,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.setPoolName("TestPool");
factoryBean.setShortcut(null);
Region<Object, Object> actualRegion = factoryBean.lookupFallback(mockClientCache, "TestRegion");
Region<Object, Object> actualRegion = factoryBean.lookupRegion(mockClientCache, "TestRegion");
assertSame(mockRegion, actualRegion);
@@ -204,7 +208,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.setBeanFactory(mockBeanFactory);
factoryBean.setShortcut(ClientRegionShortcut.CACHING_PROXY);
Region<Object, Object> actualRegion = factoryBean.lookupFallback(mockClientCache, "TestRegion");
Region<Object, Object> actualRegion = factoryBean.lookupRegion(mockClientCache, "TestRegion");
assertSame(mockRegion, actualRegion);
@@ -233,7 +237,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.setParent(mockRegion);
factoryBean.setShortcut(ClientRegionShortcut.PROXY);
Region<Object, Object> actualRegion = factoryBean.lookupFallback(mockClientCache, "TestSubRegion");
Region<Object, Object> actualRegion = factoryBean.lookupRegion(mockClientCache, "TestSubRegion");
assertSame(mockSubRegion, actualRegion);
@@ -259,7 +263,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.setBeanFactory(mockBeanFactory);
factoryBean.setShortcut(ClientRegionShortcut.LOCAL_HEAP_LRU);
Region<Object, Object> actualRegion = factoryBean.lookupFallback(mockClientCache, "TestRegion");
Region<Object, Object> actualRegion = factoryBean.lookupRegion(mockClientCache, "TestRegion");
assertSame(mockRegion, actualRegion);
@@ -323,7 +327,7 @@ public class ClientRegionFactoryBeanTest {
@Test
public void testCloseDestroySettings() {
final ClientRegionFactoryBean<Object, Object> factory = new ClientRegionFactoryBean<Object, Object>();
final ClientRegionFactoryBean<Object, Object> factory = new ClientRegionFactoryBean<>();
assertNotNull(factory);
assertFalse(factory.isClose());
@@ -429,7 +433,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.resolveClientRegionShortcut();
}
catch (IllegalArgumentException expected) {
assertEquals("Client Region Shortcut 'CACHING_PROXY' is invalid when persistent is true.",
assertEquals("Client Region Shortcut 'CACHING_PROXY' is invalid when persistent is true",
expected.getMessage());
throw expected;
}
@@ -456,7 +460,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.resolveClientRegionShortcut();
}
catch (IllegalArgumentException expected) {
assertEquals("Client Region Shortcut 'LOCAL_PERSISTENT' is invalid when persistent is false.",
assertEquals("Client Region Shortcut 'LOCAL_PERSISTENT' is invalid when persistent is false",
expected.getMessage());
throw expected;
}
@@ -503,7 +507,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.resolveClientRegionShortcut();
}
catch (IllegalArgumentException expected) {
assertEquals("Data Policy 'NORMAL' is invalid when persistent is true.", expected.getMessage());
assertEquals("Data Policy 'NORMAL' is invalid when persistent is true", expected.getMessage());
throw expected;
}
}
@@ -529,7 +533,7 @@ public class ClientRegionFactoryBeanTest {
factoryBean.resolveClientRegionShortcut();
}
catch (IllegalArgumentException expected) {
assertEquals("Data Policy 'PERSISTENT_REPLICATE' is invalid when persistent is false.", expected.getMessage());
assertEquals("Data Policy 'PERSISTENT_REPLICATE' is invalid when persistent is false", expected.getMessage());
throw expected;
}
}
@@ -548,10 +552,6 @@ public class ClientRegionFactoryBeanTest {
return new Interest<K>(key);
}
protected <K> Interest<K>[] toArray(Interest<K>... interests) {
return interests;
}
@Test
@SuppressWarnings("unchecked")
public void destroyCallsRegionClose() throws Exception {
@@ -569,7 +569,7 @@ public class ClientRegionFactoryBeanTest {
};
clientRegionFactoryBean.setClose(true);
clientRegionFactoryBean.setInterests(toArray(newInterest("test")));
clientRegionFactoryBean.setInterests(ArrayUtils.asArray(newInterest("test")));
assertThat(clientRegionFactoryBean.isClose(), is(true));
assertThat(clientRegionFactoryBean.isDestroy(), is(false));
@@ -604,7 +604,7 @@ public class ClientRegionFactoryBeanTest {
clientRegionFactoryBean.setClose(false);
clientRegionFactoryBean.setDestroy(true);
clientRegionFactoryBean.setInterests(toArray(newInterest("test")));
clientRegionFactoryBean.setInterests(ArrayUtils.asArray(newInterest("test")));
assertThat(clientRegionFactoryBean.isClose(), is(false));
assertThat(clientRegionFactoryBean.isDestroy(), is(true));
@@ -638,7 +638,7 @@ public class ClientRegionFactoryBeanTest {
};
clientRegionFactoryBean.setClose(true);
clientRegionFactoryBean.setInterests(toArray(newInterest("test")));
clientRegionFactoryBean.setInterests(ArrayUtils.asArray(newInterest("test")));
assertThat(clientRegionFactoryBean.isClose(), is(true));
assertThat(clientRegionFactoryBean.isDestroy(), is(false));
@@ -685,5 +685,4 @@ public class ClientRegionFactoryBeanTest {
clientRegionFactoryBean.destroy();
}
}

View File

@@ -0,0 +1,276 @@
/*
* Copyright 2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.springframework.data.gemfire.config.annotation;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.data.gemfire.config.annotation.EnableEviction.EvictionPolicy;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.EvictionAttributes;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionAttributes;
import org.apache.geode.cache.RegionFactory;
import org.apache.geode.cache.util.ObjectSizer;
import org.junit.After;
import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.EvictionActionType;
import org.springframework.data.gemfire.EvictionAttributesFactoryBean;
import org.springframework.data.gemfire.EvictionPolicyType;
import org.springframework.data.gemfire.PartitionedRegionFactoryBean;
import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;
import org.springframework.data.gemfire.util.ArrayUtils;
/**
* Unit tests for the {@link EnableEviction} annotation and {@link EvictionConfiguration} class.
*
* @author John Blum
* @see org.junit.Test
* @see org.mockito.Mockito
* @see org.springframework.data.gemfire.config.annotation.EnableEviction
* @see org.springframework.data.gemfire.config.annotation.EvictionConfiguration
* @see org.springframework.data.gemfire.EvictionAttributesFactoryBean
* @see org.apache.geode.cache.Region
* @see org.apache.geode.cache.EvictionAttributes
* @since 1.9.0
*/
public class EnableEvictionConfigurationUnitTests {
private ConfigurableApplicationContext applicationContext;
@After
public void tearDown() {
if (applicationContext != null) {
applicationContext.close();
}
}
protected void assertEvictionAttributes(Region region, EvictionAttributes expectedEvictionAttributes) {
assertThat(region).isNotNull();
assertThat(region.getAttributes()).isNotNull();
assertEvictionAttributes(region.getAttributes().getEvictionAttributes(), expectedEvictionAttributes);
}
protected void assertEvictionAttributes(EvictionAttributes actualEvictionAttributes,
EvictionAttributes expectedEvictionAttributes) {
assertThat(actualEvictionAttributes).isNotNull();
assertThat(actualEvictionAttributes.getAction()).isEqualTo(expectedEvictionAttributes.getAction());
assertThat(actualEvictionAttributes.getAlgorithm()).isEqualTo(expectedEvictionAttributes.getAlgorithm());
assertThat(actualEvictionAttributes.getObjectSizer()).isEqualTo(expectedEvictionAttributes.getObjectSizer());
if (!EvictionPolicyType.HEAP_PERCENTAGE.equals(
EvictionPolicyType.valueOf(actualEvictionAttributes.getAlgorithm()))) {
assertThat(actualEvictionAttributes.getMaximum()).isEqualTo(expectedEvictionAttributes.getMaximum());
}
}
@SuppressWarnings("unchecked")
protected <K, V> Region<K, V> getRegion(String beanName) {
return applicationContext.getBean(beanName, Region.class);
}
protected AnnotationConfigApplicationContext newApplicationContext(Class<?>... annotatedClasses) {
return new AnnotationConfigApplicationContext(annotatedClasses);
}
protected EvictionAttributes newEvictionAttributes(Integer maximum, EvictionPolicyType type, EvictionActionType action,
ObjectSizer... objectSizer) {
EvictionAttributesFactoryBean evictionAttributesFactory = new EvictionAttributesFactoryBean();
evictionAttributesFactory.setAction(action.getEvictionAction());
evictionAttributesFactory.setObjectSizer(ArrayUtils.getFirst(objectSizer));
evictionAttributesFactory.setThreshold(maximum);
evictionAttributesFactory.setType(type);
evictionAttributesFactory.afterPropertiesSet();
return evictionAttributesFactory.getObject();
}
@Test
public void usesDefaultEvictionPolicyConfiguration() {
applicationContext = newApplicationContext(DefaultEvictionPolicyConfiguration.class);
EvictionAttributes defaultEvictionAttributes = EvictionAttributes.createLRUEntryAttributes();
assertEvictionAttributes(applicationContext.getBean("PartitionRegion", Region.class), defaultEvictionAttributes);
assertEvictionAttributes(applicationContext.getBean("ReplicateRegion", Region.class), defaultEvictionAttributes);
}
@Test
public void usesCustomEvictionPolicyConfiguration() {
applicationContext = newApplicationContext(CustomEvictionPolicyConfiguration.class);
ObjectSizer mockObjectSizer = applicationContext.getBean("mockObjectSizer", ObjectSizer.class);
EvictionAttributes customEvictionAttributes = newEvictionAttributes(65536, EvictionPolicyType.MEMORY_SIZE,
EvictionActionType.OVERFLOW_TO_DISK, mockObjectSizer);
assertEvictionAttributes(applicationContext.getBean("PartitionRegion", Region.class), customEvictionAttributes);
assertEvictionAttributes(applicationContext.getBean("ReplicateRegion", Region.class), customEvictionAttributes);
}
@Test
public void usesRegionSpecificEvictionPolicyConfiguration() {
applicationContext = newApplicationContext(RegionSpecificEvictionPolicyConfiguration.class);
ObjectSizer mockObjectSizer = applicationContext.getBean("mockObjectSizer", ObjectSizer.class);
EvictionAttributes partitionRegionEvictionAttributes = newEvictionAttributes(null,
EvictionPolicyType.HEAP_PERCENTAGE, EvictionActionType.OVERFLOW_TO_DISK, mockObjectSizer);
EvictionAttributes replicateRegionEvictionAttributes = newEvictionAttributes(10000,
EvictionPolicyType.ENTRY_COUNT, EvictionActionType.LOCAL_DESTROY);
assertEvictionAttributes(applicationContext.getBean("PartitionRegion", Region.class),
partitionRegionEvictionAttributes);
assertEvictionAttributes(applicationContext.getBean("ReplicateRegion", Region.class),
replicateRegionEvictionAttributes);
}
@Test
public void usesLastMatchingEvictionPolicyConfiguration() {
applicationContext = newApplicationContext(LastMatchingWinsEvictionPolicyConfiguration.class);
EvictionAttributes lastMatchingEvictionAttributes = newEvictionAttributes(99, EvictionPolicyType.ENTRY_COUNT,
EvictionActionType.OVERFLOW_TO_DISK);
assertEvictionAttributes(applicationContext.getBean("PartitionRegion", Region.class),
lastMatchingEvictionAttributes);
assertEvictionAttributes(applicationContext.getBean("ReplicateRegion", Region.class),
lastMatchingEvictionAttributes);
}
@Configuration
@SuppressWarnings("unused")
static class CacheRegionConfiguration {
@Bean("mockCache")
@SuppressWarnings("unchecked")
Cache mockCache() {
Cache mockCache = mock(Cache.class);
RegionFactory mockRegionFactory = mock(RegionFactory.class);
final AtomicReference<EvictionAttributes> evictionAttributes =
new AtomicReference<>(null);
when(mockCache.createRegionFactory()).thenReturn(mockRegionFactory);
when(mockRegionFactory.setEvictionAttributes(any(EvictionAttributes.class))).thenAnswer(
new Answer<RegionFactory>() {
@Override
public RegionFactory answer(InvocationOnMock invocation) throws Throwable {
evictionAttributes.set(invocation.getArgumentAt(0, EvictionAttributes.class));
return (RegionFactory) invocation.getMock();
}
}
);
when(mockRegionFactory.create(anyString())).thenAnswer(new Answer<Region>() {
@Override
public Region answer(InvocationOnMock invocation) throws Throwable {
String regionName = invocation.getArgumentAt(0, String.class);
Region mockRegion = mock(Region.class, regionName);
RegionAttributes mockRegionAttributes =
mock(RegionAttributes.class, regionName.concat("Attributes"));
when(mockRegion.getName()).thenReturn(regionName);
when(mockRegion.getFullPath()).thenReturn(String.format("%1$s%2$s", Region.SEPARATOR, regionName));
when(mockRegion.getAttributes()).thenReturn(mockRegionAttributes);
when(mockRegionAttributes.getEvictionAttributes()).thenReturn(evictionAttributes.get());
return mockRegion;
}
});
return mockCache;
}
@Bean("PartitionRegion")
PartitionedRegionFactoryBean<Object, Object> mockPartitionRegion(Cache gemfireCache) {
PartitionedRegionFactoryBean<Object, Object> partitionRegion =
new PartitionedRegionFactoryBean<>();
partitionRegion.setCache(gemfireCache);
partitionRegion.setClose(false);
partitionRegion.setPersistent(false);
return partitionRegion;
}
@Bean("ReplicateRegion")
ReplicatedRegionFactoryBean<Object, Object> mockReplicateRegion(Cache gemfireCache) {
ReplicatedRegionFactoryBean<Object, Object> replicateRegion =
new ReplicatedRegionFactoryBean<>();
replicateRegion.setCache(gemfireCache);
replicateRegion.setClose(false);
replicateRegion.setPersistent(false);
return replicateRegion;
}
@Bean
ObjectSizer mockObjectSizer() {
return mock(ObjectSizer.class);
}
}
@EnableEviction
static class DefaultEvictionPolicyConfiguration extends CacheRegionConfiguration {
}
@EnableEviction(policies = @EvictionPolicy(maximum = 65536, type = EvictionPolicyType.MEMORY_SIZE,
action = EvictionActionType.OVERFLOW_TO_DISK, objectSizerName = "mockObjectSizer"))
static class CustomEvictionPolicyConfiguration extends CacheRegionConfiguration {
}
@EnableEviction(policies = {
@EvictionPolicy(maximum = 85, type = EvictionPolicyType.HEAP_PERCENTAGE, action = EvictionActionType.OVERFLOW_TO_DISK,
objectSizerName = "mockObjectSizer", regionNames = "PartitionRegion"),
@EvictionPolicy(maximum = 10000, type = EvictionPolicyType.ENTRY_COUNT, action = EvictionActionType.LOCAL_DESTROY,
regionNames = "ReplicateRegion")
})
static class RegionSpecificEvictionPolicyConfiguration extends CacheRegionConfiguration {
}
@EnableEviction(policies = {
@EvictionPolicy(maximum = 1, type = EvictionPolicyType.ENTRY_COUNT, action = EvictionActionType.LOCAL_DESTROY,
objectSizerName = "mockObjectSizer", regionNames = "ReplicateRegion"),
@EvictionPolicy(maximum = 99, type = EvictionPolicyType.ENTRY_COUNT, action = EvictionActionType.OVERFLOW_TO_DISK)
})
static class LastMatchingWinsEvictionPolicyConfiguration extends CacheRegionConfiguration {
}
}