Remove "throws IOException" from ClusterCommunicationService APIs

that never throw IOExceptions. These APIs already return boolean to indicate
if sending failed.

Change-Id: I339949fe59f3b8b18a117aabc8d67402dc66c2a3
diff --git a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterCommunicationService.java b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterCommunicationService.java
index 6db5abf..cdab90d 100644
--- a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterCommunicationService.java
+++ b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterCommunicationService.java
@@ -15,12 +15,11 @@
  */
 package org.onosproject.store.cluster.messaging;
 
-import java.io.IOException;
-import java.util.Set;
-
+import com.google.common.util.concurrent.ListenableFuture;
 import org.onosproject.cluster.NodeId;
 
-import com.google.common.util.concurrent.ListenableFuture;
+import java.io.IOException;
+import java.util.Set;
 
 // TODO: remove IOExceptions?
 /**
@@ -33,18 +32,16 @@
      *
      * @param message  message to send
      * @return true if the message was sent successfully to all nodes; false otherwise.
-     * @throws IOException when I/O exception of some sort has occurred
      */
-    boolean broadcast(ClusterMessage message) throws IOException;
+    boolean broadcast(ClusterMessage message);
 
     /**
      * Broadcast a message to all controller nodes including self.
      *
      * @param message  message to send
      * @return true if the message was sent successfully to all nodes; false otherwise.
-     * @throws IOException when I/O exception of some sort has occurred
      */
-    boolean broadcastIncludeSelf(ClusterMessage message) throws IOException;
+    boolean broadcastIncludeSelf(ClusterMessage message);
 
     /**
      * Sends a message to the specified controller node.
@@ -62,9 +59,8 @@
      * @param message  message to send
      * @param nodeIds  recipient node identifiers
      * @return true if the message was sent successfully to all nodes in the group; false otherwise.
-     * @throws IOException when I/O exception of some sort has occurred
      */
-    boolean multicast(ClusterMessage message, Set<NodeId> nodeIds) throws IOException;
+    boolean multicast(ClusterMessage message, Set<NodeId> nodeIds);
 
     /**
      * Sends a message synchronously.
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/LeadershipManager.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/LeadershipManager.java
index 8581da6..fb19d4d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/LeadershipManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/LeadershipManager.java
@@ -15,23 +15,16 @@
  */
 package org.onosproject.store.cluster.impl;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static org.onlab.util.Tools.namedThreads;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.util.KryoNamespace;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.Leadership;
 import org.onosproject.cluster.LeadershipEvent;
@@ -47,12 +40,17 @@
 import org.onosproject.store.service.Lock;
 import org.onosproject.store.service.LockService;
 import org.onosproject.store.service.impl.DistributedLockManager;
-import org.onlab.util.KryoNamespace;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static org.onlab.util.Tools.namedThreads;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Distributed implementation of LeadershipService that is based on the primitives exposed by
@@ -286,15 +284,11 @@
         public void event(LeadershipEvent event) {
             // publish events originating on this host.
             if (event.subject().leader().equals(localNodeId)) {
-                try {
-                    clusterCommunicator.broadcast(
-                            new ClusterMessage(
-                                    localNodeId,
-                                    LEADERSHIP_UPDATES,
-                                    SERIALIZER.encode(event)));
-                } catch (IOException e) {
-                    log.error("Failed to broadcast leadership update message", e);
-                }
+                clusterCommunicator.broadcast(
+                        new ClusterMessage(
+                                localNodeId,
+                                LEADERSHIP_UPDATES,
+                                SERIALIZER.encode(event)));
             }
         }
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManager.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManager.java
index d293eed..2868270 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/messaging/impl/ClusterCommunicationManager.java
@@ -15,11 +15,7 @@
  */
 package org.onosproject.store.cluster.messaging.impl;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.io.IOException;
-import java.util.Set;
-
+import com.google.common.util.concurrent.ListenableFuture;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -31,6 +27,7 @@
 import org.onlab.netty.MessageHandler;
 import org.onlab.netty.MessagingService;
 import org.onlab.netty.NettyMessagingService;
