Added asConsistentMap() method to AsyncConsistentMap for creating a new ConsistentMap instance.
Moved default implementation of ConsistentMap to core/api bundle Change-Id: Idb7457a93247a007a9990dd82ed1dfd1eaf30010
Showing
3 changed files
with
22 additions
and
11 deletions
| 1 | +package org.onosproject.store.primitives; | ||
| 2 | + | ||
| 1 | /* | 3 | /* |
| 2 | - * Copyright 2015 Open Networking Laboratory | 4 | + * Copyright 2016 Open Networking Laboratory |
| 3 | * | 5 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 7 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,9 +15,6 @@ | ... | @@ -13,9 +15,6 @@ |
| 13 | * See the License for the specific language governing permissions and | 15 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 16 | * limitations under the License. |
| 15 | */ | 17 | */ |
| 16 | - | ||
| 17 | -package org.onosproject.store.primitives.impl; | ||
| 18 | - | ||
| 19 | import java.util.Collection; | 18 | import java.util.Collection; |
| 20 | import java.util.Map; | 19 | import java.util.Map; |
| 21 | import java.util.Map.Entry; | 20 | import java.util.Map.Entry; |
| ... | @@ -30,7 +29,6 @@ import java.util.function.Function; | ... | @@ -30,7 +29,6 @@ import java.util.function.Function; |
| 30 | import java.util.function.Predicate; | 29 | import java.util.function.Predicate; |
| 31 | 30 | ||
| 32 | import org.onlab.util.Tools; | 31 | import org.onlab.util.Tools; |
| 33 | -import org.onosproject.store.primitives.ConsistentMapBackedJavaMap; | ||
| 34 | import org.onosproject.store.service.AsyncConsistentMap; | 32 | import org.onosproject.store.service.AsyncConsistentMap; |
| 35 | import org.onosproject.store.service.ConsistentMap; | 33 | import org.onosproject.store.service.ConsistentMap; |
| 36 | import org.onosproject.store.service.ConsistentMapException; | 34 | import org.onosproject.store.service.ConsistentMapException; |
| ... | @@ -49,15 +47,15 @@ import com.google.common.base.Throwables; | ... | @@ -49,15 +47,15 @@ import com.google.common.base.Throwables; |
| 49 | */ | 47 | */ |
| 50 | public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K, V>> implements ConsistentMap<K, V> { | 48 | public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K, V>> implements ConsistentMap<K, V> { |
| 51 | 49 | ||
| 52 | - private static final int OPERATION_TIMEOUT_MILLIS = 5000; | ||
| 53 | private static final int MAX_DELAY_BETWEEN_RETY_MILLS = 50; | 50 | private static final int MAX_DELAY_BETWEEN_RETY_MILLS = 50; |
| 54 | - | ||
| 55 | private final AsyncConsistentMap<K, V> asyncMap; | 51 | private final AsyncConsistentMap<K, V> asyncMap; |
| 52 | + private final long operationTimeoutMillis; | ||
| 56 | private Map<K, V> javaMap; | 53 | private Map<K, V> javaMap; |
| 57 | 54 | ||
| 58 | - public DefaultConsistentMap(AsyncConsistentMap<K, V> asyncMap) { | 55 | + public DefaultConsistentMap(AsyncConsistentMap<K, V> asyncMap, long operationTimeoutMillis) { |
| 59 | super(asyncMap); | 56 | super(asyncMap); |
| 60 | this.asyncMap = asyncMap; | 57 | this.asyncMap = asyncMap; |
| 58 | + this.operationTimeoutMillis = operationTimeoutMillis; | ||
| 61 | } | 59 | } |
| 62 | 60 | ||
| 63 | @Override | 61 | @Override |
| ... | @@ -203,9 +201,9 @@ public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K | ... | @@ -203,9 +201,9 @@ public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K |
| 203 | return asJavaMap().toString(); | 201 | return asJavaMap().toString(); |
| 204 | } | 202 | } |
| 205 | 203 | ||
| 206 | - private static <T> T complete(CompletableFuture<T> future) { | 204 | + private <T> T complete(CompletableFuture<T> future) { |
| 207 | try { | 205 | try { |
| 208 | - return future.get(OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); | 206 | + return future.get(operationTimeoutMillis, TimeUnit.MILLISECONDS); |
| 209 | } catch (InterruptedException e) { | 207 | } catch (InterruptedException e) { |
| 210 | Thread.currentThread().interrupt(); | 208 | Thread.currentThread().interrupt(); |
| 211 | throw new ConsistentMapException.Interrupted(); | 209 | throw new ConsistentMapException.Interrupted(); | ... | ... |
| ... | @@ -25,6 +25,8 @@ import java.util.function.BiFunction; | ... | @@ -25,6 +25,8 @@ import java.util.function.BiFunction; |
| 25 | import java.util.function.Function; | 25 | import java.util.function.Function; |
| 26 | import java.util.function.Predicate; | 26 | import java.util.function.Predicate; |
| 27 | 27 | ||
| 28 | +import org.onosproject.store.primitives.DefaultConsistentMap; | ||
| 29 | + | ||
| 28 | /** | 30 | /** |
| 29 | * A distributed, strongly consistent map whose methods are all executed asynchronously. | 31 | * A distributed, strongly consistent map whose methods are all executed asynchronously. |
| 30 | * <p> | 32 | * <p> |
| ... | @@ -315,4 +317,14 @@ public interface AsyncConsistentMap<K, V> extends DistributedPrimitive { | ... | @@ -315,4 +317,14 @@ public interface AsyncConsistentMap<K, V> extends DistributedPrimitive { |
| 315 | * @return future that will be completed when the operation finishes | 317 | * @return future that will be completed when the operation finishes |
| 316 | */ | 318 | */ |
| 317 | CompletableFuture<Void> removeListener(MapEventListener<K, V> listener); | 319 | CompletableFuture<Void> removeListener(MapEventListener<K, V> listener); |
| 320 | + | ||
| 321 | + /** | ||
| 322 | + * Returns a new {@link ConsistentMap} that is backed by this instance. | ||
| 323 | + * | ||
| 324 | + * @param timeoutMillis timeout duration for the returned ConsistentMap operations | ||
| 325 | + * @return new {@code ConsistentMap} instance | ||
| 326 | + */ | ||
| 327 | + default ConsistentMap<K, V> asConsistentMap(long timeoutMillis) { | ||
| 328 | + return new DefaultConsistentMap<>(this, timeoutMillis); | ||
| 329 | + } | ||
| 318 | } | 330 | } | ... | ... |
| ... | @@ -41,6 +41,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K | ... | @@ -41,6 +41,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K |
| 41 | private boolean metering = true; | 41 | private boolean metering = true; |
| 42 | private boolean relaxedReadConsistency = false; | 42 | private boolean relaxedReadConsistency = false; |
| 43 | private final DatabaseManager manager; | 43 | private final DatabaseManager manager; |
| 44 | + private static final long DEFAULT_OPERATION_TIMEOUT_MILLIS = 5000L; | ||
| 44 | 45 | ||
| 45 | public DefaultConsistentMapBuilder(DatabaseManager manager) { | 46 | public DefaultConsistentMapBuilder(DatabaseManager manager) { |
| 46 | this.manager = manager; | 47 | this.manager = manager; |
| ... | @@ -107,7 +108,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K | ... | @@ -107,7 +108,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K |
| 107 | 108 | ||
| 108 | @Override | 109 | @Override |
| 109 | public ConsistentMap<K, V> build() { | 110 | public ConsistentMap<K, V> build() { |
| 110 | - return new DefaultConsistentMap<>(buildAndRegisterMap()); | 111 | + return buildAndRegisterMap().asConsistentMap(DEFAULT_OPERATION_TIMEOUT_MILLIS); |
| 111 | } | 112 | } |
| 112 | 113 | ||
| 113 | @Override | 114 | @Override | ... | ... |
-
Please register or login to post a comment