Search in sources :

Example 16 with CqAttributesFactory

use of org.apache.geode.cache.query.CqAttributesFactory in project geode by apache.

the class PdxQueryCQDUnitTest method testCqAndInterestRegistrationsWithFailOver.

/**
   * Tests client-server query on PdxInstance.
   */
@Test
public void testCqAndInterestRegistrationsWithFailOver() throws CacheException {
    final Host host = Host.getHost(0);
    VM vm0 = host.getVM(0);
    VM vm1 = host.getVM(1);
    VM vm2 = host.getVM(2);
    VM vm3 = host.getVM(3);
    final int numberOfEntries = 10;
    // where id > 5 (0-5)
    final int queryLimit = 6;
    final String[] queries = new String[] { "SELECT * FROM " + regName + " p WHERE p.ticker = 'vmware'", "SELECT * FROM " + regName + " WHERE id > 5" };
    // Start server1
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer(false, true);
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Start server2
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer(false, true);
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Start server3
    vm2.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer(false, true);
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Client pool.
    final int port0 = vm0.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final int port1 = vm1.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final int port2 = vm2.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final String host0 = NetworkUtils.getServerHostName(vm0.getHost());
    // Create client pool.
    final String poolName = "testCqPool";
    createPool(vm3, poolName, new String[] { host0, host0, host0 }, new int[] { port1, port0, port2 }, true, 1);
    final String cqName = "testCq";
    vm3.invoke(new CacheSerializableRunnable("init region") {

        public void run2() throws CacheException {
            QueryService localQueryService = null;
            AttributesFactory factory = new AttributesFactory();
            factory.setScope(Scope.LOCAL);
            ClientServerTestCase.configureConnectionPool(factory, host0, port1, -1, true, -1, -1, null);
            Region region = createRegion(regionName, rootRegionName, factory.create());
            for (int i = 0; i < numberOfEntries; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    SerializableRunnable subscribe = new CacheSerializableRunnable("subscribe") {

        public void run2() throws CacheException {
            // Register interest
            Region region = getRootRegion().getSubregion(regionName);
            List list = new ArrayList();
            for (int i = 1; i <= numberOfEntries * 3; i++) {
                if (i % 4 == 0) {
                    list.add("key-" + i);
                }
            }
            region.registerInterest(list);
            LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName);
            // Get CQ Service.
            QueryService qService = null;
            try {
                qService = (PoolManager.find(poolName)).getQueryService();
            } catch (Exception cqe) {
                Assert.fail("Failed to getCQService.", cqe);
            }
            // Create CQ Attributes.
            for (int i = 0; i < queries.length; i++) {
                CqAttributesFactory cqf = new CqAttributesFactory();
                CqListener[] cqListeners = { new CqQueryTestListener(LogWriterUtils.getLogWriter()) };
                ((CqQueryTestListener) cqListeners[0]).cqName = (cqName + i);
                cqf.initCqListeners(cqListeners);
                CqAttributes cqa = cqf.create();
                // Create CQ.
                try {
                    CqQuery cq = qService.newCq(cqName + i, queries[i], cqa);
                    SelectResults sr = cq.executeWithInitialResults();
                    for (Object o : sr.asSet()) {
                        Struct s = (Struct) o;
                        Object value = s.get("value");
                        if (!(value instanceof TestObject)) {
                            fail("Expected type TestObject, not found in result set. Found type :" + o.getClass());
                        }
                    }
                } catch (Exception ex) {
                    AssertionError err = new AssertionError("Failed to create CQ " + cqName + " . ");
                    err.initCause(ex);
                    LogWriterUtils.getLogWriter().info("QueryService is :" + qService, err);
                    throw err;
                }
            }
        }
    };
    vm3.invoke(subscribe);
    // Check for TestObject instances on Server2.
    // It should be 0
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            // Check for TestObject instances.
            assertEquals(0, TestObject.numInstance);
        }
    });
    // update
    vm3.invoke(new CacheSerializableRunnable("Update") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            for (int i = 0; i < numberOfEntries * 2; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    // Validate CQs.
    for (int i = 0; i < queries.length; i++) {
        int expectedEvent = 0;
        int updateEvents = 0;
        if (i != 0) {
            expectedEvent = (numberOfEntries * 2) - queryLimit;
            updateEvents = numberOfEntries - queryLimit;
        } else {
            expectedEvent = numberOfEntries * 2;
            updateEvents = numberOfEntries;
        }
        validateCq(vm3, cqName + i, expectedEvent, numberOfEntries, updateEvents);
    }
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            // Check for TestObject instances.
            assertEquals(0, TestObject.numInstance);
        }
    });
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    // Update
    vm3.invokeAsync(new CacheSerializableRunnable("Update") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            for (int i = 0; i < numberOfEntries * 2; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    // Kill server
    this.closeClient(vm0);
    // validate cq
    for (int i = 0; i < queries.length; i++) {
        int expectedEvent = 0;
        int updateEvents = 0;
        if (i != 0) {
            // Double the previous time
            expectedEvent = (numberOfEntries * 4) - (queryLimit * 2);
            updateEvents = (numberOfEntries * 3) - (queryLimit * 2);
        } else {
            expectedEvent = numberOfEntries * 4;
            updateEvents = numberOfEntries * 3;
        }
        validateCq(vm3, cqName + i, expectedEvent, numberOfEntries, updateEvents);
    }
    this.closeClient(vm1);
    // Check for TestObject instances on Server3.
    // It should be 0
    vm2.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    this.closeClient(vm2);
    this.closeClient(vm3);
}
Also used : CacheException(org.apache.geode.cache.CacheException) ArrayList(java.util.ArrayList) Struct(org.apache.geode.cache.query.Struct) AttributesFactory(org.apache.geode.cache.AttributesFactory) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) SelectResults(org.apache.geode.cache.query.SelectResults) ArrayList(java.util.ArrayList) List(java.util.List) CqQuery(org.apache.geode.cache.query.CqQuery) CqQueryTestListener(org.apache.geode.cache.query.cq.dunit.CqQueryTestListener) CqListener(org.apache.geode.cache.query.CqListener) SerializableRunnable(org.apache.geode.test.dunit.SerializableRunnable) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) Host(org.apache.geode.test.dunit.Host) CacheException(org.apache.geode.cache.CacheException) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) VM(org.apache.geode.test.dunit.VM) Region(org.apache.geode.cache.Region) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) ClientSubscriptionTest(org.apache.geode.test.junit.categories.ClientSubscriptionTest) Test(org.junit.Test) SerializationTest(org.apache.geode.test.junit.categories.SerializationTest) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 17 with CqAttributesFactory