+import org.onlab.util.KryoNamespace;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.NodeId;
@@ -42,11 +39,13 @@
 import org.onosproject.store.serializers.KryoSerializer;
 import org.onosproject.store.serializers.impl.ClusterMessageSerializer;
 import org.onosproject.store.serializers.impl.MessageSubjectSerializer;
-import org.onlab.util.KryoNamespace;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.util.concurrent.ListenableFuture;
+import java.io.IOException;
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkArgument;
 
 @Component(immediate = true)
 @Service
@@ -101,7 +100,7 @@
     }
 
     @Override
-    public boolean broadcast(ClusterMessage message) throws IOException {
+    public boolean broadcast(ClusterMessage message) {
         boolean ok = true;
         final ControllerNode localNode = clusterService.getLocalNode();
         for (ControllerNode node : clusterService.getNodes()) {
@@ -113,7 +112,7 @@
     }
 
     @Override
-    public boolean broadcastIncludeSelf(ClusterMessage message) throws IOException {
+    public boolean broadcastIncludeSelf(ClusterMessage message) {
         boolean ok = true;
         for (ControllerNode node : clusterService.getNodes()) {
             ok = unicastUnchecked(message, node.id()) && ok;
@@ -122,7 +121,7 @@
     }
 
     @Override
-    public boolean multicast(ClusterMessage message, Set<NodeId> nodes) throws IOException {
+    public boolean multicast(ClusterMessage message, Set<NodeId> nodes) {
         boolean ok = true;
         final ControllerNode localNode = clusterService.getLocalNode();
         for (NodeId nodeId : nodes) {
@@ -148,7 +147,7 @@
         }
     }
 
-    private boolean unicastUnchecked(ClusterMessage message, NodeId toNodeId) throws IOException {
+    private boolean unicastUnchecked(ClusterMessage message, NodeId toNodeId) {
         try {
             return unicast(message, toNodeId);
         } catch (IOException e) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 90d7d70..3a94087 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -263,12 +263,7 @@
         if (event != null) {
             log.info("Notifying peers of a device update topology event for providerId: {} and deviceId: {}",
                 providerId, deviceId);
-            try {
-                notifyPeers(new InternalDeviceEvent(providerId, deviceId, mergedDesc));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a device update topology event for providerId: "
-                        + providerId + " and deviceId: " + deviceId, e);
-            }
+            notifyPeers(new InternalDeviceEvent(providerId, deviceId, mergedDesc));
         }
         return event;
     }
@@ -376,12 +371,7 @@
         if (event != null) {
             log.info("Notifying peers of a device offline topology event for deviceId: {} {}",
                     deviceId, timestamp);
-            try {
-                notifyPeers(new InternalDeviceOfflineEvent(deviceId, timestamp));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a device offline topology event for deviceId: {}",
-                     deviceId);
-            }
+            notifyPeers(new InternalDeviceOfflineEvent(deviceId, timestamp));
         }
         return event;
     }
@@ -487,12 +477,7 @@
         if (!events.isEmpty()) {
             log.info("Notifying peers of a ports update topology event for providerId: {} and deviceId: {}",
                     providerId, deviceId);
-            try {
-                notifyPeers(new InternalPortEvent(providerId, deviceId, merged));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a port update topology event or providerId: "
-                    + providerId + " and deviceId: " + deviceId, e);
-            }
+            notifyPeers(new InternalPortEvent(providerId, deviceId, merged));
         }
         return events;
     }
@@ -667,12 +652,7 @@
         if (event != null) {
             log.info("Notifying peers of a port status update topology event for providerId: {} and deviceId: {}",
                         providerId, deviceId);
-            try {
-                notifyPeers(new InternalPortStatusEvent(providerId, deviceId, mergedDesc));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a port status update topology event or providerId: "
-                        + providerId + " and deviceId: " + deviceId, e);
-            }
+            notifyPeers(new InternalPortStatusEvent(providerId, deviceId, mergedDesc));
         }
         return event;
     }
