Add HashMultiset Catalyst serializer - used in ConsistentMultimap.

Plus catch serialization exceptions during message receive, simplify
implementation of HashMultisetValueCollector, other minor cleanups.

Change-Id: Ia50b39205a8241f456ee90ef765a8e478da868ab
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CopycatTransportConnection.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CopycatTransportConnection.java
index 8d4b577..f2752cd 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CopycatTransportConnection.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/CopycatTransportConnection.java
@@ -15,7 +15,9 @@
  */
 package org.onosproject.store.primitives.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Maps;
 import io.atomix.catalyst.concurrent.Listener;
 import io.atomix.catalyst.concurrent.Listeners;
 import io.atomix.catalyst.concurrent.ThreadContext;
@@ -26,6 +28,11 @@
 import io.atomix.catalyst.transport.TransportException;
 import io.atomix.catalyst.util.Assert;
 import io.atomix.catalyst.util.reference.ReferenceCounted;
+import org.apache.commons.io.IOUtils;
+import org.onlab.util.Tools;
+import org.onosproject.cluster.PartitionId;
+import org.onosproject.store.cluster.messaging.MessagingException;
+import org.onosproject.store.cluster.messaging.MessagingService;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -38,15 +45,7 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
 
-import org.apache.commons.io.IOUtils;
-import org.onlab.util.Tools;
-import org.onosproject.cluster.PartitionId;
-import org.onosproject.store.cluster.messaging.MessagingException;
-import org.onosproject.store.cluster.messaging.MessagingService;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Maps;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * {@link Connection} implementation for CopycatTransport.
@@ -148,7 +147,13 @@
                 Throwable t = context.serializer().readObject(input);
                 context.execute(() -> future.completeExceptionally(t));
             } else {
-                context.execute(() -> future.complete(context.serializer().readObject(input)));
+                context.execute(() -> {
+                    try {
+                        future.complete(context.serializer().readObject(input));
+                    } catch (SerializationException e) {
+                        future.completeExceptionally(e);
+                    }
+                });
             }
         } catch (IOException e) {
             context.execute(() -> future.completeExceptionally(e));