use of org.apache.geode.cache.query.CqAttributesFactory in project geode by apache.

the class PdxQueryCQDUnitTest method testCqAndInterestRegistrations.

/**
   * Tests client-server query on PdxInstance.
   */
@Test
public void testCqAndInterestRegistrations() throws CacheException {
    final Host host = Host.getHost(0);
    VM vm0 = host.getVM(0);
    VM vm1 = host.getVM(1);
    VM vm2 = host.getVM(2);
    VM vm3 = host.getVM(3);
    final int numberOfEntries = 10;
    // where id > 5 (0-5)
    final int queryLimit = 6;
    final String[] queries = new String[] { "SELECT * FROM " + regName + " p WHERE p.ticker = 'vmware'", "SELECT * FROM " + regName + " WHERE id > 5" };
    // Start server1
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer(false, true);
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Start server2
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            configAndStartBridgeServer(false, true);
            Region region = getRootRegion().getSubregion(regionName);
        }
    });
    // Client pool.
    final int port0 = vm0.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final int port1 = vm1.invoke(() -> PdxQueryCQTestBase.getCacheServerPort());
    final String host0 = NetworkUtils.getServerHostName(vm0.getHost());
    // Create client pool.
    final String poolName = "testCqPool";
    createPool(vm2, poolName, new String[] { host0, host0 }, new int[] { port0, port1 }, true);
    createPool(vm3, poolName, new String[] { host0, host0 }, new int[] { port1, port0 }, true);
    final String cqName = "testCq";
    vm3.invoke(new CacheSerializableRunnable("init region") {

        public void run2() throws CacheException {
            QueryService localQueryService = null;
            AttributesFactory factory = new AttributesFactory();
            factory.setScope(Scope.LOCAL);
            ClientServerTestCase.configureConnectionPool(factory, host0, port1, -1, true, -1, -1, null);
            Region region = createRegion(regionName, rootRegionName, factory.create());
            for (int i = 0; i < numberOfEntries; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    vm2.invoke(new CacheSerializableRunnable("init region") {

        public void run2() throws CacheException {
            QueryService localQueryService = null;
            AttributesFactory factory = new AttributesFactory();
            factory.setScope(Scope.LOCAL);
            ClientServerTestCase.configureConnectionPool(factory, host0, port0, -1, true, -1, -1, null);
            Region region = createRegion(regionName, rootRegionName, factory.create());
        }
    });
    SerializableRunnable subscribe = new CacheSerializableRunnable("subscribe") {

        public void run2() throws CacheException {
            // Register interest
            Region region = getRootRegion().getSubregion(regionName);
            List list = new ArrayList();
            for (int i = 1; i <= numberOfEntries * 3; i++) {
                if (i % 4 == 0) {
                    list.add("key-" + i);
                }
            }
            region.registerInterest(list);
            LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName);
            // Get CQ Service.
            QueryService qService = null;
            try {
                qService = (PoolManager.find(poolName)).getQueryService();
            } catch (Exception cqe) {
                Assert.fail("Failed to getCQService.", cqe);
            }
            // Create CQ Attributes.
            for (int i = 0; i < queries.length; i++) {
                CqAttributesFactory cqf = new CqAttributesFactory();
                CqListener[] cqListeners = { new CqQueryTestListener(LogWriterUtils.getLogWriter()) };
                ((CqQueryTestListener) cqListeners[0]).cqName = (cqName + i);
                cqf.initCqListeners(cqListeners);
                CqAttributes cqa = cqf.create();
                // Create CQ.
                try {
                    CqQuery cq = qService.newCq(cqName + i, queries[i], cqa);
                    SelectResults sr = cq.executeWithInitialResults();
                    for (Object o : sr.asSet()) {
                        Struct s = (Struct) o;
                        Object value = s.get("value");
                        if (!(value instanceof TestObject)) {
                            fail("Expected type TestObject, not found in result set. Found type :" + o.getClass());
                        }
                    }
                } catch (Exception ex) {
                    AssertionError err = new AssertionError("Failed to create CQ " + cqName + " . ");
                    err.initCause(ex);
                    LogWriterUtils.getLogWriter().info("QueryService is :" + qService, err);
                    throw err;
                }
            }
        }
    };
    vm2.invoke(subscribe);
    vm3.invoke(subscribe);
    // Check for TestObject instances on Server2.
    // It should be 0
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            // Check for TestObject instances.
            assertEquals(0, TestObject.numInstance);
        }
    });
    vm3.invoke(new CacheSerializableRunnable("Update") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            for (int i = 0; i < numberOfEntries * 2; i++) {
                region.put("key-" + i, new TestObject(i, "vmware"));
            }
        }
    });
    // Validate CQs.
    for (int i = 0; i < queries.length; i++) {
        int expectedEvent = 0;
        int updateEvents = 0;
        if (i != 0) {
            expectedEvent = numberOfEntries * 2 - queryLimit;
            updateEvents = numberOfEntries - queryLimit;
        } else {
            expectedEvent = numberOfEntries * 2;
            updateEvents = numberOfEntries;
        }
        validateCq(vm2, cqName + i, expectedEvent, numberOfEntries, updateEvents);
        validateCq(vm3, cqName + i, expectedEvent, numberOfEntries, updateEvents);
    }
    vm0.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            Region region = getRootRegion().getSubregion(regionName);
            // Check for TestObject instances.
            assertEquals(0, TestObject.numInstance);
        }
    });
    // Check for TestObject instances on Server2.
    // It should be 0
    vm1.invoke(new CacheSerializableRunnable("Create Bridge Server") {

        public void run2() throws CacheException {
            assertEquals(0, TestObject.numInstance);
        }
    });
    this.closeClient(vm2);
    this.closeClient(vm3);
    this.closeClient(vm1);
    this.closeClient(vm0);
}
Also used : CacheException(org.apache.geode.cache.CacheException) ArrayList(java.util.ArrayList) Struct(org.apache.geode.cache.query.Struct) AttributesFactory(org.apache.geode.cache.AttributesFactory) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) SelectResults(org.apache.geode.cache.query.SelectResults) ArrayList(java.util.ArrayList) List(java.util.List) CqQuery(org.apache.geode.cache.query.CqQuery) CqQueryTestListener(org.apache.geode.cache.query.cq.dunit.CqQueryTestListener) CqListener(org.apache.geode.cache.query.CqListener) SerializableRunnable(org.apache.geode.test.dunit.SerializableRunnable) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) Host(org.apache.geode.test.dunit.Host) CacheException(org.apache.geode.cache.CacheException) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) VM(org.apache.geode.test.dunit.VM) Region(org.apache.geode.cache.Region) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) TestObject(org.apache.geode.cache.query.dunit.PdxQueryCQTestBase.TestObject) ClientSubscriptionTest(org.apache.geode.test.junit.categories.ClientSubscriptionTest) Test(org.junit.Test) SerializationTest(org.apache.geode.test.junit.categories.SerializationTest) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 18 with CqAttributesFactory

