Search in sources :

Example 6 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 by apache.

the class SocketNioValidateSend method main.

public static void main(String[] args) throws Exception {
    Selector selector;
    synchronized (Selector.class) {
        // Selector.open() isn't thread safe
        // http://bugs.sun.com/view_bug.do?bug_id=6427854
        // Affects 1.6.0_29, fixed in 1.7.0_01
        selector = Selector.open();
    }
    Member mbr = new MemberImpl("localhost", 9999, 0);
    byte seq = 0;
    byte[] buf = new byte[50000];
    Arrays.fill(buf, seq);
    int len = buf.length;
    BigDecimal total = new BigDecimal((double) 0);
    BigDecimal bytes = new BigDecimal((double) len);
    NioSender sender = new NioSender();
    sender.setDestination(mbr);
    sender.setDirectBuffer(true);
    sender.setSelector(selector);
    sender.connect();
    sender.setMessage(buf);
    System.out.println("Writing to 9999");
    long start = 0;
    double mb = 0;
    boolean first = true;
    int count = 0;
    DecimalFormat df = new DecimalFormat("##.00");
    while (count < 100000) {
        if (first) {
            first = false;
            start = System.currentTimeMillis();
        }
        sender.setMessage(buf);
        int selectedKeys = 0;
        try {
            selectedKeys = selector.select(0);
        } catch (Exception e) {
            e.printStackTrace();
            continue;
        }
        if (selectedKeys == 0) {
            continue;
        }
        Iterator<SelectionKey> it = selector.selectedKeys().iterator();
        while (it.hasNext()) {
            SelectionKey sk = it.next();
            it.remove();
            try {
                int readyOps = sk.readyOps();
                sk.interestOps(sk.interestOps() & ~readyOps);
                if (sender.process(sk, false)) {
                    total = total.add(bytes);
                    sender.reset();
                    seq++;
                    Arrays.fill(buf, seq);
                    sender.setMessage(buf);
                    mb += ((double) len) / 1024 / 1024;
                    if (((++count) % 10000) == 0) {
                        long time = System.currentTimeMillis();
                        double seconds = ((double) (time - start)) / 1000;
                        System.out.println("Throughput " + df.format(mb / seconds) + " MB/seconds, total " + mb + " MB, total " + total + " bytes.");
                    }
                }
            } catch (Throwable t) {
                t.printStackTrace();
                return;
            }
        }
    }
    System.out.println("Complete, sleeping 15 seconds");
    Thread.sleep(15000);
}
Also used : SelectionKey(java.nio.channels.SelectionKey) NioSender(org.apache.catalina.tribes.transport.nio.NioSender) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) DecimalFormat(java.text.DecimalFormat) BigDecimal(java.math.BigDecimal) Member(org.apache.catalina.tribes.Member) Selector(java.nio.channels.Selector)

Example 7 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 by apache.

the class TestOrderInterceptor method testOrder2.

@Test
public void testOrder2() throws Exception {
    final Member[] dest = channels[0].getMembers();
    final AtomicInteger value = new AtomicInteger(0);
    final Queue<Exception> exceptionQueue = new ConcurrentLinkedQueue<Exception>();
    Runnable run = new Runnable() {

        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                try {
                    synchronized (channels[0]) {
                        channels[0].send(dest, Integer.valueOf(value.getAndAdd(1)), 0);
                    }
                } catch (Exception x) {
                    exceptionQueue.add(x);
                }
            }
        }
    };
    Thread[] threads = new Thread[5];
    for (int i = 0; i < threads.length; i++) {
        threads[i] = new Thread(run);
    }
    for (int i = 0; i < threads.length; i++) {
        threads[i].start();
    }
    for (int i = 0; i < threads.length; i++) {
        threads[i].join();
    }
    if (!exceptionQueue.isEmpty()) {
        Assert.fail("Exception while sending in threads: " + exceptionQueue.remove().toString());
    }
    Thread.sleep(5000);
    for (int i = 0; i < test.length; i++) {
        Assert.assertFalse(test[i].fail);
    }
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) Member(org.apache.catalina.tribes.Member) ChannelException(org.apache.catalina.tribes.ChannelException) Test(org.junit.Test)

Example 8 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 by apache.

the class TestUdpPackages method testDataSendASYNCM.

@Test
public void testDataSendASYNCM() throws Exception {
    final AtomicInteger counter = new AtomicInteger(0);
    ReceiverBase rb1 = (ReceiverBase) channel1.getChannelReceiver();
    ReceiverBase rb2 = (ReceiverBase) channel2.getChannelReceiver();
    rb1.setUdpRxBufSize(1024 * 1024 * 10);
    rb2.setUdpRxBufSize(1024 * 1024 * 10);
    rb1.setUdpTxBufSize(1024 * 1024 * 10);
    rb2.setUdpTxBufSize(1024 * 1024 * 10);
    System.err.println("Starting NO_ACK");
    Thread[] threads = new Thread[threadCount];
    for (int x = 0; x < threads.length; x++) {
        threads[x] = new Thread() {

            @Override
            public void run() {
                try {
                    long start = System.currentTimeMillis();
                    for (int i = 0; i < msgCount; i++) {
                        int cnt = counter.getAndAdd(1);
                        channel1.send(new Member[] { channel2.getLocalMember(false) }, Data.createRandomData(1024, cnt), Channel.SEND_OPTIONS_UDP | Channel.SEND_OPTIONS_ASYNCHRONOUS);
                    // Thread.currentThread().sleep(10);
                    }
                    System.out.println("Thread[" + this.getName() + "] sent " + msgCount + " messages in " + (System.currentTimeMillis() - start) + " ms.");
                } catch (Exception x) {
                    x.printStackTrace();
                    return;
                }
            }
        };
    }
    for (int x = 0; x < threads.length; x++) {
        threads[x].start();
    }
    for (int x = 0; x < threads.length; x++) {
        threads[x].join();
    }
    // sleep for 50 sec, let the other messages in
    long start = System.currentTimeMillis();
    while ((System.currentTimeMillis() - start) < 25000 && msgCount * threadCount != listener1.count.get()) Thread.sleep(500);
    System.err.println("Finished NO_ACK [" + listener1.count + "]");
    System.out.println("Sent " + counter.get() + " messages. Received " + listener1.count + " Highest msg received:" + listener1.maxIdx);
    System.out.print("Missing messages:");
    printMissingMsgs(listener1.nrs, counter.get());
    Assert.assertEquals("Checking success messages.", msgCount * threadCount, listener1.count.get());
}
Also used : ReceiverBase(org.apache.catalina.tribes.transport.ReceiverBase) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Member(org.apache.catalina.tribes.Member) Test(org.junit.Test)

