blob: e6317bb1d1971ecaed16623fc294eede372883f1 [file] [log] [blame]
Yuta HIGUCHI8ce08732014-10-11 10:40:45 -07001package org.onlab.onos.store.impl;
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07002
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07003import static com.google.common.base.Preconditions.checkArgument;
4
5import java.util.Objects;
6
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07007import org.onlab.onos.store.Timestamp;
8
9import com.google.common.base.MoreObjects;
10import com.google.common.collect.ComparisonChain;
11
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070012/**
13 * Default implementation of Timestamp.
Madan Jampani61056bc2014-09-27 09:07:26 -070014 * TODO: Better documentation.
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070015 */
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070016public final class MastershipBasedTimestamp implements Timestamp {
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070017
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070018 private final int termNumber;
19 private final int sequenceNumber;
20
21 /**
22 * Default version tuple.
23 *
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070024 * @param termNumber the mastership termNumber
25 * @param sequenceNumber the sequenceNumber number within the termNumber
26 */
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070027 public MastershipBasedTimestamp(int termNumber, int sequenceNumber) {
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070028 this.termNumber = termNumber;
29 this.sequenceNumber = sequenceNumber;
30 }
31
32 @Override
33 public int compareTo(Timestamp o) {
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070034 checkArgument(o instanceof MastershipBasedTimestamp,
35 "Must be MastershipBasedTimestamp", o);
36 MastershipBasedTimestamp that = (MastershipBasedTimestamp) o;
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070037
38 return ComparisonChain.start()
39 .compare(this.termNumber, that.termNumber)
40 .compare(this.sequenceNumber, that.sequenceNumber)
41 .result();
42 }
43
44 @Override
45 public int hashCode() {
Madan Jampani61056bc2014-09-27 09:07:26 -070046 return Objects.hash(termNumber, sequenceNumber);
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070047 }
48
49 @Override
50 public boolean equals(Object obj) {
51 if (this == obj) {
52 return true;
53 }
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070054 if (!(obj instanceof MastershipBasedTimestamp)) {
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070055 return false;
56 }
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070057 MastershipBasedTimestamp that = (MastershipBasedTimestamp) obj;
Madan Jampani61056bc2014-09-27 09:07:26 -070058 return Objects.equals(this.termNumber, that.termNumber) &&
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070059 Objects.equals(this.sequenceNumber, that.sequenceNumber);
60 }
61
62 @Override
63 public String toString() {
64 return MoreObjects.toStringHelper(getClass())
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070065 .add("termNumber", termNumber)
66 .add("sequenceNumber", sequenceNumber)
67 .toString();
68 }
69
70 /**
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070071 * Returns the termNumber.
72 *
73 * @return termNumber
74 */
75 public int termNumber() {
76 return termNumber;
77 }
78
79 /**
80 * Returns the sequenceNumber number.
81 *
82 * @return sequenceNumber
83 */
84 public int sequenceNumber() {
85 return sequenceNumber;
86 }
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070087
88 // Default constructor for serialization
89 @Deprecated
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070090 protected MastershipBasedTimestamp() {
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070091 this.termNumber = -1;
92 this.sequenceNumber = -1;
93 }
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070094}