use of org.apache.geode.cache.query.CqAttributesFactory in project geode by apache.

the class PrCqUsingPoolDUnitTest method createCQ.

public void createCQ(VM vm, final String poolName, final String cqName, final String queryStr) {
    vm.invoke(new CacheSerializableRunnable("Create CQ :" + cqName) {

        public void run2() throws CacheException {
            // pause(60 * 1000);
            // getLogWriter().info("### DEBUG CREATE CQ START ####");
            // pause(20 * 1000);
            LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName);
            // Get CQ Service.
            QueryService cqService = null;
            try {
                cqService = (PoolManager.find(poolName)).getQueryService();
            } catch (Exception cqe) {
                cqe.printStackTrace();
                Assert.fail("Failed to getCQService.", cqe);
            }
            // Create CQ Attributes.
            CqAttributesFactory cqf = new CqAttributesFactory();
            CqListener[] cqListeners = { new CqQueryTestListener(LogWriterUtils.getLogWriter()) };
            ((CqQueryTestListener) cqListeners[0]).cqName = cqName;
            cqf.initCqListeners(cqListeners);
            CqAttributes cqa = cqf.create();
            // Create CQ.
            try {
                CqQuery cq1 = cqService.newCq(cqName, queryStr, cqa);
                assertTrue("newCq() state mismatch", cq1.getState().isStopped());
                LogWriterUtils.getLogWriter().info("Created a new CqQuery : " + cq1);
            } catch (Exception ex) {
                LogWriterUtils.getLogWriter().info("CqService is :" + cqService, ex);
                throw new AssertionError("Failed to create CQ " + cqName + " . ", ex);
            }
        }
    });
}
Also used : CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) CacheException(org.apache.geode.cache.CacheException) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) CqQuery(org.apache.geode.cache.query.CqQuery) IOException(java.io.IOException) CacheException(org.apache.geode.cache.CacheException)

