Search in sources :

Example 61 with Member

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

the class SocketNioSend 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);
    ChannelData data = new ChannelData();
    data.setOptions(Channel.SEND_OPTIONS_BYTE_MESSAGE);
    data.setAddress(mbr);
    byte[] buf = new byte[8192 * 4];
    data.setMessage(new XByteBuffer(buf, false));
    buf = XByteBuffer.createDataPackage(data);
    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.setTxBufSize(1024 * 1024);
    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();
                    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;
            }
        }
        selector.selectedKeys().clear();
    }
    System.out.println("Complete, sleeping 15 seconds");
    Thread.sleep(15000);
}
Also used : SelectionKey(java.nio.channels.SelectionKey) XByteBuffer(org.apache.catalina.tribes.io.XByteBuffer) NioSender(org.apache.catalina.tribes.transport.nio.NioSender) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) DecimalFormat(java.text.DecimalFormat) BigDecimal(java.math.BigDecimal) ChannelData(org.apache.catalina.tribes.io.ChannelData) Member(org.apache.catalina.tribes.Member) Selector(java.nio.channels.Selector)

Example 62 with Member

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

the class SocketNioReceive method main.

public static void main(String[] args) throws Exception {
    Member mbr = new MemberImpl("localhost", 9999, 0);
    ChannelData data = new ChannelData();
    data.setAddress(mbr);
    byte[] buf = new byte[8192 * 4];
    data.setMessage(new XByteBuffer(buf, false));
    buf = XByteBuffer.createDataPackage(data);
    len = buf.length;
    NioReceiver receiver = new NioReceiver();
    receiver.setPort(9999);
    receiver.setHost("localhost");
    MyList list = new MyList();
    receiver.setMessageListener(list);
    receiver.start();
    System.out.println("Listening on 9999");
    while (true) {
        try {
            synchronized (mutex) {
                mutex.wait(5000);
                if (start != 0) {
                    System.out.println("Throughput " + df.format(mb / seconds) + " MB/seconds, messages " + count + " accepts " + accept + ", total " + mb + " MB.");
                }
            }
        } catch (Throwable x) {
            x.printStackTrace();
        }
    }
}
Also used : XByteBuffer(org.apache.catalina.tribes.io.XByteBuffer) NioReceiver(org.apache.catalina.tribes.transport.nio.NioReceiver) ChannelData(org.apache.catalina.tribes.io.ChannelData) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) Member(org.apache.catalina.tribes.Member)

Example 63 with Member

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

the class SocketSend method main.

public static void main(String[] args) throws Exception {
    Member mbr = new MemberImpl("localhost", 9999, 0);
    ChannelData data = new ChannelData();
    data.setOptions(Channel.SEND_OPTIONS_BYTE_MESSAGE);
    data.setAddress(mbr);
    byte[] buf = new byte[8192 * 4];
    data.setMessage(new XByteBuffer(buf, false));
    buf = XByteBuffer.createDataPackage(data);
    int len = buf.length;
    System.out.println("Message size:" + len + " bytes");
    BigDecimal total = new BigDecimal((double) 0);
    BigDecimal bytes = new BigDecimal((double) len);
    Socket socket = new Socket("localhost", 9999);
    System.out.println("Writing to 9999");
    OutputStream out = socket.getOutputStream();
    long start = 0;
    double mb = 0;
    boolean first = true;
    int count = 0;
    DecimalFormat df = new DecimalFormat("##.00");
    while (count < 1000000) {
        if (first) {
            first = false;
            start = System.currentTimeMillis();
        }
        out.write(buf, 0, buf.length);
        mb += ((double) buf.length) / 1024 / 1024;
        total = total.add(bytes);
        if (((++count) % 10000) == 0) {
            long time = System.currentTimeMillis();
            double seconds = ((double) (time - start)) / 1000;
            System.out.println("Throughput " + df.format(mb / seconds) + " MB/seconds messages " + count + ", total " + mb + " MB, total " + total + " bytes.");
        }
    }
    out.flush();
    System.out.println("Complete, sleeping 5 seconds");
    Thread.sleep(5000);
    socket.close();
}
Also used : XByteBuffer(org.apache.catalina.tribes.io.XByteBuffer) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) OutputStream(java.io.OutputStream) DecimalFormat(java.text.DecimalFormat) BigDecimal(java.math.BigDecimal) ChannelData(org.apache.catalina.tribes.io.ChannelData) Member(org.apache.catalina.tribes.Member) Socket(java.net.Socket)

Example 64 with Member

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

the class NonBlockingCoordinator method mergeOnArrive.

