Author: fhanik
Date: Fri Aug 10 12:41:34 2007
New Revision: 564728
URL: http://svn.apache.org/viewvc?view=rev&rev=564728
Log:
backport from trunk rev 564727
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?view=diff&rev=564728&r1=564727&r2=564728
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
Fri Aug 10 12:41:34 2007
@@ -247,7 +247,7 @@
null,
null,
channel.getLocalMember(false),
- new Member[0]);
+ null);
if ( channel.getMembers().length > 0 ) {
//send a ping, wait for all nodes to reply
Response[] resp = rpcChannel.send(channel.getMembers(),
@@ -295,7 +295,7 @@
protected void broadcast(int msgtype, boolean rpc) throws ChannelException
{
//send out a map membership message, only wait for the first reply
MapMessage msg = new MapMessage(this.mapContextName, msgtype,
- false, null, null, null,
channel.getLocalMember(false), new Member[0]);
+ false, null, null, null,
channel.getLocalMember(false), null);
if ( rpc) {
Response[] resp = rpcChannel.send(channel.getMembers(), msg,
rpcChannel.FIRST_REPLY, (channelSendOptions),rpcTimeout);
for (int i = 0; i < resp.length; i++) {
@@ -484,13 +484,13 @@
//map init request
if (mapmsg.getMsgType() == mapmsg.MSG_INIT) {
- mapmsg.setBackUpNodes(wrap(channel.getLocalMember(false)));
+ mapmsg.setPrimary(channel.getLocalMember(false));
return mapmsg;
}
//map start request
if (mapmsg.getMsgType() == mapmsg.MSG_START) {
- mapmsg.setBackUpNodes(wrap(channel.getLocalMember(false)));
+ mapmsg.setPrimary(channel.getLocalMember(false));
mapMemberAdded(sender);
return mapmsg;
}
@@ -720,6 +720,7 @@
Map.Entry e = (Map.Entry) i.next();
MapEntry entry = (MapEntry) super.get(e.getKey());
if (entry.isPrimary() && inSet(member,entry.getBackupNodes())) {
+ System.out.println("[1] Primary choosing a new backup");
try {
Member[] backup = publishEntryInfo(entry.getKey(),
entry.getValue());
entry.setBackupNodes(backup);
@@ -728,6 +729,7 @@
log.error("Unable to relocate[" + entry.getKey() + "] to a
new backup node", x);
}
} else if (member.equals(entry.getPrimary())) {
+ System.out.println("[2] Primary disappeared");
entry.setPrimary(null);
} //end if
@@ -737,18 +739,21 @@
entry.getBackupNodes().length == 1 &&
entry.getBackupNodes()[0].equals(member) ) {
//remove proxies that have no backup nor primaries
+ System.out.println("[3] Removing orphaned proxy");
i.remove();
- } else if ( entry.isBackup() &&
+ } else if ( entry.getPrimary() == null &&
+ entry.isBackup() &&
entry.getBackupNodes()!=null &&
entry.getBackupNodes().length == 1 &&
entry.getBackupNodes()[0].equals(channel.getLocalMember(false)) ) {
try {
+ System.out.println("[4] Backup becoming primary");
entry.setPrimary(channel.getLocalMember(false));
entry.setBackup(false);
entry.setProxy(false);
Member[] backup = publishEntryInfo(entry.getKey(),
entry.getValue());
entry.setBackupNodes(backup);
- mapOwner.objectMadePrimay(entry.getKey(),entry.getValue());
+ if ( mapOwner!=null )
mapOwner.objectMadePrimay(entry.getKey(),entry.getValue());
} catch (ChannelException x) {
log.error("Unable to relocate[" + entry.getKey() + "] to a
new backup node", x);
Modified:
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=diff&rev=564728&r1=564727&r2=564728
==============================================================================
--- tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java
(original)
+++ tomcat/tc6.0.x/trunk/test/org/apache/catalina/tribes/demos/MapDemo.java Fri
Aug 10 12:41:34 2007
@@ -49,6 +49,7 @@
import org.apache.catalina.tribes.util.UUIDGenerator;
import org.apache.catalina.tribes.util.Arrays;
import java.util.Set;
+import java.util.Random;
/**
* <p>Title: </p>
@@ -164,6 +165,7 @@
String[] columnNames = {
+ "Rownum",
"Key",
"Value",
"Primary Node",
@@ -197,13 +199,14 @@
String key = (String)keys [row-1];
LazyReplicatedMap.MapEntry entry = map.getInternal(key);
switch (col) {
- case 0: return entry.getKey();
- case 1: return entry.getValue();
- case 2: return
entry.getPrimary()!=null?entry.getPrimary().getName():"null";
- case 3: return getMemberNames(entry.getBackupNodes());
- case 4: return new Boolean(entry.isPrimary());
- case 5: return new Boolean(entry.isProxy());
- case 6: return new Boolean(entry.isBackup());
+ case 0: return String.valueOf(row);
+ case 1: return entry.getKey();
+ case 2: return entry.getValue();
+ case 3: return
entry.getPrimary()!=null?entry.getPrimary().getName():"null";
+ case 4: return getMemberNames(entry.getBackupNodes());
+ case 5: return new Boolean(entry.isPrimary());
+ case 6: return new Boolean(entry.isProxy());
+ case 7: return new Boolean(entry.isBackup());
default: return "";
}
@@ -330,8 +333,8 @@
if ( "random".equals(e.getActionCommand()) ) {
Thread t = new Thread() {
public void run() {
- for (int i = 0; i < 100; i++) {
- String key =
Arrays.toString(UUIDGenerator.randomUUID(false));
+ for (int i = 0; i < 5; i++) {
+ String key = random(5,0,0,true,true,null);
map.put(key, new StringBuffer(key));
dataModel.fireTableDataChanged();
table.paint(table.getGraphics());
@@ -353,6 +356,68 @@
dataModel.getValueAt(-1,-1);
}
+ public static Random random = new Random(System.currentTimeMillis());
+ public static String random(int count, int start, int end, boolean
letters, boolean numbers,
+ char[] chars ) {
+ if (count == 0) {
+ return "";
+ } else if (count < 0) {
+ throw new IllegalArgumentException("Requested random string
length " + count + " is less than 0.");
+ }
+ if ((start == 0) && (end == 0)) {
+ end = 'z' + 1;
+ start = ' ';
+ if (!letters && !numbers) {
+ start = 0;
+ end = Integer.MAX_VALUE;
+ }
+ }
+
+ char[] buffer = new char[count];
+ int gap = end - start;
+
+ while (count-- != 0) {
+ char ch;
+ if (chars == null) {
+ ch = (char) (random.nextInt(gap) + start);
+ } else {
+ ch = chars[random.nextInt(gap) + start];
+ }
+ if ((letters && Character.isLetter(ch))
+ || (numbers && Character.isDigit(ch))
+ || (!letters && !numbers))
+ {
+ if(ch >= 56320 && ch <= 57343) {
+ if(count == 0) {
+ count++;
+ } else {
+ // low surrogate, insert high surrogate after
putting it in
+ buffer[count] = ch;
+ count--;
+ buffer[count] = (char) (55296 +
random.nextInt(128));
+ }
+ } else if(ch >= 55296 && ch <= 56191) {
+ if(count == 0) {
+ count++;
+ } else {
+ // high surrogate, insert low surrogate before
putting it in
+ buffer[count] = (char) (56320 +
random.nextInt(128));
+ count--;
+ buffer[count] = ch;
+ }
+ } else if(ch >= 56192 && ch <= 56319) {
+ // private high surrogate, no effing clue, so skip it
+ count++;
+ } else {
+ buffer[count] = ch;
+ }
+ } else {
+ count++;
+ }
+ }
+ return new String(buffer);
+ }
+
private void printDebugData(JTable table) {
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
@@ -410,9 +475,9 @@
cell.setBackground(Color.WHITE);
if ( row > 0 ) {
Color color = null;
- boolean primary = ( (Boolean) table.getValueAt(row,
4)).booleanValue();
- boolean proxy = ( (Boolean) table.getValueAt(row,
5)).booleanValue();
- boolean backup = ( (Boolean) table.getValueAt(row,
6)).booleanValue();
+ boolean primary = ( (Boolean) table.getValueAt(row,
5)).booleanValue();
+ boolean proxy = ( (Boolean) table.getValueAt(row,
6)).booleanValue();
+ boolean backup = ( (Boolean) table.getValueAt(row,
7)).booleanValue();
if (primary) color = Color.GREEN;
else if (proxy) color = Color.RED;
else if (backup) color = Color.BLUE;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]