org.jgroups.blocks

## Class VotingAdapter

- java.lang.Object
- - org.jgroups.blocks.VotingAdapter

- All Implemented Interfaces:
    VoteResponseProcessor, MembershipListener, MessageListener

      public class VotingAdapter
      extends java.lang.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.

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

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `VotingAdapter.FailureVoteResult` Class that represents a result of local voting on the failed node.
    `static class` | `VotingAdapter.VoteResult` This class represents the result of local voting.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `log`
    `static int` | `VOTE_ALL` This consensus type means that at least one positive vote and no negative votes are required for the voting to succeed.
    `static int` | `VOTE_ANY` This consensus type means that at least one positive vote is required for the voting to succeed.
    `static int` | `VOTE_MAJORITY` This consensus type means that number of positive votes should be greater than number of negative votes.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VotingAdapter(Channel channel)` Creates an instance of the VoteChannel that uses JGroups for communication between group members.
    `VotingAdapter(PullPushAdapter adapter, java.io.Serializable id)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addMembershipListener(MembershipListener l)`
    `void` | `addVoteListener(VotingListener listener)` Adds voting listener.
    `void` | `block()` Blocks the channel until the ViewAccepted is invoked.
    `static java.lang.String` | `getConsensusStr(int consensusType)` Convert consensus type into string representation.
    `java.util.Collection` | `getMembers()`
    `byte[]` | `getState()` Get the channel state.
    `VotingAdapter.VoteResult` | `localVote(java.lang.Object decree)` This method performs voting on the specific decree between all local voteListeners.
    `boolean` | `processResponses(RspList responses, int consensusType, java.lang.Object decree)` Processes the response list and makes a decision according to the type of the consensus for current voting.
    `void` | `receive(Message msg)` Receive the message.
    `void` | `removeMembershipListener(MembershipListener l)`
    `void` | `removeVoteListener(VotingListener listener)` Removes voting listener.
    `void` | `setState(byte[] state)` Set the channel state.
    `void` | `suspect(Address suspected)` Callback for notification that one node is suspected
    `void` | `viewAccepted(View newView)` Callback for notification about the new view of the group.
    `boolean` | `vote(java.lang.Object decree, int consensusType, long timeout)` Performs actual voting on the VoteChannel using the JGroups facilities for communication.
    `boolean` | `vote(java.lang.Object decree, int consensusType, long timeout, VoteResponseProcessor voteResponseProcessor)` Performs actual voting on the VoteChannel using the JGroups facilities for communication.
    `boolean` | `vote(java.lang.Object decree, long timeout)` Vote on the specified decree requiring all nodes to vote.
    `boolean` | `vote(java.lang.Object decree, long timeout, VoteResponseProcessor voteResponseProcessor)` Vote on the specified decree requiring all nodes to vote.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### 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.
      See Also:
        Constant Field Values

    - #### 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.
      See Also:
        Constant Field Values

    - #### 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.
      See Also:
        Constant Field Values

    - #### log

          protected final Log log

  - ### 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,
                       java.io.Serializable id)

  - ### Method Detail

    - #### getMembers

          public java.util.Collection getMembers()

    - #### addMembershipListener

          public void addMembershipListener(MembershipListener l)

    - #### removeMembershipListener

          public void removeMembershipListener(MembershipListener l)

    - #### vote

          public boolean vote(java.lang.Object decree,
                     int consensusType,
                     long timeout)
                       throws ChannelException

      Performs actual voting on the VoteChannel using the JGroups facilities for communication.
      Throws:
        `ChannelException`

    - #### vote

          public boolean vote(java.lang.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,
                                 java.lang.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 interface `VoteResponseProcessor`
      Parameters:
        `responses` - The responses
        `consensusType` - The consensusType of the vote
        `decree` - The vote decree
      Returns:
        boolean
      Throws:
        `ChannelException`

    - #### viewAccepted

          public void viewAccepted(View newView)

      Callback for notification about the new view of the group.
      Specified by:
        `viewAccepted` in interface `MembershipListener`

    - #### suspect

          public void suspect(Address suspected)

      Callback for notification that one node is suspected
      Specified by:
        `suspect` in interface `MembershipListener`

    - #### block

          public void block()

      Blocks the channel until the ViewAccepted is invoked.
      Specified by:
        `block` in interface `MembershipListener`

    - #### getState

          public byte[] getState()

      Get the channel state.
      Specified by:
        `getState` in interface `MessageListener`
      Returns:
        always `null`, we do not have any group-shared state.

    - #### receive

          public void receive(Message msg)

      Receive the message. All messages are ignored.
      Specified by:
        `receive` in interface `MessageListener`
      Parameters:
        `msg` - message to check.

    - #### setState

          public void setState(byte[] state)

      Set the channel state. We do nothing here.
      Specified by:
        `setState` in interface `MessageListener`

    - #### vote

          public boolean vote(java.lang.Object decree,
                     long timeout)
                       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.
      Returns:
        `true` if nodes agreed on a decree, otherwise `false`
      Throws:
        `ChannelException` - if something went wrong.

    - #### vote

          public boolean vote(java.lang.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, otherwise `false`
      Throws:
        `ChannelException` - if something went wrong.

    - #### addVoteListener

          public void addVoteListener(VotingListener listener)

      Adds voting listener.

    - #### removeVoteListener

          public void removeVoteListener(VotingListener listener)

      Removes voting listener.

    - #### localVote

          public VotingAdapter.VoteResult localVote(java.lang.Object decree)

      This method performs voting on the specific decree between all local voteListeners.

    - #### getConsensusStr

          public static java.lang.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.

Copyright © 1998-2009 Bela Ban / Red Hat. All Rights Reserved.