Example 19 with CqAttributesFactory

use of org.apache.geode.cache.query.CqAttributesFactory in project geode by apache.

the class CqQueryUsingPoolDUnitTest method createCQ.

/* Register CQs */
public void createCQ(VM vm, final String poolName, final String cqName, final String queryStr) {
    vm.invoke(new CacheSerializableRunnable("Create CQ :" + cqName) {

        @Override
        public void run2() throws CacheException {
            LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName);
            // Get CQ Service.
            QueryService qService = null;
            try {
                qService = (PoolManager.find(poolName)).getQueryService();
            } catch (Exception cqe) {
                Assert.fail("Failed to getCQService.", cqe);
            }
            // Create CQ Attributes.
            CqAttributesFactory cqf = new CqAttributesFactory();
            CqListener[] cqListeners = { new CqQueryTestListener(LogWriterUtils.getLogWriter()) };
            ((CqQueryTestListener) cqListeners[0]).cqName = cqName;
            cqf.initCqListeners(cqListeners);
            CqAttributes cqa = cqf.create();
            // Create CQ.
            try {
                CqQuery cq1 = qService.newCq(cqName, queryStr, cqa);
                assertTrue("newCq() state mismatch", cq1.getState().isStopped());
            } catch (Exception ex) {
                LogWriterUtils.getLogWriter().info("QueryService is :" + qService, ex);
                Assert.fail("Failed to create CQ " + cqName + " . ", ex);
            }
        }
    });
}
Also used : CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) CacheException(org.apache.geode.cache.CacheException) DefaultQueryService(org.apache.geode.cache.query.internal.DefaultQueryService) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) CqQuery(org.apache.geode.cache.query.CqQuery) CqExistsException(org.apache.geode.cache.query.CqExistsException) IgnoredException(org.apache.geode.test.dunit.IgnoredException) RMIException(org.apache.geode.test.dunit.RMIException) IOException(java.io.IOException) CacheException(org.apache.geode.cache.CacheException)

