Package org.jgroups.blocks
Class ReplicatedTree
java.lang.Object
org.jgroups.blocks.ReplicatedTree
- All Implemented Interfaces:
Receiver
A tree-like structure that is replicated across several members. Updates will be multicast to all group
members reliably and in the same order.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static classstatic final classstatic interfaceprivate static final classClass used to multicast add(), remove() and set() methods to all members.private static final class -
Field Summary
FieldsModifier and TypeFieldDescription(package private) JChannel(package private) String(package private) static final int(package private) boolean(package private) final List<ReplicatedTree.ReplicatedTreeListener> protected final Log(package private) String(package private) booleanWhether or not to use remote calls.(package private) ReplicatedTree.Nodeprivate booleanDetermines when the updates have to be sent across the network, avoids sending unnecessary messages when there are no member in the groupstatic final String(package private) long -
Constructor Summary
ConstructorsConstructorDescriptionReplicatedTree(String groupname, String props, long state_fetch_timeout) Creates a channel with the given properties.ReplicatedTree(String groupname, String props, long state_fetch_timeout, boolean jmx) ReplicatedTree(JChannel channel) Expects an already connected channel. -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidvoidvoidvoid_removeData(String fqn) voidbooleanChecks whether a given node exists in the treevoidfetchState(long timeout) Fetch the group state from the current coordinator.(package private) ReplicatedTree.NodeReturns the node at fqn.(package private) ReplicatedTree.NodefindParentNode(String fqn, ReplicatedTree.StringHolder child_name, boolean create_if_not_exists) Find the node just above the one indicated byfqn.Returns the data hashmap for a given node.Finds a node given its name and returns the value associated with a given key in itsdatamap.Returns the Channel the DistributedTree is connected togetChildrenNames(String fqn) Returns all children of a given nodeintReturns the number of current members joined to the groupReturns the name of the group that the DistributedTree is connected toGets the keys of thedatamap.voidgetState(OutputStream ostream) Allows an application to write the state to an OutputStream.static void(package private) voidGenerates NodeAdded notifications for all nodes of the tree.(package private) voidnotifyNodeAdded(String fqn) (package private) voidnotifyNodeModified(String fqn) (package private) voidnotifyNodeRemoved(String fqn) (package private) voidPrints a representation of the node defined byfqn.voidAdds a key and value to a given node.voidAdds a new node to the tree and sets its data.voidCallback.voidRemoves the node from the tree.voidRemoveskeyfrom the node's hashmapvoidvoidsetRemoteCalls(boolean flag) voidvoidsetState(InputStream istream) Allows an application to read the state from an InputStream.final voidstart()voidstop()toString()voidviewAccepted(View new_view) Called when a change in membership has occurred.
-
Field Details
-
SEPARATOR
- See Also:
-
INDENT
static final int INDENT- See Also:
-
root
ReplicatedTree.Node root -
listeners
-
channel
JChannel channel -
groupname
String groupname -
members
-
state_fetch_timeout
long state_fetch_timeout -
jmx
boolean jmx -
log
-
remote_calls
boolean remote_callsWhether or not to use remote calls. If false, all methods will be invoked directly on this instance rather than sending a message to all replicas and only then invoking the method. Useful for testing -
props
String props -
send_message
private boolean send_messageDetermines when the updates have to be sent across the network, avoids sending unnecessary messages when there are no member in the group
-
-
Constructor Details
-
ReplicatedTree
Creates a channel with the given properties. Connects to the channel, then creates a PullPushAdapter and starts it- Throws:
Exception
-
ReplicatedTree
public ReplicatedTree(String groupname, String props, long state_fetch_timeout, boolean jmx) throws Exception - Throws:
Exception
-
ReplicatedTree
public ReplicatedTree() -
ReplicatedTree
Expects an already connected channel. Creates a PullPushAdapter and starts it- Throws:
Exception
-
-
Method Details
-
setRemoteCalls
public void setRemoteCalls(boolean flag) -
setRootNode
-
getLocalAddress
-
getMembers
-
fetchState
Fetch the group state from the current coordinator. If successful, this will trigger setState().- Throws:
Exception
-
addReplicatedTreeListener
-
removeReplicatedTreeListener
-
start
- Throws:
Exception
-
stop
public void stop() -
put
Adds a new node to the tree and sets its data. If the node doesn not yet exist, it will be created. Also, parent nodes will be created if not existent. If the node already has data, then the new data will override the old one. If the node already existed, a nodeModified() notification will be generated. Otherwise a nodeCreated() motification will be emitted.- Parameters:
fqn- The fully qualified name of the new nodedata- The new data. May be null if no data should be set in the node.
-
put
Adds a key and value to a given node. If the node doesn't exist, it will be created. If the node already existed, a nodeModified() notification will be generated. Otherwise a nodeCreated() motification will be emitted.- Parameters:
fqn- The fully qualified name of the nodekey- The keyvalue- The value
-
remove
Removes the node from the tree.- Parameters:
fqn- The fully qualified name of the node.
-
remove
Removeskeyfrom the node's hashmap- Parameters:
fqn- The fullly qualified name of the nodekey- The key to be removed
-
exists
Checks whether a given node exists in the tree- Parameters:
fqn- The fully qualified name of the node- Returns:
- boolean Whether or not the node exists
-
getKeys
Gets the keys of thedatamap. Returns all keys as Strings. Returns null if node does not exist.- Parameters:
fqn- The fully qualified name of the node- Returns:
- Set A set of keys (as Strings)
-
get
Finds a node given its name and returns the value associated with a given key in itsdatamap. Returns null if the node was not found in the tree or the key was not found in the hashmap.- Parameters:
fqn- The fully qualified name of the node.key- The key.
-
get
Returns the data hashmap for a given node. This method can only be used by callers that are inside the same package. The reason is that callers must not modify the return value, as these modifications would not be replicated, thus rendering the replicas inconsistent.- Parameters:
fqn- The fully qualified name of the node- Returns:
- HashMap The data hashmap for the given node
-
print
Prints a representation of the node defined byfqn. Output includes name, fqn and data. -
getChildrenNames
Returns all children of a given node- Parameters:
fqn- The fully qualified name of the node- Returns:
- Set A list of child names (as Strings)
-
toString
-
getGroupName
Returns the name of the group that the DistributedTree is connected to- Returns:
- String
-
getChannel
Returns the Channel the DistributedTree is connected to- Returns:
- Channel
-
getGroupMembersNumber
public int getGroupMembersNumber()Returns the number of current members joined to the group- Returns:
- int
-
_put
-
_put
-
_remove
-
_remove
-
_removeData
-
receive
Callback. Process the contents of the message; typically an _add() or _set() request -
getState
Description copied from interface:ReceiverAllows an application to write the state to an OutputStream. After the state has been written, the OutputStream doesn't need to be closed as stream closing is automatically done when a calling thread returns from this callback. -
setState
Description copied from interface:ReceiverAllows an application to read the state from an InputStream. After the state has been read, the InputStream doesn't need to be closed as stream closing is automatically done when a calling thread returns from this callback. -
viewAccepted
Description copied from interface:ReceiverCalled when a change in membership has occurred. No long running actions, sending of messages or anything that could block should be done in this callback. If some long running action needs to be performed, it should be done in a separate thread.Note that on reception of the first view (a new member just joined), the channel will not yet be in the connected state. This only happens when
JChannel.connect(String)returns.- Specified by:
viewAcceptedin interfaceReceiver
-
findParentNode
ReplicatedTree.Node findParentNode(String fqn, ReplicatedTree.StringHolder child_name, boolean create_if_not_exists) Find the node just above the one indicated byfqn. This is needed in many cases, e.g. to add a new node or remove an existing node.- Parameters:
fqn- The fully qualified name of the node.child_name- Will be filled with the name of the child when this method returns. The child name is the last relative name of thefqn, e.g. in "/a/b/c" it would be "c".create_if_not_exists- Create parent nodes along the way if they don't exist. Otherwise, this method will return when a node cannot be found.
-
findNode
Returns the node at fqn. This method should not be used by clients (therefore it is package-private): it is only used internally (for navigation). C++ 'friend' would come in handy here...- Parameters:
fqn- The fully qualified name of the node- Returns:
- Node The node at fqn
-
notifyNodeAdded
-
notifyNodeRemoved
-
notifyNodeModified
-
notifyViewChange
-
notifyAllNodesCreated
Generates NodeAdded notifications for all nodes of the tree. This is called whenever the tree is initially retrieved (state transfer) -
main
-