@@ -793,12 +773,7 @@
         if (event != null) {
             log.debug("Notifying peers of a device removed topology event for deviceId: {}",
                     deviceId);
-            try {
-                notifyPeers(new InternalDeviceRemovedEvent(deviceId, timestamp));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a device removed topology event for deviceId: {}",
-                     deviceId);
-            }
+            notifyPeers(new InternalDeviceRemovedEvent(deviceId, timestamp));
         }
         if (relinquishAtEnd) {
             log.debug("Relinquishing temporary role acquired for {}", deviceId);
@@ -973,7 +948,7 @@
         clusterCommunicator.unicast(message, recipient);
     }
 
-    private void broadcastMessage(MessageSubject subject, Object event) throws IOException {
+    private void broadcastMessage(MessageSubject subject, Object event) {
         ClusterMessage message = new ClusterMessage(
                 clusterService.getLocalNode().id(),
                 subject,
@@ -981,23 +956,23 @@
         clusterCommunicator.broadcast(message);
     }
 
-    private void notifyPeers(InternalDeviceEvent event) throws IOException {
+    private void notifyPeers(InternalDeviceEvent event) {
         broadcastMessage(GossipDeviceStoreMessageSubjects.DEVICE_UPDATE, event);
     }
 
-    private void notifyPeers(InternalDeviceOfflineEvent event) throws IOException {
+    private void notifyPeers(InternalDeviceOfflineEvent event) {
         broadcastMessage(GossipDeviceStoreMessageSubjects.DEVICE_OFFLINE, event);
     }
 
-    private void notifyPeers(InternalDeviceRemovedEvent event) throws IOException {
+    private void notifyPeers(InternalDeviceRemovedEvent event) {
         broadcastMessage(GossipDeviceStoreMessageSubjects.DEVICE_REMOVED, event);
     }
 
-    private void notifyPeers(InternalPortEvent event) throws IOException {
+    private void notifyPeers(InternalPortEvent event) {
         broadcastMessage(GossipDeviceStoreMessageSubjects.PORT_UPDATE, event);
     }
 
-    private void notifyPeers(InternalPortStatusEvent event) throws IOException {
+    private void notifyPeers(InternalPortStatusEvent event) {
         broadcastMessage(GossipDeviceStoreMessageSubjects.PORT_STATUS_UPDATE, event);
     }
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/host/impl/GossipHostStore.java b/core/store/dist/src/main/java/org/onosproject/store/host/impl/GossipHostStore.java
index ed83828..93ff1a3 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/host/impl/GossipHostStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/host/impl/GossipHostStore.java
@@ -15,33 +15,13 @@
  */
 package org.onosproject.store.host.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Multimaps.synchronizedSetMultimap;
-import static com.google.common.collect.Multimaps.newSetMultimap;
-import static com.google.common.collect.Sets.newConcurrentHashSet;
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
-import static org.onosproject.cluster.ControllerNodeToNodeId.toNodeId;
-import static org.onosproject.net.DefaultAnnotations.merge;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.store.host.impl.GossipHostStoreMessageSubjects.*;
-import static org.onlab.util.Tools.namedThreads;
-import static org.onlab.util.Tools.minPriority;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.SetMultimap;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -49,6 +29,10 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onlab.util.KryoNamespace;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.NodeId;
@@ -79,19 +63,36 @@
 import org.onosproject.store.impl.Timestamped;
 import org.onosproject.store.serializers.KryoSerializer;
 import org.onosproject.store.serializers.impl.DistributedStoreSerializers;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onlab.util.KryoNamespace;
 import org.slf4j.Logger;
 
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Multimaps.newSetMultimap;
+import static com.google.common.collect.Multimaps.synchronizedSetMultimap;
+import static com.google.common.collect.Sets.newConcurrentHashSet;
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.onlab.util.Tools.minPriority;
+import static org.onlab.util.Tools.namedThreads;
+import static org.onosproject.cluster.ControllerNodeToNodeId.toNodeId;
+import static org.onosproject.net.DefaultAnnotations.merge;
+import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
+import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
+import static org.onosproject.store.host.impl.GossipHostStoreMessageSubjects.HOST_ANTI_ENTROPY_ADVERTISEMENT;
+import static org.onosproject.store.host.impl.GossipHostStoreMessageSubjects.HOST_REMOVED_MSG;
+import static org.onosproject.store.host.impl.GossipHostStoreMessageSubjects.HOST_UPDATED_MSG;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Manages inventory of end-station hosts in distributed data store
@@ -205,12 +206,7 @@
         if (event != null) {
             log.debug("Notifying peers of a host topology event for providerId: "
                     + "{}; hostId: {}; hostDescription: {}", providerId, hostId, hostDescription);
-            try {
-                notifyPeers(new InternalHostEvent(providerId, hostId, hostDescription, timestamp));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a host topology event for providerId: "
-                        + "{}; hostId: {}; hostDescription: {}", providerId, hostId, hostDescription);
-            }
+            notifyPeers(new InternalHostEvent(providerId, hostId, hostDescription, timestamp));
         }
         return event;
     }
@@ -331,11 +327,7 @@
         HostEvent event = removeHostInternal(hostId, timestamp);
         if (event != null) {
             log.debug("Notifying peers of a host removed topology event for hostId: {}", hostId);
-            try {
-                notifyPeers(new InternalHostRemovedEvent(hostId, timestamp));
-            } catch (IOException e) {
-                log.info("Failed to notify peers of a host removed topology event for hostId: {}", hostId);
-            }
+            notifyPeers(new InternalHostRemovedEvent(hostId, timestamp));
         }
         return event;
     }
@@ -477,15 +469,15 @@
         }
     }
 
-    private void notifyPeers(InternalHostRemovedEvent event) throws IOException {
+    private void notifyPeers(InternalHostRemovedEvent event) {
         broadcastMessage(HOST_REMOVED_MSG, event);
     }
 
-    private void notifyPeers(InternalHostEvent event) throws IOException {
+    private void notifyPeers(InternalHostEvent event) {
         broadcastMessage(HOST_UPDATED_MSG, event);
     }
 
-    private void broadcastMessage(MessageSubject subject, Object event) throws IOException {
+    private void broadcastMessage(MessageSubject subject, Object event) {
         ClusterMessage message = new ClusterMessage(
                 clusterService.getLocalNode().id(),
                 subject,
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
index b011517..19786f8 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
@@ -366,26 +366,14 @@
     }
 
     private void notifyPeers(InternalPutEvent event) {
-        try {
-            log.debug("sending put {}", event);
-            broadcastMessage(updateMessageSubject, event);
-        } catch (IOException e) {
-            // TODO this won't happen; remove from API
-            log.debug("IOException broadcasting update", e);
-        }
+        broadcastMessage(updateMessageSubject, event);
     }
 
     private void notifyPeers(InternalRemoveEvent event) {
-        try {
-            broadcastMessage(removeMessageSubject, event);
-        } catch (IOException e) {
-            // TODO this won't happen; remove from API
-            log.debug("IOException broadcasting update", e);
-        }
+        broadcastMessage(removeMessageSubject, event);
     }
 
-    private void broadcastMessage(MessageSubject subject, Object event) throws
-            IOException {
+    private void broadcastMessage(MessageSubject subject, Object event) {
         ClusterMessage message = new ClusterMessage(
                 clusterService.getLocalNode().id(),
                 subject,
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index b7596dc..4ffd4bf 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -327,25 +327,14 @@
     }
 
     private void notifyPeers(InternalIntentEvent event) {
-        try {
-            broadcastMessage(INTENT_UPDATED_MSG, event);
-        } catch (IOException e) {
-            // TODO this won't happen; remove from API
-            log.debug("IOException broadcasting update", e);
-        }
+        broadcastMessage(INTENT_UPDATED_MSG, event);
     }
 
     private void notifyPeers(InternalSetInstallablesEvent event) {
-        try {
-            broadcastMessage(INTENT_SET_INSTALLABLES_MSG, event);
-        } catch (IOException e) {
-            // TODO this won't happen; remove from API
-            log.debug("IOException broadcasting update", e);
-        }
+        broadcastMessage(INTENT_SET_INSTALLABLES_MSG, event);
     }
 
-    private void broadcastMessage(MessageSubject subject, Object event) throws
-            IOException {
+    private void broadcastMessage(MessageSubject subject, Object event) {
         ClusterMessage message = new ClusterMessage(
                 clusterService.getLocalNode().id(),
                 subject,
diff --git a/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java b/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
index 2fc9c82..6cc45ea 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
@@ -15,22 +15,12 @@
  */
 package org.onosproject.store.link.impl;
 
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.base.Function;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -70,12 +60,21 @@
 import org.onosproject.store.serializers.impl.DistributedStoreSerializers;
 import org.slf4j.Logger;
 
-import com.google.common.base.Function;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Predicates.notNull;
@@ -289,13 +288,7 @@
             log.info("Notifying peers of a link update topology event from providerId: "
                     + "{}  between src: {} and dst: {}",
                     providerId, linkDescription.src(), linkDescription.dst());
-            try {
-                notifyPeers(new InternalLinkEvent(providerId, mergedDesc));
-            } catch (IOException e) {
-                log.debug("Failed to notify peers of a link update topology event from providerId: "
-                                 + "{}  between src: {} and dst: {}",
-                         providerId, linkDescription.src(), linkDescription.dst());
-            }
+            notifyPeers(new InternalLinkEvent(providerId, mergedDesc));
         }
         return event;
     }
@@ -432,12 +425,7 @@
         if (event != null) {
             log.info("Notifying peers of a link removed topology event for a link "
                     + "between src: {} and dst: {}", src, dst);
-            try {
-                notifyPeers(new InternalLinkRemovedEvent(key, timestamp));
-            } catch (IOException e) {
-                log.error("Failed to notify peers of a link removed topology event for a link "
-                        + "between src: {} and dst: {}", src, dst);
-            }
+            notifyPeers(new InternalLinkRemovedEvent(key, timestamp));
         }
         return event;
     }
@@ -607,7 +595,7 @@
         }
     }
 
-    private void broadcastMessage(MessageSubject subject, Object event) throws IOException {
+    private void broadcastMessage(MessageSubject subject, Object event) {
         ClusterMessage message = new ClusterMessage(
                 clusterService.getLocalNode().id(),
                 subject,
@@ -623,11 +611,11 @@
         clusterCommunicator.unicast(message, recipient);
     }
 
-    private void notifyPeers(InternalLinkEvent event) throws IOException {
+    private void notifyPeers(InternalLinkEvent event) {
         broadcastMessage(GossipLinkStoreMessageSubjects.LINK_UPDATE, event);
     }
 
-    private void notifyPeers(InternalLinkRemovedEvent event) throws IOException {
+    private void notifyPeers(InternalLinkRemovedEvent event) {
         broadcastMessage(GossipLinkStoreMessageSubjects.LINK_REMOVED, event);
     }
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseEntryExpirationTracker.java b/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseEntryExpirationTracker.java
index 4d89aa7..02743ac 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseEntryExpirationTracker.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseEntryExpirationTracker.java
@@ -16,24 +16,13 @@
 
 package org.onosproject.store.service.impl;
 
-import static org.onlab.util.Tools.namedThreads;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-
+import com.google.common.base.MoreObjects;
 import net.jodah.expiringmap.ExpiringMap;
 import net.jodah.expiringmap.ExpiringMap.ExpirationListener;
 import net.jodah.expiringmap.ExpiringMap.ExpirationPolicy;
 import net.kuujo.copycat.cluster.Member;
 import net.kuujo.copycat.event.EventHandler;
 import net.kuujo.copycat.event.LeaderElectEvent;
-
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.store.cluster.messaging.ClusterCommunicationService;
 import org.onosproject.store.cluster.messaging.ClusterMessage;
@@ -44,7 +33,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.MoreObjects;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static org.onlab.util.Tools.namedThreads;
 
 /**
  * Plugs into the database update stream and track the TTL of entries added to
@@ -97,14 +94,10 @@
         case ROW_DELETED:
             map.remove(row, eventVersion);
             if (isLocalMemberLeader.get()) {
-                try {
-                    log.debug("Broadcasting {} to the entire cluster", event);
-                    clusterCommunicator.broadcastIncludeSelf(new ClusterMessage(
-                            localNode.id(), DatabaseStateMachine.DATABASE_UPDATE_EVENTS,
-                            ClusterMessagingProtocol.DB_SERIALIZER.encode(event)));
-                } catch (IOException e) {
-                    log.error("Failed to broadcast a database row deleted event.", e);
-                }
+                log.debug("Broadcasting {} to the entire cluster", event);
+                clusterCommunicator.broadcastIncludeSelf(new ClusterMessage(
+                        localNode.id(), DatabaseStateMachine.DATABASE_UPDATE_EVENTS,
+                        ClusterMessagingProtocol.DB_SERIALIZER.encode(event)));
             }
             break;
         case ROW_ADDED:
diff --git a/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseManager.java
index 6931b66..e5a742e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/service/impl/DatabaseManager.java
@@ -15,23 +15,7 @@
  */
 package org.onosproject.store.service.impl;
 
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
-import static org.onlab.util.Tools.namedThreads;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.ImmutableList;
 import net.kuujo.copycat.Copycat;
 import net.kuujo.copycat.CopycatConfig;
 import net.kuujo.copycat.cluster.ClusterConfig;
@@ -42,13 +26,13 @@
 import net.kuujo.copycat.event.EventHandler;
 import net.kuujo.copycat.event.LeaderElectEvent;
 import net.kuujo.copycat.log.Log;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ClusterEvent;
 import org.onosproject.cluster.ClusterEventListener;
 import org.onosproject.cluster.ClusterService;
@@ -69,10 +53,24 @@
 import org.onosproject.store.service.VersionedValue;
 import org.onosproject.store.service.WriteResult;
 import org.onosproject.store.service.WriteStatus;
-import org.onlab.packet.IpAddress;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableList;
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.onlab.util.Tools.namedThreads;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Strongly consistent and durable state management service based on
@@ -488,25 +486,21 @@
     private final class RaftLeaderElectionMonitor implements EventHandler<LeaderElectEvent> {
         @Override
         public void handle(LeaderElectEvent event) {
-            try {
-                log.debug("Received LeaderElectEvent: {}", event);
-                if (clusterConfig.getLocalMember() != null && event.leader().equals(clusterConfig.getLocalMember())) {
-                    log.debug("Broadcasting RAFT_LEADER_ELECTION_EVENT");
-                    myLeaderEvent = event;
-                    // This node just became the leader.
-                    clusterCommunicator.broadcastIncludeSelf(
-                            new ClusterMessage(
-                                    clusterService.getLocalNode().id(),
-                                    RAFT_LEADER_ELECTION_EVENT,
-                                    ClusterMessagingProtocol.DB_SERIALIZER.encode(event)));
-                } else {
-                    if (myLeaderEvent != null) {
-                        log.debug("This node is no longer the Leader");
-                    }
-                    myLeaderEvent = null;
+            log.debug("Received LeaderElectEvent: {}", event);
+            if (clusterConfig.getLocalMember() != null && event.leader().equals(clusterConfig.getLocalMember())) {
+                log.debug("Broadcasting RAFT_LEADER_ELECTION_EVENT");
+                myLeaderEvent = event;
+                // This node just became the leader.
+                clusterCommunicator.broadcastIncludeSelf(
+                        new ClusterMessage(
+                                clusterService.getLocalNode().id(),
+                                RAFT_LEADER_ELECTION_EVENT,
+                                ClusterMessagingProtocol.DB_SERIALIZER.encode(event)));
+            } else {
+                if (myLeaderEvent != null) {
+                    log.debug("This node is no longer the Leader");
                 }
-            } catch (IOException e) {
-                log.error("Failed to broadcast raft leadership change event", e);
+                myLeaderEvent = null;
             }
         }
     }
diff --git a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
index e9c0182..3711f7f 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
@@ -15,25 +15,8 @@
  */
 package org.onosproject.store.device.impl;
 
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
-import static org.onosproject.net.Device.Type.SWITCH;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.device.DeviceEvent.Type.*;
-import static org.onosproject.cluster.ControllerNode.State.*;
-import static org.onosproject.net.DefaultAnnotations.union;
-import static java.util.Arrays.asList;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
 import org.easymock.Capture;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -41,6 +24,8 @@
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.onlab.packet.ChassisId;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.DefaultControllerNode;
@@ -68,11 +53,25 @@
 import org.onosproject.store.cluster.messaging.ClusterMessage;
 import org.onosproject.store.cluster.messaging.ClusterMessageHandler;
 import org.onosproject.store.cluster.messaging.MessageSubject;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
 
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import static java.util.Arrays.asList;
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.*;
+import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
+import static org.onosproject.net.DefaultAnnotations.union;
+import static org.onosproject.net.Device.Type.SWITCH;
+import static org.onosproject.net.DeviceId.deviceId;
+import static org.onosproject.net.device.DeviceEvent.Type.*;
 
 
 // TODO add tests for remote replication
@@ -180,12 +179,8 @@
                 new DefaultDeviceDescription(deviceId.uri(), SWITCH, MFR,
                         HW, swVersion, SN, CID, annotations);
         reset(clusterCommunicator);
-        try {
-            expect(clusterCommunicator.broadcast(anyObject(ClusterMessage.class)))
-                .andReturn(true).anyTimes();
-        } catch (IOException e) {
-            fail("Should never reach here");
-        }
+        expect(clusterCommunicator.broadcast(anyObject(ClusterMessage.class)))
+            .andReturn(true).anyTimes();
         replay(clusterCommunicator);
         deviceStore.createOrUpdateDevice(PID, deviceId, description);
         verify(clusterCommunicator);
@@ -664,11 +659,7 @@
 
         bcast.reset();
         reset(clusterCommunicator);
-        try {
-            expect(clusterCommunicator.broadcast(capture(bcast))).andReturn(true).once();
-        } catch (IOException e) {
-            fail("Should never reach here");
-        }
+        expect(clusterCommunicator.broadcast(capture(bcast))).andReturn(true).once();
         replay(clusterCommunicator);
     }
 
diff --git a/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
index 5962a43..1251e96 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/link/impl/GossipLinkStoreTest.java
@@ -16,7 +16,6 @@
 package org.onosproject.store.link.impl;
 
 import com.google.common.collect.Iterables;
-
 import org.easymock.Capture;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -24,6 +23,7 @@
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.DefaultControllerNode;
 import org.onosproject.cluster.NodeId;
@@ -49,29 +49,24 @@
 import org.onosproject.store.cluster.messaging.ClusterMessageHandler;
 import org.onosproject.store.cluster.messaging.MessageSubject;
 import org.onosproject.store.device.impl.DeviceClockManager;
-import org.onlab.packet.IpAddress;
 
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
+import static org.easymock.EasyMock.*;
 import static org.junit.Assert.*;
 import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
 import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.Link.Type.*;
-import static org.onosproject.net.link.LinkEvent.Type.*;
+import static org.onosproject.net.Link.Type.DIRECT;
+import static org.onosproject.net.Link.Type.EDGE;
+import static org.onosproject.net.Link.Type.INDIRECT;
 import static org.onosproject.net.NetTestTools.assertAnnotationsEquals;
+import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
+import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED;
+import static org.onosproject.net.link.LinkEvent.Type.LINK_UPDATED;
 
 /**
  * Test of the GossipLinkStoreTest implementation.
@@ -169,12 +164,8 @@
         ConnectPoint src = new ConnectPoint(srcId, srcNum);
         ConnectPoint dst = new ConnectPoint(dstId, dstNum);
         reset(clusterCommunicator);
-        try {
-            expect(clusterCommunicator.broadcast(anyObject(ClusterMessage.class)))
-                .andReturn(true).anyTimes();
-        } catch (IOException e) {
-            fail("Should never reach here");
-        }
+        expect(clusterCommunicator.broadcast(anyObject(ClusterMessage.class)))
+            .andReturn(true).anyTimes();
         replay(clusterCommunicator);
         linkStore.createOrUpdateLink(PID, new DefaultLinkDescription(src, dst, type, annotations));
         verify(clusterCommunicator);
@@ -192,11 +183,7 @@
 
         bcast.reset();
         reset(clusterCommunicator);
-        try {
-            expect(clusterCommunicator.broadcast(capture(bcast))).andReturn(true).once();
-        } catch (IOException e) {
-            fail("Should never reach here");
-        }
+        expect(clusterCommunicator.broadcast(capture(bcast))).andReturn(true).once();
         replay(clusterCommunicator);
     }