protected Membership mergeOnArrive(CoordinationMessage msg, Member sender) {
    fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_PRE_MERGE, this, "Pre merge"));
    MemberImpl local = (MemberImpl) getLocalMember(false);
    Membership merged = new Membership(local, AbsoluteOrder.comp, true);
    Arrays.fill(merged, msg.getMembers());
    Arrays.fill(merged, getMembers());
    Member[] diff = Arrays.diff(merged, membership, local);
    for (int i = 0; i < diff.length; i++) {
        if (!alive(diff[i]))
            merged.removeMember((MemberImpl) diff[i]);
        else
            memberAdded(diff[i], false);
    }
    fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_POST_MERGE, this, "Post merge"));
    return merged;
}
Also used : MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) Membership(org.apache.catalina.tribes.membership.Membership) Member(org.apache.catalina.tribes.Member)

Example 65 with Member

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

the class ChannelCoordinator method internalStart.

/**
 * Starts up the channel. This can be called multiple times for individual services to start
 * The svc parameter can be the logical or value of any constants
 * @param svc int value of <BR>
 * DEFAULT - will start all services <BR>
 * MBR_RX_SEQ - starts the membership receiver <BR>
 * MBR_TX_SEQ - starts the membership broadcaster <BR>
 * SND_TX_SEQ - starts the replication transmitter<BR>
 * SND_RX_SEQ - starts the replication receiver<BR>
 * @throws ChannelException if a startup error occurs or the service is already started.
 */
protected synchronized void internalStart(int svc) throws ChannelException {
    try {
        boolean valid = false;
        // make sure we don't pass down any flags that are unrelated to the bottom layer
        svc = svc & Channel.DEFAULT;
        // we have already started up all components
        if (startLevel == Channel.DEFAULT)
            return;
        // nothing to start
        if (svc == 0)
            return;
        if (svc == (svc & startLevel))
            throw new ChannelException("Channel already started for level:" + svc);
        // listens to with the local membership settings
        if (Channel.SND_RX_SEQ == (svc & Channel.SND_RX_SEQ)) {
            clusterReceiver.setMessageListener(this);
            if (clusterReceiver instanceof ReceiverBase) {
                ((ReceiverBase) clusterReceiver).setChannel(getChannel());
            }
            clusterReceiver.start();
            // synchronize, big time FIXME
            Member localMember = getChannel().getLocalMember(false);
            if (localMember instanceof StaticMember) {
                // static member
                StaticMember staticMember = (StaticMember) localMember;
                staticMember.setHost(getClusterReceiver().getHost());
                staticMember.setPort(getClusterReceiver().getPort());
                staticMember.setSecurePort(getClusterReceiver().getSecurePort());
            } else {
                // multicast member
                membershipService.setLocalMemberProperties(getClusterReceiver().getHost(), getClusterReceiver().getPort(), getClusterReceiver().getSecurePort(), getClusterReceiver().getUdpPort());
            }
            valid = true;
        }
        if (Channel.SND_TX_SEQ == (svc & Channel.SND_TX_SEQ)) {
            if (clusterSender instanceof ReplicationTransmitter) {
                ((ReplicationTransmitter) clusterSender).setChannel(getChannel());
            }
            valid = true;
            clusterSender.start();
        }
        if (Channel.MBR_RX_SEQ == (svc & Channel.MBR_RX_SEQ)) {
            membershipService.setMembershipListener(this);
            if (membershipService instanceof McastService) {
                ((McastService) membershipService).setMessageListener(this);
                ((McastService) membershipService).setChannel(getChannel());
            }
            membershipService.start(MembershipService.MBR_RX);
            valid = true;
        }
        if (Channel.MBR_TX_SEQ == (svc & Channel.MBR_TX_SEQ)) {
            if (membershipService instanceof McastService) {
                ((McastService) membershipService).setChannel(getChannel());
            }
            membershipService.start(MembershipService.MBR_TX);
            valid = true;
        }
        if (!valid) {
            throw new IllegalArgumentException("Invalid start level, valid levels are:SND_RX_SEQ,SND_TX_SEQ,MBR_TX_SEQ,MBR_RX_SEQ");
        }
        startLevel = (startLevel | svc);
    } catch (ChannelException cx) {
        throw cx;
    } catch (Exception x) {
        throw new ChannelException(x);
    }
}
Also used : ReceiverBase(org.apache.catalina.tribes.transport.ReceiverBase) StaticMember(org.apache.catalina.tribes.membership.StaticMember) Member(org.apache.catalina.tribes.Member) StaticMember(org.apache.catalina.tribes.membership.StaticMember) ReplicationTransmitter(org.apache.catalina.tribes.transport.ReplicationTransmitter) ChannelException(org.apache.catalina.tribes.ChannelException) ChannelException(org.apache.catalina.tribes.ChannelException) McastService(org.apache.catalina.tribes.membership.McastService)

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