Rice Pastry API

rice.pastry.standard
Class ConsistentJoinProtocol

java.lang.Object
  extended byrice.pastry.client.PastryAppl
      extended byrice.pastry.standard.StandardJoinProtocol
          extended byrice.pastry.standard.ConsistentJoinProtocol
All Implemented Interfaces:
LoopObserver, NodeSetListener, java.util.Observer

public class ConsistentJoinProtocol
extends StandardJoinProtocol
implements java.util.Observer, NodeSetListener, LoopObserver

Does not setReady until contacting entire leafset which gossips new members. Provides consistency as long as checkLiveness() never incorrectly reports a node faulty. Based on MSR-TR-2003-94. The difference is that our assumption that checkLiveness() is much stronger because we are using DSR rather than checking ourself. Another difference is that we are unwilling to pull nodes from our leafset without checkingLiveness() ourself.

Version:
$Id: pretty.settings 2305 2005-03-11 20:22:33Z jeffh $
Author:
Jeff Hoye

Field Summary
protected  int MAX_TIME_TO_BE_SCHEDULED
          This variable is set to prevent the process from going to sleep or not being scheduled for too long.
 int RETRY_INTERVAL
          Will retry sending ConsistentJoinMsg to all neighbors who have not responded on this interval.
protected  boolean tryingToGoReady
          Suppresses sendTheMessage() if we are not ready to do this part of the join process, or we are already done.
 
Fields inherited from class rice.pastry.standard.StandardJoinProtocol
leafSet, localHandle, routeTable
 
Fields inherited from class rice.pastry.client.PastryAppl
address, deserializer, instance, logger, receiver, thePastryNode
 
Constructor Summary
ConsistentJoinProtocol(PastryNode ln, NodeHandle lh, RoutingTable rt, LeafSet ls)
          Constructor for ConsistentJoinProtocol.
ConsistentJoinProtocol(PastryNode ln, NodeHandle lh, RoutingTable rt, LeafSet ls, MessageDeserializer md)
          Constructor takes in the usual suspects.
 
Method Summary
 void addToLeafSet(NodeHandle nh)
          Observes all NodeHandles added to LeafSet
 int delayInterest()
          Part of the LoopObserver interface.
 void destroy()
          DESCRIBE THE METHOD
 void loopTime(int loopTime)
          If it took longer than the time to detect faultiness, then other nodes may believe we are faulty.
 void nodeSetUpdate(NodeSetEventSource set, NodeHandle handle, boolean added)
          DESCRIBE THE METHOD
 void otherNodesMaySuspectFaulty()
          Call this if there is an event such that you may have not received messages for long enough for other nodes to call you faulty.
 void receiveMessage(Message msg)
          Handle the CJM as in the MSR-TR
 void requestFromEveryoneWeHaventHeardFrom()
          DESCRIBE THE METHOD
 void sendTheMessage(NodeHandle nh, boolean reply)
          Sends a consistent join protocol message.
protected  void setReady()
          This is where we start out, when the StandardJoinProtocol would call setReady();
 void update(java.util.Observable arg0, java.lang.Object arg)
          Can be PastryNode updates, leafset updates, or nodehandle updates.
 java.util.Collection whoDoWeNeedAResponseFrom()
          Returns all members of the leafset that are not in gotResponse
 
Methods inherited from class rice.pastry.standard.StandardJoinProtocol
broadcastRows, deliverWhenNotReady, getAddress, messageForAppl
 
Methods inherited from class rice.pastry.client.PastryAppl
accept, connect, enrouteMessage, getLeafSet, getNodeHandle, getNodeId, getRoutingTable, isClosest, leafSetChange, notifyReady, receiveMessageInternal, receiveSocket, register, routeMsg, routeMsgDirect, routeSetChange, setDeserializer
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_TIME_TO_BE_SCHEDULED

protected final int MAX_TIME_TO_BE_SCHEDULED
This variable is set to prevent the process from going to sleep or not being scheduled for too long.


tryingToGoReady

