Search in sources :

Example 1 with FireAndForgetFunctionOnAllServers

use of org.apache.geode.internal.cache.functions.FireAndForgetFunctionOnAllServers in project geode by apache.

the class FireAndForgetFunctionOnAllServersDUnitTest method testFireAndForgetFunctionOnAllServers.

@Test
public void testFireAndForgetFunctionOnAllServers() {
    // Test case for Executing a fire-and-forget function on all servers as opposed to only
    // executing on the ones the
    // client is currently connected to.
    Host host = Host.getHost(0);
    VM locator = host.getVM(0);
    VM server1 = host.getVM(1);
    VM server2 = host.getVM(2);
    VM client = host.getVM(3);
    final int locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
    final String locatorHost = NetworkUtils.getServerHostName(host);
    // Step 1. Start a locator and one cache server.
    locator.invoke("Start Locator", () -> startLocator(locatorHost, locatorPort, ""));
    String locString = getLocatorString(host, locatorPort);
    // Step 2. Start a server and create a replicated region "R1".
    server1.invoke("Start BridgeServer", () -> startBridgeServer(new String[] { "R1" }, locString, new String[] { "R1" }));
    // Step 3. Create a client cache with pool mentioning locator.
    client.invoke("create client cache and pool mentioning locator", () -> {
        ClientCacheFactory ccf = new ClientCacheFactory();
        ccf.addPoolLocator(locatorHost, locatorPort);
        ClientCache cache = ccf.create();
        Pool pool1 = PoolManager.createFactory().addLocator(locatorHost, locatorPort).setServerGroup("R1").create("R1");
        Region region1 = cache.createClientRegionFactory(ClientRegionShortcut.PROXY).setPoolName("R1").create("R1");
        // Step 4. Execute the function to put DistributedMemberID into above created replicated
        // region.
        Function function = new FireAndForgetFunctionOnAllServers();
        FunctionService.registerFunction(function);
        PoolImpl pool = (PoolImpl) pool1;
        await().atMost(60, SECONDS).until(() -> Assert.assertEquals(1, pool.getCurrentServers().size()));
        String regionName = "R1";
        Execution dataSet = FunctionService.onServers(pool1);
        dataSet.setArguments(regionName).execute(function);
        // Using Awatility, if the condition is not met during the timeout, a
        // ConditionTimeoutException will be thrown. This makes analyzing the failure much simpler
        // Step 5. Assert for the region keyset size with 1.
        await().atMost(60, SECONDS).until(() -> Assert.assertEquals(1, region1.keySetOnServer().size()));
        region1.clear();
        // Step 6. Start another server mentioning locator and create a replicated region "R1".
        server2.invoke("Start BridgeServer", () -> startBridgeServer(new String[] { "R1" }, locString, new String[] { "R1" }));
        // Step 7. Execute the same function to put DistributedMemberID into above created replicated
        // region.
        await().atMost(60, SECONDS).until(() -> Assert.assertEquals(1, pool.getCurrentServers().size()));
        dataSet = FunctionService.onServers(pool1);
        dataSet.setArguments(regionName).execute(function);
        await().atMost(60, SECONDS).until(() -> Assert.assertEquals(2, pool.getCurrentServers().size()));
        // Using Awatility, if the condition is not met during the timeout, a
        // ConditionTimeoutException will be thrown. This makes analyzing the failure much simpler
        // Step 8. Assert for the region keyset size with 2, since above function was executed on 2
        // servers.
        await().atMost(60, SECONDS).until(() -> {
            Assert.assertEquals(2, region1.keySetOnServer().size());
        });
        region1.clear();
        // Step 8.Stop one of the servers.
        server1.invoke("Stop BridgeServer", () -> stopBridgeMemberVM(server1));
        // Step 9. Execute the same function to put DistributedMemberID into above created replicated
        // region.
        dataSet = FunctionService.onServers(pool1);
        dataSet.setArguments(regionName).execute(function);
        await().atMost(60, SECONDS).until(() -> Assert.assertEquals(1, pool.getCurrentServers().size()));
        // Using Awatility, if the condition is not met during the timeout, a
        // ConditionTimeoutException will be thrown. This makes analyzing the failure much simpler
        // Step 10. Assert for the region keyset size with 1, since only one server was running.
        await().atMost(60, SECONDS).until(() -> {
            Assert.assertEquals(1, region1.keySetOnServer().size());
        });
        region1.clear();
        return null;
    });
}
Also used : Function(org.apache.geode.cache.execute.Function) Execution(org.apache.geode.cache.execute.Execution) VM(org.apache.geode.test.dunit.VM) Region(org.apache.geode.cache.Region) Host(org.apache.geode.test.dunit.Host) FireAndForgetFunctionOnAllServers(org.apache.geode.internal.cache.functions.FireAndForgetFunctionOnAllServers) PoolImpl(org.apache.geode.cache.client.internal.PoolImpl) Test(org.junit.Test) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Aggregations

Region (org.apache.geode.cache.Region)1 PoolImpl (org.apache.geode.cache.client.internal.PoolImpl)1 Execution (org.apache.geode.cache.execute.Execution)1 Function (org.apache.geode.cache.execute.Function)1 FireAndForgetFunctionOnAllServers (org.apache.geode.internal.cache.functions.FireAndForgetFunctionOnAllServers)1 Host (org.apache.geode.test.dunit.Host)1 VM (org.apache.geode.test.dunit.VM)1 DistributedTest (org.apache.geode.test.junit.categories.DistributedTest)1 Test (org.junit.Test)1