Example 20 with CqAttributesFactory

use of org.apache.geode.cache.query.CqAttributesFactory in project geode by apache.

the class DurableClientSimpleDUnitTest method testReadyForEventsNotCalledImplicitlyWithCacheXML.

/**
   * This test method is disabled because it is failing periodically and causing cruise control
   * failures See bug #47060 (test seems to be enabled now!)
   */
@Test
public void testReadyForEventsNotCalledImplicitlyWithCacheXML() {
    try {
        setPeriodicACKObserver(durableClientVM);
        final String cqName = "cqTest";
        // Start a server
        int serverPort = (Integer) this.server1VM.invoke(() -> CacheServerTestUtil.createCacheServerFromXml(DurableClientTestCase.class.getResource("durablecq-server-cache.xml")));
        // Start a durable client that is not kept alive on the server when it
        // stops normally
        final String durableClientId = getName() + "_client";
        // create client cache from xml
        this.durableClientVM.invoke(() -> CacheServerTestUtil.createCacheClientFromXml(DurableClientTestCase.class.getResource("durablecq-client-cache.xml"), "client", durableClientId, 45, Boolean.FALSE));
        // verify that readyForEvents has not yet been called on all the client's pools
        this.durableClientVM.invoke(new CacheSerializableRunnable("check readyForEvents not called") {

            @Override
            public void run2() throws CacheException {
                for (Pool p : PoolManager.getAll().values()) {
                    assertEquals(false, ((PoolImpl) p).getReadyForEventsCalled());
                }
            }
        });
        // Send clientReady message
        this.durableClientVM.invoke(new CacheSerializableRunnable("Send clientReady") {

            @Override
            public void run2() throws CacheException {
                CacheServerTestUtil.getCache().readyForEvents();
            }
        });
        registerDurableCq(cqName);
        // Verify durable client on server1
        this.server1VM.invoke(new CacheSerializableRunnable("Verify durable client") {

            @Override
            public void run2() throws CacheException {
                // Find the proxy
                checkNumberOfClientProxies(1);
                CacheClientProxy proxy = getClientProxy();
                assertNotNull(proxy);
                // Verify that it is durable
                assertTrue(proxy.isDurable());
                assertEquals(durableClientId, proxy.getDurableId());
            }
        });
        // Start normal publisher client
        this.publisherClientVM.invoke(() -> CacheServerTestUtil.createCacheClient(getClientPool(getServerHostName(publisherClientVM.getHost()), serverPort, false), regionName));
        // Publish some entries
        final int numberOfEntries = 10;
        publishEntries(numberOfEntries);
        // Verify the durable client received the updates
        this.durableClientVM.invoke(new CacheSerializableRunnable("Verify updates") {

            @Override
            public void run2() throws CacheException {
                // Get the region
                Region region = CacheServerTestUtil.getCache().getRegion(regionName);
                assertNotNull(region);
                // Get the listener and wait for the appropriate number of events
                QueryService queryService = CacheServerTestUtil.getPool().getQueryService();
                CqQuery cqQuery = queryService.getCq(cqName);
                CacheServerTestUtil.ControlCqListener cqlistener = (CacheServerTestUtil.ControlCqListener) cqQuery.getCqAttributes().getCqListener();
                cqlistener.waitWhileNotEnoughEvents(30000, numberOfEntries);
                assertEquals(numberOfEntries, cqlistener.events.size());
            }
        });
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            fail("interrupted", e);
        }
        // Stop the durable client
        this.durableClientVM.invoke(() -> CacheServerTestUtil.closeCache(new Boolean(true)));
        // Verify the durable client still exists on the server
        this.server1VM.invoke(new CacheSerializableRunnable("Verify durable client") {

            @Override
            public void run2() throws CacheException {
                // Find the proxy
                CacheClientProxy proxy = getClientProxy();
                assertNotNull(proxy);
            }
        });
        // Publish some more entries
        publishEntries(numberOfEntries);
        this.publisherClientVM.invoke(() -> CacheServerTestUtil.closeCache());
        // Re-start the durable client
        this.durableClientVM.invoke(() -> CacheServerTestUtil.createCacheClientFromXml(DurableClientTestCase.class.getResource("durablecq-client-cache.xml"), "client", durableClientId, 45, Boolean.FALSE));
        // Durable client registers durable cq on server
        this.durableClientVM.invoke(new CacheSerializableRunnable("Register cq") {

            @Override
            public void run2() throws CacheException {
                // Get the region
                Region region = CacheServerTestUtil.getCache().getRegion(regionName);
                assertNotNull(region);
                // Create CQ Attributes.
                CqAttributesFactory cqAf = new CqAttributesFactory();
                // Initialize and set CqListener.
                CqListener[] cqListeners = { new CacheServerTestUtil.ControlCqListener() };
                cqAf.initCqListeners(cqListeners);
                CqAttributes cqa = cqAf.create();
                // Create cq's
                // Get the query service for the Pool
                QueryService queryService = CacheServerTestUtil.getPool().getQueryService();
                try {
                    CqQuery query = queryService.newCq(cqName, "Select * from /" + regionName, cqa, true);
                    query.execute();
                } catch (CqExistsException e) {
                    fail("Failed due to ", e);
                } catch (CqException e) {
                    fail("Failed due to ", e);
                } catch (RegionNotFoundException e) {
                    fail("Could not find specified region:" + regionName + ":", e);
                }
            }
        });
        // Send clientReady message
        this.durableClientVM.invoke(new CacheSerializableRunnable("Send clientReady") {

            @Override
            public void run2() throws CacheException {
                CacheServerTestUtil.getCache().readyForEvents();
            }
        });
        // Verify durable client on server
        this.server1VM.invoke(new CacheSerializableRunnable("Verify durable client") {

            @Override
            public void run2() throws CacheException {
                // Find the proxy
                checkNumberOfClientProxies(1);
                CacheClientProxy proxy = getClientProxy();
                assertNotNull(proxy);
                // Verify that it is durable and its properties are correct
                assertTrue(proxy.isDurable());
                assertEquals(durableClientId, proxy.getDurableId());
            }
        });
        // Verify the durable client received the updates held for it on the server
        this.durableClientVM.invoke(new CacheSerializableRunnable("Verify updates") {

            @Override
            public void run2() throws CacheException {
                // Get the region
                Region region = CacheServerTestUtil.getCache().getRegion(regionName);
                assertNotNull(region);
                QueryService queryService = CacheServerTestUtil.getPool().getQueryService();
                CqQuery cqQuery = queryService.getCq(cqName);
                CacheServerTestUtil.ControlCqListener cqlistener = (CacheServerTestUtil.ControlCqListener) cqQuery.getCqAttributes().getCqListener();
                cqlistener.waitWhileNotEnoughEvents(30000, numberOfEntries);
                assertEquals(numberOfEntries, cqlistener.events.size());
            }
        });
        // Stop the durable client
        this.durableClientVM.invoke(() -> CacheServerTestUtil.closeCache());
        // Stop the server
        this.server1VM.invoke(() -> CacheServerTestUtil.closeCache());
    } finally {
        unsetPeriodicACKObserver(durableClientVM);
    }
}
Also used : CacheException(org.apache.geode.cache.CacheException) CqException(org.apache.geode.cache.query.CqException) RegionNotFoundException(org.apache.geode.cache.query.RegionNotFoundException) PoolImpl(org.apache.geode.cache.client.internal.PoolImpl) CacheSerializableRunnable(org.apache.geode.cache30.CacheSerializableRunnable) QueryService(org.apache.geode.cache.query.QueryService) CqAttributes(org.apache.geode.cache.query.CqAttributes) CqExistsException(org.apache.geode.cache.query.CqExistsException) Region(org.apache.geode.cache.Region) CqAttributesFactory(org.apache.geode.cache.query.CqAttributesFactory) Pool(org.apache.geode.cache.client.Pool) CqQuery(org.apache.geode.cache.query.CqQuery) ClientSubscriptionTest(org.apache.geode.test.junit.categories.ClientSubscriptionTest) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest) FlakyTest(org.apache.geode.test.junit.categories.FlakyTest) Test(org.junit.Test)

