blob: 4a1e897a86e213f751ee25e49820ad6de58a24ba [file] [log] [blame]
Brian O'Connorabafb502014-12-02 22:26:20 -08001package org.onosproject.cluster;
Madan Jampani1d3494e2014-11-20 11:24:22 -08002
3import java.util.Objects;
4
5import com.google.common.base.MoreObjects;
6
7/**
8 * Abstract leadership concept.
9 */
10public class Leadership {
11
12 private final String topic;
Madan Jampani8d21c792014-12-01 16:31:07 -080013 private final NodeId leader;
Madan Jampani1ee91782014-11-20 20:24:24 -080014 private final long epoch;
Madan Jampani1d3494e2014-11-20 11:24:22 -080015
Madan Jampani8d21c792014-12-01 16:31:07 -080016 public Leadership(String topic, NodeId leader, long epoch) {
Madan Jampani1d3494e2014-11-20 11:24:22 -080017 this.topic = topic;
18 this.leader = leader;
Madan Jampani1ee91782014-11-20 20:24:24 -080019 this.epoch = epoch;
Madan Jampani1d3494e2014-11-20 11:24:22 -080020 }
21
22 /**
23 * The topic for which this leadership applies.
24 * @return leadership topic.
25 */
26 public String topic() {
27 return topic;
28 }
29
30 /**
Madan Jampani8d21c792014-12-01 16:31:07 -080031 * The nodeId of leader for this topic.
Madan Jampani1d3494e2014-11-20 11:24:22 -080032 * @return leader node.
33 */
Madan Jampani8d21c792014-12-01 16:31:07 -080034 public NodeId leader() {
Madan Jampani1d3494e2014-11-20 11:24:22 -080035 return leader;
36 }
37
38 /**
Madan Jampani1ee91782014-11-20 20:24:24 -080039 * The epoch when the leadership was assumed.
40 * @return leadership epoch
Madan Jampani1d3494e2014-11-20 11:24:22 -080041 */
Madan Jampani1ee91782014-11-20 20:24:24 -080042 public long epoch() {
43 return epoch;
Madan Jampani1d3494e2014-11-20 11:24:22 -080044 }
45
46 @Override
47 public int hashCode() {
Madan Jampani1ee91782014-11-20 20:24:24 -080048 return Objects.hash(topic, leader, epoch);
Madan Jampani1d3494e2014-11-20 11:24:22 -080049 }
50
51 @Override
Ray Milkey30edb162014-11-24 15:02:14 -080052 public boolean equals(Object obj) {
53 if (this == obj) {
54 return true;
55 }
56 if (obj instanceof Leadership) {
57 final Leadership other = (Leadership) obj;
58 return Objects.equals(this.topic, other.topic) &&
59 Objects.equals(this.leader, other.leader) &&
60 Objects.equals(this.epoch, other.epoch);
61 }
62 return false;
63 }
64
65 @Override
Madan Jampani1d3494e2014-11-20 11:24:22 -080066 public String toString() {
67 return MoreObjects.toStringHelper(this.getClass())
68 .add("topic", topic)
69 .add("leader", leader)
Madan Jampani1ee91782014-11-20 20:24:24 -080070 .add("epoch", epoch)
Madan Jampani1d3494e2014-11-20 11:24:22 -080071 .toString();
72 }
Ray Milkey30edb162014-11-24 15:02:14 -080073}