use of org.apache.catalina.tribes.Member in project tomcat70 by apache.
the class StaticMembershipInterceptor method start.
/**
* Send notifications upwards
* @param svc int
* @throws ChannelException
*/
@Override
public void start(int svc) throws ChannelException {
if ((Channel.SND_RX_SEQ & svc) == Channel.SND_RX_SEQ)
super.start(Channel.SND_RX_SEQ);
if ((Channel.SND_TX_SEQ & svc) == Channel.SND_TX_SEQ)
super.start(Channel.SND_TX_SEQ);
final ChannelInterceptorBase base = this;
for (final Member member : members) {
Thread t = new Thread() {
@Override
public void run() {
base.memberAdded(member);
if (getfirstInterceptor().getMember(member) != null) {
sendLocalMember(new Member[] { member });
}
}
};
t.start();
}
super.start(svc & (~Channel.SND_RX_SEQ) & (~Channel.SND_TX_SEQ));
// check required interceptors
TcpFailureDetector failureDetector = null;
TcpPingInterceptor pingInterceptor = null;
ChannelInterceptor prev = getPrevious();
while (prev != null) {
if (prev instanceof TcpFailureDetector)
failureDetector = (TcpFailureDetector) prev;
if (prev instanceof TcpPingInterceptor)
pingInterceptor = (TcpPingInterceptor) prev;
prev = prev.getPrevious();
}
if (failureDetector == null) {
log.warn("There is no TcpFailureDetector. Automatic detection of static members does" + " not work properly. By defining the StaticMembershipInterceptor under the" + " TcpFailureDetector, automatic detection of the static members will work.");
}
if (pingInterceptor == null) {
log.warn("There is no TcpPingInterceptor. The health check of static member does" + " not work properly. By defining the TcpPingInterceptor, the health check of" + " static member will work.");
}
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class TestMembership method testClone.
@Test
public void testClone() throws Exception {
Member m1 = new MemberImpl("localhost", 1, 1000);
Member m2 = new MemberImpl("localhost", 2, 1000);
Member m3 = new MemberImpl("localhost", 3, 1000);
Membership original = new Membership(m1);
original.addMember(m2);
original.addMember(m3);
Membership clone = original.clone();
Assert.assertFalse(original == clone);
Assert.assertTrue(original.getClass() == clone.getClass());
Assert.assertTrue(original.local == clone.local);
Assert.assertFalse(original.map == clone.map);
Assert.assertTrue(original.map.size() == clone.map.size());
Iterator<Entry<Member, MbrEntry>> originalEntries = original.map.entrySet().iterator();
Iterator<Entry<Member, MbrEntry>> cloneEntries = clone.map.entrySet().iterator();
while (originalEntries.hasNext()) {
Entry<Member, MbrEntry> originalEntry = originalEntries.next();
Entry<Member, MbrEntry> cloneEntry = cloneEntries.next();
Assert.assertTrue(originalEntry.getKey() == cloneEntry.getKey());
Assert.assertTrue(originalEntry.getValue() == cloneEntry.getValue());
}
Assert.assertTrue(original.memberComparator == clone.memberComparator);
Assert.assertFalse(original.members == clone.members);
Assert.assertArrayEquals(original.members, clone.members);
// Need to use reflection to access lock since it is a private field
Field f = Membership.class.getDeclaredField("membersLock");
f.setAccessible(true);
Object originalLock = f.get(original);
Object cloneLock = f.get(clone);
Assert.assertFalse(originalLock == cloneLock);
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class TestMulticastPackages 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_MULTICAST | 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();
}
}
};
}
for (Thread thread : threads) {
thread.start();
}
for (Thread thread : threads) {
thread.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());
}
use of org.apache.catalina.tribes.Member in project tomcat 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();
}
}
};
}
for (Thread thread : threads) {
thread.start();
}
for (Thread thread : threads) {
thread.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());
}
use of org.apache.catalina.tribes.Member in project tomcat by apache.
the class SocketNioSend method main.
public static void main(String[] args) throws Exception {
Selector 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);
}
Aggregations