Ensure serialization exceptions are appropriately reported

Change-Id: Ib7a11f246a79e84e7d1a9e4bddc85d08e0f0cbf0
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
index 1745b45..ee882a7 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMap.java
@@ -26,6 +26,7 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.onlab.util.Tools;
 import org.onosproject.store.primitives.TransactionId;
 import org.onosproject.store.service.AsyncConsistentMap;
 import org.onosproject.store.service.MapEvent;
@@ -80,45 +81,73 @@
 
     @Override
     public CompletableFuture<Boolean> containsKey(K1 key) {
-        return backingMap.containsKey(keyEncoder.apply(key));
+        try {
+            return backingMap.containsKey(keyEncoder.apply(key));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Boolean> containsValue(V1 value) {
-        return backingMap.containsValue(valueEncoder.apply(value));
+        try {
+            return backingMap.containsValue(valueEncoder.apply(value));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> get(K1 key) {
-        return backingMap.get(keyEncoder.apply(key)).thenApply(versionedValueTransform);
+        try {
+            return backingMap.get(keyEncoder.apply(key)).thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> computeIf(K1 key,
             Predicate<? super V1> condition,
             BiFunction<? super K1, ? super V1, ? extends V1> remappingFunction) {
-        return backingMap.computeIf(keyEncoder.apply(key),
-                                    v -> condition.test(valueDecoder.apply(v)),
-                                    (k, v) -> valueEncoder.apply(remappingFunction.apply(keyDecoder.apply(k),
-                                                                                         valueDecoder.apply(v))))
-                         .thenApply(versionedValueTransform);
+        try {
+            return backingMap.computeIf(keyEncoder.apply(key),
+                    v -> condition.test(valueDecoder.apply(v)),
+                    (k, v) -> valueEncoder.apply(remappingFunction.apply(keyDecoder.apply(k),
+                            valueDecoder.apply(v))))
+                            .thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> put(K1 key, V1 value) {
-        return backingMap.put(keyEncoder.apply(key), valueEncoder.apply(value))
-                         .thenApply(versionedValueTransform);
+        try {
+            return backingMap.put(keyEncoder.apply(key), valueEncoder.apply(value))
+                             .thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> putAndGet(K1 key, V1 value) {
-        return backingMap.putAndGet(keyEncoder.apply(key), valueEncoder.apply(value))
-                         .thenApply(versionedValueTransform);
+        try {
+            return backingMap.putAndGet(keyEncoder.apply(key), valueEncoder.apply(value))
+                             .thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> remove(K1 key) {
-        return backingMap.remove(keyEncoder.apply(key)).thenApply(versionedValueTransform);
+        try {
+            return backingMap.remove(keyEncoder.apply(key)).thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
@@ -149,34 +178,60 @@
 
     @Override
     public CompletableFuture<Versioned<V1>> putIfAbsent(K1 key, V1 value) {
-        return backingMap.putIfAbsent(keyEncoder.apply(key), valueEncoder.apply(value))
-                         .thenApply(versionedValueTransform);
+        try {
+            return backingMap.putIfAbsent(keyEncoder.apply(key), valueEncoder.apply(value))
+                             .thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Boolean> remove(K1 key, V1 value) {
-        return backingMap.remove(keyEncoder.apply(key), valueEncoder.apply(value));
+        try {
+            return backingMap.remove(keyEncoder.apply(key), valueEncoder.apply(value));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Boolean> remove(K1 key, long version) {
-        return backingMap.remove(keyEncoder.apply(key), version);
+        try {
+            return backingMap.remove(keyEncoder.apply(key), version);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Versioned<V1>> replace(K1 key, V1 value) {
-        return backingMap.replace(keyEncoder.apply(key), valueEncoder.apply(value))
-                .thenApply(versionedValueTransform);
+        try {
+            return backingMap.replace(keyEncoder.apply(key), valueEncoder.apply(value))
+                             .thenApply(versionedValueTransform);
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Boolean> replace(K1 key, V1 oldValue, V1 newValue) {
-        return backingMap.replace(keyEncoder.apply(key), valueEncoder.apply(oldValue), valueEncoder.apply(newValue));
+        try {
+            return backingMap.replace(keyEncoder.apply(key),
+                                      valueEncoder.apply(oldValue),
+                                      valueEncoder.apply(newValue));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
     public CompletableFuture<Boolean> replace(K1 key, long oldVersion, V1 newValue) {
-        return backingMap.replace(keyEncoder.apply(key), oldVersion, valueEncoder.apply(newValue));
+        try {
+            return backingMap.replace(keyEncoder.apply(key), oldVersion, valueEncoder.apply(newValue));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
@@ -200,7 +255,11 @@
 
     @Override
     public CompletableFuture<Boolean> prepare(MapTransaction<K1, V1> transaction) {
-        return backingMap.prepare(transaction.map(keyEncoder, valueEncoder));
+        try {
+            return backingMap.prepare(transaction.map(keyEncoder, valueEncoder));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     @Override
@@ -215,7 +274,11 @@
 
     @Override
     public CompletableFuture<Boolean> prepareAndCommit(MapTransaction<K1, V1> transaction) {
-        return backingMap.prepareAndCommit(transaction.map(keyEncoder, valueEncoder));
+        try {
+            return backingMap.prepareAndCommit(transaction.map(keyEncoder, valueEncoder));
+        } catch (Exception e) {
+            return Tools.exceptionalFuture(e);
+        }
     }
 
     private class InternalBackingMapEventListener implements MapEventListener<K2, V2> {