From: Robert Varga Date: Wed, 3 Jun 2020 11:27:16 +0000 (+0200) Subject: Fix loose typing in ItmMonitorWorker X-Git-Tag: release/aluminium~2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=e195feae40b31a814231bf20b9670bf3d1e192d6;p=genius.git Fix loose typing in ItmMonitorWorker Having a type-variant constructor with internal instanceof checks prevents proper type safety. Fix this by introducing two separate constructors. Fixes: java.lang.ClassCastException: class org.opendaylight.yangtools.yang.common.Uint16 cannot be cast to class java.lang.Integer at org.opendaylight.genius.itm.confighelpers.ItmMonitorWorker.(ItmMonitorWorker.java:71) ~[bundleFile:?] at org.opendaylight.genius.itm.listeners.TunnelMonitorIntervalListener.add(TunnelMonitorIntervalListener.java:127) ~[bundleFile:?] at org.opendaylight.genius.itm.listeners.TunnelMonitorIntervalListener.add(TunnelMonitorIntervalListener.java:34) ~[bundleFile:?] at org.opendaylight.serviceutils.tools.listener.DataTreeChangeListenerActions.onDataTreeChanged(DataTreeChangeListenerActions.java:65) ~[bundleFile:?] at org.opendaylight.serviceutils.tools.listener.AbstractSyncDataTreeChangeListener.onDataTreeChanged(AbstractSyncDataTreeChangeListener.java:50) ~[bundleFile:?] at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:37) ~[bundleFile:?] at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataTreeChanged(DataTreeChangeListenerActor.java:83) [bundleFile:?] at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:44) [bundleFile:?] Change-Id: I3d6e312532dead3b1668e03fe58984d77b40d6de Signed-off-by: Robert Varga --- diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java index 2f5f93881..da1aabadf 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/confighelpers/ItmMonitorWorker.java @@ -34,12 +34,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpns; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.teps.state.dpns.teps.RemoteDpnsBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ItmMonitorWorker implements Callable>> { - private static final Logger LOG = LoggerFactory.getLogger(ItmMonitorWorker.class); private final String tzone; @@ -49,32 +49,42 @@ public class ItmMonitorWorker implements Callable ItmMonitorWorker(String tzone, T monitoring, - Class monitorProtocol, DataBroker dataBroker, - DirectTunnelUtils directTunnelUtils, - DpnTepStateCache dpnTepStateCache, - OvsBridgeRefEntryCache ovsBridgeRefEntryCache) { + private ItmMonitorWorker(String tzone, Boolean enabled, Uint16 interval, + Class monitorProtocol, DataBroker dataBroker, + DirectTunnelUtils directTunnelUtils, DpnTepStateCache dpnTepStateCache, + OvsBridgeRefEntryCache ovsBridgeRefEntryCache) { this.tzone = tzone; this.monitorProtocol = monitorProtocol; this.directTunnelUtils = directTunnelUtils; this.dpnTepStateCache = dpnTepStateCache; this.ovsBridgeRefEntryCache = ovsBridgeRefEntryCache; this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker); - LOG.trace("ItmMonitorWorker initialized with tzone {} and toggleBoolean {}", tzone, monitoring); - if (monitoring instanceof Boolean) { - this.enabled = (Boolean) monitoring; - this.interval = null; - } - else { - this.interval = (Integer) monitoring; - this.enabled = null; - } + LOG.trace("ItmMonitorWorker initialized with tzone {} and toggleBoolean {}", tzone, enabled); + this.enabled = enabled; + this.interval = interval; LOG.debug("Toggle monitoring enabled {} interval {} monitor protocol {}", enabled, interval, monitorProtocol); } - @Override public List> call() { + public ItmMonitorWorker(String tzone, Boolean enabled, + Class monitorProtocol, DataBroker dataBroker, + DirectTunnelUtils directTunnelUtils, DpnTepStateCache dpnTepStateCache, + OvsBridgeRefEntryCache ovsBridgeRefEntryCache) { + this(tzone, enabled, null, monitorProtocol, dataBroker, directTunnelUtils, dpnTepStateCache, + ovsBridgeRefEntryCache); + } + + public ItmMonitorWorker(String tzone, Uint16 interval, + Class monitorProtocol, DataBroker dataBroker, + DirectTunnelUtils directTunnelUtils, DpnTepStateCache dpnTepStateCache, + OvsBridgeRefEntryCache ovsBridgeRefEntryCache) { + this(tzone, null, interval, monitorProtocol, dataBroker, directTunnelUtils, dpnTepStateCache, + ovsBridgeRefEntryCache); + } + + @Override + public List> call() { LOG.debug("ItmMonitorWorker invoked with tzone = {} enabled {}", tzone, enabled); List> futures = new ArrayList<>(); return toggleTunnelMonitoring(futures); @@ -117,7 +127,6 @@ public class ItmMonitorWorker implements Callable tx) throws ReadFailedException { List remoteDpnTepNewList = new ArrayList<>(); @@ -150,5 +159,4 @@ public class ItmMonitorWorker implements Callable