Package org.jgroups.blocks
Class VotingAdapter
java.lang.Object
org.jgroups.blocks.VotingAdapter
- All Implemented Interfaces:
VoteResponseProcessor
,MembershipListener
,MessageListener
public class VotingAdapter
extends Object
implements MessageListener, MembershipListener, VoteResponseProcessor
Voting adapter provides a voting functionality for an application. There
should be at most one
VotingAdapter
listening on one Channel
instance. Each adapter can have zero or more registered VotingListener
instances that will be called during voting process.
Decree is an object that has some semantic meaning within the application.
Each voting listener receives a decree and can respond with either
true
or false. If the decree has no meaning for the voting
listener, it is required to throw VoteException
. In this case
this specific listener will be excluded from the voting on the specified
decree. After performing local voting, this voting adapter sends the request
back to the originator of the voting process. Originator receives results
from each node and decides if all voting process succeeded or not depending
on the consensus type specified during voting.
- Version:
- $Id: VotingAdapter.java,v 1.10 2006/09/27 12:42:53 belaban Exp $
- Author:
- Roman Rokytskyy (rrokytskyy@acm.org), Robert Schaffar-Taurok (robert@fusion.at)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Class that represents a result of local voting on the failed node.static class
This class represents the result of local voting. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.apache.commons.logging.Log
static final int
This consensus type means that at least one positive vote and no negative votes are required for the voting to succeed.static final int
This consensus type means that at least one positive vote is required for the voting to succeed.static final int
This consensus type means that number of positive votes should be greater than number of negative votes. -
Constructor Summary
ConstructorsConstructorDescriptionVotingAdapter
(PullPushAdapter adapter, Serializable id) VotingAdapter
(Channel channel) Creates an instance of the VoteChannel that uses JGroups for communication between group members. -
Method Summary
Modifier and TypeMethodDescriptionvoid
void
addVoteListener
(VotingListener listener) Adds voting listener.void
block()
Blocks the channel until the ViewAccepted is invoked.static String
getConsensusStr
(int consensusType) Convert consensus type into string representation.byte[]
getState()
Get the channel state.This method performs voting on the specific decree between all local voteListeners.boolean
processResponses
(RspList responses, int consensusType, Object decree) Processes the response list and makes a decision according to the type of the consensus for current voting.void
Receive the message.void
void
removeVoteListener
(VotingListener listener) Removes voting listener.void
setState
(byte[] state) Set the channel state.void
Callback for notification that one node is suspectedvoid
viewAccepted
(View newView) Callback for notification about the new view of the group.boolean
Performs actual voting on the VoteChannel using the JGroups facilities for communication.boolean
vote
(Object decree, int consensusType, long timeout, VoteResponseProcessor voteResponseProcessor) Performs actual voting on the VoteChannel using the JGroups facilities for communication.boolean
Vote on the specified decree requiring all nodes to vote.boolean
vote
(Object decree, long timeout, VoteResponseProcessor voteResponseProcessor) Vote on the specified decree requiring all nodes to vote.
-
Field Details
-
VOTE_ANY
public static final int VOTE_ANYThis consensus type means that at least one positive vote is required for the voting to succeed.- See Also:
-
VOTE_ALL
public static final int VOTE_ALLThis consensus type means that at least one positive vote and no negative votes are required for the voting to succeed.- See Also:
-
VOTE_MAJORITY
public static final int VOTE_MAJORITYThis consensus type means that number of positive votes should be greater than number of negative votes.- See Also:
-
log
protected final org.apache.commons.logging.Log log
-
-
Constructor Details
-
VotingAdapter
Creates an instance of the VoteChannel that uses JGroups for communication between group members.- Parameters:
channel
- JGroups channel.
-
VotingAdapter
-
-
Method Details
-
getMembers
-
addMembershipListener
-
removeMembershipListener
-
vote
Performs actual voting on the VoteChannel using the JGroups facilities for communication.- Throws:
ChannelException
-
vote
public boolean vote(Object decree, int consensusType, long timeout, VoteResponseProcessor voteResponseProcessor) throws ChannelException Performs actual voting on the VoteChannel using the JGroups facilities for communication.- Throws:
ChannelException
-
processResponses
public boolean processResponses(RspList responses, int consensusType, Object decree) throws ChannelException Processes the response list and makes a decision according to the type of the consensus for current voting.Note: we do not support voting in case of Byzantine failures, i.e. when the node responds with the fault message.
- Specified by:
processResponses
in interfaceVoteResponseProcessor
- Parameters:
responses
- The responsesconsensusType
- The consensusType of the votedecree
- The vote decree- Returns:
- boolean
- Throws:
ChannelException
-
viewAccepted
Callback for notification about the new view of the group.- Specified by:
viewAccepted
in interfaceMembershipListener
-
suspect
Callback for notification that one node is suspected- Specified by:
suspect
in interfaceMembershipListener
-
block
public void block()Blocks the channel until the ViewAccepted is invoked.- Specified by:
block
in interfaceMembershipListener
-
getState
public byte[] getState()Get the channel state.- Specified by:
getState
in interfaceMessageListener
- Returns:
- always
null
, we do not have any group-shared state.
-
receive
Receive the message. All messages are ignored.- Specified by:
receive
in interfaceMessageListener
- Parameters:
msg
- message to check.
-
setState
public void setState(byte[] state) Set the channel state. We do nothing here.- Specified by:
setState
in interfaceMessageListener
- Parameters:
state
-
-
vote
Vote on the specified decree requiring all nodes to vote.- Parameters:
decree
- decree on which nodes should vote.timeout
- time during which nodes can vote.- Returns:
true
if nodes agreed on a decree, otherwisefalse
- Throws:
ChannelException
- if something went wrong.
-
vote
public boolean vote(Object decree, long timeout, VoteResponseProcessor voteResponseProcessor) throws ChannelException Vote on the specified decree requiring all nodes to vote.- Parameters:
decree
- decree on which nodes should vote.timeout
- time during which nodes can vote.voteResponseProcessor
- processor which will be called for every response that is received.- Returns:
true
if nodes agreed on a decree, otherwisefalse
- Throws:
ChannelException
- if something went wrong.
-
addVoteListener
Adds voting listener. -
removeVoteListener
Removes voting listener. -
localVote
This method performs voting on the specific decree between all local voteListeners. -
getConsensusStr
Convert consensus type into string representation. This method is useful for debugginf.- Parameters:
consensusType
- type of the consensus.- Returns:
- string representation of the consensus type.
-