package org.infinispan.client.hotrod.stress; import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.killRemoteCacheManager; import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.killServers; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.TimeUnit; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.test.HotRodClientTestingUtil; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.server.hotrod.HotRodServer; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.AfterClass; import org.testng.annotations.Test; /** * Tests putAll performance with large and small data sets * * @author William Burns * @since 7.2 */ @Test public abstract class AbstractPutAllPerfTest extends MultipleCacheManagersTest { protected HotRodServer[] hotrodServers; protected RemoteCacheManager remoteCacheManager; protected RemoteCache<Object, Object> remoteCache; abstract protected int numberOfHotRodServers(); abstract protected ConfigurationBuilder clusterConfig(); protected final long millisecondsToRun = TimeUnit.MINUTES.toMillis(1); @Override protected void createCacheManagers() throws Throwable { final int numServers = numberOfHotRodServers(); hotrodServers = new HotRodServer[numServers]; createCluster(hotRodCacheConfiguration(clusterConfig()), numberOfHotRodServers()); for (int i = 0; i < numServers; i++) { EmbeddedCacheManager cm = cacheManagers.get(i); hotrodServers[i] = HotRodClientTestingUtil.startHotRodServer(cm); } String servers = HotRodClientTestingUtil.getServersString(hotrodServers); org.infinispan.client.hotrod.configuration.ConfigurationBuilder clientBuilder = new org.infinispan.client.hotrod.configuration.ConfigurationBuilder(); clientBuilder.addServers(servers); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); remoteCache = remoteCacheManager.getCache(); } @AfterClass(alwaysRun = true) public void release() { killRemoteCacheManager(remoteCacheManager); killServers(hotrodServers); } protected void runTest(int size, String name) { long begin = System.currentTimeMillis(); int iterations = 0; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Random random = new Random(); long currentTime; while (millisecondsToRun + begin > (currentTime = System.currentTimeMillis())) { map.clear(); for (int i = 0; i < size; ++i) { int value = random.nextInt(Integer.MAX_VALUE); map.put(value, value); } remoteCache.putAll(map); iterations++; } long totalTime = currentTime - begin; System.out.println(name + " - Performed " + iterations + " in " + totalTime + " ms generating " + iterations / (totalTime / 1000) + " ops/sec"); } public void test5Input() { runTest(5, "test5Input"); } public void test500Input() { runTest(500, "test500Input"); } public void test50000Input() { runTest(50000, "test50000Input"); } }