@Test public void parseServiceConfigurationBatching() throws Exception { CacheConfiguration<?, ?> cacheConfiguration = new XmlConfiguration(getClass().getResource("/configs/writebehind-cache.xml")).getCacheConfigurations().get("template1"); DefaultWriteBehindConfiguration writeBehindConfig = findSingletonAmongst(DefaultWriteBehindConfiguration.class, cacheConfiguration.getServiceConfigurations()); assertThat(writeBehindConfig).isNotNull(); assertThat(writeBehindConfig.getConcurrency()).isEqualTo(1); assertThat(writeBehindConfig.getMaxQueueSize()).isEqualTo(10); WriteBehindConfiguration.BatchingConfiguration batchingConfiguration = writeBehindConfig.getBatchingConfiguration(); assertThat(batchingConfiguration).isNotNull(); assertThat(batchingConfiguration.getBatchSize()).isEqualTo(2); assertThat(batchingConfiguration.isCoalescing()).isEqualTo(false); assertThat(batchingConfiguration.getMaxDelay()).isEqualTo(10); assertThat(batchingConfiguration.getMaxDelayUnit()).isEqualTo(TimeUnit.SECONDS); }
.withMaxWriteDelay(new TimeType() .withValue(BigInteger.valueOf(batchingConfiguration.getMaxDelay())) .withUnit(convertToXmlTimeUnit(batchingConfiguration.getMaxDelayUnit()))
public BatchingLocalHeapWriteBehindQueue(ExecutionService executionService, String defaultThreadPool, WriteBehindConfiguration config, CacheLoaderWriter<K, V> cacheLoaderWriter) { super(cacheLoaderWriter); this.cacheLoaderWriter = cacheLoaderWriter; BatchingConfiguration batchingConfig = config.getBatchingConfiguration(); this.maxWriteDelayMs = batchingConfig.getMaxDelayUnit().toMillis(batchingConfig.getMaxDelay()); this.batchSize = batchingConfig.getBatchSize(); this.coalescing = batchingConfig.isCoalescing(); this.executorQueue = new LinkedBlockingQueue<>(config.getMaxQueueSize() / batchSize); if (config.getThreadPoolAlias() == null) { this.executor = executionService.getOrderedExecutor(defaultThreadPool, executorQueue); } else { this.executor = executionService.getOrderedExecutor(config.getThreadPoolAlias(), executorQueue); } if (config.getThreadPoolAlias() == null) { this.scheduledExecutor = executionService.getScheduledExecutor(defaultThreadPool); } else { this.scheduledExecutor = executionService.getScheduledExecutor(config.getThreadPoolAlias()); } }
.withMaxWriteDelay(new TimeType() .withValue(BigInteger.valueOf(batchingConfiguration.getMaxDelay())) .withUnit(convertToXmlTimeUnit(batchingConfiguration.getMaxDelayUnit()))
public BatchingLocalHeapWriteBehindQueue(ExecutionService executionService, String defaultThreadPool, WriteBehindConfiguration config, CacheLoaderWriter<K, V> cacheLoaderWriter) { super(cacheLoaderWriter); this.cacheLoaderWriter = cacheLoaderWriter; BatchingConfiguration batchingConfig = config.getBatchingConfiguration(); this.maxWriteDelayMs = batchingConfig.getMaxDelayUnit().toMillis(batchingConfig.getMaxDelay()); this.batchSize = batchingConfig.getBatchSize(); this.coalescing = batchingConfig.isCoalescing(); this.executorQueue = new LinkedBlockingQueue<>(config.getMaxQueueSize() / batchSize); if (config.getThreadPoolAlias() == null) { this.executor = executionService.getOrderedExecutor(defaultThreadPool, executorQueue); } else { this.executor = executionService.getOrderedExecutor(config.getThreadPoolAlias(), executorQueue); } if (config.getThreadPoolAlias() == null) { this.scheduledExecutor = executionService.getScheduledExecutor(defaultThreadPool); } else { this.scheduledExecutor = executionService.getScheduledExecutor(config.getThreadPoolAlias()); } }
@Test public void testWriteBehind() throws Exception { final URL resource = XmlConfigurationTest.class.getResource("/configs/writebehind-cache.xml"); XmlConfiguration xmlConfig = new XmlConfiguration(resource); Collection<ServiceConfiguration<?>> serviceConfiguration = xmlConfig.getCacheConfigurations().get("bar").getServiceConfigurations(); assertThat(serviceConfiguration, IsCollectionContaining.hasItem(instanceOf(WriteBehindConfiguration.class))); serviceConfiguration = xmlConfig.newCacheConfigurationBuilderFromTemplate("example", Number.class, String.class).build().getServiceConfigurations(); assertThat(serviceConfiguration, IsCollectionContaining.hasItem(instanceOf(WriteBehindConfiguration.class))); for (ServiceConfiguration<?> configuration : serviceConfiguration) { if(configuration instanceof WriteBehindConfiguration) { BatchingConfiguration batchingConfig = ((WriteBehindConfiguration) configuration).getBatchingConfiguration(); assertThat(batchingConfig.getMaxDelay(), is(10L)); assertThat(batchingConfig.getMaxDelayUnit(), is(SECONDS)); assertThat(batchingConfig.isCoalescing(), is(false)); assertThat(batchingConfig.getBatchSize(), is(2)); assertThat(((WriteBehindConfiguration) configuration).getConcurrency(), is(1)); assertThat(((WriteBehindConfiguration) configuration).getMaxQueueSize(), is(10)); break; } } }