use of org.apache.geode.cache.query.internal.DefaultQueryService in project geode by apache.
the class CqResultSetUsingPoolDUnitTest method testCqResultsCachingForDestroyEventsOnPR.
/**
* Tests CQ Result Set caching for destroy events.
*
* @throws Exception
*/
@Test
public void testCqResultsCachingForDestroyEventsOnPR() throws Exception {
final Host host = Host.getHost(0);
VM server1 = host.getVM(0);
VM server2 = host.getVM(1);
VM client = host.getVM(2);
cqDUnitTest.createServerWithPR(server1, 0, false, 0);
cqDUnitTest.createServerWithPR(server2, 0, false, 0);
final int port = server1.invoke(() -> CqQueryUsingPoolDUnitTest.getCacheServerPort());
final String host0 = NetworkUtils.getServerHostName(server1.getHost());
String poolName = "testCqResults";
final String cqName = "testCqResultsCachingForDestroyEventsOnPR_0";
cqDUnitTest.createPool(client, poolName, host0, port);
// Create client.
cqDUnitTest.createClient(client, port, host0);
// create CQ.
cqDUnitTest.createCQ(client, poolName, cqName, cqDUnitTest.cqs[0]);
// Execute CQ.
cqDUnitTest.executeCQ(client, cqName, true, null);
final int numObjects = 50;
// initialize Region.
server1.invoke(new CacheSerializableRunnable("Update Region") {
public void run2() throws CacheException {
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
for (int i = 1; i <= numObjects; i++) {
Portfolio p = new Portfolio(i);
region.put("" + i, p);
}
}
});
// Update from server2.
server2.invoke(new CacheSerializableRunnable("Update Region") {
public void run2() throws CacheException {
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
for (int i = 1; i <= numObjects; i++) {
Portfolio p = new Portfolio(i);
region.put("" + i, p);
}
}
});
// Destroy entries.
server2.invoke(new CacheSerializableRunnable("Update Region") {
public void run2() throws CacheException {
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
for (int i = 1; i <= numObjects; i++) {
Portfolio p = new Portfolio(i);
region.destroy("" + i);
}
}
});
// Wait for events to be sent.
cqDUnitTest.waitForDestroyed(client, cqName, "" + numObjects);
// Verify CQ Cache results.
server1.invoke(new CacheSerializableRunnable("Verify CQ Cache results") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
if (cqQuery.getCqResultKeysSize() > 0) {
fail("The CQ Result Cache on PR should have been empty for CQ :" + cqName + " keys=" + cqQuery.getCqResultKeyCache());
}
}
}
});
server2.invoke(new CacheSerializableRunnable("Verify CQ Cache results") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
if (cqQuery.getCqResultKeysSize() > 0) {
fail("The CQ Result Cache on PR should have been empty for CQ :" + cqName);
}
}
}
});
// Close.
cqDUnitTest.closeClient(client);
cqDUnitTest.closeServer(server1);
cqDUnitTest.closeServer(server2);
}
use of org.apache.geode.cache.query.internal.DefaultQueryService in project geode by apache.
the class CqQueryUsingPoolDUnitTest method testFilterRegistrationDuringGII.
/**
* Test Filter registration during GII. Bug fix 39014
*/
@Test
public void testFilterRegistrationDuringGII() throws Exception {
final Host host = Host.getHost(0);
VM server1 = host.getVM(0);
VM server2 = host.getVM(1);
VM client1 = host.getVM(2);
VM client2 = host.getVM(3);
Wait.pause(3 * 1000);
createServer(server1);
final int port1 = server1.invoke(() -> CqQueryUsingPoolDUnitTest.getCacheServerPort());
final String host0 = NetworkUtils.getServerHostName(server1.getHost());
final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(1);
String poolName = "testFilterRegistrationDuringGII";
createPool(client1, poolName, new String[] { host0, host0 }, new int[] { port1, ports[0] }, "-1");
createPool(client2, poolName, new String[] { host0, host0 }, new int[] { port1, ports[0] }, "-1");
createClient(client1, new int[] { port1, ports[0] }, host0, "-1", poolName);
createClient(client2, new int[] { port1, ports[0] }, host0, "-1", poolName);
// Create CQs.
final int numCQs = 2;
for (int i = 0; i < numCQs; i++) {
// Create CQs.
createCQ(client1, poolName, "client1_" + i, cqs[i]);
executeCQ(client1, "client1_" + i, false, null);
createCQ(client2, poolName, "client2_" + i, cqs[i]);
executeCQ(client2, "client2_" + i, false, null);
}
final int interestSize = 20;
registerInterestListCQ(client1, regions[0], interestSize, false);
registerInterestListCQ(client2, regions[0], 0, true);
Wait.pause(1 * 1000);
// CREATE.
createValues(server1, regions[0], 100);
createValues(server1, regions[1], 10);
waitForCreated(client1, "client1_0", KEY + 10);
// Create server2.
server2.invoke(new CacheSerializableRunnable("Create Cache Server") {
@Override
public void run2() throws CacheException {
LogWriterUtils.getLogWriter().info("### Create Cache Server. ###");
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.DISTRIBUTED_ACK);
factory.setMirrorType(MirrorType.KEYS_VALUES);
for (int i = 0; i < regions.length; i++) {
createRegion(regions[i], factory.createRegionAttributes());
}
InitialImageOperation.slowImageProcessing = 100;
try {
try {
startBridgeServer(ports[0], true);
} catch (Exception ex) {
Assert.fail("While starting CacheServer", ex);
}
while (true) {
if (InitialImageOperation.slowImageSleeps > 0) {
// Create events while GII for HARegion is in progress.
LocalRegion region1 = (LocalRegion) getRootRegion().getSubregion(regions[0]);
for (int i = 90; i <= 120; i++) {
region1.put(KEY + i, new Portfolio(i, i));
}
break;
}
Wait.pause(20);
}
} finally {
InitialImageOperation.slowImageProcessing = 0;
}
}
});
Wait.pause(3 * 1000);
// Check if CQs are registered as part of GII.
server2.invoke(new CacheSerializableRunnable("Create values") {
@Override
public void run2() throws CacheException {
DefaultQueryService qs = (DefaultQueryService) getCache().getQueryService();
Collection<CacheClientProxy> proxies = CacheClientNotifier.getInstance().getClientProxies();
Iterator iter = proxies.iterator();
try {
for (CacheClientProxy p : proxies) {
ClientProxyMembershipID clientId = p.getProxyID();
List cqs = qs.getCqService().getAllClientCqs(clientId);
getCache().getLogger().fine("Number of CQs found for client :" + clientId + " are :" + cqs.size());
if (cqs.size() != numCQs) {
fail("Number of CQs registerted by the client is :" + cqs.size() + " less than expected : " + numCQs);
}
CqQuery cq = (CqQuery) cqs.get(0);
LocalRegion region1 = (LocalRegion) getRootRegion().getSubregion(regions[0]);
if (cq.getName().startsWith("client1_")) {
if (region1.getFilterProfile().getKeysOfInterest(clientId) == null || region1.getFilterProfile().getKeysOfInterest(clientId).size() != interestSize) {
fail("Interest registartion during Secondary HARegion creation has failed.");
}
} else {
if (!region1.getFilterProfile().isInterestedInAllKeys(clientId)) {
fail("Interest registartion during Secondary HARegion creation has failed.");
}
}
}
} catch (Exception ex) {
fail("Exception while validating filter count. ", ex);
}
}
});
// Close.
closeClient(client1);
closeClient(client2);
closeServer(server1);
closeServer(server2);
}
use of org.apache.geode.cache.query.internal.DefaultQueryService in project geode by apache.
the class CqServiceVsdStats method numCqsOnRegion.
/**
* This is a test method. It silently ignores exceptions and should not be used outside of unit
* tests.
* <p>
* Returns the number of CQs (active + suspended) on the given region.
*/
public long numCqsOnRegion(final InternalCache cache, String regionName) {
if (cache == null) {
return 0;
}
DefaultQueryService queryService = (DefaultQueryService) cache.getQueryService();
CqService cqService = null;
try {
cqService = queryService.getCqService();
} catch (CqException e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to get CqService {}", e.getLocalizedMessage());
}
e.printStackTrace();
// We're confused
return -1;
}
if (((CqServiceImpl) cqService).isServer()) {
// If we are on the server, look at the number of CQs in the filter profile.
try {
FilterProfile fp = cache.getFilterProfile(regionName);
if (fp == null) {
return 0;
}
return fp.getCqCount();
} catch (Exception ex) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to get serverside CQ count for region: {} {}", regionName, ex.getLocalizedMessage());
}
}
} else {
try {
CqQuery[] cqs = queryService.getCqs(regionName);
if (cqs != null) {
return cqs.length;
}
} catch (Exception ex) {
// Dont do anything.
}
}
return 0;
}
use of org.apache.geode.cache.query.internal.DefaultQueryService in project geode by apache.
the class CqPerfUsingPoolDUnitTest method testKeyMaintenance.
/**
* Test for maintaining keys for update optimization.
*
* @throws Exception
*/
@Test
public void testKeyMaintenance() throws Exception {
final Host host = Host.getHost(0);
VM server = host.getVM(0);
VM client = host.getVM(1);
cqDUnitTest.createServer(server);
final int port = server.invoke(() -> CqQueryUsingPoolDUnitTest.getCacheServerPort());
final String host0 = NetworkUtils.getServerHostName(server.getHost());
// cqDUnitTest.createClient(client, port, host0);
String poolName = "testKeyMaintainance";
cqDUnitTest.createPool(client, poolName, host0, port);
// HashSet for caching purpose will be created for cqs.
final int cqSize = 2;
// Cq1
cqDUnitTest.createCQ(client, poolName, "testKeyMaintainance_0", cqDUnitTest.cqs[0]);
cqDUnitTest.executeCQ(client, "testKeyMaintainance_0", false, null);
// Cq2
cqDUnitTest.createCQ(client, poolName, "testKeyMaintainance_1", cqDUnitTest.cqs[10]);
cqDUnitTest.executeCQ(client, "testKeyMaintainance_1", false, null);
cqDUnitTest.createValues(server, cqDUnitTest.regions[0], 1);
cqDUnitTest.waitForCreated(client, "testKeyMaintainance_0", CqQueryUsingPoolDUnitTest.KEY + 1);
// Entry is made into the CQs cache hashset.
// testKeyMaintainance_0 with 1 entry and testKeyMaintainance_1 with 0
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeys1") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 1, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_1 is wrong.", 0, cqQuery.getCqResultKeysSize());
}
}
}
});
// Update 1.
cqDUnitTest.createValues(server, cqDUnitTest.regions[0], 10);
cqDUnitTest.waitForCreated(client, "testKeyMaintainance_0", CqQueryDUnitTest.KEY + 10);
// Entry/check is made into the CQs cache hashset.
// testKeyMaintainance_0 with 1 entry and testKeyMaintainance_1 with 1
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeysAfterUpdate1") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 10, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_1 is wrong.", 5, cqQuery.getCqResultKeysSize());
}
}
}
});
// Update.
cqDUnitTest.createValues(server, cqDUnitTest.regions[0], 12);
cqDUnitTest.waitForCreated(client, "testKeyMaintainance_0", CqQueryDUnitTest.KEY + 12);
// Entry/check is made into the CQs cache hashset.
// testKeyMaintainance_0 with 1 entry and testKeyMaintainance_1 with 1
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeysAfterUpdate2") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 12, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_1 is wrong.", 6, cqQuery.getCqResultKeysSize());
}
}
}
});
// Delete.
cqDUnitTest.deleteValues(server, cqDUnitTest.regions[0], 6);
cqDUnitTest.waitForDestroyed(client, "testKeyMaintainance_0", CqQueryDUnitTest.KEY + 6);
// Entry/check is made into the CQs cache hashset.
// testKeyMaintainance_0 with 1 entry and testKeyMaintainance_1 with 1
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeysAfterUpdate2") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 6, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_1 is wrong.", 3, cqQuery.getCqResultKeysSize());
}
}
}
});
// This should still needs to process the events so that Results are uptodate.
cqDUnitTest.stopCQ(client, "testKeyMaintainance_1");
cqDUnitTest.createValues(server, cqDUnitTest.regions[0], 12);
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeysAfterUpdate2") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 12, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_1 is wrong.", 6, cqQuery.getCqResultKeysSize());
}
}
}
});
// This should re-start the caching for this CQ.
cqDUnitTest.executeCQ(client, "testKeyMaintainance_1", false, null);
// This will remove the caching for this CQ.
cqDUnitTest.closeCQ(client, "testKeyMaintainance_1");
server.invoke(new CacheSerializableRunnable("LookForCachedEventKeysAfterUpdate2") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
String serverCqName = (String) cqQuery.getServerCqName();
if (serverCqName.startsWith("testKeyMaintainance_0")) {
assertEquals("The number of keys cached for cq testKeyMaintainance_0 is wrong.", 12, cqQuery.getCqResultKeysSize());
} else if (serverCqName.startsWith("testKeyMaintainance_1")) {
fail("The key maintainance should not be present for this CQ.");
}
}
}
});
// Close.
cqDUnitTest.closeClient(client);
cqDUnitTest.closeServer(server);
}
use of org.apache.geode.cache.query.internal.DefaultQueryService in project geode by apache.
the class CqResultSetUsingPoolDUnitTest method testCqResultsCaching.
/**
* Tests CQ Result Set.
*
* @throws Exception
*/
@Test
public void testCqResultsCaching() throws Exception {
final Host host = Host.getHost(0);
VM server = host.getVM(0);
VM client = host.getVM(1);
cqDUnitTest.createServer(server);
final int port = server.invoke(() -> CqQueryUsingPoolDUnitTest.getCacheServerPort());
final String host0 = NetworkUtils.getServerHostName(server.getHost());
String poolName = "testCqResults";
final String cqName = "testCqResultsP_0";
cqDUnitTest.createPool(client, poolName, host0, port);
// Create client.
cqDUnitTest.createClient(client, port, host0);
// create CQ.
cqDUnitTest.createCQ(client, poolName, cqName, cqDUnitTest.cqs[0]);
final int numObjects = 300;
final int totalObjects = 500;
// initialize Region.
server.invoke(new CacheSerializableRunnable("Update Region") {
public void run2() throws CacheException {
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
for (int i = 1; i <= numObjects; i++) {
Portfolio p = new Portfolio(i);
region.put("" + i, p);
}
}
});
// Keep updating region (async invocation).
server.invokeAsync(new CacheSerializableRunnable("Update Region") {
public void run2() throws CacheException {
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
// Update (totalObjects - 1) entries.
for (int i = 1; i < totalObjects; i++) {
// Destroy entries.
if (i > 25 && i < 201) {
region.destroy("" + i);
continue;
}
Portfolio p = new Portfolio(i);
region.put("" + i, p);
}
// recreate destroyed entries.
for (int j = 26; j < 201; j++) {
Portfolio p = new Portfolio(j);
region.put("" + j, p);
}
// Add the last key.
Portfolio p = new Portfolio(totalObjects);
region.put("" + totalObjects, p);
}
});
// Execute CQ.
// While region operation is in progress execute CQ.
cqDUnitTest.executeCQ(client, cqName, true, null);
// Verify CQ Cache results.
server.invoke(new CacheSerializableRunnable("Verify CQ Cache results") {
public void run2() throws CacheException {
CqService cqService = null;
try {
cqService = ((DefaultQueryService) getCache().getQueryService()).getCqService();
} catch (Exception ex) {
LogWriterUtils.getLogWriter().info("Failed to get the internal CqService.", ex);
Assert.fail("Failed to get the internal CqService.", ex);
}
// Wait till all the region update is performed.
Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
while (true) {
if (region.get("" + totalObjects) == null) {
try {
Thread.sleep(50);
} catch (Exception ex) {
// ignore.
}
continue;
}
break;
}
Collection<? extends InternalCqQuery> cqs = cqService.getAllCqs();
for (InternalCqQuery cq : cqs) {
ServerCQImpl cqQuery = (ServerCQImpl) cq;
if (cqQuery.getName().equals(cqName)) {
int size = cqQuery.getCqResultKeysSize();
if (size != totalObjects) {
LogWriterUtils.getLogWriter().info("The number of Cached events " + size + " is not equal to the expected size " + totalObjects);
HashSet expectedKeys = new HashSet();
for (int i = 1; i < totalObjects; i++) {
expectedKeys.add("" + i);
}
Set cachedKeys = cqQuery.getCqResultKeyCache();
expectedKeys.removeAll(cachedKeys);
LogWriterUtils.getLogWriter().info("Missing keys from the Cache : " + expectedKeys);
}
assertEquals("The number of keys cached for cq " + cqName + " is wrong.", totalObjects, cqQuery.getCqResultKeysSize());
}
}
}
});
// Close.
cqDUnitTest.closeClient(client);
cqDUnitTest.closeServer(server);
}
Aggregations