Aggregations

CqAttributesFactory (org.apache.geode.cache.query.CqAttributesFactory)36 CqAttributes (org.apache.geode.cache.query.CqAttributes)31 CqQuery (org.apache.geode.cache.query.CqQuery)30 QueryService (org.apache.geode.cache.query.QueryService)29 CacheException (org.apache.geode.cache.CacheException)16 Test (org.junit.Test)16 CacheSerializableRunnable (org.apache.geode.cache30.CacheSerializableRunnable)15 DistributedTest (org.apache.geode.test.junit.categories.DistributedTest)15 Region (org.apache.geode.cache.Region)11 CqEvent (org.apache.geode.cache.query.CqEvent)11 CqExistsException (org.apache.geode.cache.query.CqExistsException)10 CqListener (org.apache.geode.cache.query.CqListener)10 RegionNotFoundException (org.apache.geode.cache.query.RegionNotFoundException)8 Host (org.apache.geode.test.dunit.Host)8 VM (org.apache.geode.test.dunit.VM)8 IOException (java.io.IOException)7 CqException (org.apache.geode.cache.query.CqException)7 SelectResults (org.apache.geode.cache.query.SelectResults)7 DefaultQueryService (org.apache.geode.cache.query.internal.DefaultQueryService)7 ClientSubscriptionTest (org.apache.geode.test.junit.categories.ClientSubscriptionTest)7