Rice Pastry API

org.mpisws.p2p.transport.priority
Class PriorityTransportLayerImpl<Identifier>

java.lang.Object
  extended by org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl<Identifier>
All Implemented Interfaces:
LivenessListener<Identifier>, LivenessTypes, PriorityTransportLayer<Identifier>, TransportLayer<Identifier,java.nio.ByteBuffer>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>, Destructable

public class PriorityTransportLayerImpl<Identifier>
extends java.lang.Object
implements PriorityTransportLayer<Identifier>, LivenessListener<Identifier>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>

Author:
Jeff Hoye

Field Summary
static byte[] BIG_MSG_SOCKET
           
static byte BIG_MSG_SOCKET_B
           
protected  boolean destroyed
           
protected  java.util.Map<Identifier,org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager> entityManagers
           
protected  Environment environment
           
 Logger logger
           
 int MAX_BIG_MSG_SIZE
          BIG messages open a socket especially for big messages.
 int MAX_MSG_SIZE
           
 int MAX_QUEUE_SIZE
           
static byte[] PASSTHROUGH_SOCKET
           
static byte PASSTHROUGH_SOCKET_B
           
static byte[] PRIMARY_SOCKET
           
static byte PRIMARY_SOCKET_B
           
protected  java.util.ArrayList<PrimarySocketListener<Identifier>> primarySocketListeners
           
protected  SelectorManager selectorManager
           
 
Fields inherited from interface org.mpisws.p2p.transport.priority.PriorityTransportLayer
DEFAULT_PRIORITY, HIGH_PRIORITY, LOW_PRIORITY, LOWEST_PRIORITY, MAX_PRIORITY, MEDIUM_HIGH_PRIORITY, MEDIUM_LOW_PRIORITY, MEDIUM_PRIORITY, OPTION_PRIORITY, STATUS_CONNECTED, STATUS_CONNECTING, STATUS_NOT_CONNECTED
 
Fields inherited from interface org.mpisws.p2p.transport.liveness.LivenessTypes
LIVENESS_ALIVE, LIVENESS_DEAD, LIVENESS_DEAD_FOREVER, LIVENESS_SUSPECTED
 
Constructor Summary
PriorityTransportLayerImpl(TransportLayer<Identifier,java.nio.ByteBuffer> tl, LivenessProvider<Identifier> livenessProvider, ProximityProvider<Identifier> proximityProvider, Environment env, int maxMsgSize, int maxQueueSize, ErrorHandler<Identifier> handler)
          The maximum message size;
 
Method Summary
 void acceptMessages(boolean b)
          Toggle accepting incoming messages.
 void acceptSockets(boolean b)
          Toggle accepting new sockets.
 void addPrimarySocketListener(PrimarySocketListener<Identifier> listener)
           
 void addPriorityTransportLayerListener(PriorityTransportLayerListener<Identifier> listener)
           
 void addTransportLayerListener(TransportLayerListener<Identifier> listener)
           
 long bytesPending(Identifier i)
          The number of bytes to be sent to the identifier
 void cancelLivenessChecker(Identifier i)
           
 java.util.Map<java.lang.String,java.lang.Object> connectionOptions(Identifier i)
          Returns the options on the primary connection
 int connectionStatus(Identifier i)
          Returns if there is a primary connection to the identifier
protected  org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager deleteEntityManager(Identifier i)
           
 void destroy()
           
