Correct EOS adapter error message 22/79622/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 17 Jan 2019 15:55:39 +0000 (16:55 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 17 Jan 2019 16:05:36 +0000 (17:05 +0100)
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 <robert.varga@pantheon.tech>
entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java

index 03cf420b6edc5e83f04c7e8b23111019cf441031..f04365ddbfa8d012d756b69edb93eb7552d44a6e 100644 (file)
@@ -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
+}