renamed OnosTimestamp -> MastershipBasedTimestamp
Change-Id: Ie6ee5d85bc0f5aadfa32e27e1d31e3c1d5c9fea8
Showing
5 changed files
with
121 additions
and
43 deletions
| 1 | -package org.onlab.onos.store.impl; | 1 | +package org.onlab.onos.store.common.impl; |
| 2 | 2 | ||
| 3 | import static com.google.common.base.Preconditions.checkArgument; | 3 | import static com.google.common.base.Preconditions.checkArgument; |
| 4 | 4 | ||
| ... | @@ -9,12 +9,11 @@ import org.onlab.onos.store.Timestamp; | ... | @@ -9,12 +9,11 @@ import org.onlab.onos.store.Timestamp; |
| 9 | import com.google.common.base.MoreObjects; | 9 | import com.google.common.base.MoreObjects; |
| 10 | import com.google.common.collect.ComparisonChain; | 10 | import com.google.common.collect.ComparisonChain; |
| 11 | 11 | ||
| 12 | -// If it is store specific, implement serializable interfaces? | ||
| 13 | /** | 12 | /** |
| 14 | * Default implementation of Timestamp. | 13 | * Default implementation of Timestamp. |
| 15 | * TODO: Better documentation. | 14 | * TODO: Better documentation. |
| 16 | */ | 15 | */ |
| 17 | -public final class OnosTimestamp implements Timestamp { | 16 | +public final class MastershipBasedTimestamp implements Timestamp { |
| 18 | 17 | ||
| 19 | private final int termNumber; | 18 | private final int termNumber; |
| 20 | private final int sequenceNumber; | 19 | private final int sequenceNumber; |
| ... | @@ -25,15 +24,16 @@ public final class OnosTimestamp implements Timestamp { | ... | @@ -25,15 +24,16 @@ public final class OnosTimestamp implements Timestamp { |
| 25 | * @param termNumber the mastership termNumber | 24 | * @param termNumber the mastership termNumber |
| 26 | * @param sequenceNumber the sequenceNumber number within the termNumber | 25 | * @param sequenceNumber the sequenceNumber number within the termNumber |
| 27 | */ | 26 | */ |
| 28 | - public OnosTimestamp(int termNumber, int sequenceNumber) { | 27 | + public MastershipBasedTimestamp(int termNumber, int sequenceNumber) { |
| 29 | this.termNumber = termNumber; | 28 | this.termNumber = termNumber; |
| 30 | this.sequenceNumber = sequenceNumber; | 29 | this.sequenceNumber = sequenceNumber; |
| 31 | } | 30 | } |
| 32 | 31 | ||
| 33 | @Override | 32 | @Override |
| 34 | public int compareTo(Timestamp o) { | 33 | public int compareTo(Timestamp o) { |
| 35 | - checkArgument(o instanceof OnosTimestamp, "Must be OnosTimestamp", o); | 34 | + checkArgument(o instanceof MastershipBasedTimestamp, |
| 36 | - OnosTimestamp that = (OnosTimestamp) o; | 35 | + "Must be MastershipBasedTimestamp", o); |
| 36 | + MastershipBasedTimestamp that = (MastershipBasedTimestamp) o; | ||
| 37 | 37 | ||
| 38 | return ComparisonChain.start() | 38 | return ComparisonChain.start() |
| 39 | .compare(this.termNumber, that.termNumber) | 39 | .compare(this.termNumber, that.termNumber) |
| ... | @@ -51,10 +51,10 @@ public final class OnosTimestamp implements Timestamp { | ... | @@ -51,10 +51,10 @@ public final class OnosTimestamp implements Timestamp { |
| 51 | if (this == obj) { | 51 | if (this == obj) { |
| 52 | return true; | 52 | return true; |
| 53 | } | 53 | } |
| 54 | - if (!(obj instanceof OnosTimestamp)) { | 54 | + if (!(obj instanceof MastershipBasedTimestamp)) { |
| 55 | return false; | 55 | return false; |
| 56 | } | 56 | } |
| 57 | - OnosTimestamp that = (OnosTimestamp) obj; | 57 | + MastershipBasedTimestamp that = (MastershipBasedTimestamp) obj; |
| 58 | return Objects.equals(this.termNumber, that.termNumber) && | 58 | return Objects.equals(this.termNumber, that.termNumber) && |
| 59 | Objects.equals(this.sequenceNumber, that.sequenceNumber); | 59 | Objects.equals(this.sequenceNumber, that.sequenceNumber); |
| 60 | } | 60 | } |
| ... | @@ -87,7 +87,7 @@ public final class OnosTimestamp implements Timestamp { | ... | @@ -87,7 +87,7 @@ public final class OnosTimestamp implements Timestamp { |
| 87 | 87 | ||
| 88 | // Default constructor for serialization | 88 | // Default constructor for serialization |
| 89 | @Deprecated | 89 | @Deprecated |
| 90 | - protected OnosTimestamp() { | 90 | + protected MastershipBasedTimestamp() { |
| 91 | this.termNumber = -1; | 91 | this.termNumber = -1; |
| 92 | this.sequenceNumber = -1; | 92 | this.sequenceNumber = -1; |
| 93 | } | 93 | } | ... | ... |
| ... | @@ -15,7 +15,7 @@ import org.onlab.onos.net.DeviceId; | ... | @@ -15,7 +15,7 @@ import org.onlab.onos.net.DeviceId; |
| 15 | import org.onlab.onos.store.ClockProviderService; | 15 | import org.onlab.onos.store.ClockProviderService; |
| 16 | import org.onlab.onos.store.ClockService; | 16 | import org.onlab.onos.store.ClockService; |
| 17 | import org.onlab.onos.store.Timestamp; | 17 | import org.onlab.onos.store.Timestamp; |
| 18 | -import org.onlab.onos.store.impl.OnosTimestamp; | 18 | +import org.onlab.onos.store.common.impl.MastershipBasedTimestamp; |
| 19 | import org.slf4j.Logger; | 19 | import org.slf4j.Logger; |
| 20 | 20 | ||
| 21 | /** | 21 | /** |
| ... | @@ -47,7 +47,7 @@ public class DeviceClockManager implements ClockService, ClockProviderService { | ... | @@ -47,7 +47,7 @@ public class DeviceClockManager implements ClockService, ClockProviderService { |
| 47 | if (term == null) { | 47 | if (term == null) { |
| 48 | throw new IllegalStateException("Requesting timestamp for a deviceId without mastership"); | 48 | throw new IllegalStateException("Requesting timestamp for a deviceId without mastership"); |
| 49 | } | 49 | } |
| 50 | - return new OnosTimestamp(term.termNumber(), ticker.incrementAndGet()); | 50 | + return new MastershipBasedTimestamp(term.termNumber(), ticker.incrementAndGet()); |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | @Override | 53 | @Override | ... | ... |
| 1 | package org.onlab.onos.store.serializers; | 1 | package org.onlab.onos.store.serializers; |
| 2 | 2 | ||
| 3 | -import org.onlab.onos.store.impl.OnosTimestamp; | 3 | +import org.onlab.onos.store.common.impl.MastershipBasedTimestamp; |
| 4 | 4 | ||
| 5 | import com.esotericsoftware.kryo.Kryo; | 5 | import com.esotericsoftware.kryo.Kryo; |
| 6 | import com.esotericsoftware.kryo.Serializer; | 6 | import com.esotericsoftware.kryo.Serializer; |
| 7 | import com.esotericsoftware.kryo.io.Input; | 7 | import com.esotericsoftware.kryo.io.Input; |
| 8 | import com.esotericsoftware.kryo.io.Output; | 8 | import com.esotericsoftware.kryo.io.Output; |
| 9 | 9 | ||
| 10 | +// To be used if Timestamp ever needs to cross bundle boundary. | ||
| 10 | /** | 11 | /** |
| 11 | - * Kryo Serializer for {@link OnosTimestamp}. | 12 | + * Kryo Serializer for {@link MastershipBasedTimestamp}. |
| 12 | */ | 13 | */ |
| 13 | -public class OnosTimestampSerializer extends Serializer<OnosTimestamp> { | 14 | +public class MastershipBasedTimestampSerializer extends Serializer<MastershipBasedTimestamp> { |
| 14 | 15 | ||
| 15 | /** | 16 | /** |
| 16 | * Default constructor. | 17 | * Default constructor. |
| 17 | */ | 18 | */ |
| 18 | - public OnosTimestampSerializer() { | 19 | + public MastershipBasedTimestampSerializer() { |
| 19 | // non-null, immutable | 20 | // non-null, immutable |
| 20 | super(false, true); | 21 | super(false, true); |
| 21 | } | 22 | } |
| 22 | 23 | ||
| 23 | @Override | 24 | @Override |
| 24 | - public void write(Kryo kryo, Output output, OnosTimestamp object) { | 25 | + public void write(Kryo kryo, Output output, MastershipBasedTimestamp object) { |
| 25 | output.writeInt(object.termNumber()); | 26 | output.writeInt(object.termNumber()); |
| 26 | output.writeInt(object.sequenceNumber()); | 27 | output.writeInt(object.sequenceNumber()); |
| 27 | } | 28 | } |
| 28 | 29 | ||
| 29 | @Override | 30 | @Override |
| 30 | - public OnosTimestamp read(Kryo kryo, Input input, Class<OnosTimestamp> type) { | 31 | + public MastershipBasedTimestamp read(Kryo kryo, Input input, Class<MastershipBasedTimestamp> type) { |
| 31 | final int term = input.readInt(); | 32 | final int term = input.readInt(); |
| 32 | final int sequence = input.readInt(); | 33 | final int sequence = input.readInt(); |
| 33 | - return new OnosTimestamp(term, sequence); | 34 | + return new MastershipBasedTimestamp(term, sequence); |
| 34 | } | 35 | } |
| 35 | } | 36 | } | ... | ... |
core/store/dist/src/test/java/org/onlab/onos/store/common/impl/MastershipBasedTimestampTest.java
0 → 100644
| 1 | +package org.onlab.onos.store.common.impl; | ||
| 2 | + | ||
| 3 | +import static org.junit.Assert.*; | ||
| 4 | + | ||
| 5 | +import java.nio.ByteBuffer; | ||
| 6 | + | ||
| 7 | +import org.junit.Test; | ||
| 8 | +import org.onlab.onos.store.Timestamp; | ||
| 9 | +import org.onlab.onos.store.serializers.MastershipBasedTimestampSerializer; | ||
| 10 | +import org.onlab.util.KryoPool; | ||
| 11 | + | ||
| 12 | +import com.google.common.testing.EqualsTester; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * Test of {@link MastershipBasedTimestamp}. | ||
| 16 | + */ | ||
| 17 | +public class MastershipBasedTimestampTest { | ||
| 18 | + | ||
| 19 | + private static final Timestamp TS_1_1 = new MastershipBasedTimestamp(1, 1); | ||
| 20 | + private static final Timestamp TS_1_2 = new MastershipBasedTimestamp(1, 2); | ||
| 21 | + private static final Timestamp TS_2_1 = new MastershipBasedTimestamp(2, 1); | ||
| 22 | + private static final Timestamp TS_2_2 = new MastershipBasedTimestamp(2, 2); | ||
| 23 | + | ||
| 24 | + @Test | ||
| 25 | + public final void testBasic() { | ||
| 26 | + final int termNumber = 5; | ||
| 27 | + final int sequenceNumber = 6; | ||
| 28 | + MastershipBasedTimestamp ts = new MastershipBasedTimestamp(termNumber, | ||
| 29 | + sequenceNumber); | ||
| 30 | + | ||
| 31 | + assertEquals(termNumber, ts.termNumber()); | ||
| 32 | + assertEquals(sequenceNumber, ts.sequenceNumber()); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + @Test | ||
| 36 | + public final void testCompareTo() { | ||
| 37 | + assertTrue(TS_1_1.compareTo(TS_1_1) == 0); | ||
| 38 | + assertTrue(TS_1_1.compareTo(new MastershipBasedTimestamp(1, 1)) == 0); | ||
| 39 | + | ||
| 40 | + assertTrue(TS_1_1.compareTo(TS_1_2) < 0); | ||
| 41 | + assertTrue(TS_1_2.compareTo(TS_1_1) > 0); | ||
| 42 | + | ||
| 43 | + assertTrue(TS_1_2.compareTo(TS_2_1) < 0); | ||
| 44 | + assertTrue(TS_1_2.compareTo(TS_2_2) < 0); | ||
| 45 | + assertTrue(TS_2_1.compareTo(TS_1_1) > 0); | ||
| 46 | + assertTrue(TS_2_2.compareTo(TS_1_1) > 0); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Test | ||
| 50 | + public final void testEqualsObject() { | ||
| 51 | + new EqualsTester() | ||
| 52 | + .addEqualityGroup(new MastershipBasedTimestamp(1, 1), | ||
| 53 | + new MastershipBasedTimestamp(1, 1), TS_1_1) | ||
| 54 | + .addEqualityGroup(new MastershipBasedTimestamp(1, 2), | ||
| 55 | + new MastershipBasedTimestamp(1, 2), TS_1_2) | ||
| 56 | + .addEqualityGroup(new MastershipBasedTimestamp(2, 1), | ||
| 57 | + new MastershipBasedTimestamp(2, 1), TS_2_1) | ||
| 58 | + .addEqualityGroup(new MastershipBasedTimestamp(2, 2), | ||
| 59 | + new MastershipBasedTimestamp(2, 2), TS_2_2) | ||
| 60 | + .testEquals(); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @Test | ||
| 64 | + public final void testKryoSerializable() { | ||
| 65 | + final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024); | ||
| 66 | + final KryoPool kryos = KryoPool.newBuilder() | ||
| 67 | + .register(MastershipBasedTimestamp.class) | ||
| 68 | + .build(); | ||
| 69 | + | ||
| 70 | + kryos.serialize(TS_2_1, buffer); | ||
| 71 | + buffer.flip(); | ||
| 72 | + Timestamp copy = kryos.deserialize(buffer); | ||
| 73 | + | ||
| 74 | + new EqualsTester() | ||
| 75 | + .addEqualityGroup(TS_2_1, copy) | ||
| 76 | + .testEquals(); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + @Test | ||
| 80 | + public final void testKryoSerializableWithHandcraftedSerializer() { | ||
| 81 | + final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024); | ||
| 82 | + final KryoPool kryos = KryoPool.newBuilder() | ||
| 83 | + .register(MastershipBasedTimestamp.class, new MastershipBasedTimestampSerializer()) | ||
| 84 | + .build(); | ||
| 85 | + | ||
| 86 | + kryos.serialize(TS_1_2, buffer); | ||
| 87 | + buffer.flip(); | ||
| 88 | + Timestamp copy = kryos.deserialize(buffer); | ||
| 89 | + | ||
| 90 | + new EqualsTester() | ||
| 91 | + .addEqualityGroup(TS_1_2, copy) | ||
| 92 | + .testEquals(); | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | +} |
| ... | @@ -4,38 +4,20 @@ import static org.junit.Assert.*; | ... | @@ -4,38 +4,20 @@ import static org.junit.Assert.*; |
| 4 | 4 | ||
| 5 | import java.nio.ByteBuffer; | 5 | import java.nio.ByteBuffer; |
| 6 | 6 | ||
| 7 | -import org.junit.After; | ||
| 8 | -import org.junit.AfterClass; | ||
| 9 | -import org.junit.Before; | ||
| 10 | -import org.junit.BeforeClass; | ||
| 11 | import org.junit.Test; | 7 | import org.junit.Test; |
| 12 | import org.onlab.onos.store.Timestamp; | 8 | import org.onlab.onos.store.Timestamp; |
| 13 | -import org.onlab.onos.store.impl.OnosTimestamp; | ||
| 14 | import org.onlab.util.KryoPool; | 9 | import org.onlab.util.KryoPool; |
| 15 | 10 | ||
| 16 | import com.google.common.testing.EqualsTester; | 11 | import com.google.common.testing.EqualsTester; |
| 17 | 12 | ||
| 13 | +/** | ||
| 14 | + * Test of {@link Timestamped}. | ||
| 15 | + */ | ||
| 18 | public class TimestampedTest { | 16 | public class TimestampedTest { |
| 19 | 17 | ||
| 20 | - private static final Timestamp TS_1_1 = new OnosTimestamp(1, 1); | 18 | + private static final Timestamp TS_1_1 = new MastershipBasedTimestamp(1, 1); |
| 21 | - private static final Timestamp TS_1_2 = new OnosTimestamp(1, 2); | 19 | + private static final Timestamp TS_1_2 = new MastershipBasedTimestamp(1, 2); |
| 22 | - private static final Timestamp TS_2_1 = new OnosTimestamp(2, 1); | 20 | + private static final Timestamp TS_2_1 = new MastershipBasedTimestamp(2, 1); |
| 23 | - | ||
| 24 | - @BeforeClass | ||
| 25 | - public static void setUpBeforeClass() throws Exception { | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - @AfterClass | ||
| 29 | - public static void tearDownAfterClass() throws Exception { | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - @Before | ||
| 33 | - public void setUp() throws Exception { | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - @After | ||
| 37 | - public void tearDown() throws Exception { | ||
| 38 | - } | ||
| 39 | 21 | ||
| 40 | @Test | 22 | @Test |
| 41 | public final void testHashCode() { | 23 | public final void testHashCode() { |
| ... | @@ -97,7 +79,7 @@ public class TimestampedTest { | ... | @@ -97,7 +79,7 @@ public class TimestampedTest { |
| 97 | final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024); | 79 | final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024); |
| 98 | final KryoPool kryos = KryoPool.newBuilder() | 80 | final KryoPool kryos = KryoPool.newBuilder() |
| 99 | .register(Timestamped.class, | 81 | .register(Timestamped.class, |
| 100 | - OnosTimestamp.class) | 82 | + MastershipBasedTimestamp.class) |
| 101 | .build(); | 83 | .build(); |
| 102 | 84 | ||
| 103 | Timestamped<String> original = new Timestamped<>("foobar", TS_1_1); | 85 | Timestamped<String> original = new Timestamped<>("foobar", TS_1_1); | ... | ... |
-
Please register or login to post a comment