@Test public void testValidArguments() { DefaultSizeOfEngineConfiguration configuration = new DefaultSizeOfEngineConfiguration(10l, MemoryUnit.B, 10l); assertThat(configuration.getMaxObjectGraphSize(), equalTo(10l)); assertThat(configuration.getMaxObjectSize(), equalTo(10l)); assertThat(configuration.getUnit(), equalTo(MemoryUnit.B)); }
/** * Adds or updates the {@link DefaultSizeOfEngineConfiguration} with the specified object graph maximum size to the configured * builder. * <p> * {@link SizeOfEngine} is what enables the heap tier to be sized in {@link MemoryUnit}. * * @param size the maximum graph size * @return a new builder with the added / updated configuration */ public CacheConfigurationBuilder<K, V> withSizeOfMaxObjectGraph(long size) { return mapServiceConfiguration(DefaultSizeOfEngineConfiguration.class, existing -> ofNullable(existing) .map(e -> new DefaultSizeOfEngineConfiguration(e.getMaxObjectSize(), e.getUnit(), size)) .orElse(new DefaultSizeOfEngineConfiguration(DEFAULT_MAX_OBJECT_SIZE, DEFAULT_UNIT, size))); }
/** * Adds or updates the {@link DefaultSizeOfEngineConfiguration} with the specified maximum mapping size to the configured * builder. * <p> * {@link SizeOfEngine} is what enables the heap tier to be sized in {@link MemoryUnit}. * * @param size the maximum mapping size * @param unit the memory unit * @return a new builder with the added / updated configuration */ public CacheConfigurationBuilder<K, V> withSizeOfMaxObjectSize(long size, MemoryUnit unit) { return mapServiceConfiguration(DefaultSizeOfEngineConfiguration.class, existing -> ofNullable(existing) .map(e -> new DefaultSizeOfEngineConfiguration(size, unit, e.getMaxObjectGraphSize())) .orElse(new DefaultSizeOfEngineConfiguration(size, unit, DEFAULT_OBJECT_GRAPH_SIZE))); }
@Override public SizeOfEngine createSizeOfEngine(ResourceUnit resourceUnit, ServiceConfiguration<?>... serviceConfigs) { boolean isByteSized = resourceUnit instanceof MemoryUnit; if(!isByteSized) { return new NoopSizeOfEngine(); // Noop Size of Engine } DefaultSizeOfEngineConfiguration config = ServiceUtils.findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, (Object[]) serviceConfigs); if(config != null) { long maxSize = config.getUnit().toBytes(config.getMaxObjectSize()); return new DefaultSizeOfEngine(config.getMaxObjectGraphSize(), maxSize); } return new DefaultSizeOfEngine(maxObjectGraphSize, maxObjectSize); } }
@Test public void parseServiceConfiguration() throws Exception { XmlConfiguration configuration = new XmlConfiguration(getClass().getResource("/configs/sizeof-engine.xml")); CacheConfiguration<?, ?> cacheConfig = configuration.getCacheConfigurations().get("usesDefaultSizeOfEngine"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig.getServiceConfigurations()); assertThat(sizeOfEngineConfig).isNull(); CacheConfiguration<?, ?> cacheConfig1 = configuration.getCacheConfigurations().get("usesConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig1 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig1.getServiceConfigurations()); assertThat(sizeOfEngineConfig1).isNotNull(); assertThat(sizeOfEngineConfig1.getMaxObjectGraphSize()).isEqualTo(500); assertThat(sizeOfEngineConfig1.getMaxObjectSize()).isEqualTo(200000); CacheConfiguration<?, ?> cacheConfig2 = configuration.getCacheConfigurations().get("usesPartialOneConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig2 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig2.getServiceConfigurations()); assertThat(sizeOfEngineConfig2).isNotNull(); assertThat(sizeOfEngineConfig2.getMaxObjectGraphSize()).isEqualTo(500L); assertThat(sizeOfEngineConfig2.getMaxObjectSize()).isEqualTo(Long.MAX_VALUE); CacheConfiguration<?, ?> cacheConfig3 = configuration.getCacheConfigurations().get("usesPartialTwoConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig3 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig3.getServiceConfigurations()); assertThat(sizeOfEngineConfig3).isNotNull(); assertThat(sizeOfEngineConfig3.getMaxObjectGraphSize()).isEqualTo(1000L); assertThat(sizeOfEngineConfig3.getMaxObjectSize()).isEqualTo(200000L); }
@Test public void testIllegalMaxObjectSizeArgument() { try { new DefaultSizeOfEngineConfiguration(0, MemoryUnit.B, 1l); fail(); } catch (Exception illegalArgument) { assertThat(illegalArgument, instanceOf(IllegalArgumentException.class)); assertThat(illegalArgument.getMessage(), equalTo("ObjectGraphSize/ObjectSize can only accept positive values.")); } }
@Test public void testSizeOf() { CacheConfigurationBuilder<String, String> builder = CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, String.class, heap(10)); builder = builder.withSizeOfMaxObjectSize(10, MemoryUnit.B).withSizeOfMaxObjectGraph(100); CacheConfiguration<String, String> configuration = builder.build(); DefaultSizeOfEngineConfiguration sizeOfEngineConfiguration = ServiceUtils.findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, configuration.getServiceConfigurations()); assertThat(sizeOfEngineConfiguration, notNullValue()); assertEquals(sizeOfEngineConfiguration.getMaxObjectSize(), 10); assertEquals(sizeOfEngineConfiguration.getUnit(), MemoryUnit.B); assertEquals(sizeOfEngineConfiguration.getMaxObjectGraphSize(), 100); builder = builder.withSizeOfMaxObjectGraph(1000); configuration = builder.build(); sizeOfEngineConfiguration = ServiceUtils.findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, configuration.getServiceConfigurations()); assertEquals(sizeOfEngineConfiguration.getMaxObjectGraphSize(), 1000); }
/** * Adds or updates the {@link DefaultSizeOfEngineConfiguration} with the specified object graph maximum size to the configured * builder. * <p> * {@link SizeOfEngine} is what enables the heap tier to be sized in {@link MemoryUnit}. * * @param size the maximum graph size * @return a new builder with the added / updated configuration */ public CacheConfigurationBuilder<K, V> withSizeOfMaxObjectGraph(long size) { return mapServiceConfiguration(DefaultSizeOfEngineConfiguration.class, existing -> ofNullable(existing) .map(e -> new DefaultSizeOfEngineConfiguration(e.getMaxObjectSize(), e.getUnit(), size)) .orElse(new DefaultSizeOfEngineConfiguration(DEFAULT_MAX_OBJECT_SIZE, DEFAULT_UNIT, size))); }
/** * Adds or updates the {@link DefaultSizeOfEngineConfiguration} with the specified maximum mapping size to the configured * builder. * <p> * {@link SizeOfEngine} is what enables the heap tier to be sized in {@link MemoryUnit}. * * @param size the maximum mapping size * @param unit the memory unit * @return a new builder with the added / updated configuration */ public CacheConfigurationBuilder<K, V> withSizeOfMaxObjectSize(long size, MemoryUnit unit) { return mapServiceConfiguration(DefaultSizeOfEngineConfiguration.class, existing -> ofNullable(existing) .map(e -> new DefaultSizeOfEngineConfiguration(size, unit, e.getMaxObjectGraphSize())) .orElse(new DefaultSizeOfEngineConfiguration(size, unit, DEFAULT_OBJECT_GRAPH_SIZE))); }
@Test public void testSizeOfEngineLimits() throws Exception { final URL resource = XmlConfigurationTest.class.getResource("/configs/sizeof-engine.xml"); XmlConfiguration xmlConfig = new XmlConfiguration(new XmlConfiguration(resource)); DefaultSizeOfEngineProviderConfiguration sizeOfEngineProviderConfig = findSingletonAmongst(DefaultSizeOfEngineProviderConfiguration.class, xmlConfig.getServiceCreationConfigurations()); assertThat(sizeOfEngineProviderConfig, notNullValue()); assertEquals(sizeOfEngineProviderConfig.getMaxObjectGraphSize(), 200); assertEquals(sizeOfEngineProviderConfig.getMaxObjectSize(), 100000); CacheConfiguration<?, ?> cacheConfig = xmlConfig.getCacheConfigurations().get("usesDefaultSizeOfEngine"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig.getServiceConfigurations()); assertThat(sizeOfEngineConfig, nullValue()); CacheConfiguration<?, ?> cacheConfig1 = xmlConfig.getCacheConfigurations().get("usesConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig1 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig1.getServiceConfigurations()); assertThat(sizeOfEngineConfig1, notNullValue()); assertEquals(sizeOfEngineConfig1.getMaxObjectGraphSize(), 500); assertEquals(sizeOfEngineConfig1.getMaxObjectSize(), 200000); CacheConfiguration<?, ?> cacheConfig2 = xmlConfig.getCacheConfigurations().get("usesPartialOneConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig2 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig2.getServiceConfigurations()); assertThat(sizeOfEngineConfig2, notNullValue()); assertThat(sizeOfEngineConfig2.getMaxObjectGraphSize(), is(500L)); assertThat(sizeOfEngineConfig2.getMaxObjectSize(), is(Long.MAX_VALUE)); CacheConfiguration<?, ?> cacheConfig3 = xmlConfig.getCacheConfigurations().get("usesPartialTwoConfiguredInCache"); DefaultSizeOfEngineConfiguration sizeOfEngineConfig3 = findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, cacheConfig3.getServiceConfigurations()); assertThat(sizeOfEngineConfig3, notNullValue()); assertThat(sizeOfEngineConfig3.getMaxObjectGraphSize(), is(1000L)); assertThat(sizeOfEngineConfig3.getMaxObjectSize(), is(200000L)); }
@Test public void testIllegalMaxObjectGraphSizeArgument() { try { new DefaultSizeOfEngineConfiguration(1l, MemoryUnit.B, 0); fail(); } catch (Exception illegalArgument) { assertThat(illegalArgument, instanceOf(IllegalArgumentException.class)); assertThat(illegalArgument.getMessage(), equalTo("ObjectGraphSize/ObjectSize can only accept positive values.")); } }
public DefaultSizeOfEngineConfigurationParser() { super(DefaultSizeOfEngineConfiguration.class, CacheTemplate::heapStoreSettings, config -> new DefaultSizeOfEngineConfiguration(config.getMaxObjectSize(), config.getUnit(), config.getMaxObjectGraphSize()), CacheType::getHeapStoreSettings, CacheType::setHeapStoreSettings, config -> new SizeofType() .withMaxObjectGraphSize(new SizeofType.MaxObjectGraphSize().withValue(BigInteger.valueOf(config.getMaxObjectGraphSize()))) .withMaxObjectSize(new MemoryType() .withValue(BigInteger.valueOf(config.getMaxObjectSize())) .withUnit(MemoryUnit.fromValue(config.getUnit().toString())) )); } }
@Override public SizeOfEngine createSizeOfEngine(ResourceUnit resourceUnit, ServiceConfiguration<?>... serviceConfigs) { boolean isByteSized = resourceUnit instanceof MemoryUnit; if(!isByteSized) { return new NoopSizeOfEngine(); // Noop Size of Engine } DefaultSizeOfEngineConfiguration config = ServiceUtils.findSingletonAmongst(DefaultSizeOfEngineConfiguration.class, (Object[]) serviceConfigs); if(config != null) { long maxSize = config.getUnit().toBytes(config.getMaxObjectSize()); return new DefaultSizeOfEngine(config.getMaxObjectGraphSize(), maxSize); } return new DefaultSizeOfEngine(maxObjectGraphSize, maxObjectSize); } }
@Test public void unparseServiceConfiguration() { CacheConfiguration<?, ?> cacheConfig = newCacheConfigurationBuilder(Object.class, Object.class, heap(10)).add(new DefaultSizeOfEngineConfiguration(123, MemoryUnit.MB, 987)).build(); CacheType cacheType = new CacheType(); cacheType = new DefaultSizeOfEngineConfigurationParser().unparseServiceConfiguration(cacheConfig, cacheType); SizeofType heapStore = cacheType.getHeapStoreSettings(); assertThat(heapStore.getMaxObjectGraphSize().getValue()).isEqualTo(987); assertThat(heapStore.getMaxObjectSize().getValue()).isEqualTo(123); assertThat(heapStore.getMaxObjectSize().getUnit().value()).isEqualTo("MB"); } }
public DefaultSizeOfEngineConfigurationParser() { super(DefaultSizeOfEngineConfiguration.class, CacheTemplate::heapStoreSettings, config -> new DefaultSizeOfEngineConfiguration(config.getMaxObjectSize(), config.getUnit(), config.getMaxObjectGraphSize()), CacheType::getHeapStoreSettings, CacheType::setHeapStoreSettings, config -> new SizeofType() .withMaxObjectGraphSize(new SizeofType.MaxObjectGraphSize().withValue(BigInteger.valueOf(config.getMaxObjectGraphSize()))) .withMaxObjectSize(new MemoryType() .withValue(BigInteger.valueOf(config.getMaxObjectSize())) .withUnit(MemoryUnit.fromValue(config.getUnit().toString())) )); } }