Removed ClockService<K, V> and replaced its usage with a BiFunction<K, V, Timestamp>
Change-Id: Ide8d979f9361f1aff6727a83733747f4512ef8ff
Showing
16 changed files
with
53 additions
and
195 deletions
... | @@ -55,7 +55,6 @@ import org.onosproject.store.service.EventuallyConsistentMap; | ... | @@ -55,7 +55,6 @@ import org.onosproject.store.service.EventuallyConsistentMap; |
55 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; | 55 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; |
56 | import org.onosproject.store.service.StorageService; | 56 | import org.onosproject.store.service.StorageService; |
57 | import org.onosproject.store.service.WallClockTimestamp; | 57 | import org.onosproject.store.service.WallClockTimestamp; |
58 | -import org.onosproject.store.service.WallclockClockManager; | ||
59 | import org.slf4j.Logger; | 58 | import org.slf4j.Logger; |
60 | import org.slf4j.LoggerFactory; | 59 | import org.slf4j.LoggerFactory; |
61 | 60 | ||
... | @@ -171,7 +170,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { | ... | @@ -171,7 +170,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { |
171 | nsNextObjStore = nsNextObjMapBuilder | 170 | nsNextObjStore = nsNextObjMapBuilder |
172 | .withName("nsnextobjectivestore") | 171 | .withName("nsnextobjectivestore") |
173 | .withSerializer(kryoBuilder) | 172 | .withSerializer(kryoBuilder) |
174 | - .withClockService(new WallclockClockManager<>()) | 173 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()) |
175 | .build(); | 174 | .build(); |
176 | log.trace("Current size {}", nsNextObjStore.size()); | 175 | log.trace("Current size {}", nsNextObjStore.size()); |
177 | 176 | ||
... | @@ -181,7 +180,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { | ... | @@ -181,7 +180,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { |
181 | tunnelStore = tunnelMapBuilder | 180 | tunnelStore = tunnelMapBuilder |
182 | .withName("tunnelstore") | 181 | .withName("tunnelstore") |
183 | .withSerializer(kryoBuilder) | 182 | .withSerializer(kryoBuilder) |
184 | - .withClockService(new WallclockClockManager<>()) | 183 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()) |
185 | .build(); | 184 | .build(); |
186 | 185 | ||
187 | EventuallyConsistentMapBuilder<String, Policy> policyMapBuilder = | 186 | EventuallyConsistentMapBuilder<String, Policy> policyMapBuilder = |
... | @@ -190,7 +189,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { | ... | @@ -190,7 +189,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { |
190 | policyStore = policyMapBuilder | 189 | policyStore = policyMapBuilder |
191 | .withName("policystore") | 190 | .withName("policystore") |
192 | .withSerializer(kryoBuilder) | 191 | .withSerializer(kryoBuilder) |
193 | - .withClockService(new WallclockClockManager<>()) | 192 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()) |
194 | .build(); | 193 | .build(); |
195 | 194 | ||
196 | networkConfigService.init(); | 195 | networkConfigService.init(); | ... | ... |
1 | -/* | ||
2 | - * Copyright 2015 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.onosproject.store.service; | ||
17 | - | ||
18 | -import org.onosproject.store.Timestamp; | ||
19 | - | ||
20 | -/** | ||
21 | - * Clock service that can generate timestamps based off of two input objects. | ||
22 | - * Implementations are free to only take one or none of the objects into account | ||
23 | - * when generating timestamps. | ||
24 | - */ | ||
25 | -public interface ClockService<T, U> { | ||
26 | - | ||
27 | - /** | ||
28 | - * Gets a new timestamp for the given objects. | ||
29 | - * | ||
30 | - * @param object1 First object to use when generating timestamps | ||
31 | - * @param object2 Second object to use when generating timestamps | ||
32 | - * @return the new timestamp | ||
33 | - */ | ||
34 | - Timestamp getTimestamp(T object1, U object2); | ||
35 | -} |
... | @@ -114,7 +114,7 @@ public interface EventuallyConsistentMap<K, V> { | ... | @@ -114,7 +114,7 @@ public interface EventuallyConsistentMap<K, V> { |
114 | * Removes the given key-value mapping from the map, if it exists. | 114 | * Removes the given key-value mapping from the map, if it exists. |
115 | * <p> | 115 | * <p> |
116 | * This actually means remove any values up to and including the timestamp | 116 | * This actually means remove any values up to and including the timestamp |
117 | - * given by {@link org.onosproject.store.service.ClockService#getTimestamp(Object, Object)}. | 117 | + * given by the map's timestampProvider. |
118 | * Any mappings that produce an earlier timestamp than this given key-value | 118 | * Any mappings that produce an earlier timestamp than this given key-value |
119 | * pair will be removed, and any mappings that produce a later timestamp | 119 | * pair will be removed, and any mappings that produce a later timestamp |
120 | * will supersede this remove. | 120 | * will supersede this remove. | ... | ... |
... | @@ -18,6 +18,7 @@ package org.onosproject.store.service; | ... | @@ -18,6 +18,7 @@ package org.onosproject.store.service; |
18 | 18 | ||
19 | import org.onlab.util.KryoNamespace; | 19 | import org.onlab.util.KryoNamespace; |
20 | import org.onosproject.cluster.NodeId; | 20 | import org.onosproject.cluster.NodeId; |
21 | +import org.onosproject.store.Timestamp; | ||
21 | 22 | ||
22 | import java.util.Collection; | 23 | import java.util.Collection; |
23 | import java.util.concurrent.ExecutorService; | 24 | import java.util.concurrent.ExecutorService; |
... | @@ -66,10 +67,10 @@ public interface EventuallyConsistentMapBuilder<K, V> { | ... | @@ -66,10 +67,10 @@ public interface EventuallyConsistentMapBuilder<K, V> { |
66 | KryoNamespace.Builder serializerBuilder); | 67 | KryoNamespace.Builder serializerBuilder); |
67 | 68 | ||
68 | /** | 69 | /** |
69 | - * Sets the clock service to use for generating timestamps for map updates. | 70 | + * Sets the function to use for generating timestamps for map updates. |
70 | * <p> | 71 | * <p> |
71 | - * The client must provide an {@link org.onosproject.store.service.ClockService} | 72 | + * The client must provide an {@code BiFunction<K, V, Timestamp>} |
72 | - * which can generate timestamps for a given key. The clock service is free | 73 | + * which can generate timestamps for a given key. The function is free |
73 | * to generate timestamps however it wishes, however these timestamps will | 74 | * to generate timestamps however it wishes, however these timestamps will |
74 | * be used to serialize updates to the map so they must be strict enough | 75 | * be used to serialize updates to the map so they must be strict enough |
75 | * to ensure updates are properly ordered for the use case (i.e. in some | 76 | * to ensure updates are properly ordered for the use case (i.e. in some |
... | @@ -80,11 +81,11 @@ public interface EventuallyConsistentMapBuilder<K, V> { | ... | @@ -80,11 +81,11 @@ public interface EventuallyConsistentMapBuilder<K, V> { |
80 | * Note: This is a mandatory parameter. | 81 | * Note: This is a mandatory parameter. |
81 | * </p> | 82 | * </p> |
82 | * | 83 | * |
83 | - * @param clockService clock service | 84 | + * @param timestampProvider provides a new timestamp |
84 | * @return this EventuallyConsistentMapBuilder | 85 | * @return this EventuallyConsistentMapBuilder |
85 | */ | 86 | */ |
86 | - EventuallyConsistentMapBuilder<K, V> withClockService( | 87 | + EventuallyConsistentMapBuilder<K, V> withTimestampProvider( |
87 | - ClockService<K, V> clockService); | 88 | + BiFunction<K, V, Timestamp> timestampProvider); |
88 | 89 | ||
89 | /** | 90 | /** |
90 | * Sets the executor to use for processing events coming in from peers. | 91 | * Sets the executor to use for processing events coming in from peers. | ... | ... |
1 | -/* | ||
2 | - * Copyright 2015 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.onosproject.store.service; | ||
17 | - | ||
18 | -import org.onosproject.store.Timestamp; | ||
19 | - | ||
20 | -/** | ||
21 | - * A clock service which hands out wallclock-based timestamps. | ||
22 | - */ | ||
23 | -public class WallclockClockManager<T, U> implements ClockService<T, U> { | ||
24 | - @Override | ||
25 | - public Timestamp getTimestamp(T object1, U object2) { | ||
26 | - return new WallClockTimestamp(); | ||
27 | - } | ||
28 | -} |
... | @@ -133,13 +133,13 @@ public class GossipApplicationStore extends ApplicationArchive | ... | @@ -133,13 +133,13 @@ public class GossipApplicationStore extends ApplicationArchive |
133 | apps = storageService.<ApplicationId, Application>eventuallyConsistentMapBuilder() | 133 | apps = storageService.<ApplicationId, Application>eventuallyConsistentMapBuilder() |
134 | .withName("apps") | 134 | .withName("apps") |
135 | .withSerializer(serializer) | 135 | .withSerializer(serializer) |
136 | - .withClockService((k, v) -> clockService.getTimestamp()) | 136 | + .withTimestampProvider((k, v) -> clockService.getTimestamp()) |
137 | .build(); | 137 | .build(); |
138 | 138 | ||
139 | states = storageService.<Application, InternalState>eventuallyConsistentMapBuilder() | 139 | states = storageService.<Application, InternalState>eventuallyConsistentMapBuilder() |
140 | .withName("app-states") | 140 | .withName("app-states") |
141 | .withSerializer(serializer) | 141 | .withSerializer(serializer) |
142 | - .withClockService((k, v) -> clockService.getTimestamp()) | 142 | + .withTimestampProvider((k, v) -> clockService.getTimestamp()) |
143 | .build(); | 143 | .build(); |
144 | 144 | ||
145 | states.addListener(new InternalAppStatesListener()); | 145 | states.addListener(new InternalAppStatesListener()); |
... | @@ -147,7 +147,7 @@ public class GossipApplicationStore extends ApplicationArchive | ... | @@ -147,7 +147,7 @@ public class GossipApplicationStore extends ApplicationArchive |
147 | permissions = storageService.<Application, Set<Permission>>eventuallyConsistentMapBuilder() | 147 | permissions = storageService.<Application, Set<Permission>>eventuallyConsistentMapBuilder() |
148 | .withName("app-permissions") | 148 | .withName("app-permissions") |
149 | .withSerializer(serializer) | 149 | .withSerializer(serializer) |
150 | - .withClockService((k, v) -> clockService.getTimestamp()) | 150 | + .withTimestampProvider((k, v) -> clockService.getTimestamp()) |
151 | .build(); | 151 | .build(); |
152 | 152 | ||
153 | log.info("Started"); | 153 | log.info("Started"); | ... | ... |
... | @@ -70,7 +70,7 @@ public class GossipComponentConfigStore | ... | @@ -70,7 +70,7 @@ public class GossipComponentConfigStore |
70 | properties = storageService.<String, String>eventuallyConsistentMapBuilder() | 70 | properties = storageService.<String, String>eventuallyConsistentMapBuilder() |
71 | .withName("cfg") | 71 | .withName("cfg") |
72 | .withSerializer(serializer) | 72 | .withSerializer(serializer) |
73 | - .withClockService((k, v) -> clockService.getTimestamp()) | 73 | + .withTimestampProvider((k, v) -> clockService.getTimestamp()) |
74 | .build(); | 74 | .build(); |
75 | 75 | ||
76 | properties.addListener(new InternalPropertiesListener()); | 76 | properties.addListener(new InternalPropertiesListener()); | ... | ... |
... | @@ -78,7 +78,6 @@ import org.onosproject.store.service.EventuallyConsistentMapListener; | ... | @@ -78,7 +78,6 @@ import org.onosproject.store.service.EventuallyConsistentMapListener; |
78 | import org.onosproject.store.service.MultiValuedTimestamp; | 78 | import org.onosproject.store.service.MultiValuedTimestamp; |
79 | import org.onosproject.store.service.StorageService; | 79 | import org.onosproject.store.service.StorageService; |
80 | import org.onosproject.store.service.WallClockTimestamp; | 80 | import org.onosproject.store.service.WallClockTimestamp; |
81 | -import org.onosproject.store.service.WallclockClockManager; | ||
82 | import org.slf4j.Logger; | 81 | import org.slf4j.Logger; |
83 | 82 | ||
84 | import java.io.IOException; | 83 | import java.io.IOException; |
... | @@ -244,7 +243,7 @@ public class GossipDeviceStore | ... | @@ -244,7 +243,7 @@ public class GossipDeviceStore |
244 | .withName("port-stats") | 243 | .withName("port-stats") |
245 | .withSerializer(deviceDataSerializer) | 244 | .withSerializer(deviceDataSerializer) |
246 | .withAntiEntropyPeriod(5, TimeUnit.SECONDS) | 245 | .withAntiEntropyPeriod(5, TimeUnit.SECONDS) |
247 | - .withClockService(new WallclockClockManager<>()) | 246 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()) |
248 | .withTombstonesDisabled() | 247 | .withTombstonesDisabled() |
249 | .build(); | 248 | .build(); |
250 | devicePortStats.addListener(portStatsListener); | 249 | devicePortStats.addListener(portStatsListener); | ... | ... |
... | @@ -18,8 +18,8 @@ package org.onosproject.store.ecmap; | ... | @@ -18,8 +18,8 @@ package org.onosproject.store.ecmap; |
18 | import org.onlab.util.KryoNamespace; | 18 | import org.onlab.util.KryoNamespace; |
19 | import org.onosproject.cluster.ClusterService; | 19 | import org.onosproject.cluster.ClusterService; |
20 | import org.onosproject.cluster.NodeId; | 20 | import org.onosproject.cluster.NodeId; |
21 | +import org.onosproject.store.Timestamp; | ||
21 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; | 22 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; |
22 | -import org.onosproject.store.service.ClockService; | ||
23 | import org.onosproject.store.service.EventuallyConsistentMap; | 23 | import org.onosproject.store.service.EventuallyConsistentMap; |
24 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; | 24 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; |
25 | 25 | ||
... | @@ -45,7 +45,7 @@ public class EventuallyConsistentMapBuilderImpl<K, V> | ... | @@ -45,7 +45,7 @@ public class EventuallyConsistentMapBuilderImpl<K, V> |
45 | private ExecutorService eventExecutor; | 45 | private ExecutorService eventExecutor; |
46 | private ExecutorService communicationExecutor; | 46 | private ExecutorService communicationExecutor; |
47 | private ScheduledExecutorService backgroundExecutor; | 47 | private ScheduledExecutorService backgroundExecutor; |
48 | - private ClockService<K, V> clockService; | 48 | + private BiFunction<K, V, Timestamp> timestampProvider; |
49 | private BiFunction<K, V, Collection<NodeId>> peerUpdateFunction; | 49 | private BiFunction<K, V, Collection<NodeId>> peerUpdateFunction; |
50 | private boolean tombstonesDisabled = false; | 50 | private boolean tombstonesDisabled = false; |
51 | private long antiEntropyPeriod = 5; | 51 | private long antiEntropyPeriod = 5; |
... | @@ -79,9 +79,9 @@ public class EventuallyConsistentMapBuilderImpl<K, V> | ... | @@ -79,9 +79,9 @@ public class EventuallyConsistentMapBuilderImpl<K, V> |
79 | } | 79 | } |
80 | 80 | ||
81 | @Override | 81 | @Override |
82 | - public EventuallyConsistentMapBuilder<K, V> withClockService( | 82 | + public EventuallyConsistentMapBuilder<K, V> withTimestampProvider( |
83 | - ClockService<K, V> clockService) { | 83 | + BiFunction<K, V, Timestamp> timestampProvider) { |
84 | - this.clockService = checkNotNull(clockService); | 84 | + this.timestampProvider = checkNotNull(timestampProvider); |
85 | return this; | 85 | return this; |
86 | } | 86 | } |
87 | 87 | ||
... | @@ -141,13 +141,13 @@ public class EventuallyConsistentMapBuilderImpl<K, V> | ... | @@ -141,13 +141,13 @@ public class EventuallyConsistentMapBuilderImpl<K, V> |
141 | public EventuallyConsistentMap<K, V> build() { | 141 | public EventuallyConsistentMap<K, V> build() { |
142 | checkNotNull(name, "name is a mandatory parameter"); | 142 | checkNotNull(name, "name is a mandatory parameter"); |
143 | checkNotNull(serializerBuilder, "serializerBuilder is a mandatory parameter"); | 143 | checkNotNull(serializerBuilder, "serializerBuilder is a mandatory parameter"); |
144 | - checkNotNull(clockService, "clockService is a mandatory parameter"); | 144 | + checkNotNull(timestampProvider, "timestampProvider is a mandatory parameter"); |
145 | 145 | ||
146 | return new EventuallyConsistentMapImpl<>(name, | 146 | return new EventuallyConsistentMapImpl<>(name, |
147 | clusterService, | 147 | clusterService, |
148 | clusterCommunicator, | 148 | clusterCommunicator, |
149 | serializerBuilder, | 149 | serializerBuilder, |
150 | - clockService, | 150 | + timestampProvider, |
151 | peerUpdateFunction, | 151 | peerUpdateFunction, |
152 | eventExecutor, | 152 | eventExecutor, |
153 | communicationExecutor, | 153 | communicationExecutor, | ... | ... |
... | @@ -37,7 +37,6 @@ import org.onosproject.store.impl.LogicalTimestamp; | ... | @@ -37,7 +37,6 @@ import org.onosproject.store.impl.LogicalTimestamp; |
37 | import org.onosproject.store.impl.Timestamped; | 37 | import org.onosproject.store.impl.Timestamped; |
38 | import org.onosproject.store.service.WallClockTimestamp; | 38 | import org.onosproject.store.service.WallClockTimestamp; |
39 | import org.onosproject.store.serializers.KryoSerializer; | 39 | import org.onosproject.store.serializers.KryoSerializer; |
40 | -import org.onosproject.store.service.ClockService; | ||
41 | import org.onosproject.store.service.EventuallyConsistentMap; | 40 | import org.onosproject.store.service.EventuallyConsistentMap; |
42 | import org.onosproject.store.service.EventuallyConsistentMapEvent; | 41 | import org.onosproject.store.service.EventuallyConsistentMapEvent; |
43 | import org.onosproject.store.service.EventuallyConsistentMapListener; | 42 | import org.onosproject.store.service.EventuallyConsistentMapListener; |
... | @@ -84,7 +83,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -84,7 +83,7 @@ public class EventuallyConsistentMapImpl<K, V> |
84 | private final ClusterCommunicationService clusterCommunicator; | 83 | private final ClusterCommunicationService clusterCommunicator; |
85 | private final KryoSerializer serializer; | 84 | private final KryoSerializer serializer; |
86 | 85 | ||
87 | - private final ClockService<K, V> clockService; | 86 | + private final BiFunction<K, V, Timestamp> timestampProvider; |
88 | 87 | ||
89 | private final MessageSubject updateMessageSubject; | 88 | private final MessageSubject updateMessageSubject; |
90 | private final MessageSubject antiEntropyAdvertisementSubject; | 89 | private final MessageSubject antiEntropyAdvertisementSubject; |
... | @@ -130,8 +129,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -130,8 +129,7 @@ public class EventuallyConsistentMapImpl<K, V> |
130 | * @param clusterCommunicator the cluster communications service | 129 | * @param clusterCommunicator the cluster communications service |
131 | * @param serializerBuilder a Kryo namespace builder that can serialize | 130 | * @param serializerBuilder a Kryo namespace builder that can serialize |
132 | * both K and V | 131 | * both K and V |
133 | - * @param clockService a clock service able to generate timestamps | 132 | + * @param timestampProvider provider of timestamps for K and V |
134 | - * for K and V | ||
135 | * @param peerUpdateFunction function that provides a set of nodes to immediately | 133 | * @param peerUpdateFunction function that provides a set of nodes to immediately |
136 | * update to when there writes to the map | 134 | * update to when there writes to the map |
137 | * @param eventExecutor executor to use for processing incoming | 135 | * @param eventExecutor executor to use for processing incoming |
... | @@ -150,7 +148,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -150,7 +148,7 @@ public class EventuallyConsistentMapImpl<K, V> |
150 | ClusterService clusterService, | 148 | ClusterService clusterService, |
151 | ClusterCommunicationService clusterCommunicator, | 149 | ClusterCommunicationService clusterCommunicator, |
152 | KryoNamespace.Builder serializerBuilder, | 150 | KryoNamespace.Builder serializerBuilder, |
153 | - ClockService<K, V> clockService, | 151 | + BiFunction<K, V, Timestamp> timestampProvider, |
154 | BiFunction<K, V, Collection<NodeId>> peerUpdateFunction, | 152 | BiFunction<K, V, Collection<NodeId>> peerUpdateFunction, |
155 | ExecutorService eventExecutor, | 153 | ExecutorService eventExecutor, |
156 | ExecutorService communicationExecutor, | 154 | ExecutorService communicationExecutor, |
... | @@ -170,7 +168,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -170,7 +168,7 @@ public class EventuallyConsistentMapImpl<K, V> |
170 | 168 | ||
171 | this.serializer = createSerializer(serializerBuilder); | 169 | this.serializer = createSerializer(serializerBuilder); |
172 | 170 | ||
173 | - this.clockService = clockService; | 171 | + this.timestampProvider = timestampProvider; |
174 | 172 | ||
175 | if (peerUpdateFunction != null) { | 173 | if (peerUpdateFunction != null) { |
176 | this.peerUpdateFunction = peerUpdateFunction; | 174 | this.peerUpdateFunction = peerUpdateFunction; |
... | @@ -302,7 +300,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -302,7 +300,7 @@ public class EventuallyConsistentMapImpl<K, V> |
302 | checkNotNull(key, ERROR_NULL_KEY); | 300 | checkNotNull(key, ERROR_NULL_KEY); |
303 | checkNotNull(value, ERROR_NULL_VALUE); | 301 | checkNotNull(value, ERROR_NULL_VALUE); |
304 | 302 | ||
305 | - Timestamp timestamp = clockService.getTimestamp(key, value); | 303 | + Timestamp timestamp = timestampProvider.apply(key, value); |
306 | 304 | ||
307 | if (putInternal(key, value, timestamp)) { | 305 | if (putInternal(key, value, timestamp)) { |
308 | notifyPeers(new PutEntry<>(key, value, timestamp), | 306 | notifyPeers(new PutEntry<>(key, value, timestamp), |
... | @@ -354,7 +352,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -354,7 +352,7 @@ public class EventuallyConsistentMapImpl<K, V> |
354 | checkNotNull(key, ERROR_NULL_KEY); | 352 | checkNotNull(key, ERROR_NULL_KEY); |
355 | 353 | ||
356 | // TODO prevent calls here if value is important for timestamp | 354 | // TODO prevent calls here if value is important for timestamp |
357 | - Timestamp timestamp = clockService.getTimestamp(key, null); | 355 | + Timestamp timestamp = timestampProvider.apply(key, null); |
358 | 356 | ||
359 | if (removeInternal(key, timestamp)) { | 357 | if (removeInternal(key, timestamp)) { |
360 | notifyPeers(new RemoveEntry<>(key, timestamp), | 358 | notifyPeers(new RemoveEntry<>(key, timestamp), |
... | @@ -412,7 +410,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -412,7 +410,7 @@ public class EventuallyConsistentMapImpl<K, V> |
412 | checkNotNull(key, ERROR_NULL_KEY); | 410 | checkNotNull(key, ERROR_NULL_KEY); |
413 | checkNotNull(value, ERROR_NULL_VALUE); | 411 | checkNotNull(value, ERROR_NULL_VALUE); |
414 | 412 | ||
415 | - Timestamp timestamp = clockService.getTimestamp(key, value); | 413 | + Timestamp timestamp = timestampProvider.apply(key, value); |
416 | 414 | ||
417 | if (removeInternal(key, timestamp)) { | 415 | if (removeInternal(key, timestamp)) { |
418 | notifyPeers(new RemoveEntry<>(key, timestamp), | 416 | notifyPeers(new RemoveEntry<>(key, timestamp), | ... | ... |
... | @@ -59,7 +59,6 @@ import org.onosproject.net.group.GroupStoreDelegate; | ... | @@ -59,7 +59,6 @@ import org.onosproject.net.group.GroupStoreDelegate; |
59 | import org.onosproject.net.group.StoredGroupBucketEntry; | 59 | import org.onosproject.net.group.StoredGroupBucketEntry; |
60 | import org.onosproject.net.group.StoredGroupEntry; | 60 | import org.onosproject.net.group.StoredGroupEntry; |
61 | import org.onosproject.store.AbstractStore; | 61 | import org.onosproject.store.AbstractStore; |
62 | -import org.onosproject.store.Timestamp; | ||
63 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; | 62 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; |
64 | import org.onosproject.store.cluster.messaging.ClusterMessage; | 63 | import org.onosproject.store.cluster.messaging.ClusterMessage; |
65 | import org.onosproject.store.cluster.messaging.ClusterMessageHandler; | 64 | import org.onosproject.store.cluster.messaging.ClusterMessageHandler; |
... | @@ -67,7 +66,6 @@ import org.onosproject.store.service.MultiValuedTimestamp; | ... | @@ -67,7 +66,6 @@ import org.onosproject.store.service.MultiValuedTimestamp; |
67 | import org.onosproject.store.serializers.DeviceIdSerializer; | 66 | import org.onosproject.store.serializers.DeviceIdSerializer; |
68 | import org.onosproject.store.serializers.KryoNamespaces; | 67 | import org.onosproject.store.serializers.KryoNamespaces; |
69 | import org.onosproject.store.serializers.URISerializer; | 68 | import org.onosproject.store.serializers.URISerializer; |
70 | -import org.onosproject.store.service.ClockService; | ||
71 | import org.onosproject.store.service.EventuallyConsistentMap; | 69 | import org.onosproject.store.service.EventuallyConsistentMap; |
72 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; | 70 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; |
73 | import org.onosproject.store.service.EventuallyConsistentMapEvent; | 71 | import org.onosproject.store.service.EventuallyConsistentMapEvent; |
... | @@ -142,6 +140,8 @@ public class DistributedGroupStore | ... | @@ -142,6 +140,8 @@ public class DistributedGroupStore |
142 | 140 | ||
143 | private KryoNamespace.Builder kryoBuilder = null; | 141 | private KryoNamespace.Builder kryoBuilder = null; |
144 | 142 | ||
143 | + private final AtomicLong sequenceNumber = new AtomicLong(0); | ||
144 | + | ||
145 | @Activate | 145 | @Activate |
146 | public void activate() { | 146 | public void activate() { |
147 | kryoBuilder = new KryoNamespace.Builder() | 147 | kryoBuilder = new KryoNamespace.Builder() |
... | @@ -210,7 +210,8 @@ public class DistributedGroupStore | ... | @@ -210,7 +210,8 @@ public class DistributedGroupStore |
210 | groupStoreEntriesByKey = keyMapBuilder | 210 | groupStoreEntriesByKey = keyMapBuilder |
211 | .withName("groupstorekeymap") | 211 | .withName("groupstorekeymap") |
212 | .withSerializer(kryoBuilder) | 212 | .withSerializer(kryoBuilder) |
213 | - .withClockService(new GroupStoreLogicalClockManager<>()) | 213 | + .withTimestampProvider((k, v) -> new MultiValuedTimestamp<>(System.currentTimeMillis(), |
214 | + sequenceNumber.getAndIncrement())) | ||
214 | .build(); | 215 | .build(); |
215 | groupStoreEntriesByKey.addListener(new GroupStoreKeyMapListener()); | 216 | groupStoreEntriesByKey.addListener(new GroupStoreKeyMapListener()); |
216 | log.debug("Current size of groupstorekeymap:{}", | 217 | log.debug("Current size of groupstorekeymap:{}", |
... | @@ -223,7 +224,8 @@ public class DistributedGroupStore | ... | @@ -223,7 +224,8 @@ public class DistributedGroupStore |
223 | auditPendingReqQueue = auditMapBuilder | 224 | auditPendingReqQueue = auditMapBuilder |
224 | .withName("pendinggroupkeymap") | 225 | .withName("pendinggroupkeymap") |
225 | .withSerializer(kryoBuilder) | 226 | .withSerializer(kryoBuilder) |
226 | - .withClockService(new GroupStoreLogicalClockManager<>()) | 227 | + .withTimestampProvider((k, v) -> new MultiValuedTimestamp<>(System.currentTimeMillis(), |
228 | + sequenceNumber.getAndIncrement())) | ||
227 | .build(); | 229 | .build(); |
228 | log.debug("Current size of pendinggroupkeymap:{}", | 230 | log.debug("Current size of pendinggroupkeymap:{}", |
229 | auditPendingReqQueue.size()); | 231 | auditPendingReqQueue.size()); |
... | @@ -909,21 +911,6 @@ public class DistributedGroupStore | ... | @@ -909,21 +911,6 @@ public class DistributedGroupStore |
909 | } | 911 | } |
910 | 912 | ||
911 | /** | 913 | /** |
912 | - * ClockService that generates wallclock based timestamps. | ||
913 | - */ | ||
914 | - private class GroupStoreLogicalClockManager<T, U> | ||
915 | - implements ClockService<T, U> { | ||
916 | - | ||
917 | - private final AtomicLong sequenceNumber = new AtomicLong(0); | ||
918 | - | ||
919 | - @Override | ||
920 | - public Timestamp getTimestamp(T t1, U u1) { | ||
921 | - return new MultiValuedTimestamp<>(System.currentTimeMillis(), | ||
922 | - sequenceNumber.getAndIncrement()); | ||
923 | - } | ||
924 | - } | ||
925 | - | ||
926 | - /** | ||
927 | * Map handler to receive any events when the group key map is updated. | 914 | * Map handler to receive any events when the group key map is updated. |
928 | */ | 915 | */ |
929 | private class GroupStoreKeyMapListener implements | 916 | private class GroupStoreKeyMapListener implements | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | package org.onosproject.store.intent.impl; | 16 | package org.onosproject.store.intent.impl; |
17 | 17 | ||
18 | import com.google.common.collect.ImmutableList; | 18 | import com.google.common.collect.ImmutableList; |
19 | + | ||
19 | import org.apache.commons.lang.math.RandomUtils; | 20 | import org.apache.commons.lang.math.RandomUtils; |
20 | import org.apache.felix.scr.annotations.Activate; | 21 | import org.apache.felix.scr.annotations.Activate; |
21 | import org.apache.felix.scr.annotations.Component; | 22 | import org.apache.felix.scr.annotations.Component; |
... | @@ -48,6 +49,7 @@ import org.slf4j.Logger; | ... | @@ -48,6 +49,7 @@ import org.slf4j.Logger; |
48 | import java.util.Collection; | 49 | import java.util.Collection; |
49 | import java.util.List; | 50 | import java.util.List; |
50 | import java.util.Objects; | 51 | import java.util.Objects; |
52 | +import java.util.concurrent.atomic.AtomicLong; | ||
51 | import java.util.stream.Collectors; | 53 | import java.util.stream.Collectors; |
52 | 54 | ||
53 | import static com.google.common.base.Preconditions.checkNotNull; | 55 | import static com.google.common.base.Preconditions.checkNotNull; |
... | @@ -83,6 +85,8 @@ public class GossipIntentStore | ... | @@ -83,6 +85,8 @@ public class GossipIntentStore |
83 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 85 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
84 | protected PartitionService partitionService; | 86 | protected PartitionService partitionService; |
85 | 87 | ||
88 | + private final AtomicLong sequenceNumber = new AtomicLong(0); | ||
89 | + | ||
86 | @Activate | 90 | @Activate |
87 | public void activate() { | 91 | public void activate() { |
88 | KryoNamespace.Builder intentSerializer = KryoNamespace.newBuilder() | 92 | KryoNamespace.Builder intentSerializer = KryoNamespace.newBuilder() |
... | @@ -94,14 +98,17 @@ public class GossipIntentStore | ... | @@ -94,14 +98,17 @@ public class GossipIntentStore |
94 | currentMap = storageService.<Key, IntentData>eventuallyConsistentMapBuilder() | 98 | currentMap = storageService.<Key, IntentData>eventuallyConsistentMapBuilder() |
95 | .withName("intent-current") | 99 | .withName("intent-current") |
96 | .withSerializer(intentSerializer) | 100 | .withSerializer(intentSerializer) |
97 | - .withClockService(new IntentDataLogicalClockManager<>()) | 101 | + .withTimestampProvider((key, intentData) -> |
102 | + new MultiValuedTimestamp<>(intentData.version(), | ||
103 | + sequenceNumber.getAndIncrement())) | ||
98 | .withPeerUpdateFunction((key, intentData) -> getPeerNodes(key, intentData)) | 104 | .withPeerUpdateFunction((key, intentData) -> getPeerNodes(key, intentData)) |
99 | .build(); | 105 | .build(); |
100 | 106 | ||
101 | pendingMap = storageService.<Key, IntentData>eventuallyConsistentMapBuilder() | 107 | pendingMap = storageService.<Key, IntentData>eventuallyConsistentMapBuilder() |
102 | .withName("intent-pending") | 108 | .withName("intent-pending") |
103 | .withSerializer(intentSerializer) | 109 | .withSerializer(intentSerializer) |
104 | - .withClockService(new IntentDataClockManager<>()) | 110 | + .withTimestampProvider((key, intentData) -> new MultiValuedTimestamp<>(intentData.version(), |
111 | + System.nanoTime())) | ||
105 | .withPeerUpdateFunction((key, intentData) -> getPeerNodes(key, intentData)) | 112 | .withPeerUpdateFunction((key, intentData) -> getPeerNodes(key, intentData)) |
106 | .build(); | 113 | .build(); |
107 | 114 | ... | ... |
core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataClockManager.java
deleted
100644 → 0
1 | -/* | ||
2 | - * Copyright 2015 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.onosproject.store.intent.impl; | ||
17 | - | ||
18 | -import org.onosproject.net.intent.IntentData; | ||
19 | -import org.onosproject.store.Timestamp; | ||
20 | -import org.onosproject.store.service.ClockService; | ||
21 | -import org.onosproject.store.service.MultiValuedTimestamp; | ||
22 | - | ||
23 | -/** | ||
24 | - * ClockService that uses IntentData versions as timestamps. | ||
25 | - */ | ||
26 | -public class IntentDataClockManager<K> implements ClockService<K, IntentData> { | ||
27 | - @Override | ||
28 | - public Timestamp getTimestamp(K key, IntentData intentData) { | ||
29 | - return new MultiValuedTimestamp<>(intentData.version(), System.nanoTime()); | ||
30 | - } | ||
31 | -} |
1 | -/* | ||
2 | - * Copyright 2015 Open Networking Laboratory | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.onosproject.store.intent.impl; | ||
17 | - | ||
18 | -import org.onosproject.net.intent.IntentData; | ||
19 | -import org.onosproject.store.Timestamp; | ||
20 | -import org.onosproject.store.service.ClockService; | ||
21 | -import org.onosproject.store.service.MultiValuedTimestamp; | ||
22 | - | ||
23 | -import java.util.concurrent.atomic.AtomicLong; | ||
24 | - | ||
25 | -/** | ||
26 | - * ClockService that generates logical timestamps based on IntentData versions. | ||
27 | - */ | ||
28 | -public class IntentDataLogicalClockManager<K> implements ClockService<K, IntentData> { | ||
29 | - | ||
30 | - private final AtomicLong sequenceNumber = new AtomicLong(0); | ||
31 | - | ||
32 | - @Override | ||
33 | - public Timestamp getTimestamp(K key, IntentData intentData) { | ||
34 | - return new MultiValuedTimestamp<>(intentData.version(), | ||
35 | - sequenceNumber.getAndIncrement()); | ||
36 | - } | ||
37 | -} |
... | @@ -35,7 +35,6 @@ import org.onosproject.store.cluster.messaging.ClusterCommunicationService; | ... | @@ -35,7 +35,6 @@ import org.onosproject.store.cluster.messaging.ClusterCommunicationService; |
35 | import org.onosproject.store.cluster.messaging.ClusterMessage; | 35 | import org.onosproject.store.cluster.messaging.ClusterMessage; |
36 | import org.onosproject.store.cluster.messaging.ClusterMessageHandler; | 36 | import org.onosproject.store.cluster.messaging.ClusterMessageHandler; |
37 | import org.onosproject.store.cluster.messaging.MessageSubject; | 37 | import org.onosproject.store.cluster.messaging.MessageSubject; |
38 | -import org.onosproject.store.service.ClockService; | ||
39 | import org.onosproject.store.impl.LogicalTimestamp; | 38 | import org.onosproject.store.impl.LogicalTimestamp; |
40 | import org.onosproject.store.service.WallClockTimestamp; | 39 | import org.onosproject.store.service.WallClockTimestamp; |
41 | import org.onosproject.store.serializers.KryoNamespaces; | 40 | import org.onosproject.store.serializers.KryoNamespaces; |
... | @@ -148,7 +147,7 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -148,7 +147,7 @@ public class EventuallyConsistentMapImplTest { |
148 | clusterService, clusterCommunicator) | 147 | clusterService, clusterCommunicator) |
149 | .withName(MAP_NAME) | 148 | .withName(MAP_NAME) |
150 | .withSerializer(serializer) | 149 | .withSerializer(serializer) |
151 | - .withClockService(clockService) | 150 | + .withTimestampProvider((k, v) -> clockService.getTimestamp(k, v)) |
152 | .withCommunicationExecutor(MoreExecutors.newDirectExecutorService()) | 151 | .withCommunicationExecutor(MoreExecutors.newDirectExecutorService()) |
153 | .build(); | 152 | .build(); |
154 | 153 | ||
... | @@ -805,12 +804,11 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -805,12 +804,11 @@ public class EventuallyConsistentMapImplTest { |
805 | * @param <T> Type that the clock service will give out timestamps for | 804 | * @param <T> Type that the clock service will give out timestamps for |
806 | * @param <U> Second type that the clock service will give out values for | 805 | * @param <U> Second type that the clock service will give out values for |
807 | */ | 806 | */ |
808 | - private class SequentialClockService<T, U> implements ClockService<T, U> { | 807 | + private class SequentialClockService<T, U> { |
809 | 808 | ||
810 | private static final long INITIAL_VALUE = 1; | 809 | private static final long INITIAL_VALUE = 1; |
811 | private final AtomicLong counter = new AtomicLong(INITIAL_VALUE); | 810 | private final AtomicLong counter = new AtomicLong(INITIAL_VALUE); |
812 | 811 | ||
813 | - @Override | ||
814 | public Timestamp getTimestamp(T object, U object2) { | 812 | public Timestamp getTimestamp(T object, U object2) { |
815 | return new TestTimestamp(counter.getAndIncrement()); | 813 | return new TestTimestamp(counter.getAndIncrement()); |
816 | } | 814 | } | ... | ... |
... | @@ -57,7 +57,7 @@ import org.onosproject.store.serializers.KryoNamespaces; | ... | @@ -57,7 +57,7 @@ import org.onosproject.store.serializers.KryoNamespaces; |
57 | import org.onosproject.store.service.EventuallyConsistentMap; | 57 | import org.onosproject.store.service.EventuallyConsistentMap; |
58 | import org.onosproject.store.service.MultiValuedTimestamp; | 58 | import org.onosproject.store.service.MultiValuedTimestamp; |
59 | import org.onosproject.store.service.StorageService; | 59 | import org.onosproject.store.service.StorageService; |
60 | -import org.onosproject.store.service.WallclockClockManager; | 60 | +import org.onosproject.store.service.WallClockTimestamp; |
61 | import org.slf4j.Logger; | 61 | import org.slf4j.Logger; |
62 | 62 | ||
63 | import com.google.common.base.MoreObjects; | 63 | import com.google.common.base.MoreObjects; |
... | @@ -114,23 +114,23 @@ public class DistributedTunnelStore | ... | @@ -114,23 +114,23 @@ public class DistributedTunnelStore |
114 | tunnelIdAsKeyStore = storageService | 114 | tunnelIdAsKeyStore = storageService |
115 | .<TunnelId, Tunnel>eventuallyConsistentMapBuilder() | 115 | .<TunnelId, Tunnel>eventuallyConsistentMapBuilder() |
116 | .withName("all_tunnel").withSerializer(serializer) | 116 | .withName("all_tunnel").withSerializer(serializer) |
117 | - .withClockService(new WallclockClockManager<>()).build(); | 117 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); |
118 | tunnelNameAsKeyStore = storageService | 118 | tunnelNameAsKeyStore = storageService |
119 | .<TunnelName, Set<TunnelId>>eventuallyConsistentMapBuilder() | 119 | .<TunnelName, Set<TunnelId>>eventuallyConsistentMapBuilder() |
120 | .withName("tunnel_name_tunnel").withSerializer(serializer) | 120 | .withName("tunnel_name_tunnel").withSerializer(serializer) |
121 | - .withClockService(new WallclockClockManager<>()).build(); | 121 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); |
122 | srcAndDstKeyStore = storageService | 122 | srcAndDstKeyStore = storageService |
123 | .<TunnelKey, Set<TunnelId>>eventuallyConsistentMapBuilder() | 123 | .<TunnelKey, Set<TunnelId>>eventuallyConsistentMapBuilder() |
124 | .withName("src_dst_tunnel").withSerializer(serializer) | 124 | .withName("src_dst_tunnel").withSerializer(serializer) |
125 | - .withClockService(new WallclockClockManager<>()).build(); | 125 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); |
126 | typeKeyStore = storageService | 126 | typeKeyStore = storageService |
127 | .<Tunnel.Type, Set<TunnelId>>eventuallyConsistentMapBuilder() | 127 | .<Tunnel.Type, Set<TunnelId>>eventuallyConsistentMapBuilder() |
128 | .withName("type_tunnel").withSerializer(serializer) | 128 | .withName("type_tunnel").withSerializer(serializer) |
129 | - .withClockService(new WallclockClockManager<>()).build(); | 129 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); |
130 | orderRelationship = storageService | 130 | orderRelationship = storageService |
131 | .<ApplicationId, Set<TunnelSubscription>>eventuallyConsistentMapBuilder() | 131 | .<ApplicationId, Set<TunnelSubscription>>eventuallyConsistentMapBuilder() |
132 | .withName("type_tunnel").withSerializer(serializer) | 132 | .withName("type_tunnel").withSerializer(serializer) |
133 | - .withClockService(new WallclockClockManager<>()).build(); | 133 | + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); |
134 | idGenerator = coreService.getIdGenerator(runnelOpTopoic); | 134 | idGenerator = coreService.getIdGenerator(runnelOpTopoic); |
135 | log.info("Started"); | 135 | log.info("Started"); |
136 | } | 136 | } | ... | ... |
-
Please register or login to post a comment