package org.infinispan.query.affinity; import static java.text.MessageFormat.format; import static java.util.Arrays.stream; import static org.infinispan.hibernate.search.spi.InfinispanIntegration.DEFAULT_INDEXESDATA_CACHENAME; import static org.infinispan.hibernate.search.spi.InfinispanIntegration.DEFAULT_INDEXESMETADATA_CACHENAME; import static org.infinispan.hibernate.search.spi.InfinispanIntegration.DEFAULT_LOCKING_CACHENAME; import static org.testng.Assert.assertEquals; import java.util.Set; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.remoting.rpc.RpcManager; import org.infinispan.test.TestingUtil; import org.testng.annotations.Test; /** * @since 9.0 */ @Test(groups = "functional", testName = "query.AffinityRpcTest") public class AffinityRpcTest extends BaseAffinityTest { @Override protected void createCacheManagers() throws Throwable { createClusteredCaches(3, getDefaultCacheConfigBuilder()); } @Override protected Configuration getLockCacheConfig() { return getBaseIndexCacheConfig(CacheMode.DIST_SYNC).build(); } @Override protected int getNumOwners() { return 1; } public void shouldAvoidRpcsDuringIndexing() throws Exception { String[] indexCaches = {DEFAULT_INDEXESDATA_CACHENAME, DEFAULT_INDEXESMETADATA_CACHENAME, DEFAULT_LOCKING_CACHENAME}; RpcCollector rpcCollector = new RpcCollector(); cacheManagers.stream() .flatMap(cm -> cm.getCacheNames().stream().map(cm::getCache)) .forEach(cache -> replaceRpcManager(cache, rpcCollector)); waitForClusterToForm(indexCaches); populate(1, 100); stream(indexCaches).forEach(c -> assertNoRPCs(c, rpcCollector)); } private void assertNoRPCs(String cacheName, RpcCollector rpcCollector) { Set<RpcDetail> rpcsForCache = rpcCollector.getRpcsForCache(cacheName); int numRpcs = rpcsForCache.size(); assertEquals(numRpcs, 0, format("Cache {0} has done {1} Rpcs", cacheName, numRpcs)); } private void replaceRpcManager(Cache<?, ?> cache, RpcCollector rpcCollector) { RpcManager current = cache.getAdvancedCache().getRpcManager(); RpcManager replacement = new TrackingRpcManager(current, rpcCollector, cache.getName()); TestingUtil.replaceComponent(cache, RpcManager.class, replacement, true); } }