org.jgroups.blocks

Class VotingAdapter

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.8 2005/06/08 15:56:54 publicnmi Exp $

Author: Roman Rokytskyy (rrokytskyy@acm.org) Robert Schaffar-Taurok (robert@fusion.at)

Nested Class Summary
static classVotingAdapter.FailureVoteResult
Class that represents a result of local voting on the failed node.
static classVotingAdapter.VoteResult
This class represents the result of local voting.
Field Summary
protected Loglog
static intVOTE_ALL
This consensus type means that at least one positive vote and no negative votes are required for the voting to succeed.
static intVOTE_ANY
This consensus type means that at least one positive vote is required for the voting to succeed.
static intVOTE_MAJORITY
This consensus type means that number of positive votes should be greater than number of negative votes.
Constructor Summary
VotingAdapter(Channel channel)
Creates an instance of the VoteChannel that uses JGroups for communication between group members.
VotingAdapter(PullPushAdapter adapter, Serializable id)
Method Summary
voidaddVoteListener(VotingListener listener)
Adds voting listener.
voidblock()
Blocks the channel until the ViewAccepted is invoked.
static StringgetConsensusStr(int consensusType)
Convert consensus type into string representation.
byte[]getState()
Get the channel state.
VotingAdapter.VoteResultlocalVote(Object decree)
This method performs voting on the specific decree between all local voteListeners.
booleanprocessResponses(RspList responses, int consensusType, Object decree)
Processes the response list and makes a decision according to the type of the consensus for current voting.
voidreceive(Message msg)
Receive the message.
voidremoveVoteListener(VotingListener listener)
Removes voting listener.
voidsetState(byte[] state)
Set the channel state.
voidsuspect(Address suspected)
Callback for notification that one node is suspected
voidviewAccepted(View newView)
Callback for notification about the new view of the group.
booleanvote(Object decree, int consensusType, long timeout)
Performs actual voting on the VoteChannel using the JGroups facilities for communication.
booleanvote(Object decree, int consensusType, long timeout, VoteResponseProcessor voteResponseProcessor)
Performs actual voting on the VoteChannel using the JGroups facilities for communication.
booleanvote(Object decree, long timeout)
Vote on the specified decree requiring all nodes to vote.
booleanvote(Object decree, long timeout, VoteResponseProcessor voteResponseProcessor)
Vote on the specified decree requiring all nodes to vote.

Field Detail

log

protected final Log log

VOTE_ALL

public static final int VOTE_ALL
This consensus type means that at least one positive vote and no negative votes are required for the voting to succeed.

VOTE_ANY

public static final int VOTE_ANY
This consensus type means that at least one positive vote is required for the voting to succeed.

VOTE_MAJORITY

public static final int VOTE_MAJORITY
This consensus type means that number of positive votes should be greater than number of negative votes.

Constructor Detail

VotingAdapter

public VotingAdapter(Channel channel)
Creates an instance of the VoteChannel that uses JGroups for communication between group members.

Parameters: channel JGroups channel.

VotingAdapter

public VotingAdapter(PullPushAdapter adapter, Serializable id)

Method Detail

addVoteListener

public void addVoteListener(VotingListener listener)
Adds voting listener.

block

public void block()
Blocks the channel until the ViewAccepted is invoked.

getConsensusStr

public static String getConsensusStr(int consensusType)
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.

getState

public byte[] getState()
Get the channel state.

Returns: always null, we do not have any group-shared state.

localVote

public VotingAdapter.VoteResult localVote(Object decree)
This method performs voting on the specific decree between all local voteListeners.

processResponses

public 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.

Note: we do not support voting in case of Byzantine failures, i.e. when the node responds with the fault message.

receive

public void receive(Message msg)
Receive the message. All messages are ignored.

Parameters: msg message to check.

removeVoteListener

public void removeVoteListener(VotingListener listener)
Removes voting listener.

setState

public void setState(byte[] state)
Set the channel state. We do nothing here.

suspect

public void suspect(Address suspected)
Callback for notification that one node is suspected

viewAccepted

public void viewAccepted(View newView)
Callback for notification about the new view of the group.

vote

public boolean vote(Object decree, int consensusType, long timeout)
Performs actual voting on the VoteChannel using the JGroups facilities for communication.

vote

public boolean vote(Object decree, int consensusType, long timeout, VoteResponseProcessor voteResponseProcessor)
Performs actual voting on the VoteChannel using the JGroups facilities for communication.

vote

public boolean vote(Object decree, long timeout)
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, otherwise false

Throws: ChannelException if something went wrong.

vote

public boolean vote(Object decree, long timeout, VoteResponseProcessor voteResponseProcessor)
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, otherwise false

Throws: ChannelException if something went wrong.

Copyright ? 1998-2005 Bela Ban. All Rights Reserved.