Do not fail if invoking of listener fails 52/81552/1
authorJakub Morvay <jakub.morvay@gmail.com>
Sat, 6 Apr 2019 09:19:13 +0000 (11:19 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 11 Apr 2019 09:56:42 +0000 (11:56 +0200)
DOMMountPointServiceImpl should not fail and propagate uncaught
exceptions from mount point listeners. When invocation of a registered
listener onMounPpointCreated or onMounPointRemoved callback fails, just
log the error and continue execution.

Change-Id: I5d182b610c0b5749cfe01efc13bc1dddfffa5283
Signed-off-by: Jakub Morvay <jakub.morvay@gmail.com>
(cherry picked from commit 2ef4a8d7750fee095a21318236d401727b1c8ae0)

dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java

index 6f2775a58dba18765edf9c62badc6a66b5eae8a6..80c8bc13c46c3e1d27f1a35d352a8397a54c8a1f 100644 (file)
@@ -68,13 +68,20 @@ public class DOMMountPointServiceImpl implements DOMMountPointService {
         return doRegisterMountPoint((SimpleDOMMountPoint) mountPoint);
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     private ObjectRegistration<DOMMountPoint> doRegisterMountPoint(final SimpleDOMMountPoint mountPoint) {
         final YangInstanceIdentifier mountPointId = mountPoint.getIdentifier();
         synchronized (mountPoints) {
             final DOMMountPoint prev = mountPoints.putIfAbsent(mountPointId, mountPoint);
             checkState(prev == null, "Mount point %s already exists as %s", mountPointId, prev);
         }
-        listeners.forEach(listener -> listener.getInstance().onMountPointCreated(mountPointId));
+        listeners.forEach(listener -> {
+            try {
+                listener.getInstance().onMountPointCreated(mountPointId);
+            } catch (final Exception ex) {
+                LOG.error("Listener {} failed on mount point {} created event", listener, mountPoint, ex);
+            }
+        });
 
         return new AbstractObjectRegistration<DOMMountPoint>(mountPoint) {
             @Override
@@ -98,6 +105,7 @@ public class DOMMountPointServiceImpl implements DOMMountPointService {
         doUnregisterMountPoint(mountPointId);
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     private void doUnregisterMountPoint(final YangInstanceIdentifier mountPointId) {
         synchronized (mountPoints) {
             if (mountPoints.remove(mountPointId) == null) {
@@ -106,7 +114,13 @@ public class DOMMountPointServiceImpl implements DOMMountPointService {
             }
         }
 
-        listeners.forEach(listener -> listener.getInstance().onMountPointRemoved(mountPointId));
+        listeners.forEach(listener -> {
+            try {
+                listener.getInstance().onMountPointRemoved(mountPointId);
+            } catch (final Exception ex) {
+                LOG.error("Listener {} failed on mount point {} removed event", listener, mountPointId, ex);
+            }
+        });
     }
 
     final class DOMMountPointBuilderImpl implements DOMMountPointBuilder {