Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 37124 invoked from network); 11 Sep 2006 14:48:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 11 Sep 2006 14:48:14 -0000 Received: (qmail 44215 invoked by uid 500); 11 Sep 2006 14:48:12 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 43247 invoked by uid 500); 11 Sep 2006 14:48:10 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 43236 invoked by uid 500); 11 Sep 2006 14:48:09 -0000 Delivered-To: apmail-jakarta-tomcat-dev@jakarta.apache.org Received: (qmail 43233 invoked by uid 99); 11 Sep 2006 14:48:09 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Sep 2006 07:48:09 -0700 X-ASF-Spam-Status: No, hits=-8.6 required=10.0 tests=ALL_TRUSTED,INFO_TLD,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Sep 2006 07:48:08 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 2FAC61A981D; Mon, 11 Sep 2006 07:47:48 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r442235 [2/2] - in /tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos: ./ ChannelCreator.java CoordinationDemo.java EchoRpcTest.java IntrospectionUtils.java LoadTest.java MapDemo.java Date: Mon, 11 Sep 2006 14:47:47 -0000 To: tomcat-dev@jakarta.apache.org From: fhanik@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20060911144748.2FAC61A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Added: tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/LoadTest.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/LoadTest.java?view=auto&rev=442235 ============================================================================== --- tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/LoadTest.java (added) +++ tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/LoadTest.java Mon Sep 11 07:47:47 2006 @@ -0,0 +1,424 @@ +/* + * Copyright 1999,2004-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.tribes.demos; + +import java.io.Serializable; +import java.util.Random; + +import org.apache.catalina.tribes.ByteMessage; +import org.apache.catalina.tribes.ChannelException; +import org.apache.catalina.tribes.ChannelListener; +import org.apache.catalina.tribes.ManagedChannel; +import org.apache.catalina.tribes.Member; +import org.apache.catalina.tribes.MembershipListener; +import org.apache.catalina.tribes.io.XByteBuffer; +import org.apache.catalina.tribes.Channel; +import java.io.Externalizable; + + +/** + *

Title:

+ * + *

Description:

+ * + *

Copyright: Copyright (c) 2005

+ * + *

Company:

+ * + * @author not attributable + * @version 1.0 + */ +public class LoadTest implements MembershipListener,ChannelListener, Runnable { + protected static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LoadTest.class); + public static int size = 24000; + public static Object mutex = new Object(); + public boolean doRun = true; + + public long bytesReceived = 0; + public float mBytesReceived = 0; + public int messagesReceived = 0; + public boolean send = true; + public boolean debug = false; + public int msgCount = 100; + ManagedChannel channel=null; + public int statsInterval = 10000; + public long pause = 0; + public boolean breakonChannelException = false; + public boolean async = false; + public long receiveStart = 0; + public int channelOptions = Channel.SEND_OPTIONS_DEFAULT; + + static int messageSize = 0; + + public static long messagesSent = 0; + public static long messageStartSendTime = 0; + public static long messageEndSendTime = 0; + public static int threadCount = 0; + + public static synchronized void startTest() { + threadCount++; + if ( messageStartSendTime == 0 ) messageStartSendTime = System.currentTimeMillis(); + } + + public static synchronized void endTest() { + threadCount--; + if ( messageEndSendTime == 0 && threadCount==0 ) messageEndSendTime = System.currentTimeMillis(); + } + + + public static synchronized long addSendStats(long count) { + messagesSent+=count; + return 0l; + } + + private static void printSendStats(long counter, int messageSize) { + float cnt = (float)counter; + float size = (float)messageSize; + float time = (float)(System.currentTimeMillis()-messageStartSendTime) / 1000f; + log.info("****SEND STATS-"+Thread.currentThread().getName()+"*****"+ + "\n\tMessage count:"+counter+ + "\n\tTotal bytes :"+(long)(size*cnt)+ + "\n\tTotal seconds:"+(time)+ + "\n\tBytes/second :"+(size*cnt/time)+ + "\n\tMBytes/second:"+(size*cnt/time/1024f/1024f)); + } + + + + public LoadTest(ManagedChannel channel, + boolean send, + int msgCount, + boolean debug, + long pause, + int stats, + boolean breakOnEx) { + this.channel = channel; + this.send = send; + this.msgCount = msgCount; + this.debug = debug; + this.pause = pause; + this.statsInterval = stats; + this.breakonChannelException = breakOnEx; + } + + + + public void run() { + + long counter = 0; + long total = 0; + LoadMessage msg = new LoadMessage(); + int messageSize = LoadTest.messageSize; + + try { + startTest(); + while (total < msgCount) { + if (channel.getMembers().length == 0 || (!send)) { + synchronized (mutex) { + try { + mutex.wait(); + } catch (InterruptedException x) { + log.info("Thread interrupted from wait"); + } + } + } else { + try { + //msg.setMsgNr((int)++total); + counter++; + if (debug) { + printArray(msg.getMessage()); + } + channel.send(channel.getMembers(), msg, channelOptions); + if ( pause > 0 ) { + if ( debug) System.out.println("Pausing sender for "+pause+" ms."); + Thread.sleep(pause); + } + } catch (ChannelException x) { + if ( debug ) log.error("Unable to send message:"+x.getMessage(),x); + log.error("Unable to send message:"+x.getMessage()); + ChannelException.FaultyMember[] faulty = x.getFaultyMembers(); + for (int i=0; i 0)) { + //add to the global counter + counter = addSendStats(counter); + //print from the global counter + //printSendStats(LoadTest.messagesSent, LoadTest.messageSize, LoadTest.messageSendTime); + printSendStats(LoadTest.messagesSent, LoadTest.messageSize); + + } + + } + }catch ( Exception x ) { + log.error("Captured error while sending:"+x.getMessage()); + if ( debug ) log.error("",x); + printSendStats(LoadTest.messagesSent, LoadTest.messageSize); + } + endTest(); + } + + + + /** + * memberAdded + * + * @param member Member + * @todo Implement this org.apache.catalina.tribes.MembershipListener + * method + */ + public void memberAdded(Member member) { + log.info("Member added:"+member); + synchronized (mutex) { + mutex.notifyAll(); + } + } + + /** + * memberDisappeared + * + * @param member Member + * @todo Implement this org.apache.catalina.tribes.MembershipListener + * method + */ + public void memberDisappeared(Member member) { + log.info("Member disappeared:"+member); + } + + public boolean accept(Serializable msg, Member mbr){ + return (msg instanceof LoadMessage) || (msg instanceof ByteMessage); + } + + public void messageReceived(Serializable msg, Member mbr){ + if ( receiveStart == 0 ) receiveStart = System.currentTimeMillis(); + if ( debug ) { + if ( msg instanceof LoadMessage ) { + printArray(((LoadMessage)msg).getMessage()); + } + } + + if ( msg instanceof ByteMessage && !(msg instanceof LoadMessage)) { + LoadMessage tmp = new LoadMessage(); + tmp.setMessage(((ByteMessage)msg).getMessage()); + msg = tmp; + tmp = null; + } + + + bytesReceived+=((LoadMessage)msg).getMessage().length; + mBytesReceived+=((float)((LoadMessage)msg).getMessage().length)/1024f/1024f; + messagesReceived++; + if ( (messagesReceived%statsInterval)==0 || (messagesReceived==msgCount)) { + float bytes = (float)(((LoadMessage)msg).getMessage().length*messagesReceived); + float seconds = ((float)(System.currentTimeMillis()-receiveStart)) / 1000f; + log.info("****RECEIVE STATS-"+Thread.currentThread().getName()+"*****"+ + "\n\tMessage count :"+(long)messagesReceived+ + "\n\tTotal bytes :"+(long)bytes+ + "\n\tTotal mbytes :"+(long)mBytesReceived+ + "\n\tTime since 1st:"+seconds+" seconds"+ + "\n\tBytes/second :"+(bytes/seconds)+ + "\n\tMBytes/second :"+(mBytesReceived/seconds)+"\n"); + + } + } + + + public static void printArray(byte[] data) { + System.out.print("{"); + for (int i=0; i 1 ) { + Thread t = new Thread(test); + t.setDaemon(true); + t.start(); + threads--; + test = new LoadTest(channel,send,count,debug,pause,stats,breakOnEx); + test.channelOptions = channelOptions; + } + test.run(); + if ( shutdown && send ) channel.stop(channel.DEFAULT); + System.out.println("System test complete, sleeping to let threads finish."); + Thread.sleep(60*1000*60); + } + + public static class Shutdown extends Thread { + ManagedChannel channel = null; + public Shutdown(ManagedChannel channel) { + this.channel = channel; + } + + public void run() { + System.out.println("Shutting down..."); + SystemExit exit = new SystemExit(5000); + exit.setDaemon(true); + exit.start(); + try { + channel.stop(channel.DEFAULT); + + }catch ( Exception x ) { + x.printStackTrace(); + } + System.out.println("Channel stopped."); + } + } + public static class SystemExit extends Thread { + private long delay; + public SystemExit(long delay) { + this.delay = delay; + } + public void run () { + try { + Thread.sleep(delay); + }catch ( Exception x ) { + x.printStackTrace(); + } + System.exit(0); + + } + } + +} \ No newline at end of file Added: tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java?view=auto&rev=442235 ============================================================================== --- tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java (added) +++ tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java Mon Sep 11 07:47:47 2006 @@ -0,0 +1,415 @@ +package org.apache.catalina.tribes.demos; + +import java.io.Serializable; +import java.util.Map; + +import java.awt.ComponentOrientation; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; + +import org.apache.catalina.tribes.Channel; +import org.apache.catalina.tribes.ChannelListener; +import org.apache.catalina.tribes.ManagedChannel; +import org.apache.catalina.tribes.Member; +import org.apache.catalina.tribes.MembershipListener; +import org.apache.catalina.tribes.tipis.AbstractReplicatedMap; +import org.apache.catalina.tribes.tipis.LazyReplicatedMap; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import javax.swing.table.TableColumn; +import org.apache.catalina.tribes.util.UUIDGenerator; +import org.apache.catalina.tribes.util.Arrays; + +/** + *

Title:

+ * + *

Description:

+ * + *

Copyright: Copyright (c) 2005

+ * + *

Company:

+ * + * @author not attributable + * @version 1.0 + */ +public class MapDemo implements ChannelListener, MembershipListener{ + + protected LazyReplicatedMap map; + protected SimpleTableDemo table; + + public MapDemo(Channel channel, String mapName ) { + map = new LazyReplicatedMap(null,channel,5000, mapName,null); + table = SimpleTableDemo.createAndShowGUI(map,channel.getLocalMember(false).getName()); + channel.addChannelListener(this); + channel.addMembershipListener(this); +// for ( int i=0; i<1000; i++ ) { +// map.put("MyKey-"+i,"My String Value-"+i); +// } + this.messageReceived(null,null); + } + + public boolean accept(Serializable msg, Member source) { + table.dataModel.getValueAt(-1,-1); + return false; + } + + public void messageReceived(Serializable msg, Member source) { + + } + + public void memberAdded(Member member) { + } + public void memberDisappeared(Member member) { + table.dataModel.getValueAt(-1,-1); + } + + public static void usage() { + System.out.println("Tribes MapDemo."); + System.out.println("Usage:\n\t" + + "java MapDemo [channel options] mapName\n\t" + + "\tChannel options:" + + ChannelCreator.usage()); + } + + public static void main(String[] args) throws Exception { + long start = System.currentTimeMillis(); + ManagedChannel channel = (ManagedChannel) ChannelCreator.createChannel(args); + String mapName = "MapDemo"; + if ( args.length > 0 && (!args[args.length-1].startsWith("-"))) { + mapName = args[args.length-1]; + } + channel.start(channel.DEFAULT); + Runtime.getRuntime().addShutdownHook(new Shutdown(channel)); + MapDemo demo = new MapDemo(channel,mapName); + + System.out.println("System test complete, time to start="+(System.currentTimeMillis()-start)+" ms. Sleeping to let threads finish."); + Thread.sleep(60 * 1000 * 60); + } + + public static class Shutdown + extends Thread { + ManagedChannel channel = null; + public Shutdown(ManagedChannel channel) { + this.channel = channel; + } + + public void run() { + System.out.println("Shutting down..."); + SystemExit exit = new SystemExit(5000); + exit.setDaemon(true); + exit.start(); + try { + channel.stop(channel.DEFAULT); + + } catch (Exception x) { + x.printStackTrace(); + } + System.out.println("Channel stopped."); + } + } + + public static class SystemExit + extends Thread { + private long delay; + public SystemExit(long delay) { + this.delay = delay; + } + + public void run() { + try { + Thread.sleep(delay); + } catch (Exception x) { + x.printStackTrace(); + } + System.exit(0); + + } + } + + public static class SimpleTableDemo + extends JPanel implements ActionListener{ + private static int WIDTH = 550; + + private LazyReplicatedMap map; + private boolean DEBUG = false; + AbstractTableModel dataModel = new AbstractTableModel() { + + + String[] columnNames = { + "Key", + "Value", + "Backup Node", + "isPrimary", + "isProxy", + "isBackup"}; + + public int getColumnCount() { return columnNames.length; } + + public int getRowCount() {return map.sizeFull() +1; } + + public StringBuffer getMemberNames(Member[] members){ + StringBuffer buf = new StringBuffer(); + if ( members!=null ) { + for (int i=0;i 0 ) { + Color color = null; + boolean primary = ( (Boolean) table.getValueAt(row, 3)).booleanValue(); + boolean proxy = ( (Boolean) table.getValueAt(row, 4)).booleanValue(); + boolean backup = ( (Boolean) table.getValueAt(row, 5)).booleanValue(); + if (primary) color = Color.GREEN; + else if (proxy) color = Color.RED; + else if (backup) color = Color.BLUE; + if ( color != null ) cell.setBackground(color); + } +// System.out.println("Row:"+row+" Column:"+column+" Color:"+cell.getBackground()); +// cell.setBackground(bkgndColor); +// cell.setForeground(fgndColor); + + return cell; + } + + + } + + +} --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org