Skip to content

Commit

Permalink
- Added test for RELAY2.Relay2Header to SizeTest
Browse files Browse the repository at this point in the history
- Changed Util.writeAddress()/readAddress() to include SITE_UUID and SITE_MASTER
  • Loading branch information
belaban committed Jul 12, 2012
1 parent cc6d5c2 commit f685f7a
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 16 deletions.
3 changes: 2 additions & 1 deletion conf/jg-magic-map.xml
Expand Up @@ -58,5 +58,6 @@
<class id="95" name="org.jgroups.protocols.tom.ToaHeader"/>
<class id="96" name="org.jgroups.AnycastAddress"/>
<class id="97" name="org.jgroups.protocols.relay.SiteUUID"/>
<!--<class id="98" name="org.jgroups.protocols.relay.RELAY2$Relay2Header"/>-->
<class id="98" name="org.jgroups.protocols.relay.SiteMaster"/>
<class id="99" name="org.jgroups.protocols.relay.RELAY2$Relay2Header"/>
</magic-number-class-mapping>
8 changes: 5 additions & 3 deletions src/org/jgroups/Address.java
Expand Up @@ -20,9 +20,11 @@
*/
public interface Address extends Streamable, Comparable<Address>, Externalizable {
// flags used for marshalling
public static final byte NULL = 1 << 0;
public static final byte UUID_ADDR = 1 << 1;
public static final byte IP_ADDR = 1 << 2;
public static final byte NULL = 1 << 0;
public static final byte UUID_ADDR = 1 << 1;
public static final byte SITE_UUID = 1 << 2;
public static final byte SITE_MASTER = 1 << 3;
public static final byte IP_ADDR = 1 << 4;


/** Returns serialized size of this address */
Expand Down
54 changes: 50 additions & 4 deletions src/org/jgroups/protocols/relay/RELAY2.java
@@ -1,15 +1,15 @@
package org.jgroups.protocols.relay;

import org.jgroups.Address;
import org.jgroups.Event;
import org.jgroups.View;
import org.jgroups.*;
import org.jgroups.annotations.*;
import org.jgroups.conf.ConfiguratorFactory;
import org.jgroups.protocols.relay.config.RelayConfig;
import org.jgroups.stack.Protocol;
import org.jgroups.util.UUID;
import org.jgroups.util.Util;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
Expand Down Expand Up @@ -162,7 +162,7 @@ protected void handleView(View view) {
relayer=new Relayer(site_config, bridge_name, log);
try {
if(log.isTraceEnabled())
log.trace("I become site master; starting bridges");
log.trace("I became site master; starting bridges");
relayer.start();
}
catch(Throwable t) {
Expand All @@ -179,4 +179,50 @@ protected void handleView(View view) {
}
}
}


public static class Relay2Header extends Header {
public static final byte DATA = 1;

protected byte type;
protected Address dest;
protected Address sender;


public Relay2Header() {
}

public Relay2Header(byte type, Address dest, Address sender) {
this.type=type;
this.dest=dest;
this.sender=sender;
}

public int size() {
return Global.BYTE_SIZE + Util.size(dest) + Util.size(sender);
}

public void writeTo(DataOutput out) throws Exception {
out.writeByte(type);
Util.writeAddress(dest, out);
Util.writeAddress(sender, out);
}

public void readFrom(DataInput in) throws Exception {
type=in.readByte();
dest=Util.readAddress(in);
sender=Util.readAddress(in);
}

public String toString() {
return typeToString(type) + " [dest=" + dest + ", sender=" + sender + "]";
}

protected static String typeToString(byte type) {
switch(type) {
case DATA: return "DATA";
default: return "<unknown>";
}
}
}
}
3 changes: 3 additions & 0 deletions src/org/jgroups/protocols/relay/Relayer.java
Expand Up @@ -175,6 +175,9 @@ public void viewAccepted(View view) {
List<Address> left_mbrs=this.view != null? Util.determineLeftMembers(this.view.getMembers(),view.getMembers()) : null;
this.view=view;

if(log.isTraceEnabled())
log.trace("[Relayer " + channel.getAddress() + "] view: " + view);

for(Address addr: view.getMembers()) {
if(addr instanceof SiteUUID) {
SiteUUID site_uuid=(SiteUUID)addr;
Expand Down
30 changes: 22 additions & 8 deletions src/org/jgroups/util/Util.java
Expand Up @@ -10,6 +10,8 @@
import org.jgroups.protocols.*;
import org.jgroups.protocols.pbcast.FLUSH;
import org.jgroups.protocols.pbcast.GMS;
import org.jgroups.protocols.relay.SiteMaster;
import org.jgroups.protocols.relay.SiteUUID;
import org.jgroups.stack.IpAddress;
import org.jgroups.stack.Protocol;
import org.jgroups.stack.ProtocolStack;
Expand Down Expand Up @@ -791,17 +793,21 @@ public static void writeAddress(Address addr, DataOutput out) throws Exception {
return;
}

Class<? extends Address> clazz=addr.getClass();
if(clazz.equals(UUID.class)) {
flags=Util.setFlag(flags, Address.UUID_ADDR);
if(addr instanceof UUID) {
Class<? extends Address> clazz=addr.getClass();
if(clazz.equals(UUID.class))
flags=Util.setFlag(flags, Address.UUID_ADDR);
else if(clazz.equals(SiteUUID.class))
flags=Util.setFlag(flags, Address.SITE_UUID);
else if(clazz.equals(SiteMaster.class))
flags=Util.setFlag(flags,Address.SITE_MASTER);
else
streamable_addr=false;
}
else if(clazz.equals(IpAddress.class)) {
else if(addr instanceof IpAddress)
flags=Util.setFlag(flags, Address.IP_ADDR);
}
else {
else
streamable_addr=false;
}

out.writeByte(flags);
if(streamable_addr)
addr.writeTo(out);
Expand All @@ -819,6 +825,14 @@ public static Address readAddress(DataInput in) throws Exception {
addr=new UUID();
addr.readFrom(in);
}
else if(Util.isFlagSet(flags, Address.SITE_UUID)) {
addr=new SiteUUID();
addr.readFrom(in);
}
else if(Util.isFlagSet(flags, Address.SITE_MASTER)) {
addr=new SiteMaster();
addr.readFrom(in);
}
else if(Util.isFlagSet(flags, Address.IP_ADDR)) {
addr=new IpAddress();
addr.readFrom(in);
Expand Down
12 changes: 12 additions & 0 deletions tests/junit-functional/org/jgroups/tests/SizeTest.java
Expand Up @@ -6,6 +6,9 @@
import org.jgroups.blocks.RequestCorrelator;
import org.jgroups.protocols.*;
import org.jgroups.protocols.pbcast.*;
import org.jgroups.protocols.relay.RELAY2;
import org.jgroups.protocols.relay.SiteMaster;
import org.jgroups.protocols.relay.SiteUUID;
import org.jgroups.stack.GossipData;
import org.jgroups.stack.IpAddress;
import org.jgroups.util.*;
Expand Down Expand Up @@ -602,6 +605,15 @@ public static void testStateHeader() throws Exception {
}


public static void testRelay2Header() throws Exception {
Address dest=new SiteMaster((short)0);
RELAY2.Relay2Header hdr=new RELAY2.Relay2Header(RELAY2.Relay2Header.DATA, dest, null);
_testSize(hdr);
Address sender=new SiteUUID(UUID.randomUUID(), (short)1);
hdr=new RELAY2.Relay2Header(RELAY2.Relay2Header.DATA, dest, sender);
_testSize(hdr);
}


public static void testEncryptHeader() throws Exception {
ENCRYPT.EncryptHeader hdr=new ENCRYPT.EncryptHeader((short)1, null);
Expand Down

0 comments on commit f685f7a

Please sign in to comment.