use of org.apache.ignite.internal.util.typedef.PA in project ignite by apache.
the class GridServiceProcessorProxySelfTest method testLocalProxyInvocation.
/**
* @throws Exception If failed.
*/
public void testLocalProxyInvocation() throws Exception {
final String name = "testLocalProxyInvocation";
final Ignite ignite = grid(0);
ignite.services().deployNodeSingleton(name, new MapServiceImpl<String, Integer>());
for (int i = 0; i < nodeCount(); i++) {
final int idx = i;
final AtomicReference<MapService<Integer, String>> ref = new AtomicReference<>();
// wait because after deployNodeSingleton we don't have guarantees what service was deploy.
boolean wait = GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
MapService<Integer, String> svc = grid(idx).services().serviceProxy(name, MapService.class, false);
ref.set(svc);
return svc instanceof Service;
}
}, 2000);
// Make sure service is a local instance.
assertTrue("Invalid service instance [srv=" + ref.get() + ", node=" + i + ']', wait);
ref.get().put(i, Integer.toString(i));
}
MapService<Integer, String> map = ignite.services().serviceProxy(name, MapService.class, false);
for (int i = 0; i < nodeCount(); i++) assertEquals(1, map.size());
}
use of org.apache.ignite.internal.util.typedef.PA in project ignite by apache.
the class IgniteServiceDynamicCachesSelfTest method testDeployCalledAfterCacheStart.
/**
* @throws Exception If failed.
*/
public void testDeployCalledAfterCacheStart() throws Exception {
String cacheName = "cache";
CacheConfiguration ccfg = new CacheConfiguration(cacheName);
ccfg.setBackups(1);
Ignite ig = ignite(0);
ig.createCache(ccfg);
try {
final IgniteServices svcs = ig.services();
final String svcName = "myService";
svcs.deployKeyAffinitySingleton(svcName, new TestService(), cacheName, primaryKey(ig.cache(cacheName)));
boolean res = GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return svcs.service(svcName) != null;
}
}, 10 * 1000);
assertTrue("Service was not deployed", res);
ig.destroyCache(cacheName);
res = GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return svcs.service(svcName) == null;
}
}, 10 * 1000);
assertTrue("Service was not undeployed", res);
} finally {
ig.services().cancelAll();
ig.destroyCache(cacheName);
}
}
use of org.apache.ignite.internal.util.typedef.PA in project ignite by apache.
the class GridMessagingSelfTest method testStopLocalListen.
/**
* @throws Exception If error occurs.
*/
@SuppressWarnings("TooBroadScope")
public void testStopLocalListen() throws Exception {
final AtomicInteger msgCnt1 = new AtomicInteger();
final AtomicInteger msgCnt2 = new AtomicInteger();
final AtomicInteger msgCnt3 = new AtomicInteger();
P2<UUID, Object> lsnr1 = new P2<UUID, Object>() {
@Override
public boolean apply(UUID nodeId, Object msg) {
log.info("Listener1 received new message [msg=" + msg + ", senderNodeId=" + nodeId + ']');
msgCnt1.incrementAndGet();
return true;
}
};
P2<UUID, Object> lsnr2 = new P2<UUID, Object>() {
@Override
public boolean apply(UUID nodeId, Object msg) {
log.info("Listener2 received new message [msg=" + msg + ", senderNodeId=" + nodeId + ']');
msgCnt2.incrementAndGet();
return true;
}
};
P2<UUID, Object> lsnr3 = new P2<UUID, Object>() {
@Override
public boolean apply(UUID nodeId, Object msg) {
log.info("Listener3 received new message [msg=" + msg + ", senderNodeId=" + nodeId + ']');
msgCnt3.incrementAndGet();
return true;
}
};
final String topic1 = null;
final String topic2 = "top1";
final String topic3 = "top3";
ignite1.message().localListen(topic1, lsnr1);
ignite1.message().localListen(topic2, lsnr2);
ignite1.message().localListen(topic3, lsnr3);
ClusterGroup rNode1 = ignite2.cluster().forRemotes();
message(rNode1).send(topic1, "msg1-1");
message(rNode1).send(topic2, "msg1-2");
message(rNode1).send(topic3, "msg1-3");
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return msgCnt1.get() > 0 && msgCnt2.get() > 0 && msgCnt3.get() > 0;
}
}, 5000);
assertEquals(1, msgCnt1.get());
assertEquals(1, msgCnt2.get());
assertEquals(1, msgCnt3.get());
ignite1.message().stopLocalListen(topic2, lsnr2);
message(rNode1).send(topic1, "msg2-1");
message(rNode1).send(topic2, "msg2-2");
message(rNode1).send(topic3, "msg2-3");
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return msgCnt1.get() > 1 && msgCnt3.get() > 1;
}
}, 5000);
assertEquals(2, msgCnt1.get());
assertEquals(1, msgCnt2.get());
assertEquals(2, msgCnt3.get());
// Try to use wrong topic for lsnr1 removing.
ignite1.message().stopLocalListen(topic2, lsnr1);
message(rNode1).send(topic1, "msg3-1");
message(rNode1).send(topic2, "msg3-2");
message(rNode1).send(topic3, "msg3-3");
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return msgCnt1.get() > 2 && msgCnt3.get() > 2;
}
}, 5000);
assertEquals(3, msgCnt1.get());
assertEquals(1, msgCnt2.get());
assertEquals(3, msgCnt3.get());
ignite1.message().stopLocalListen(topic1, lsnr1);
ignite1.message().stopLocalListen(topic3, lsnr3);
message(rNode1).send(topic1, "msg4-1");
message(rNode1).send(topic2, "msg4-2");
message(rNode1).send(topic3, "msg4-3");
U.sleep(1000);
assertEquals(3, msgCnt1.get());
assertEquals(1, msgCnt2.get());
assertEquals(3, msgCnt3.get());
}
use of org.apache.ignite.internal.util.typedef.PA in project ignite by apache.
the class GridCommonAbstractTest method findKeys.
/**
* @param cache Cache.
* @param cnt Keys count.
* @param startFrom Start value for keys search.
* @return Collection of keys for which given cache is primary.
*/
@SuppressWarnings("unchecked")
protected List<Integer> findKeys(IgniteCache<?, ?> cache, final int cnt, final int startFrom, final int type) {
assert cnt > 0 : cnt;
final List<Integer> found = new ArrayList<>(cnt);
final ClusterNode locNode = localNode(cache);
final Affinity<Integer> aff = (Affinity<Integer>) affinity(cache);
try {
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
for (int i = startFrom; i < startFrom + 100_000; i++) {
Integer key = i;
boolean ok;
if (type == 0)
ok = aff.isPrimary(locNode, key);
else if (type == 1)
ok = aff.isBackup(locNode, key);
else if (type == 2)
ok = !aff.isPrimaryOrBackup(locNode, key);
else {
fail();
return false;
}
if (ok) {
if (!found.contains(key))
found.add(key);
if (found.size() == cnt)
return true;
}
}
return false;
}
}, 5000);
} catch (IgniteCheckedException e) {
throw new IgniteException(e);
}
if (found.size() != cnt)
throw new IgniteException("Unable to find " + cnt + " requied keys.");
return found;
}
use of org.apache.ignite.internal.util.typedef.PA in project ignite by apache.
the class CacheContinuousQueryFailoverAbstractSelfTest method testMultiThreadedFailover.
/**
* @throws Exception If failed.
*/
public void testMultiThreadedFailover() throws Exception {
this.backups = 2;
final int SRV_NODES = 4;
startGridsMultiThreaded(SRV_NODES);
client = true;
final Ignite qryCln = startGrid(SRV_NODES);
client = false;
final IgniteCache<Object, Object> qryClnCache = qryCln.cache(DEFAULT_CACHE_NAME);
final CacheEventListener2 lsnr = asyncCallback() ? new CacheEventAsyncListener2() : new CacheEventListener2();
ContinuousQuery<Object, Object> qry = new ContinuousQuery<>();
qry.setLocalListener(lsnr);
QueryCursor<?> cur = qryClnCache.query(qry);
final AtomicBoolean stop = new AtomicBoolean();
final int THREAD = 4;
final int PARTS = THREAD;
final List<List<T3<Object, Object, Object>>> expEvts = new ArrayList<>(THREAD + 5);
for (int i = 0; i < THREAD; i++) expEvts.add(i, new ArrayList<T3<Object, Object, Object>>());
final AtomicReference<CyclicBarrier> checkBarrier = new AtomicReference<>();
final ThreadLocalRandom rnd = ThreadLocalRandom.current();
IgniteInternalFuture<?> restartFut = GridTestUtils.runAsync(new Callable<Void>() {
@Override
public Void call() throws Exception {
try {
while (!stop.get() && !err) {
final int idx = rnd.nextInt(SRV_NODES);
log.info("Stop node: " + idx);
stopGrid(idx);
Thread.sleep(300);
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return qryCln.cluster().nodes().size() == SRV_NODES;
}
}, 5000L);
try {
log.info("Start node: " + idx);
startGrid(idx);
Thread.sleep(300);
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return qryCln.cluster().nodes().size() == SRV_NODES + 1;
}
}, 5000L);
} catch (Exception e) {
log.warning("Failed to stop nodes.", e);
}
CyclicBarrier bar = new CyclicBarrier(THREAD + 1, /* plus start/stop thread */
new Runnable() {
@Override
public void run() {
try {
int size0 = 0;
for (List<T3<Object, Object, Object>> evt : expEvts) size0 += evt.size();
final int size = size0;
GridTestUtils.waitForCondition(new PA() {
@Override
public boolean apply() {
return lsnr.size() >= size;
}
}, 10_000L);
List<T3<Object, Object, Object>> expEvts0 = new ArrayList<>();
for (List<T3<Object, Object, Object>> evt : expEvts) expEvts0.addAll(evt);
checkEvents(expEvts0, lsnr, false, false);
for (List<T3<Object, Object, Object>> evt : expEvts) evt.clear();
} catch (Exception e) {
log.error("Failed.", e);
err = true;
stop.set(true);
} finally {
checkBarrier.set(null);
}
}
});
assertTrue(checkBarrier.compareAndSet(null, bar));
if (!stop.get() && !err)
bar.await(1, MINUTES);
}
} catch (Throwable e) {
log.error("Unexpected error: " + e, e);
err = true;
throw e;
}
return null;
}
});
final long stopTime = System.currentTimeMillis() + 60_000;
final AtomicInteger valCntr = new AtomicInteger(0);
final AtomicInteger threadSeq = new AtomicInteger(0);
GridTestUtils.runMultiThreaded(new Runnable() {
@Override
public void run() {
try {
final ThreadLocalRandom rnd = ThreadLocalRandom.current();
final int threadId = threadSeq.getAndIncrement();
log.error("Thread id: " + threadId);
while (System.currentTimeMillis() < stopTime && !stop.get() && !err) {
Integer key = rnd.nextInt(PARTS);
Integer val = valCntr.incrementAndGet();
Integer prevVal = (Integer) qryClnCache.getAndPut(key, val);
expEvts.get(threadId).add(new T3<>((Object) key, (Object) val, (Object) prevVal));
CyclicBarrier bar = checkBarrier.get();
if (bar != null)
bar.await(1, MINUTES);
}
} catch (Exception e) {
log.error("Failed.", e);
err = true;
stop.set(true);
} finally {
stop.set(true);
}
}
}, THREAD, "update-thread");
restartFut.get();
List<T3<Object, Object, Object>> expEvts0 = new ArrayList<>();
for (List<T3<Object, Object, Object>> evt : expEvts) {
expEvts0.addAll(evt);
evt.clear();
}
if (!expEvts0.isEmpty())
checkEvents(expEvts0, lsnr, true);
cur.close();
assertFalse("Unexpected error during test, see log for details.", err);
}
Aggregations