Search in sources :

Example 1 with KeyExtractor

use of net.dempsy.lifecycle.annotation.utils.KeyExtractor in project Dempsy by Dempsy.

the class TestContainer method addOutputCatchStage.

public NodeManager addOutputCatchStage() throws InterruptedException {
    // =======================================================
    // configure an output catcher tier
    final Node out = new Node("test-app").defaultRoutingStrategyId("net.dempsy.router.simple").receiver(new BlockingQueueReceiver(new ArrayBlockingQueue<>(16))).setNodeStatsCollector(// same app as the spring file.
    new BasicNodeStatsCollector());
    out.cluster("output-catch").mp(new MessageProcessor<OutputCatcher>(new OutputCatcher()));
    out.validate();
    final NodeManager nman = track(new NodeManager()).node(out).collaborator(track(sessionFactory.createSession())).start();
    // wait until we can actually reach the output-catch cluster from the main node
    assertTrue(poll(o -> {
        try {
            return canReach(getRouter(manager), "output-catch", new KeyExtractor().extract(new OutputMessage("foo", 1, 1)).iterator().next());
        } catch (final Exception e) {
            return false;
        }
    }));
    // =======================================================
    return nman;
}
Also used : Arrays(java.util.Arrays) Node(net.dempsy.config.Node) NodeManager(net.dempsy.NodeManager) SystemPropertyManager(net.dempsy.utils.test.SystemPropertyManager) ContainerTestMessage(net.dempsy.container.mocks.ContainerTestMessage) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) After(org.junit.After) Parameterized(org.junit.runners.Parameterized) MessageKey(net.dempsy.lifecycle.annotation.MessageKey) MessageHandler(net.dempsy.lifecycle.annotation.MessageHandler) Collection(java.util.Collection) Functional.uncheck(net.dempsy.util.Functional.uncheck) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Activation(net.dempsy.lifecycle.annotation.Activation) KeyExtractor(net.dempsy.lifecycle.annotation.utils.KeyExtractor) LockingContainer(net.dempsy.container.locking.LockingContainer) OutputMessage(net.dempsy.container.mocks.OutputMessage) Output(net.dempsy.lifecycle.annotation.Output) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Adaptor(net.dempsy.messages.Adaptor) AccessUtil.canReach(net.dempsy.AccessUtil.canReach) Start(net.dempsy.lifecycle.annotation.Start) Assert.assertFalse(org.junit.Assert.assertFalse) Evictable(net.dempsy.lifecycle.annotation.Evictable) MessageProcessor(net.dempsy.lifecycle.annotation.MessageProcessor) AccessUtil.getRouter(net.dempsy.AccessUtil.getRouter) NonLockingContainer(net.dempsy.container.nonlocking.NonLockingContainer) Mp(net.dempsy.lifecycle.annotation.Mp) BlockingQueueReceiver(net.dempsy.transport.blockingqueue.BlockingQueueReceiver) NonLockingAltContainer(net.dempsy.container.altnonlocking.NonLockingAltContainer) MessageType(net.dempsy.lifecycle.annotation.MessageType) Dispatcher(net.dempsy.messages.Dispatcher) KeyedMessageWithType(net.dempsy.messages.KeyedMessageWithType) RunWith(org.junit.runner.RunWith) Parameters(org.junit.runners.Parameterized.Parameters) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) DempsyException(net.dempsy.DempsyException) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) BasicNodeStatsCollector(net.dempsy.monitoring.basic.BasicNodeStatsCollector) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) ClusterId(net.dempsy.config.ClusterId) Before(org.junit.Before) LocalClusterSessionFactory(net.dempsy.cluster.local.LocalClusterSessionFactory) Functional.recheck(net.dempsy.util.Functional.recheck) Iterator(java.util.Iterator) Assert.assertNotNull(org.junit.Assert.assertNotNull) KeyedMessage(net.dempsy.messages.KeyedMessage) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Passivation(net.dempsy.lifecycle.annotation.Passivation) AtomicLong(java.util.concurrent.atomic.AtomicLong) ClusterStatsCollector(net.dempsy.monitoring.ClusterStatsCollector) ConditionPoll.poll(net.dempsy.utils.test.ConditionPoll.poll) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) NodeManager(net.dempsy.NodeManager) OutputMessage(net.dempsy.container.mocks.OutputMessage) BlockingQueueReceiver(net.dempsy.transport.blockingqueue.BlockingQueueReceiver) Node(net.dempsy.config.Node) KeyExtractor(net.dempsy.lifecycle.annotation.utils.KeyExtractor) DempsyException(net.dempsy.DempsyException) BasicNodeStatsCollector(net.dempsy.monitoring.basic.BasicNodeStatsCollector)

