From: Edw7n Date: Tue, 23 Apr 2019 11:22:59 +0000 (+0530) Subject: Shard Status logic in genius X-Git-Tag: release/aluminium~11 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=79b3b9aca670ccea5c65dcfbd799483207bdfc8c;p=genius.git Shard Status logic in genius - idmanager mbean waits on shards specified in network constants - this reference will be available to others only when shard leader election is done - any mbean which reads/writes to the data store would have to wait - ItmProvider and Ifmprovider already wait on idmanager, hence not included - other mbeans which are directly or inderectly on such providers/mbeans do not need idmanager reference explicitly Change-Id: Ia1c77ebcc978da51a3897e0741ea7570937d16a4 Signed-off-by: Edw7n Signed-off-by: Faseela K --- diff --git a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java index 9c43f90ee..cc2de9953 100644 --- a/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java +++ b/idmanager/idmanager-impl/src/main/java/org/opendaylight/genius/idmanager/IdManager.java @@ -53,6 +53,8 @@ import org.opendaylight.genius.infra.ManagedNewTransactionRunner; import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl; import org.opendaylight.genius.infra.TypedReadWriteTransaction; import org.opendaylight.genius.infra.TypedWriteTransaction; +import org.opendaylight.genius.mdsalutil.NwConstants; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; import org.opendaylight.infrautils.jobcoordinator.JobCoordinator; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; @@ -112,7 +114,8 @@ public class IdManager implements IdManagerService, IdManagerMonitor { @Inject public IdManager(DataBroker db, LockManagerService lockManager, IdUtils idUtils, - @Reference DataImportBootReady dataImportBootReady, @Reference JobCoordinator jobCoordinator) + @Reference DataImportBootReady dataImportBootReady, + @Reference JobCoordinator jobCoordinator, @Reference ShardStatusMonitor shardStatusMonitor) throws ReadFailedException, InterruptedException { this.broker = db; this.txRunner = new ManagedNewTransactionRunnerImpl(db); @@ -130,7 +133,28 @@ public class IdManager implements IdManagerService, IdManagerMonitor { // it appears to be (is) un-used from a Java code PoV! this.localPool = new ConcurrentHashMap<>(); - populateCache(); + boolean isDatastoreAvailable = false; + int retryCount = 0; + int totalRetry = 1000; + try { + while (retryCount < totalRetry) { + isDatastoreAvailable = shardStatusMonitor.getShardStatus(NwConstants.IdManagerShards.getShardList()); + if (isDatastoreAvailable) { + LOG.info("IDManager is UP"); + populateCache(); + break; + } + LOG.error("IdManager: retrying shard status check for the {} time, pending retries {}", + ++retryCount, totalRetry - retryCount); + Thread.sleep(2000); + } + } catch (InterruptedException e) { + LOG.error("IDManager is DOWN, shard status check failed"); + } + + if (!isDatastoreAvailable) { + LOG.error("IDManager is DOWN, as shards were not available at bundle bringup"); + } } @Override diff --git a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTestModule.java b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTestModule.java index 207d50b2b..89038413a 100644 --- a/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTestModule.java +++ b/idmanager/idmanager-impl/src/test/java/org/opendaylight/genius/idmanager/test/IdManagerTestModule.java @@ -15,7 +15,9 @@ import org.opendaylight.genius.idmanager.IdPoolListener; import org.opendaylight.genius.lockmanager.impl.LockListener; import org.opendaylight.genius.lockmanager.impl.LockManagerServiceImpl; import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; import org.opendaylight.genius.mdsalutil.interfaces.testutils.TestIMdsalApiManager; +import org.opendaylight.genius.mdsalutil.testutils.TestShardStatusMonitor; import org.opendaylight.infrautils.inject.guice.testutils.AbstractGuiceJsr250Module; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.testutils.DataBrokerTestModule; @@ -38,5 +40,6 @@ public class IdManagerTestModule extends AbstractGuiceJsr250Module { bind(JobCoordinatorEventsWaiter.class).to(TestableJobCoordinatorEventsWaiter.class); DataBroker dataBroker = DataBrokerTestModule.dataBroker(); bind(DataBroker.class).toInstance(dataBroker); + bind(ShardStatusMonitor.class).toInstance(TestShardStatusMonitor.newInstance()); } } diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java index 17c9602b6..888d4795c 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesInterfaceStateListener.java @@ -37,6 +37,7 @@ import org.opendaylight.serviceutils.tools.listener.AbstractClusteredSyncDataTre import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.Other; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.ServiceModeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServices; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -62,7 +63,8 @@ public class FlowBasedServicesInterfaceStateListener extends AbstractClusteredSy flowBasedServicesStateRendererFactoryResolver, final InterfaceServiceRecoveryHandler interfaceServiceRecoveryHandler, - @Reference final ServiceRecoveryRegistry serviceRecoveryRegistry) { + @Reference final ServiceRecoveryRegistry serviceRecoveryRegistry, + final IdManagerService idManagerService) { super(dataBroker, LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(InterfacesState.class).child(Interface.class)); this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker); diff --git a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesNodeStateListener.java b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesNodeStateListener.java index 78014d5bd..077c99df1 100644 --- a/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesNodeStateListener.java +++ b/interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/servicebindings/flowbased/listeners/FlowBasedServicesNodeStateListener.java @@ -22,6 +22,7 @@ import org.opendaylight.infrautils.jobcoordinator.JobCoordinator; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.serviceutils.tools.listener.AbstractSyncDataTreeChangeListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.ServiceModeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; @@ -42,7 +43,8 @@ public class FlowBasedServicesNodeStateListener extends AbstractSyncDataTreeChan public FlowBasedServicesNodeStateListener(@Reference final DataBroker dataBroker, @Reference final JobCoordinator jobCoordinator, final FlowBasedServicesStateRendererFactoryResolver - flowBasedServicesStateRendererFactoryResolver) { + flowBasedServicesStateRendererFactoryResolver, + final IdManagerService idManagerService) { super(dataBroker, LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class).child(Node.class)); this.jobCoordinator = jobCoordinator; this.flowBasedServicesStateRendererFactoryResolver = flowBasedServicesStateRendererFactoryResolver; diff --git a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java index bea808cbb..85b430689 100644 --- a/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java +++ b/interfacemanager/interfacemanager-impl/src/test/java/org/opendaylight/genius/interfacemanager/test/InterfaceManagerTestModule.java @@ -38,7 +38,9 @@ import org.opendaylight.genius.interfacemanager.servicebindings.flowbased.listen import org.opendaylight.genius.lockmanager.impl.LockListener; import org.opendaylight.genius.lockmanager.impl.LockManagerServiceImpl; import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; import org.opendaylight.genius.mdsalutil.interfaces.testutils.TestIMdsalApiManager; +import org.opendaylight.genius.mdsalutil.testutils.TestShardStatusMonitor; import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils; import org.opendaylight.genius.utils.hwvtep.HwvtepNodeHACache; import org.opendaylight.infrautils.caches.CacheProvider; @@ -83,6 +85,7 @@ public class InterfaceManagerTestModule extends AbstractGuiceJsr250Module { bind(LockManagerService.class).to(LockManagerServiceImpl.class); bind(LockListener.class); bind(IdManagerService.class).to(IdManager.class); + bind(ShardStatusMonitor.class).toInstance(TestShardStatusMonitor.newInstance()); bind(IInterfaceManager.class).to(InterfacemgrProvider.class); TestIMdsalApiManager mdsalManager = TestIMdsalApiManager.newInstance(); diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java index 0a13ed9af..fc2751784 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/listeners/OvsdbNodeListener.java @@ -28,6 +28,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.serviceutils.tools.listener.AbstractSyncDataTreeChangeListener; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig; @@ -66,7 +67,8 @@ public class OvsdbNodeListener extends AbstractSyncDataTreeChangeListener @Inject public OvsdbNodeListener(DataBroker dataBroker, ItmConfig itmConfig, JobCoordinator jobCoordinator, - DataTreeEventCallbackRegistrar eventCallbacks) { + DataTreeEventCallbackRegistrar eventCallbacks, + final IdManagerService idManagerService) { super(dataBroker, LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(NetworkTopology.class).child(Topology.class).child(Node.class)); this.dataBroker = dataBroker; diff --git a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java index 0f1ba8936..d7dd64237 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/genius/itm/tests/ItmTestModule.java @@ -34,7 +34,9 @@ import org.opendaylight.genius.itm.monitoring.ItmTunnelEventListener; import org.opendaylight.genius.itm.rpc.ItmManagerRpcService; import org.opendaylight.genius.lockmanager.impl.LockManagerServiceImpl; import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; import org.opendaylight.genius.mdsalutil.interfaces.testutils.TestIMdsalApiManager; +import org.opendaylight.genius.mdsalutil.testutils.TestShardStatusMonitor; import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils; import org.opendaylight.infrautils.diagstatus.DiagStatusService; import org.opendaylight.infrautils.inject.guice.testutils.AbstractGuiceJsr250Module; @@ -114,6 +116,7 @@ public class ItmTestModule extends AbstractGuiceJsr250Module { bind(TestIMdsalApiManager.class).toInstance(mdsalManager); bind(DataImportBootReady.class).toInstance(new DataImportBootReady() {}); bind(DiagStatusService.class).toInstance(mock(DiagStatusService.class)); + bind(ShardStatusMonitor.class).toInstance(TestShardStatusMonitor.newInstance()); } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NwConstants.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NwConstants.java index 0bdefd45e..ae6aada76 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NwConstants.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/NwConstants.java @@ -7,6 +7,9 @@ */ package org.opendaylight.genius.mdsalutil; + +import java.util.ArrayList; +import java.util.List; import org.opendaylight.yangtools.yang.common.Uint64; public interface NwConstants { @@ -279,4 +282,28 @@ public interface NwConstants { return flowModHeaderLen; } } + + enum IdManagerShards { + DefaultConfig("default:config"), + DefaultOper("default:oper"), + InventoryConfig("inventory:config"), + InventoryOper("inventory:oper"), + TopologyConfig("topology:config"), + TopologyOper("topology:oper"), + EntityOper("entity:oper"); + + private String shardName; + + IdManagerShards(String shardName) { + this.shardName = shardName; + } + + public static List getShardList() { + List list = new ArrayList<>(); + for (IdManagerShards val : IdManagerShards.values()) { + list.add(val.shardName); + } + return list; + } + } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/interfaces/ShardStatusMonitor.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/interfaces/ShardStatusMonitor.java new file mode 100644 index 000000000..8474289a4 --- /dev/null +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/interfaces/ShardStatusMonitor.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.genius.mdsalutil.interfaces; + +import java.util.List; + +public interface ShardStatusMonitor { + + String JMX_OBJECT_NAME_LIST_OF_CONFIG_SHARDS = + "org.opendaylight.controller:type=DistributedConfigDatastore," + + "Category=ShardManager,name=shard-manager-config"; + String JMX_OBJECT_NAME_LIST_OF_OPER_SHARDS = + "org.opendaylight.controller:type=DistributedOperationalDatastore," + + "Category=ShardManager,name=shard-manager-operational"; + + boolean getShardStatus(List shards); +} \ No newline at end of file diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/ShardStatusMonitorImpl.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/ShardStatusMonitorImpl.java new file mode 100644 index 000000000..55e327546 --- /dev/null +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/genius/mdsalutil/internal/ShardStatusMonitorImpl.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.genius.mdsalutil.internal; + +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import java.util.List; +import javax.inject.Inject; +import javax.inject.Singleton; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Singleton +public final class ShardStatusMonitorImpl implements ShardStatusMonitor { + + private static final Logger LOG = LoggerFactory.getLogger(ShardStatusMonitorImpl.class); + + @Inject + public ShardStatusMonitorImpl() { + // Do nothing + } + + public boolean getShardStatus(List shards) { + boolean status = true; + for (String shard : shards) { + String[] params = shard.split(":"); + if (!getDataStoreStatus(params[0], params[1]).equalsIgnoreCase("operational")) { + status = false; + break; + } + } + return status; + } + + @SuppressWarnings("IllegalCatch") + private static String getDataStoreStatus(String name, String type) { + boolean statusResult = true; + try { + ArrayList listOfShards; + if (type.equalsIgnoreCase("config")) { + listOfShards = getAttributeJMXCommand(JMX_OBJECT_NAME_LIST_OF_CONFIG_SHARDS, "LocalShards"); + } else { + listOfShards = getAttributeJMXCommand(JMX_OBJECT_NAME_LIST_OF_OPER_SHARDS, "LocalShards"); + } + if (listOfShards != null) { + for (int i = 0; i < listOfShards.size(); i++) { + if (listOfShards.get(i).toString().contains(name)) { + String jmxObjectShardStatus; + if (type.equalsIgnoreCase("config")) { + jmxObjectShardStatus = "org.opendaylight.controller:Category=Shards,name=" + + listOfShards.get(i) + ",type=DistributedConfigDatastore"; + } else { + jmxObjectShardStatus = "org.opendaylight.controller:Category=Shards,name=" + + listOfShards.get(i) + ",type=DistributedOperationalDatastore"; + } + LOG.info(jmxObjectShardStatus); + String leader = getLeaderJMX(jmxObjectShardStatus,"Leader"); + if (leader != null && leader.length() > 1) { + if (type.equalsIgnoreCase("config")) { + LOG.info("{} ::Config DS has the Leader as:: {}", listOfShards.get(i), leader); + } else { + LOG.info("{} ::Oper DS has the Leader as:: {}", listOfShards.get(i), leader); + } + } else { + statusResult = false; + } + } + } + } + } catch (Exception e) { + LOG.error("ERROR::", e); + statusResult = false; + } + if (statusResult) { + return "OPERATIONAL"; + } else { + return "ERROR"; + } + } + + @SuppressWarnings("IllegalCatch") + private static ArrayList getAttributeJMXCommand(String objectName, String attributeName) { + MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + ArrayList listOfShards = new ArrayList(); + if (mbs != null) { + try { + listOfShards = (ArrayList) mbs.getAttribute(new ObjectName(objectName), attributeName); + } catch (MalformedObjectNameException monEx) { + LOG.error("CRITICAL EXCEPTION : Malformed Object Name Exception"); + } catch (MBeanException mbEx) { + LOG.error("CRITICAL EXCEPTION : MBean Exception"); + } catch (InstanceNotFoundException infEx) { + LOG.error("CRITICAL EXCEPTION : Instance Not Found Exception"); + } catch (ReflectionException rEx) { + LOG.error("CRITICAL EXCEPTION : Reflection Exception"); + } catch (Exception e) { + LOG.error("Attribute not found"); + } + } + return listOfShards; + } + + @SuppressWarnings("IllegalCatch") + private static String getLeaderJMX(String objectName, String atrName) { + MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + String leader = ""; + if (mbs != null) { + try { + leader = (String) mbs.getAttribute(new ObjectName(objectName), atrName); + } catch (MalformedObjectNameException monEx) { + LOG.error("CRITICAL EXCEPTION : Malformed Object Name Exception"); + } catch (MBeanException mbEx) { + LOG.error("CRITICAL EXCEPTION : MBean Exception"); + } catch (InstanceNotFoundException infEx) { + LOG.error("CRITICAL EXCEPTION : Instance Not Found Exception"); + } catch (ReflectionException rEx) { + LOG.error("CRITICAL EXCEPTION : Reflection Exception"); + } catch (Exception e) { + LOG.error("Attribute not found"); + } + } + return leader; + } +} \ No newline at end of file diff --git a/mdsalutil/mdsalutil-impl/src/main/resources/OSGI-INF/blueprint/mdsalutil.xml b/mdsalutil/mdsalutil-impl/src/main/resources/OSGI-INF/blueprint/mdsalutil.xml index 89f2dad20..2842b7e19 100644 --- a/mdsalutil/mdsalutil-impl/src/main/resources/OSGI-INF/blueprint/mdsalutil.xml +++ b/mdsalutil/mdsalutil-impl/src/main/resources/OSGI-INF/blueprint/mdsalutil.xml @@ -18,5 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html + diff --git a/mdsalutil/mdsalutil-testutils/pom.xml b/mdsalutil/mdsalutil-testutils/pom.xml index fa950a00d..dc36263f0 100644 --- a/mdsalutil/mdsalutil-testutils/pom.xml +++ b/mdsalutil/mdsalutil-testutils/pom.xml @@ -97,7 +97,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html blueprint-maven-plugin-annotation true - + + org.mockito + mockito-core + compile + org.opendaylight.infrautils diff --git a/mdsalutil/mdsalutil-testutils/src/main/java/org/opendaylight/genius/mdsalutil/testutils/TestShardStatusMonitor.java b/mdsalutil/mdsalutil-testutils/src/main/java/org/opendaylight/genius/mdsalutil/testutils/TestShardStatusMonitor.java new file mode 100644 index 000000000..7db5c4163 --- /dev/null +++ b/mdsalutil/mdsalutil-testutils/src/main/java/org/opendaylight/genius/mdsalutil/testutils/TestShardStatusMonitor.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2019 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.genius.mdsalutil.testutils; + +import static org.opendaylight.yangtools.testutils.mockito.MoreAnswers.realOrException; + +import java.util.List; +import org.mockito.Mockito; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; + +public abstract class TestShardStatusMonitor implements ShardStatusMonitor { + + public static TestShardStatusMonitor newInstance() { + return Mockito.mock(TestShardStatusMonitor.class, realOrException()); + } + + @Override + public boolean getShardStatus(List shards) { + return true; + } +} \ No newline at end of file diff --git a/networkutils/networkutils/src/test/java/org/opendaylight/genius/networkutils/test/NetworkUtilTestModule.java b/networkutils/networkutils/src/test/java/org/opendaylight/genius/networkutils/test/NetworkUtilTestModule.java index c3ed6194b..61de7bd0e 100644 --- a/networkutils/networkutils/src/test/java/org/opendaylight/genius/networkutils/test/NetworkUtilTestModule.java +++ b/networkutils/networkutils/src/test/java/org/opendaylight/genius/networkutils/test/NetworkUtilTestModule.java @@ -12,6 +12,8 @@ import static org.mockito.Mockito.mock; import org.opendaylight.daexim.DataImportBootReady; import org.opendaylight.genius.idmanager.IdManager; import org.opendaylight.genius.lockmanager.impl.LockManagerServiceImpl; +import org.opendaylight.genius.mdsalutil.interfaces.ShardStatusMonitor; +import org.opendaylight.genius.mdsalutil.testutils.TestShardStatusMonitor; import org.opendaylight.genius.networkutils.RDUtils; import org.opendaylight.genius.networkutils.VniUtils; import org.opendaylight.genius.networkutils.impl.RDUtilsImpl; @@ -32,6 +34,7 @@ public class NetworkUtilTestModule extends AbstractGuiceJsr250Module { bind(DataBroker.class).toInstance(dataBroker); bind(NetworkConfig.class).toInstance(mock(NetworkConfig.class)); bind(IdManagerService.class).to(IdManager.class); + bind(ShardStatusMonitor.class).toInstance(TestShardStatusMonitor.newInstance()); bind(DataImportBootReady.class).toInstance(new DataImportBootReady() {}); bind(LockManagerService.class).to(LockManagerServiceImpl.class); bind(VniUtils.class).to(VniUtilsImpl.class);