Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
- Added internal thread pool to TP (https://issues.jboss.org/browse/JGRP-1599)
- Replaced Message.OOB with Message.Flag.OOB
- Replaced Message.DONT_BUNDLE with Message.Flag.DONT_BUNDLE
- Failure detection protocols now use INTERNAL flag
- Flow control protocols now use INTERNAL flag
- Membership protocols now use INTERNAL flag
- Stability protocol now uses INTERNAL flag
- MERGE3 protocol now uses INTERNAL flag
- Reliable retransmission protocols now use INTERNAL flag
- Sending discovery messages with DONT_BUNDLE (required)
  • Loading branch information
belaban committed Mar 1, 2013
1 parent 1cf79de commit 329f08b
Show file tree
Hide file tree
Showing 66 changed files with 467 additions and 545 deletions.
100 changes: 35 additions & 65 deletions src/org/jgroups/Message.java
Expand Up @@ -62,23 +62,24 @@ public static enum Flag {
SCOPED( (short)(1 << 3)), // when a message has a scope
NO_RELIABILITY((short)(1 << 4)), // bypass UNICAST(2) and NAKACK
NO_TOTAL_ORDER((short)(1 << 5)), // bypass total order (e.g. SEQUENCER)
NO_RELAY((short) (1 << 6)), // bypass relaying (RELAY)
RSVP((short) (1 << 7)); // ack of a multicast (https://issues.jboss.org/browse/JGRP-1389)
NO_RELAY( (short)(1 << 6)), // bypass relaying (RELAY)
RSVP( (short)(1 << 7)), // ack of a multicast (https://issues.jboss.org/browse/JGRP-1389)
INTERNAL( (short)(1 << 8)); // for internal use by JGroups only, don't use !

final short value;
Flag(short value) {this.value=value;}

public short value() {return value;}
}

public static final Flag OOB=Flag.OOB;
public static final Flag DONT_BUNDLE=Flag.DONT_BUNDLE;
public static final Flag NO_FC=Flag.NO_FC;
public static final Flag SCOPED=Flag.SCOPED;
public static final Flag NO_RELIABILITY=Flag.NO_RELIABILITY;
public static final Flag NO_TOTAL_ORDER=Flag.NO_TOTAL_ORDER;
public static final Flag NO_RELAY=Flag.NO_RELAY;
public static final Flag RSVP=Flag.RSVP;
@Deprecated public static final Flag OOB=Flag.OOB;
@Deprecated public static final Flag DONT_BUNDLE=Flag.DONT_BUNDLE;
@Deprecated public static final Flag NO_FC=Flag.NO_FC;
@Deprecated public static final Flag SCOPED=Flag.SCOPED;
@Deprecated public static final Flag NO_RELIABILITY=Flag.NO_RELIABILITY;
@Deprecated public static final Flag NO_TOTAL_ORDER=Flag.NO_TOTAL_ORDER;
@Deprecated public static final Flag NO_RELAY=Flag.NO_RELAY;
@Deprecated public static final Flag RSVP=Flag.RSVP;



Expand All @@ -91,7 +92,8 @@ public static enum TransientFlag {

public short value() {return value;}
}


@Deprecated
public static final TransientFlag OOB_DELIVERED=TransientFlag.OOB_DELIVERED; // OOB which has already been delivered up the stack


Expand Down Expand Up @@ -837,67 +839,35 @@ public long size() {
public static String flagsToString(short flags) {
StringBuilder sb=new StringBuilder();
boolean first=true;
if(isFlagSet(flags, Flag.OOB)) {
first=false;
sb.append("OOB");
}
if(isFlagSet(flags, Flag.DONT_BUNDLE)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("DONT_BUNDLE");
}
if(isFlagSet(flags, Flag.NO_FC)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("NO_FC");
}
if(isFlagSet(flags, Flag.SCOPED)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("SCOPED");
}
if(isFlagSet(flags, Flag.NO_RELIABILITY)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("NO_RELIABILITY");
}
if(isFlagSet(flags, Flag.NO_TOTAL_ORDER)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("NO_TOTAL_ORDER");
}
if(isFlagSet(flags, Flag.NO_RELAY)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("NO_RELAY");
}
if(isFlagSet(flags, Flag.RSVP)) {
if(!first)
sb.append("|");
else
first=false;
sb.append("RSVP");

Flag[] all_flags=Flag.values();
for(Flag flag: all_flags) {
if(isFlagSet(flags, flag)) {
if(first)
first=false;
else
sb.append("|");
sb.append(flag);
}
}
return sb.toString();
}


public String transientFlagsToString() {
StringBuilder sb=new StringBuilder();
if(isTransientFlagSet(TransientFlag.OOB_DELIVERED))
sb.append("OOB_DELIVERED");
boolean first=true;

TransientFlag[] all_flags=TransientFlag.values();
for(TransientFlag flag: all_flags) {
if(isTransientFlagSet(flag)) {
if(first)
first=false;
else
sb.append("|");
sb.append(flag);
}
}
return sb.toString();
}

Expand Down
2 changes: 1 addition & 1 deletion src/org/jgroups/auth/DemoToken.java
Expand Up @@ -42,7 +42,7 @@ public boolean authenticate(AuthToken token, Message msg) {
Address sender=msg.getSrc();

// 1. send a challenge to the sender
Message challenge=new Message(sender).setFlag(Message.OOB);
Message challenge=new Message(sender).setFlag(Message.Flag.OOB);
byte[] buf=generateRandomBytes();
DemoHeader hdr=new DemoHeader(buf);
challenge.putHeader(ID, hdr);
Expand Down
2 changes: 1 addition & 1 deletion src/org/jgroups/blocks/RequestOptions.java
Expand Up @@ -31,7 +31,7 @@ public class RequestOptions {
protected short scope;

/** The flags set in the message in which a request is sent */
protected short flags; // Message.OOB, Message.DONT_BUNDLE etc
protected short flags; // Message.Flag.OOB, Message.Flag.DONT_BUNDLE etc

/** A list of members which should be excluded from a call */
protected Set<Address> exclusion_list;
Expand Down
8 changes: 2 additions & 6 deletions src/org/jgroups/protocols/AUTH.java
Expand Up @@ -185,17 +185,13 @@ protected void sendJoinRejectionMessage(Address dest, String error_msg) {
if(dest == null)
return;

Message msg = new Message(dest, null, null);
JoinRsp joinRes=new JoinRsp(error_msg); // specify the error message on the JoinRsp

GMS.GmsHeader gmsHeader=new GMS.GmsHeader(GMS.GmsHeader.JOIN_RSP, joinRes);
msg.putHeader(gms_id, gmsHeader);
Message msg = new Message(dest).putHeader(gms_id, new GMS.GmsHeader(GMS.GmsHeader.JOIN_RSP, joinRes));
down_prot.down(new Event(Event.MSG, msg));
}

protected void sendMergeRejectionMessage(Address dest) {
Message msg=new Message(dest, null, null);
msg.setFlag(Message.OOB);
Message msg=new Message(dest).setFlag(Message.Flag.OOB);
GMS.GmsHeader hdr=new GMS.GmsHeader(GMS.GmsHeader.MERGE_RSP);
hdr.setMergeRejected(true);
msg.putHeader(gms_id, hdr);
Expand Down
15 changes: 6 additions & 9 deletions src/org/jgroups/protocols/COUNTER.java
Expand Up @@ -431,10 +431,9 @@ protected Owner getOwner() {
protected void sendRequest(Address dest, Request req) {
try {
Buffer buffer=requestToBuffer(req);
Message msg=new Message(dest, null, buffer);
msg.putHeader(id, new CounterHeader());
Message msg=new Message(dest, buffer).putHeader(id, new CounterHeader());
if(bypass_bundling)
msg.setFlag(Message.DONT_BUNDLE);
msg.setFlag(Message.Flag.DONT_BUNDLE);
if(log.isTraceEnabled())
log.trace("[" + local_addr + "] --> [" + (dest == null? "ALL" : dest) + "] " + req);

Expand All @@ -449,10 +448,9 @@ protected void sendRequest(Address dest, Request req) {
protected void sendResponse(Address dest, Response rsp) {
try {
Buffer buffer=responseToBuffer(rsp);
Message rsp_msg=new Message(dest, null, buffer);
rsp_msg.putHeader(id, new CounterHeader());
Message rsp_msg=new Message(dest, buffer).putHeader(id, new CounterHeader());
if(bypass_bundling)
rsp_msg.setFlag(Message.DONT_BUNDLE);
rsp_msg.setFlag(Message.Flag.DONT_BUNDLE);

if(log.isTraceEnabled())
log.trace("[" + local_addr + "] --> [" + dest + "] " + rsp);
Expand Down Expand Up @@ -480,10 +478,9 @@ protected void updateBackups(String name, long value, long version) {

protected void send(Address dest, Buffer buffer) {
try {
Message rsp_msg=new Message(dest, null, buffer);
rsp_msg.putHeader(id, new CounterHeader());
Message rsp_msg=new Message(dest, buffer).putHeader(id, new CounterHeader());
if(bypass_bundling)
rsp_msg.setFlag(Message.DONT_BUNDLE);
rsp_msg.setFlag(Message.Flag.DONT_BUNDLE);
down_prot.down(new Event(Event.MSG, rsp_msg));
}
catch(Exception ex) {
Expand Down
2 changes: 1 addition & 1 deletion src/org/jgroups/protocols/DAISYCHAIN.java
Expand Up @@ -101,7 +101,7 @@ public Object down(final Event evt) {
if(msg.getSrc() == null)
msg.setSrc(local_addr);

Executor pool=msg.isFlagSet(Message.OOB)? oob_pool : default_pool;
Executor pool=msg.isFlagSet(Message.Flag.OOB)? oob_pool : default_pool;
pool.execute(new Runnable() {
public void run() {
up_prot.up(evt);
Expand Down
13 changes: 8 additions & 5 deletions src/org/jgroups/protocols/Discovery.java
Expand Up @@ -259,8 +259,10 @@ public void sendDiscoveryRequest(String cluster_name, Promise promise, ViewId vi

Collection<PhysicalAddress> cluster_members=fetchClusterMembers(cluster_name);
if(cluster_members == null) {
// multicast msg
Message msg=new Message(null).setFlag(Message.OOB, Message.Flag.DONT_BUNDLE).putHeader(getId(), hdr);
// message needs to have DONT_BUNDLE flag: if A sends message M to B, and we need to fetch B's physical
// address, then the bundler thread blocks until the discovery request has returned. However, we cannot send
// the discovery *request* until the bundler thread has returned from sending M
Message msg=new Message(null).setFlag(Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE).putHeader(getId(), hdr);
sendMcastDiscoveryRequest(msg);
}
else {
Expand All @@ -281,7 +283,9 @@ public void sendDiscoveryRequest(String cluster_name, Promise promise, ViewId vi
for(final Address addr: cluster_members) {
if(addr.equals(physical_addr)) // no need to send the request to myself
continue;
final Message msg=new Message(addr).setFlag(Message.OOB, Message.Flag.DONT_BUNDLE).putHeader(this.id, hdr);
// the message needs to be DONT_BUNDLE, see explanation above
final Message msg=new Message(addr).setFlag(Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE)
.putHeader(this.id, hdr);
if(log.isTraceEnabled())
log.trace(local_addr + ": sending discovery request to " + msg.getDest());
if(!sendDiscoveryRequestsInParallel()) {
Expand Down Expand Up @@ -634,9 +638,8 @@ protected void sendDiscoveryResponse(Address logical_addr, List<PhysicalAddress>
data=new PingData(logical_addr, null, view_id, is_server, logical_name, physical_addrs);
}

final Message rsp_msg=new Message(sender).setFlag(Message.OOB);
final PingHeader rsp_hdr=new PingHeader(PingHeader.GET_MBRS_RSP, data);
rsp_msg.putHeader(this.id, rsp_hdr);
final Message rsp_msg=new Message(sender).setFlag(Message.Flag.INTERNAL).putHeader(this.id, rsp_hdr);

if(stagger_timeout > 0) {
int view_size=view != null? view.size() : 10;
Expand Down
10 changes: 4 additions & 6 deletions src/org/jgroups/protocols/ENCRYPT.java
Expand Up @@ -842,9 +842,8 @@ private void sendSecretKey(SecretKey secret, PublicKey pubKey, Address source) t

//encrypt current secret key
byte[] encryptedKey=tmp.doFinal(secret.getEncoded());
newMsg=new Message(source, local_addr, encryptedKey);

newMsg.putHeader(this.id, new EncryptHeader(EncryptHeader.SECRETKEY, getSymVersion()));
newMsg=new Message(source, local_addr, encryptedKey)
.putHeader(this.id, new EncryptHeader(EncryptHeader.SECRETKEY, getSymVersion()));

if(log.isDebugEnabled())
log.debug(" Sending version " + getSymVersion() + " encoded key to client");
Expand All @@ -860,9 +859,8 @@ private Message sendKeyRequest() {

// send client's public key to server and request
// server's public key
Message newMsg=new Message(keyServerAddr, local_addr, Kpair.getPublic().getEncoded());

newMsg.putHeader(this.id,new EncryptHeader(EncryptHeader.KEY_REQUEST,getSymVersion()));
Message newMsg=new Message(keyServerAddr, local_addr, Kpair.getPublic().getEncoded())
.putHeader(this.id,new EncryptHeader(EncryptHeader.KEY_REQUEST,getSymVersion()));
passItDown(new Event(Event.MSG,newMsg));
return newMsg;
}
Expand Down
59 changes: 15 additions & 44 deletions src/org/jgroups/protocols/Executing.java
@@ -1,43 +1,6 @@
package org.jgroups.protocols;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.Externalizable;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.concurrent.RunnableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import org.jgroups.Address;
import org.jgroups.Event;
import org.jgroups.Header;
import org.jgroups.Message;
import org.jgroups.View;
import org.jgroups.*;
import org.jgroups.annotations.MBean;
import org.jgroups.annotations.ManagedAttribute;
import org.jgroups.annotations.Property;
Expand All @@ -48,6 +11,16 @@
import org.jgroups.util.Streamable;
import org.jgroups.util.Util;

import java.io.*;
import java.nio.ByteBuffer;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.*;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
* This is the base protocol used for executions.
* @author wburns
Expand Down Expand Up @@ -901,10 +874,9 @@ protected void handleRemoveConsumer(Owner sender) {

protected void sendRequest(Address dest, Type type, long requestId, Object object) {
Request req=new Request(type, object, requestId);
Message msg=new Message(dest, null, req);
msg.putHeader(id, new ExecutorHeader());
Message msg=new Message(dest, req).putHeader(id, new ExecutorHeader());
if(bypass_bundling)
msg.setFlag(Message.DONT_BUNDLE);
msg.setFlag(Message.Flag.DONT_BUNDLE);
if(log.isTraceEnabled())
log.trace("[" + local_addr + "] --> [" + (dest == null? "ALL" : dest) + "] " + req);
try {
Expand All @@ -918,10 +890,9 @@ protected void sendRequest(Address dest, Type type, long requestId, Object objec
protected void sendThreadRequest(Address dest, long threadId, Type type, long requestId,
Object object) {
RequestWithThread req=new RequestWithThread(type, object, requestId, threadId);
Message msg=new Message(dest, null, req);
msg.putHeader(id, new ExecutorHeader());
Message msg=new Message(dest, req).putHeader(id, new ExecutorHeader());
if(bypass_bundling)
msg.setFlag(Message.DONT_BUNDLE);
msg.setFlag(Message.Flag.DONT_BUNDLE);
if(log.isTraceEnabled())
log.trace("[" + local_addr + "] --> [" + (dest == null? "ALL" : dest) + "] " + req);
try {
Expand Down
6 changes: 4 additions & 2 deletions src/org/jgroups/protocols/FC.java
Expand Up @@ -781,7 +781,8 @@ private void sendCredit(Address dest, long credit) {
number=(int)credit;
else
number=credit;
Message msg=new Message(dest, number).setFlag(Message.OOB, Message.Flag.DONT_BUNDLE).putHeader(this.id,REPLENISH_HDR);
Message msg=new Message(dest, number).setFlag(Message.Flag.OOB, Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE)
.putHeader(this.id,REPLENISH_HDR);
down_prot.down(new Event(Event.MSG, msg));
num_credit_responses_sent++;
}
Expand All @@ -795,7 +796,8 @@ private void sendCredit(Address dest, long credit) {
private void sendCreditRequest(final Address dest, Long credits_left) {
if(log.isTraceEnabled())
log.trace("sending credit request to " + dest);
Message msg=new Message(dest, credits_left).setFlag(Message.Flag.DONT_BUNDLE).putHeader(this.id,CREDIT_REQUEST_HDR);
Message msg=new Message(dest, credits_left).setFlag(Message.Flag.DONT_BUNDLE, Message.Flag.INTERNAL)
.putHeader(this.id,CREDIT_REQUEST_HDR);
down_prot.down(new Event(Event.MSG, msg));
num_credit_requests_sent++;
}
Expand Down

0 comments on commit 329f08b

Please sign in to comment.