Example 9 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 by apache.

the class TestUdpPackages method testDataSendNO_ACK.

@Test
public void testDataSendNO_ACK() throws Exception {
    final AtomicInteger counter = new AtomicInteger(0);
    ReceiverBase rb1 = (ReceiverBase) channel1.getChannelReceiver();
    ReceiverBase rb2 = (ReceiverBase) channel2.getChannelReceiver();
    rb1.setUdpRxBufSize(1024 * 1024 * 10);
    rb2.setUdpRxBufSize(1024 * 1024 * 10);
    rb1.setUdpTxBufSize(1024 * 1024 * 10);
    rb2.setUdpTxBufSize(1024 * 1024 * 10);
    System.err.println("Starting NO_ACK");
    Thread[] threads = new Thread[threadCount];
    for (int x = 0; x < threads.length; x++) {
        threads[x] = new Thread() {

            @Override
            public void run() {
                try {
                    long start = System.currentTimeMillis();
                    for (int i = 0; i < msgCount; i++) {
                        int cnt = counter.getAndAdd(1);
                        channel1.send(new Member[] { channel2.getLocalMember(false) }, Data.createRandomData(1024, cnt), Channel.SEND_OPTIONS_UDP);
                    // Thread.currentThread().sleep(10);
                    }
                    System.out.println("Thread[" + this.getName() + "] sent " + msgCount + " messages in " + (System.currentTimeMillis() - start) + " ms.");
                } catch (Exception x) {
                    x.printStackTrace();
                    return;
                }
            }
        };
    }
    for (int x = 0; x < threads.length; x++) {
        threads[x].start();
    }
    for (int x = 0; x < threads.length; x++) {
        threads[x].join();
    }
    // sleep for 50 sec, let the other messages in
    long start = System.currentTimeMillis();
    while ((System.currentTimeMillis() - start) < 25000 && msgCount * threadCount != listener1.count.get()) Thread.sleep(500);
    System.err.println("Finished NO_ACK [" + listener1.count + "]");
    System.out.println("Sent " + counter.get() + " messages. Received " + listener1.count + " Highest msg received:" + listener1.maxIdx);
    System.out.print("Missing messages:");
    printMissingMsgs(listener1.nrs, counter.get());
    Assert.assertEquals("Checking success messages.", msgCount * threadCount, listener1.count.get());
}
Also used : ReceiverBase(org.apache.catalina.tribes.transport.ReceiverBase) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Member(org.apache.catalina.tribes.Member) Test(org.junit.Test)

Example 10 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 by apache.

the class ParallelNioSender method close.

private synchronized void close() throws ChannelException {
    ChannelException x = null;
    Object[] members = nioSenders.keySet().toArray();
    for (int i = 0; i < members.length; i++) {
        Member mbr = (Member) members[i];
        try {
            NioSender sender = nioSenders.get(mbr);
            sender.disconnect();
        } catch (Exception e) {
            if (x == null)
                x = new ChannelException(e);
            x.addFaultyMember(mbr, e);
        }
        nioSenders.remove(mbr);
    }
    if (x != null)
        throw x;
}
Also used : Member(org.apache.catalina.tribes.Member) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) ChannelException(org.apache.catalina.tribes.ChannelException) ChannelException(org.apache.catalina.tribes.ChannelException)

Aggregations

Member (org.apache.catalina.tribes.Member)93 ChannelException (org.apache.catalina.tribes.ChannelException)28 FaultyMember (org.apache.catalina.tribes.ChannelException.FaultyMember)17 Test (org.junit.Test)17 IOException (java.io.IOException)16 MemberImpl (org.apache.catalina.tribes.membership.MemberImpl)15 ReceiverBase (org.apache.catalina.tribes.transport.ReceiverBase)11 ArrayList (java.util.ArrayList)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)10 UniqueId (org.apache.catalina.tribes.UniqueId)9 Serializable (java.io.Serializable)6 BigDecimal (java.math.BigDecimal)6 DecimalFormat (java.text.DecimalFormat)6 Response (org.apache.catalina.tribes.group.Response)6 ChannelData (org.apache.catalina.tribes.io.ChannelData)6 XByteBuffer (org.apache.catalina.tribes.io.XByteBuffer)6 SelectionKey (java.nio.channels.SelectionKey)4 Selector (java.nio.channels.Selector)4 Membership (org.apache.catalina.tribes.membership.Membership)4 StaticMember (org.apache.catalina.tribes.membership.StaticMember)4