protected  org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager getEntityManager(Identifier i)
           
 Identifier getLocalIdentifier()
          The local node.
 java.util.List<MessageInfo> getPendingMessages(Identifier i)
          The number of bytes to be sent to the identifier
 void incomingSocket(P2PSocket<Identifier> s)
          We have to read the first byte and see if this is a passthrough (the layer higher than us asked to open it) socket or a primary (our layer tried to open it) socket.
 void livenessChanged(Identifier i, int val, java.util.Map<java.lang.String,java.lang.Object> options)
          Called when the liveness changes.
 void messageReceived(Identifier i, java.nio.ByteBuffer m, java.util.Map<java.lang.String,java.lang.Object> options)
          Called when a new message is received.
 java.util.Collection<Identifier> nodesWithPendingMessages()
          usually used with bytesPending() or queueLength()
 void notifyListenersDropped(int size, Identifier dest, java.util.Map<java.lang.String,java.lang.Object> options)
           
 void notifyListenersEnqueued(int size, Identifier dest, java.util.Map<java.lang.String,java.lang.Object> options)
           
 void notifyListenersRead(int size, Identifier source, java.util.Map<java.lang.String,java.lang.Object> options)
           
 void notifyListenersWrote(int size, Identifier dest, java.util.Map<java.lang.String,java.lang.Object> options)
           
 void openPrimaryConnection(Identifier i, java.util.Map<java.lang.String,java.lang.Object> options)
          open a primary connection
 SocketRequestHandle<Identifier> openSocket(Identifier i, SocketCallback<Identifier> deliverSocketToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Open a socket to the Identifier
 void printMemStats(int logLevel)
          Problem?: this method should perhaps take the EntityManager as an arg.
 int queueLength(Identifier i)
          Returns the number of messages pending to be sent
 void removePrimarySocketListener(PrimarySocketListener<Identifier> listener)
           
 void removePriorityTransportLayerListener(PriorityTransportLayerListener<Identifier> listener)
           
 void removeTransportLayerListener(TransportLayerListener<Identifier> listener)
           
 MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i, java.nio.ByteBuffer m, MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Send the message to the identifier
 void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
          Set the callback for incoming sockets/messages
 void setErrorHandler(ErrorHandler<Identifier> handler)
          To be notified of problems not related to an outgoing messaage/socket.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PASSTHROUGH_SOCKET_B

public static final byte PASSTHROUGH_SOCKET_B
See Also:
Constant Field Values

PRIMARY_SOCKET_B

public static final byte PRIMARY_SOCKET_B
See Also:
Constant Field Values

BIG_MSG_SOCKET_B

public static final byte BIG_MSG_SOCKET_B
See Also:
Constant Field Values

PASSTHROUGH_SOCKET

public static final byte[] PASSTHROUGH_SOCKET

PRIMARY_SOCKET

public static final byte[] PRIMARY_SOCKET

BIG_MSG_SOCKET

public static final byte[] BIG_MSG_SOCKET

MAX_MSG_SIZE

public int MAX_MSG_SIZE

MAX_QUEUE_SIZE

public int MAX_QUEUE_SIZE

MAX_BIG_MSG_SIZE

public int MAX_BIG_MSG_SIZE
BIG messages open a socket especially for big messages. This is the bigest message size allowed.


logger

public Logger logger

entityManagers

protected java.util.Map<Identifier,org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager> entityManagers

selectorManager

protected SelectorManager selectorManager

environment

protected Environment environment

primarySocketListeners

protected java.util.ArrayList<PrimarySocketListener<Identifier>> primarySocketListeners

destroyed

protected boolean destroyed
Constructor Detail

PriorityTransportLayerImpl

public PriorityTransportLayerImpl(TransportLayer<Identifier,java.nio.ByteBuffer> tl,
                                  LivenessProvider<Identifier> livenessProvider,
                                  ProximityProvider<Identifier> proximityProvider,
                                  Environment env,
                                  int maxMsgSize,
                                  int maxQueueSize,
                                  ErrorHandler<Identifier> handler)
The maximum message size;

Parameters:
env -
maxMsgSize -
Method Detail

incomingSocket

public void incomingSocket(P2PSocket<Identifier> s)
                    throws java.io.IOException
We have to read the first byte and see if this is a passthrough (the layer higher than us asked to open it) socket or a primary (our layer tried to open it) socket.

Specified by:
incomingSocket in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
s - the incoming socket
Throws:
java.io.IOException

openSocket

public SocketRequestHandle<Identifier> openSocket(Identifier i,
                                                  SocketCallback<Identifier> deliverSocketToMe,
                                                  java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Open a socket to the Identifier

Specified by:
openSocket in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - who to open the socket to
deliverSocketToMe - the callback when the socket is opened
options - options on how to open the socket (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
an object to cancel opening the socket if it takes to long, or is no longer relevant

acceptMessages

public void acceptMessages(boolean b)
Description copied from interface: TransportLayer
Toggle accepting incoming messages. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptMessages in interface TransportLayer<Identifier,java.nio.ByteBuffer>

acceptSockets

public void acceptSockets(boolean b)
Description copied from interface: TransportLayer
Toggle accepting new sockets. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptSockets in interface TransportLayer<Identifier,java.nio.ByteBuffer>

getLocalIdentifier

public Identifier getLocalIdentifier()
Description copied from interface: TransportLayer
The local node.

Specified by:
getLocalIdentifier in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Returns:
The local node.

messageReceived

public void messageReceived(Identifier i,
                            java.nio.ByteBuffer m,
                            java.util.Map<java.lang.String,java.lang.Object> options)
                     throws java.io.IOException
Description copied from interface: TransportLayerCallback
Called when a new message is received.

Specified by:
messageReceived in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
i - The node it is coming from
m - the message
options - describe how the message arrived (udp/tcp, encrypted etc)
Throws:
java.io.IOException - if there is a problem decoding the message

sendMessage

public MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i,
                                                                        java.nio.ByteBuffer m,
                                                                        MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe,
                                                                        java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Send the message to the identifier

Specified by:
sendMessage in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - the destination
m - the message
deliverAckToMe - layer dependent notification when the message is sent (can indicate placed on the wire, point-to-point acknowledgment, or end-to-end acknowledgement)
options - delivery options (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
ability to cancel the message if no longer relevant

setCallback

public void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
Description copied from interface: TransportLayer
Set the callback for incoming sockets/messages

Specified by:
setCallback in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
callback - the callback for incoming sockets/messages

setErrorHandler

public void setErrorHandler(ErrorHandler<Identifier> handler)
Description copied from interface: TransportLayer
To be notified of problems not related to an outgoing messaage/socket. Or to be notified if a callback isn't provided.

Specified by:
setErrorHandler in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
handler - to be notified of problems not related to a specific messaage/socket.

destroy

public void destroy()
Specified by:
destroy in interface Destructable

getEntityManager

protected org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager getEntityManager(Identifier i)

deleteEntityManager

protected org.mpisws.p2p.transport.priority.PriorityTransportLayerImpl.EntityManager deleteEntityManager(Identifier i)

livenessChanged

public void livenessChanged(Identifier i,
                            int val,
                            java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: LivenessListener
Called when the liveness changes.

Specified by:
livenessChanged in interface LivenessListener<Identifier>

cancelLivenessChecker

public void cancelLivenessChecker(Identifier i)

printMemStats

public void printMemStats(int logLevel)
Problem?: this method should perhaps take the EntityManager as an arg.

Parameters:
i -
options -

addTransportLayerListener

public void addTransportLayerListener(TransportLayerListener<Identifier> listener)
Specified by:
addTransportLayerListener in interface PriorityTransportLayer<Identifier>

removeTransportLayerListener

public void removeTransportLayerListener(TransportLayerListener<Identifier> listener)
Specified by:
removeTransportLayerListener in interface PriorityTransportLayer<Identifier>

addPriorityTransportLayerListener

public void addPriorityTransportLayerListener(PriorityTransportLayerListener<Identifier> listener)
Specified by:
addPriorityTransportLayerListener in interface PriorityTransportLayer<Identifier>

removePriorityTransportLayerListener

public void removePriorityTransportLayerListener(PriorityTransportLayerListener<Identifier> listener)
Specified by:
removePriorityTransportLayerListener in interface PriorityTransportLayer<Identifier>

notifyListenersRead

public void notifyListenersRead(int size,
                                Identifier source,
                                java.util.Map<java.lang.String,java.lang.Object> options)

notifyListenersWrote

public void notifyListenersWrote(int size,
                                 Identifier dest,
                                 java.util.Map<java.lang.String,java.lang.Object> options)

notifyListenersEnqueued

public void notifyListenersEnqueued(int size,
                                    Identifier dest,
                                    java.util.Map<java.lang.String,java.lang.Object> options)

notifyListenersDropped

public void notifyListenersDropped(int size,
                                   Identifier dest,
                                   java.util.Map<java.lang.String,java.lang.Object> options)

bytesPending

public long bytesPending(Identifier i)
Description copied from interface: PriorityTransportLayer
The number of bytes to be sent to the identifier

Specified by:
bytesPending in interface PriorityTransportLayer<Identifier>
Returns:

queueLength

public int queueLength(Identifier i)
Description copied from interface: PriorityTransportLayer
Returns the number of messages pending to be sent

Specified by:
queueLength in interface PriorityTransportLayer<Identifier>
Returns:

getPendingMessages

public java.util.List<MessageInfo> getPendingMessages(Identifier i)
Description copied from interface: PriorityTransportLayer
The number of bytes to be sent to the identifier

Specified by:
getPendingMessages in interface PriorityTransportLayer<Identifier>
Returns:

nodesWithPendingMessages

public java.util.Collection<Identifier> nodesWithPendingMessages()
Description copied from interface: PriorityTransportLayer
usually used with bytesPending() or queueLength()

Specified by:
nodesWithPendingMessages in interface PriorityTransportLayer<Identifier>
Returns:
any Identifier with messages to be sent

connectionOptions

public java.util.Map<java.lang.String,java.lang.Object> connectionOptions(Identifier i)
Description copied from interface: PriorityTransportLayer
Returns the options on the primary connection

Specified by:
connectionOptions in interface PriorityTransportLayer<Identifier>
Returns:

connectionStatus

public int connectionStatus(Identifier i)
Description copied from interface: PriorityTransportLayer
Returns if there is a primary connection to the identifier

Specified by:
connectionStatus in interface PriorityTransportLayer<Identifier>
Returns:
STATUS_NOT_CONNECTED, STATUS_CONNECTING, STATUS_CONNECTED

openPrimaryConnection

public void openPrimaryConnection(Identifier i,
                                  java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: PriorityTransportLayer
open a primary connection

Specified by:
openPrimaryConnection in interface PriorityTransportLayer<Identifier>

addPrimarySocketListener

public void addPrimarySocketListener(PrimarySocketListener<Identifier> listener)
Specified by:
addPrimarySocketListener in interface PriorityTransportLayer<Identifier>

removePrimarySocketListener

public void removePrimarySocketListener(PrimarySocketListener<Identifier> listener)
Specified by:
removePrimarySocketListener in interface PriorityTransportLayer<Identifier>

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.


Imprint-Dataprotection