# Class QuorumHierarchical

java.lang.Object
org.apache.zookeeper.server.quorum.flexible.QuorumHierarchical

All Implemented Interfaces:
  `QuorumVerifier`

public class QuorumHierarchical extends Object implements QuorumVerifier
This class implements a validator for hierarchical quorums. With this construction, zookeeper servers are split into disjoint groups, and each server has a weight. We obtain a quorum if we get more than half of the total weight of a group for a majority of groups. The configuration of quorums uses two parameters: group and weight. Groups are sets of ZooKeeper servers, and we set a group by passing a colon-separated list of server ids. It is also necessary to assign weights to server. Here is an example of a configuration that creates three groups and assigns a weight of 1 to each server: group.1=1:2:3 group.2=4:5:6 group.3=7:8:9 weight.1=1 weight.2=1 weight.3=1 weight.4=1 weight.5=1 weight.6=1 weight.7=1 weight.8=1 weight.9=1 Note that it is still necessary to define peers using the server keyword.

## Constructor Summary

Constructors
Constructor
Description
`QuorumHierarchical(String filename)`
This constructor requires the quorum configuration to be declared in a separate file, and it takes the file as an input parameter.
`QuorumHierarchical(Properties qp)`
This constructor takes a set of properties.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`containsQuorum(Set<Long> set)`
Verifies if a given set is a quorum.
`boolean`
`equals(Object o)`
`Map<Long, QuorumPeer.QuorumServer>`
`getAllMembers()`
`Map<Long, QuorumPeer.QuorumServer>`
`getObservingMembers()`
`long`
`getVersion()`
`Map<Long, QuorumPeer.QuorumServer>`
`getVotingMembers()`
`long`
`getWeight(long id)`
Returns the weight of a server.
`int`
`hashCode()`
`void`
`setVersion(long ver)`
`String`
`toString()`

### Methods inherited from class Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface QuorumVerifier

`askOracle, getNeedOracle, getOraclePath, overrideQuorumDecision, revalidateOutstandingProp, revalidateVoteset, updateNeedOracle`

## Constructor Details

### QuorumHierarchical

public QuorumHierarchical(String filename) throws QuorumPeerConfig.ConfigException
This constructor requires the quorum configuration to be declared in a separate file, and it takes the file as an input parameter.

Throws:
  `QuorumPeerConfig.ConfigException`

### QuorumHierarchical

public QuorumHierarchical(Properties qp) throws QuorumPeerConfig.ConfigException
This constructor takes a set of properties. We use it in the unit test for this feature.

Throws:
  `QuorumPeerConfig.ConfigException`

## Method Details

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### equals

public boolean equals(Object o)

Specified by:
  `equals` in interface `QuorumVerifier`
Overrides:
  `equals` in class `Object`

### getWeight

public long getWeight(long id)
Returns the weight of a server.

Specified by:
  `getWeight` in interface `QuorumVerifier`
Parameters:
  `id` -

### getAllMembers

public Map<Long, QuorumPeer.QuorumServer> getAllMembers()

Specified by:
  `getAllMembers` in interface `QuorumVerifier`

### toString

public String toString()

Specified by:
  `toString` in interface `QuorumVerifier`
Overrides:
  `toString` in class `Object`

### containsQuorum

public boolean containsQuorum(Set<Long> set)
Verifies if a given set is a quorum.

Specified by:
  `containsQuorum` in interface `QuorumVerifier`

### getVotingMembers

public Map<Long, QuorumPeer.QuorumServer> getVotingMembers()

Specified by:
  `getVotingMembers` in interface `QuorumVerifier`

### getObservingMembers

public Map<Long, QuorumPeer.QuorumServer> getObservingMembers()

Specified by:
  `getObservingMembers` in interface `QuorumVerifier`

### getVersion

public long getVersion()

Specified by:
  `getVersion` in interface `QuorumVerifier`

### setVersion

public void setVersion(long ver)

Specified by:
  `setVersion` in interface `QuorumVerifier`