protected boolean tryingToGoReady
Suppresses sendTheMessage() if we are not ready to do this part of the join process, or we are already done.


RETRY_INTERVAL

public final int RETRY_INTERVAL
Will retry sending ConsistentJoinMsg to all neighbors who have not responded on this interval. Only necessary if somehow the message was dropped.

Constructor Detail

ConsistentJoinProtocol

public ConsistentJoinProtocol(PastryNode ln,
                              NodeHandle lh,
                              RoutingTable rt,
                              LeafSet ls)
Constructor for ConsistentJoinProtocol.

Parameters:
ln - DESCRIBE THE PARAMETER
lh - DESCRIBE THE PARAMETER
rt - DESCRIBE THE PARAMETER
ls - DESCRIBE THE PARAMETER

ConsistentJoinProtocol

public ConsistentJoinProtocol(PastryNode ln,
                              NodeHandle lh,
                              RoutingTable rt,
                              LeafSet ls,
                              MessageDeserializer md)
Constructor takes in the usual suspects.

Parameters:
ln - DESCRIBE THE PARAMETER
lh - DESCRIBE THE PARAMETER
rt - DESCRIBE THE PARAMETER
ls - DESCRIBE THE PARAMETER
md - DESCRIBE THE PARAMETER
Method Detail

setReady

protected void setReady()
This is where we start out, when the StandardJoinProtocol would call setReady();

Overrides:
setReady in class StandardJoinProtocol

addToLeafSet

public void addToLeafSet(NodeHandle nh)
Observes all NodeHandles added to LeafSet

Parameters:
nh - the nodeHandle to add

requestFromEveryoneWeHaventHeardFrom

public void requestFromEveryoneWeHaventHeardFrom()
DESCRIBE THE METHOD


otherNodesMaySuspectFaulty

public void otherNodesMaySuspectFaulty()
Call this if there is an event such that you may have not received messages for long enough for other nodes to call you faulty. This method will call PastryNode.setReady(false) which will stop delivering messages, and then via the observer pattern will call this.update(PN, FALSE) which will call setReady() which will begin the join process again.


whoDoWeNeedAResponseFrom

public java.util.Collection whoDoWeNeedAResponseFrom()
Returns all members of the leafset that are not in gotResponse

Returns:

receiveMessage

public void receiveMessage(Message msg)
Handle the CJM as in the MSR-TR

Overrides:
receiveMessage in class StandardJoinProtocol
Parameters:
msg - DESCRIBE THE PARAMETER

sendTheMessage

public void sendTheMessage(NodeHandle nh,
                           boolean reply)
Sends a consistent join protocol message.

Parameters:
nh -
reply - if the reason we are sending this message is just as a response

nodeSetUpdate

public void nodeSetUpdate(NodeSetEventSource set,
                          NodeHandle handle,
                          boolean added)
DESCRIBE THE METHOD

Specified by:
nodeSetUpdate in interface NodeSetListener
Parameters:
set - DESCRIBE THE PARAMETER
handle - DESCRIBE THE PARAMETER
added - DESCRIBE THE PARAMETER

update

public void update(java.util.Observable arg0,
                   java.lang.Object arg)
Can be PastryNode updates, leafset updates, or nodehandle updates.

Specified by:
update in interface java.util.Observer
Overrides:
update in class PastryAppl
Parameters:
arg0 - DESCRIBE THE PARAMETER
arg - DESCRIBE THE PARAMETER

delayInterest

public int delayInterest()
Part of the LoopObserver interface. Used to detect if we may have been found faulty by other nodes.

Specified by:
delayInterest in interface LoopObserver
Returns:
the minimum loop time we are interested in being notified about.

loopTime

public void loopTime(int loopTime)
If it took longer than the time to detect faultiness, then other nodes may believe we are faulty. So we best rejoin.

Specified by:
loopTime in interface LoopObserver
Parameters:
loopTime - the time it took to do a single selection loop.

destroy

public void destroy()
DESCRIBE THE METHOD

Overrides:
destroy in class PastryAppl

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.


Imprint-Dataprotection