From 6cc46ad460254757550e22ad2ecc733a48a43f63 Mon Sep 17 00:00:00 2001 From: Jakub Morvay Date: Sat, 6 Apr 2019 11:19:13 +0200 Subject: [PATCH] Do not fail if invoking of listener fails 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 (cherry picked from commit 2ef4a8d7750fee095a21318236d401727b1c8ae0) --- .../dom/broker/DOMMountPointServiceImpl.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java index 6f2775a58d..80c8bc13c4 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java @@ -68,13 +68,20 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { return doRegisterMountPoint((SimpleDOMMountPoint) mountPoint); } + @SuppressWarnings("checkstyle:IllegalCatch") private ObjectRegistration 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(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 { -- 2.36.6