Convert all Atomix exceptions to ONOS storage exceptions
Change-Id: If4ba6b4fa41643fc3d9a9f2d84dc68fd6399a352
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixConsistentMap.java b/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixConsistentMap.java
index 645544d..6241855 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixConsistentMap.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/atomix/primitives/impl/AtomixConsistentMap.java
@@ -24,7 +24,6 @@
import java.util.function.BiFunction;
import java.util.function.Predicate;
-import com.google.common.base.Throwables;
import com.google.common.collect.Maps;
import io.atomix.core.collection.impl.TranscodingAsyncDistributedCollection;
import io.atomix.core.set.impl.TranscodingAsyncDistributedSet;
@@ -32,13 +31,14 @@
import org.onosproject.store.primitives.TransactionId;
import org.onosproject.store.service.AsyncConsistentMap;
import org.onosproject.store.service.AsyncIterator;
-import org.onosproject.store.service.ConsistentMapException;
import org.onosproject.store.service.MapEvent;
import org.onosproject.store.service.MapEventListener;
import org.onosproject.store.service.TransactionLog;
import org.onosproject.store.service.Version;
import org.onosproject.store.service.Versioned;
+import static org.onosproject.store.atomix.primitives.impl.AtomixFutures.adaptMapFuture;
+
/**
* Atomix consistent map.
*/
@@ -84,22 +84,22 @@
@Override
public CompletableFuture<Versioned<V>> computeIf(
K key, Predicate<? super V> condition, BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
- return adapt(atomixMap.computeIf(key, condition, remappingFunction).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.computeIf(key, condition, remappingFunction).thenApply(this::toVersioned));
}
@Override
public CompletableFuture<Versioned<V>> put(K key, V value) {
- return adapt(atomixMap.put(key, value).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.put(key, value).thenApply(this::toVersioned));
}
@Override
public CompletableFuture<Versioned<V>> putAndGet(K key, V value) {
- return adapt(atomixMap.putAndGet(key, value).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.putAndGet(key, value).thenApply(this::toVersioned));
}
@Override
public CompletableFuture<Versioned<V>> remove(K key) {
- return adapt(atomixMap.remove(key).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.remove(key).thenApply(this::toVersioned));
}
@Override
@@ -137,32 +137,32 @@
@Override
public CompletableFuture<Versioned<V>> putIfAbsent(K key, V value) {
- return adapt(atomixMap.putIfAbsent(key, value).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.putIfAbsent(key, value).thenApply(this::toVersioned));
}
@Override
public CompletableFuture<Boolean> remove(K key, V value) {
- return adapt(atomixMap.remove(key, value));
+ return adaptMapFuture(atomixMap.remove(key, value));
}
@Override
public CompletableFuture<Boolean> remove(K key, long version) {
- return adapt(atomixMap.remove(key, version));
+ return adaptMapFuture(atomixMap.remove(key, version));
}
@Override
public CompletableFuture<Versioned<V>> replace(K key, V value) {
- return adapt(atomixMap.replace(key, value).thenApply(this::toVersioned));
+ return adaptMapFuture(atomixMap.replace(key, value).thenApply(this::toVersioned));
}
@Override
public CompletableFuture<Boolean> replace(K key, V oldValue, V newValue) {
- return adapt(atomixMap.replace(key, oldValue, newValue));
+ return adaptMapFuture(atomixMap.replace(key, oldValue, newValue));
}
@Override
public CompletableFuture<Boolean> replace(K key, long oldVersion, V newValue) {
- return adapt(atomixMap.replace(key, oldVersion, newValue));
+ return adaptMapFuture(atomixMap.replace(key, oldVersion, newValue));
}
@Override
@@ -230,30 +230,6 @@
throw new UnsupportedOperationException();
}
- private <T> CompletableFuture<T> adapt(CompletableFuture<T> future) {
- CompletableFuture<T> newFuture = new CompletableFuture<>();
- future.whenComplete((result, error) -> {
- if (error == null) {
- newFuture.complete(result);
- } else {
- Throwable cause = Throwables.getRootCause(error);
- if (cause instanceof io.atomix.primitive.PrimitiveException.ConcurrentModification) {
- newFuture.completeExceptionally(
- new ConsistentMapException.ConcurrentModification(cause.getMessage()));
- } else if (cause instanceof io.atomix.primitive.PrimitiveException.Timeout) {
- newFuture.completeExceptionally(new ConsistentMapException.Timeout(cause.getMessage()));
- } else if (cause instanceof io.atomix.primitive.PrimitiveException.Interrupted) {
- newFuture.completeExceptionally(new ConsistentMapException.Interrupted());
- } else if (cause instanceof io.atomix.primitive.PrimitiveException.Unavailable) {
- newFuture.completeExceptionally(new ConsistentMapException.Unavailable());
- } else if (cause instanceof io.atomix.primitive.PrimitiveException) {
- newFuture.completeExceptionally(new ConsistentMapException(cause.getMessage()));
- }
- }
- });
- return newFuture;
- }
-
private Versioned<V> toVersioned(io.atomix.utils.time.Versioned<V> versioned) {
return versioned != null
? new Versioned<>(versioned.value(), versioned.version(), versioned.creationTime())