Search in sources :

Example 51 with PA

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());
}
Also used : Service(org.apache.ignite.services.Service) AtomicReference(java.util.concurrent.atomic.AtomicReference) PA(org.apache.ignite.internal.util.typedef.PA) Ignite(org.apache.ignite.Ignite)

Example 52 with PA

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);
    }
}
Also used : PA(org.apache.ignite.internal.util.typedef.PA) IgniteServices(org.apache.ignite.IgniteServices) Ignite(org.apache.ignite.Ignite) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration)

Example 53 with PA

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());
}
Also used : PA(org.apache.ignite.internal.util.typedef.PA) P2(org.apache.ignite.internal.util.typedef.P2) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ClusterGroup(org.apache.ignite.cluster.ClusterGroup) UUID(java.util.UUID)

Example 54 with PA

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;
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ClusterNode(org.apache.ignite.cluster.ClusterNode) PA(org.apache.ignite.internal.util.typedef.PA) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) IgniteException(org.apache.ignite.IgniteException) ArrayList(java.util.ArrayList) Affinity(org.apache.ignite.cache.affinity.Affinity)

Example 55 with PA

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);
}
Also used : CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) ContinuousQuery(org.apache.ignite.cache.query.ContinuousQuery) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Ignite(org.apache.ignite.Ignite) List(java.util.List) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) T3(org.apache.ignite.internal.util.typedef.T3) AtomicReference(java.util.concurrent.atomic.AtomicReference) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) IgniteException(org.apache.ignite.IgniteException) CacheEntryListenerException(javax.cache.event.CacheEntryListenerException) IgniteSpiException(org.apache.ignite.spi.IgniteSpiException) ClusterTopologyException(org.apache.ignite.cluster.ClusterTopologyException) EntryProcessorException(javax.cache.processor.EntryProcessorException) IgniteInterruptedCheckedException(org.apache.ignite.internal.IgniteInterruptedCheckedException) CacheException(javax.cache.CacheException) CyclicBarrier(java.util.concurrent.CyclicBarrier) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) PA(org.apache.ignite.internal.util.typedef.PA) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Aggregations

PA (org.apache.ignite.internal.util.typedef.PA)55 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)23 Ignite (org.apache.ignite.Ignite)20 ArrayList (java.util.ArrayList)14 ContinuousQuery (org.apache.ignite.cache.query.ContinuousQuery)13 UUID (java.util.UUID)9 CacheEntryEvent (javax.cache.event.CacheEntryEvent)9 IgniteException (org.apache.ignite.IgniteException)7 QueryCursor (org.apache.ignite.cache.query.QueryCursor)7 List (java.util.List)6 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)6 ClusterNode (org.apache.ignite.cluster.ClusterNode)6 HashMap (java.util.HashMap)5 Map (java.util.Map)5 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)5 IgniteCache (org.apache.ignite.IgniteCache)5 IgniteEx (org.apache.ignite.internal.IgniteEx)5 T2 (org.apache.ignite.internal.util.typedef.T2)5 Transaction (org.apache.ignite.transactions.Transaction)5 Callable (java.util.concurrent.Callable)4