package org.infinispan.query.affinity; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Tests behaviour of the AffinityIndexManager under topology changes. * * @since 9.0 */ @Test(groups = "stress", testName = "query.AffinityTopologyChangeTest", timeOut = 15*60*1000) public class AffinityTopologyChangeTest extends BaseAffinityTest { private final AtomicInteger globalCounter = new AtomicInteger(0); private Node indexing1, indexing2, indexing3, querying; @BeforeMethod public void prepare() { indexing1 = new IndexingNode(getIndexThreadsPerNode(), globalCounter); indexing2 = new IndexingNode(getIndexThreadsPerNode(), globalCounter); indexing3 = new IndexingNode(getIndexThreadsPerNode(), globalCounter); querying = new QueryingNode(getQueryThreadsPerNode(), globalCounter, QueryType.MATCH_ALL); } @AfterMethod public void after() { indexing3.kill(); querying.kill(); indexing2.kill(); indexing1.kill(); } @AfterMethod @Override protected void clearContent() throws Throwable { } @Override protected void createCacheManagers() throws Throwable { } @Test public void testReadWriteUnderTopologyChanges() throws Exception { CompletableFuture<?> f1 = indexing1.addToCluster().run(); CompletableFuture<?> f2 = indexing2.addToCluster().run(); eventuallyEquals(2, () -> indexing2.cacheManager.getMembers().size()); CompletableFuture<?> f3 = indexing3.addToCluster().run(); CompletableFuture<?> f4 = querying.addToCluster().run(); CompletableFuture.allOf(f1, f2, f3, f4).join(); assertDocsIndexed(50000L); } }