Example 2 with KeyExtractor

use of net.dempsy.lifecycle.annotation.utils.KeyExtractor in project Dempsy by Dempsy.

the class TestElasticity method testForProfiler.

@Test
public void testForProfiler() throws Throwable {
    try {
        // set up the test.
        final Number[] numbers = new Number[profilerTestNumberCount];
        final Random random = new Random();
        for (int i = 0; i < numbers.length; i++) numbers[i] = new Number(random.nextInt(1000), 0);
        final KeyExtractor ke = new KeyExtractor();
        runCombos("testForProfiler", (r, c, s, t, ser) -> isElasticRoutingStrategy(r), actxPath, new String[][][] { null, { { "min_nodes", "3" } }, { { "min_nodes", "3" } }, { { "min_nodes", "3" } }, null }, ns -> {
            final List<NodeManagerWithContext> nodes = ns.nodes;
            // Grab the one NumberRank Mp from the single Node in the third (0 base 2nd) cluster.
            final NumberRank rank = nodes.get(4).ctx.getBean(NumberRank.class);
            try (final ClusterInfoSession session = ns.sessionFactory.createSession()) {
                waitForEvenShardDistribution(session, "test-cluster1", 3, nodes);
                // get the Adaptor Router's statCollector
                final List<NodeMetricGetters> scs = nodes.stream().map(nwm -> nwm.manager).map(nm -> nm.getNodeStatsCollector()).map(sc -> (NodeMetricGetters) sc).collect(Collectors.toList());
                // grab the adaptor from the 0'th cluster + the 0'th (only) node.
                final NumberProducer adaptor = nodes.get(0).ctx.getBean(NumberProducer.class);
                // grab access to the Dispatcher from the Adaptor
                final Dispatcher dispatcher = adaptor.dispatcher;
                final long startTime = System.currentTimeMillis();
                for (int i = 0; i < numbers.length; i++) dispatcher.dispatch(ke.extract(numbers[i]));
                LOGGER.info("====> Checking exact count.");
                // keep going as long as they are trickling in.
                assertTrue(() -> {
                    IntStream.range(0, scs.size()).forEach(i -> {
                        System.out.println("======> " + i);
                        final NodeMetricGetters mg = scs.get(i);
                        if (mg != null) {
                            System.out.println("discarded: " + mg.getDiscardedMessageCount());
                            System.out.println("not sent: " + mg.getMessagesNotSentCount());
                        }
                    });
                    return "expected: " + profilerTestNumberCount + " but was: " + (rank.totalMessages.get() + scs.get(0).getMessagesNotSentCount()) + ", (delivered: " + rank.totalMessages.get() + ", not sent: " + scs.get(0).getMessagesNotSentCount() + ")";
                }, poll(o -> profilerTestNumberCount == (rank.totalMessages.get() + scs.stream().map(sc -> new Long(sc.getMessagesNotSentCount())).reduce(new Long(0), (v1, v2) -> new Long(v1.longValue() + v2.longValue()).longValue()))));
                // assert that at least SOMETHING went through
                assertTrue(rank.totalMessages.get() > 0);
                LOGGER.info("testForProfiler time " + (System.currentTimeMillis() - startTime));
                @SuppressWarnings("unchecked") final AtomicLong count = nodes.stream().map(// get the NumberCounter Mp
                nmwc -> (MessageProcessor<NumberCounter>) nmwc.manager.getMp("test-cluster1")).filter(// if it exists
                l -> l != null).map(// pull the prototype
                l -> l.getPrototype().messageCount).reduce(new AtomicLong(0), // sum up all of the counts
                (v1, v2) -> new AtomicLong(v1.get() + v2.get()));
                assertEquals(profilerTestNumberCount, count.get());
            }
        });
    } catch (final Throwable th) {
        th.printStackTrace();
        throw th;
    }
}
Also used : IntStream(java.util.stream.IntStream) MessageProcessor(net.dempsy.lifecycle.annotation.MessageProcessor) Mp(net.dempsy.lifecycle.annotation.Mp) ClusterInfoSession(net.dempsy.cluster.ClusterInfoSession) MessageType(net.dempsy.lifecycle.annotation.MessageType) Dispatcher(net.dempsy.messages.Dispatcher) NodeAddress(net.dempsy.transport.NodeAddress) LoggerFactory(org.slf4j.LoggerFactory) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Random(java.util.Random) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) ArrayList(java.util.ArrayList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) ThreadingModel(net.dempsy.threading.ThreadingModel) ClusterId(net.dempsy.config.ClusterId) MessageKey(net.dempsy.lifecycle.annotation.MessageKey) Logger(org.slf4j.Logger) NodeMetricGetters(net.dempsy.container.NodeMetricGetters) MessageHandler(net.dempsy.lifecycle.annotation.MessageHandler) Functional.uncheck(net.dempsy.util.Functional.uncheck) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ClusterMetricGetters(net.dempsy.container.ClusterMetricGetters) Assert.assertTrue(org.junit.Assert.assertTrue) Set(java.util.Set) Test(org.junit.Test) Activation(net.dempsy.lifecycle.annotation.Activation) KeyExtractor(net.dempsy.lifecycle.annotation.utils.KeyExtractor) Collectors(java.util.stream.Collectors) Serializable(java.io.Serializable) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) Adaptor(net.dempsy.messages.Adaptor) ConditionPoll.poll(net.dempsy.utils.test.ConditionPoll.poll) Functional.chain(net.dempsy.util.Functional.chain) ConditionPoll.assertTrue(net.dempsy.utils.test.ConditionPoll.assertTrue) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) MessageProcessor(net.dempsy.lifecycle.annotation.MessageProcessor) NodeMetricGetters(net.dempsy.container.NodeMetricGetters) Dispatcher(net.dempsy.messages.Dispatcher) AtomicLong(java.util.concurrent.atomic.AtomicLong) Random(java.util.Random) AtomicLong(java.util.concurrent.atomic.AtomicLong) KeyExtractor(net.dempsy.lifecycle.annotation.utils.KeyExtractor) ClusterInfoSession(net.dempsy.cluster.ClusterInfoSession) Test(org.junit.Test)

Aggregations

ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 List (java.util.List)2 Map (java.util.Map)2 Set (java.util.Set)2 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 AtomicLong (java.util.concurrent.atomic.AtomicLong)2 ClusterId (net.dempsy.config.ClusterId)2 Activation (net.dempsy.lifecycle.annotation.Activation)2 MessageHandler (net.dempsy.lifecycle.annotation.MessageHandler)2 MessageKey (net.dempsy.lifecycle.annotation.MessageKey)2 MessageProcessor (net.dempsy.lifecycle.annotation.MessageProcessor)2 MessageType (net.dempsy.lifecycle.annotation.MessageType)2 Mp (net.dempsy.lifecycle.annotation.Mp)2 KeyExtractor (net.dempsy.lifecycle.annotation.utils.KeyExtractor)2 Adaptor (net.dempsy.messages.Adaptor)2 Serializable (java.io.Serializable)1 Arrays (java.util.Arrays)1