From 31245f24ab67bf0bb8b566ae42a8e6f64df8fb91 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 17 Jan 2019 16:55:39 +0100 Subject: [PATCH] Correct EOS adapter error message The catch block covers multiple error causes and provides a misleading message when the listener (i.e. user code) fails. Refactor the method to cleanly separate failure causes. Change-Id: I21b9c846425b35684951c6f8d3c011a50d3308d8 Signed-off-by: Robert Varga --- .../DOMEntityOwnershipListenerAdapter.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java index 03cf420b6e..f04365ddbf 100644 --- a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java +++ b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java @@ -7,14 +7,19 @@ */ package org.opendaylight.mdsal.eos.binding.dom.adapter; -import com.google.common.base.Preconditions; +import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; + import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.eos.binding.api.Entity; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener; +import org.opendaylight.mdsal.eos.dom.api.DOMEntity; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,22 +36,31 @@ class DOMEntityOwnershipListenerAdapter implements DOMEntityOwnershipListener { DOMEntityOwnershipListenerAdapter(final EntityOwnershipListener bindingListener, final BindingNormalizedNodeSerializer conversionCodec) { - this.bindingListener = Preconditions.checkNotNull(bindingListener); - this.conversionCodec = Preconditions.checkNotNull(conversionCodec); + this.bindingListener = requireNonNull(bindingListener); + this.conversionCodec = requireNonNull(conversionCodec); } @Override @SuppressWarnings("checkstyle:IllegalCatch") - @SuppressFBWarnings("BC_UNCONFIRMED_CAST_OF_RETURN_VALUE") + @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST_OF_RETURN_VALUE", justification = "generic getEntity()") public void ownershipChanged(final DOMEntityOwnershipChange ownershipChange) { + final DOMEntity domEntity = ownershipChange.getEntity(); + final YangInstanceIdentifier domId = domEntity.getIdentifier(); + final InstanceIdentifier bindingId; + try { + bindingId = verifyNotNull(conversionCodec.fromYangInstanceIdentifier(domId)); + } catch (RuntimeException e) { + LOG.error("Error converting DOM entity ID {} to binding InstanceIdentifier", domId, e); + return; + } + + final Entity bindingEntity = new Entity(domEntity.getType(), bindingId); + final EntityOwnershipChange change = new EntityOwnershipChange(bindingEntity, + ownershipChange.getState(), ownershipChange.inJeopardy()); try { - final Entity entity = new Entity(ownershipChange.getEntity().getType(), - conversionCodec.fromYangInstanceIdentifier(ownershipChange.getEntity().getIdentifier())); - bindingListener.ownershipChanged(new EntityOwnershipChange(entity, ownershipChange.getState(), - ownershipChange.inJeopardy())); - } catch (final Exception e) { - LOG.error("Error converting DOM entity ID {} to binding InstanceIdentifier", - ownershipChange.getEntity().getIdentifier(), e); + bindingListener.ownershipChanged(change); + } catch (Exception e) { + LOG.error("Listener {} failed during change notification {}", bindingListener, change, e); } } -} \ No newline at end of file +} -- 2.36.6