From 0fe87738b2f6eb1da8431a86a91445990b6a96d3 Mon Sep 17 00:00:00 2001 From: Tulio Ribeiro <worm@tardell> Date: Mon, 28 Mar 2016 21:57:21 +0100 Subject: [PATCH] Now it is totally event driven. Hello guys, I have changed the logic of simple.FT (Fault Tolerant) module. The basic idea is, the FT module register on SyncManager to receive RPC events (connect and disconect nodes). In connect events, the controller send its switch list to storage and the other controllers can sync this info. In disconnect events, the controller is informed about which controller crashed and get switch list from storage and send a role request message to swicthes. Regards. --- .../core/internal/OFSwitchManager.java | 6 +- .../net/floodlightcontroller/simpleft/FT.java | 171 +++++------------- .../org/sdnplatform/sync/ISyncService.java | 12 +- .../sync/internal/SyncManager.java | 14 +- .../internal/remote/RemoteSyncManager.java | 9 +- .../sync/internal/rpc/IRPCListener.java | 19 ++ .../sync/internal/rpc/RPCService.java | 85 ++++++--- src/main/resources/logback-test.xml | 11 +- .../sync/test/MockSyncService.java | 17 +- 9 files changed, 172 insertions(+), 172 deletions(-) create mode 100644 src/main/java/org/sdnplatform/sync/internal/rpc/IRPCListener.java diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java index 1450bc316..789fe6868 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java +++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java @@ -92,7 +92,8 @@ import io.netty.util.concurrent.GlobalEventExecutor; * @author gregor, capveg, sovietaced * */ -public class OFSwitchManager implements IOFSwitchManager, INewOFConnectionListener, IHAListener, IFloodlightModule, IOFSwitchService, IStoreListener<DatapathId> { +public class OFSwitchManager implements IOFSwitchManager, INewOFConnectionListener, +IHAListener, IFloodlightModule, IOFSwitchService, IStoreListener<DatapathId> { private static final Logger log = LoggerFactory.getLogger(OFSwitchManager.class); private volatile OFControllerRole role; @@ -633,7 +634,8 @@ public class OFSwitchManager implements IOFSwitchManager, INewOFConnectionListen @Override public Collection<Class<? extends IFloodlightService>> getModuleDependencies() { - Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>(); + Collection<Class<? extends IFloodlightService>> l = + new ArrayList<Class<? extends IFloodlightService>>(); l.add(IFloodlightProviderService.class); l.add(IDebugEventService.class); diff --git a/src/main/java/net/floodlightcontroller/simpleft/FT.java b/src/main/java/net/floodlightcontroller/simpleft/FT.java index 1dd74659c..a0a65ba13 100644 --- a/src/main/java/net/floodlightcontroller/simpleft/FT.java +++ b/src/main/java/net/floodlightcontroller/simpleft/FT.java @@ -2,37 +2,23 @@ package net.floodlightcontroller.simpleft; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import net.floodlightcontroller.core.FloodlightContext; -import net.floodlightcontroller.core.IFloodlightProviderService; -import net.floodlightcontroller.core.IOFConnectionBackend; import net.floodlightcontroller.core.IOFMessageListener; import net.floodlightcontroller.core.IOFSwitch; import net.floodlightcontroller.core.IOFSwitchListener; import net.floodlightcontroller.core.PortChangeType; import net.floodlightcontroller.core.internal.FloodlightProvider; -import net.floodlightcontroller.core.internal.IOFConnectionListener; -import net.floodlightcontroller.core.internal.IOFSwitchManager; import net.floodlightcontroller.core.internal.IOFSwitchService; -import net.floodlightcontroller.core.internal.ISwitchDriverRegistry; import net.floodlightcontroller.core.module.FloodlightModuleContext; import net.floodlightcontroller.core.module.FloodlightModuleException; import net.floodlightcontroller.core.module.IFloodlightModule; -import net.floodlightcontroller.core.module.IFloodlightModuleContext; import net.floodlightcontroller.core.module.IFloodlightService; -import net.floodlightcontroller.core.util.SingletonTask; import net.floodlightcontroller.storage.IStorageSourceService; import net.floodlightcontroller.threadpool.IThreadPoolService; -import net.floodlightcontroller.threadpool.ThreadPool; -import net.floodlightcontroller.util.TimedCache; import org.projectfloodlight.openflow.protocol.OFControllerRole; import org.projectfloodlight.openflow.protocol.OFMessage; @@ -40,46 +26,32 @@ import org.projectfloodlight.openflow.protocol.OFPortDesc; import org.projectfloodlight.openflow.protocol.OFRoleReply; import org.projectfloodlight.openflow.protocol.OFType; import org.projectfloodlight.openflow.types.DatapathId; -import org.projectfloodlight.openflow.types.U64; import org.sdnplatform.sync.IStoreClient; import org.sdnplatform.sync.IStoreListener; import org.sdnplatform.sync.ISyncService; import org.sdnplatform.sync.ISyncService.Scope; import org.sdnplatform.sync.error.SyncException; -import org.sdnplatform.sync.internal.SyncManager; -import org.sdnplatform.sync.internal.config.ClusterConfig; -import org.sdnplatform.sync.internal.config.IClusterConfigProvider; -import org.sdnplatform.sync.internal.config.Node; +import org.sdnplatform.sync.internal.rpc.IRPCListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.util.concurrent.ListenableFuture; - public class FT implements IOFMessageListener, IFloodlightModule, IStoreListener<String>, -IOFSwitchListener +IOFSwitchListener, +IRPCListener { private ISyncService syncService; - private IStoreClient<String, String> storeClient; - //private IFloodlightProviderService floodlightProvider; + private IStoreClient<String, String> storeFT; protected static Logger logger = LoggerFactory.getLogger(FT.class); - - protected static IThreadPoolService threadPoolService; - protected static SingletonTask syncTestTask; - protected static SingletonTask heartBeatTask; - private final int HEARTBEAT = 3;//time to discover a crashed node protected static IOFSwitchService switchService; private static UtilDurable utilDurable; private String controllerId; - - private HashMap<Short, Integer> cluster; @Override public String getName() { @@ -102,18 +74,20 @@ IOFSwitchListener @Override public Collection<Class<? extends IFloodlightService>> getModuleServices() { // TODO Auto-generated method stub - Collection<Class<? extends IFloodlightService>> l = + /*Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>(); - return l; + return l;*/ + return null; } @Override public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() { // TODO Auto-generated method stub - Map<Class<? extends IFloodlightService>, IFloodlightService> m = + /*Map<Class<? extends IFloodlightService>, IFloodlightService> m = new HashMap<Class<? extends IFloodlightService>, IFloodlightService>(); - return m; + return m;*/ + return null; } @@ -136,14 +110,11 @@ IOFSwitchListener // TODO Auto-generated method stub this.syncService = context.getServiceImpl(ISyncService.class); - threadPoolService = context.getServiceImpl(IThreadPoolService.class); switchService = context.getServiceImpl(IOFSwitchService.class); - //floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class); utilDurable = new UtilDurable(); Map<String, String> configParams = context.getConfigParams(FloodlightProvider.class); controllerId = configParams.get("controllerId"); - cluster = new HashMap<>(); } @@ -151,89 +122,21 @@ IOFSwitchListener @Override public void startUp(FloodlightModuleContext context) throws FloodlightModuleException { - - /** - * ############################################################## - * FAULT TOLERANCE BEGIN - * ############################################################## - * - */ - Collection<Node> nodes = syncService.getClusterConfig().getNodes(); - Iterator<Node> it = nodes.iterator(); - while (it.hasNext()) { - Node node = it.next(); - if(!controllerId.equals(""+node.getNodeId())){ - cluster.put(node.getNodeId(), 0); - } - } - logger.debug("ClusterConfig: {}", cluster); - - ScheduledExecutorService ses = threadPoolService.getScheduledExecutor(); - heartBeatTask = new SingletonTask(ses, new Runnable() { - @Override - public void run() { - HashMap<Short, Integer> mapC = syncService.getConnections(); - Iterator<Short> it = cluster.keySet().iterator(); - while (it.hasNext()) { - Short nodeId = it.next(); - if(!mapC.containsKey(nodeId)){ - logger.debug("Crashed nodeId: {}. Role request to switches...", nodeId); - String swIds=null; - try { - swIds = storeClient.get(""+nodeId).getValue(); - logger.debug("Switches managed by nodeId:{}, {}", nodeId, swIds); - } catch (SyncException e) { - e.printStackTrace(); - } - - if(swIds!= null){ - String swId[] = swIds.split(","); - for (int i = 0; i < swId.length; i++) { - setSwitchRole(OFControllerRole.ROLE_MASTER, swId[i]); - } - } - } - } - heartBeatTask.reschedule(HEARTBEAT, TimeUnit.SECONDS); - } - }); - heartBeatTask.reschedule(10, TimeUnit.SECONDS); - - - /** - * ############################################################## - * UPDATE SWITCHES - * ############################################################## - */ + switchService.addOFSwitchListener(this); + syncService.addRPCListener(this); try { this.syncService.registerStore("FT_Switches", Scope.GLOBAL); - this.storeClient = this.syncService + this.storeFT = this.syncService .getStoreClient("FT_Switches", String.class, String.class); - this.storeClient.addStoreListener(this); + this.storeFT.addStoreListener(this); } catch (SyncException e) { throw new FloodlightModuleException("Error while setting up sync service", e); } - ses = threadPoolService.getScheduledExecutor(); - syncTestTask = new SingletonTask(ses, new Runnable() { - @Override - public void run() { - try { - storeClient.put(controllerId, getActiveSwitches()); - } catch (SyncException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - syncTestTask.reschedule(6, TimeUnit.SECONDS); - } - }); - syncTestTask.reschedule(6, TimeUnit.SECONDS); - - } @Override @@ -259,7 +162,7 @@ IOFSwitchListener type.name()} );*/ if(type.name().equals("REMOTE")){ - String swIds = storeClient.get(k).getValue(); + String swIds = storeFT.get(k).getValue(); logger.debug("REMOTE: key:{}, Value:{}", k, swIds); } } catch (SyncException e) { @@ -273,19 +176,13 @@ IOFSwitchListener @Override public void switchAdded(DatapathId switchId) { // TODO Auto-generated method stub - try { - this.storeClient.put(controllerId, getActiveSwitches()); - } catch (SyncException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } } @Override public void switchRemoved(DatapathId switchId) { // TODO Auto-generated method stub try { - this.storeClient.put(controllerId, getActiveSwitches()); + this.storeFT.put(controllerId, getActiveSwitches()); } catch (SyncException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -296,7 +193,7 @@ IOFSwitchListener public void switchActivated(DatapathId switchId) { // TODO Auto-generated method stub try { - this.storeClient.put(controllerId, getActiveSwitches()); + this.storeFT.put(controllerId, getActiveSwitches()); } catch (SyncException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -314,7 +211,7 @@ IOFSwitchListener public void switchChanged(DatapathId switchId) { // TODO Auto-generated method stub try { - this.storeClient.put(controllerId, getActiveSwitches()); + this.storeFT.put(controllerId, getActiveSwitches()); } catch (SyncException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -353,5 +250,37 @@ IOFSwitchListener else logger.info("Reply NULL!"); } + + @Override + public void disconnectedNode(Short nodeId) { + // TODO Auto-generated method stub + String swIds=null; + try { + swIds = storeFT.get(""+nodeId).getValue(); + logger.debug("Switches managed by nodeId:{}, Switches:{}", nodeId, swIds); + } catch (SyncException e) { + e.printStackTrace(); + } + + if(!swIds.equals("")){ + String swId[] = swIds.split(","); + for (int i = 0; i < swId.length; i++) { + setSwitchRole(OFControllerRole.ROLE_MASTER, swId[i]); + } + } + } + + @Override + public void connectedNode(Short nodeId) { + // TODO Auto-generated method stub + String activeSwicthes = getActiveSwitches(); + logger.debug("NodeID: {} connected, informing my switches: {}", nodeId, activeSwicthes); + try { + storeFT.put(controllerId, activeSwicthes); + } catch (SyncException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } diff --git a/src/main/java/org/sdnplatform/sync/ISyncService.java b/src/main/java/org/sdnplatform/sync/ISyncService.java index 5b3680ca6..58bf1dc10 100644 --- a/src/main/java/org/sdnplatform/sync/ISyncService.java +++ b/src/main/java/org/sdnplatform/sync/ISyncService.java @@ -5,6 +5,7 @@ import java.util.HashMap; import org.sdnplatform.sync.error.SyncException; import org.sdnplatform.sync.error.UnknownStoreException; import org.sdnplatform.sync.internal.config.ClusterConfig; +import org.sdnplatform.sync.internal.rpc.IRPCListener; import com.fasterxml.jackson.databind.JsonNode; @@ -140,8 +141,13 @@ public interface ISyncService extends IFloodlightService { - public ClusterConfig getClusterConfig(); - - public HashMap<Short, Integer> getConnections(); + + /** + * Listener to RPC connections, used in simple Fault tolerance module + * The listener is dispatched either connected or disconnected nodes + * @param listener + */ + public void addRPCListener(IRPCListener listener); + public void removeRPCListener(IRPCListener listener); } diff --git a/src/main/java/org/sdnplatform/sync/internal/SyncManager.java b/src/main/java/org/sdnplatform/sync/internal/SyncManager.java index b0692fab2..db8e575e8 100644 --- a/src/main/java/org/sdnplatform/sync/internal/SyncManager.java +++ b/src/main/java/org/sdnplatform/sync/internal/SyncManager.java @@ -41,6 +41,7 @@ import org.sdnplatform.sync.internal.config.Node; import org.sdnplatform.sync.internal.config.PropertyCCProvider; import org.sdnplatform.sync.internal.config.StorageCCProvider; import org.sdnplatform.sync.internal.config.SyncStoreCCProvider; +import org.sdnplatform.sync.internal.rpc.IRPCListener; import org.sdnplatform.sync.internal.rpc.RPCService; import org.sdnplatform.sync.internal.rpc.TProtocolUtil; import org.sdnplatform.sync.internal.store.IStorageEngine; @@ -74,6 +75,7 @@ import net.floodlightcontroller.threadpool.IThreadPoolService; * @see ISyncService */ public class SyncManager extends AbstractSyncManager { + protected static final Logger logger = LoggerFactory.getLogger(SyncManager.class.getName()); @@ -466,6 +468,7 @@ public class SyncManager extends AbstractSyncManager { debugCounter = context.getServiceImpl(IDebugCounterService.class); Map<String, String> config = context.getConfigParams(this); storeRegistry = new StoreRegistry(this, config.get("dbPath")); + //context.addService(IRPCService.class, this); String[] configProviders = {PropertyCCProvider.class.getName(), @@ -817,9 +820,16 @@ public class SyncManager extends AbstractSyncManager { } @Override - public HashMap<Short, Integer> getConnections() { + public void addRPCListener(IRPCListener listener) { + // TODO Auto-generated method stub + rpcService.addRPCListener(listener); + + } + + @Override + public void removeRPCListener(IRPCListener listener) { // TODO Auto-generated method stub - return rpcService.getConnections(); + rpcService.removeRPCListener(listener); } diff --git a/src/main/java/org/sdnplatform/sync/internal/remote/RemoteSyncManager.java b/src/main/java/org/sdnplatform/sync/internal/remote/RemoteSyncManager.java index 29f61db1e..fbe81c5b8 100644 --- a/src/main/java/org/sdnplatform/sync/internal/remote/RemoteSyncManager.java +++ b/src/main/java/org/sdnplatform/sync/internal/remote/RemoteSyncManager.java @@ -30,6 +30,7 @@ import org.sdnplatform.sync.error.UnknownStoreException; import org.sdnplatform.sync.internal.AbstractSyncManager; import org.sdnplatform.sync.internal.config.AuthScheme; import org.sdnplatform.sync.internal.config.ClusterConfig; +import org.sdnplatform.sync.internal.rpc.IRPCListener; import org.sdnplatform.sync.internal.rpc.RPCService; import org.sdnplatform.sync.internal.rpc.TProtocolUtil; import org.sdnplatform.sync.internal.store.IStore; @@ -375,14 +376,14 @@ public class RemoteSyncManager extends AbstractSyncManager { @Override - public ClusterConfig getClusterConfig() { + public void addRPCListener(IRPCListener listener) { // TODO Auto-generated method stub - return null; + } @Override - public HashMap<Short, Integer> getConnections() { + public void removeRPCListener(IRPCListener listener) { // TODO Auto-generated method stub - return null; + } } diff --git a/src/main/java/org/sdnplatform/sync/internal/rpc/IRPCListener.java b/src/main/java/org/sdnplatform/sync/internal/rpc/IRPCListener.java new file mode 100644 index 000000000..aaa4e4e8a --- /dev/null +++ b/src/main/java/org/sdnplatform/sync/internal/rpc/IRPCListener.java @@ -0,0 +1,19 @@ +/** + * Tulio Alberton Ribeiro + * Without warrant + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +package org.sdnplatform.sync.internal.rpc; + +public interface IRPCListener { + + public void disconnectedNode(Short nodeId); + + public void connectedNode(Short nodeId); +} diff --git a/src/main/java/org/sdnplatform/sync/internal/rpc/RPCService.java b/src/main/java/org/sdnplatform/sync/internal/rpc/RPCService.java index 2835e2135..824d1717f 100644 --- a/src/main/java/org/sdnplatform/sync/internal/rpc/RPCService.java +++ b/src/main/java/org/sdnplatform/sync/internal/rpc/RPCService.java @@ -1,14 +1,30 @@ package org.sdnplatform.sync.internal.rpc; +import io.netty.bootstrap.Bootstrap; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.group.ChannelGroup; +import io.netty.channel.group.DefaultChannelGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.util.Timer; +import io.netty.util.concurrent.GlobalEventExecutor; + import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.EnumSet; import java.util.HashMap; -import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; @@ -16,30 +32,15 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.LinkedTransferQueue; import net.floodlightcontroller.core.util.SingletonTask; import net.floodlightcontroller.debugcounter.IDebugCounterService; -import io.netty.bootstrap.Bootstrap; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.Channel; -import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelFutureListener; -import io.netty.channel.ChannelOption; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.group.ChannelGroup; -import io.netty.channel.group.DefaultChannelGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.util.Timer; -import io.netty.util.concurrent.GlobalEventExecutor; import org.sdnplatform.sync.internal.SyncManager; import org.sdnplatform.sync.internal.config.Node; import org.sdnplatform.sync.internal.util.Pair; -import org.sdnplatform.sync.thrift.SyncMessage; import org.sdnplatform.sync.thrift.MessageType; +import org.sdnplatform.sync.thrift.SyncMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,7 +48,7 @@ import org.slf4j.LoggerFactory; * A lightweight RPC mechanism built on netty. * @author readams */ -public class RPCService { +public class RPCService{ protected static final Logger logger = LoggerFactory.getLogger(RPCService.class); @@ -56,6 +57,11 @@ public class RPCService { */ protected SyncManager syncManager; + /** + *Tulio Ribeiro + */ + protected Set<IRPCListener> rpcListeners; + /** * Debug counter service */ @@ -174,6 +180,7 @@ public class RPCService { this.syncManager = syncManager; this.debugCounter = debugCounter; this.timer = timer; + this.rpcListeners = new CopyOnWriteArraySet<IRPCListener>(); messageWindows = new ConcurrentHashMap<Short, MessageWindow>(); } @@ -301,6 +308,16 @@ public class RPCService { nc.nuke(); } connections.remove(nodeId); + + /** + * Tulio Ribeiro + * Inform all registered modules about disconnected node + */ + if (rpcListeners != null) { + for (IRPCListener listener : rpcListeners) { + listener.disconnectedNode(nodeId); + } + } } } @@ -504,6 +521,16 @@ public class RPCService { } c.nodeChannel = channel; c.state = NodeConnectionState.CONNECTED; + + /** + * Tulio Ribeiro + * Inform all registered modules about connected node + */ + if (rpcListeners != null) { + for (IRPCListener listener : rpcListeners) { + listener.connectedNode(nodeId); + } + } } } @@ -678,16 +705,14 @@ public class RPCService { } - public HashMap<Short, Integer> getConnections(){ - HashMap<Short, Integer> r = new HashMap<>(); - - Iterator<Short> it = connections.keySet().iterator(); - while (it.hasNext()) { - Short nodeId = it.next(); - r.put(nodeId, 0);// 0 it it for heartbeat count - } - return r; - } - - + //@Override + public void addRPCListener(IRPCListener listener) { + this.rpcListeners.add(listener); + } + + //@Override + public void removeRPCListener(IRPCListener listener) { + this.rpcListeners.remove(listener); + } + } \ No newline at end of file diff --git a/src/main/resources/logback-test.xml b/src/main/resources/logback-test.xml index d0ad9e999..06bd3fee6 100644 --- a/src/main/resources/logback-test.xml +++ b/src/main/resources/logback-test.xml @@ -10,15 +10,14 @@ <appender-ref ref="STDOUT" /> <appender-ref ref="EV_WARN_ERR" /> </root> - <logger name="org" level="WARN"/> + <logger name="org" level="INFO"/> <logger name="io" level="INFO"></logger> <!-- Netty logging --> <logger name="LogService" level="DEBUG"></logger> <!-- Restlet access logging --> <logger name="net.floodlightcontroller" level="INFO"/> <logger name="org.sdnplatform" level="INFO"></logger> - <logger name="org.sdnplatform.sync.internal.config.SyncStoreCCProvider" level="TRACE"></logger> - <logger name="org.sdnplatform.sync.internal.SyncManager" level="TRACE"></logger> - <logger name="org.sdnplatform.sync.internal.config.StorageCCProvider" level="TRACE"></logger> - <logger name="org.sdnplatform.sync.internal.config.PropertyCCProvider" level="TRACE"></logger> + <logger name="org.sdnplatform.sync.internal.SyncManager" level="INFO"></logger> + <logger name="org.sdnplatform.sync.internal.config.StorageCCProvider" level="INFO"></logger> + <logger name="org.sdnplatform.sync.internal.config.PropertyCCProvider" level="INFO"></logger> <logger name="org.sdnplatform.sync.internal.rpc.RPCService" level="INFO"></logger> <logger name="net.floodlightcontroller.devicemanager" level="INFO"></logger> <logger name="net.floodlightcontroller.linkdiscovery" level="INFO"></logger> @@ -30,4 +29,6 @@ <logger name="net.floodlightcontroller.core.internal.OFSwitchManager" level="INFO"></logger> <logger name="net.floodlightcontroller.core.internal.OFSwitchHandshakeHandler" level="INFO"></logger> <logger name="net.floodlightcontroller.core.internal.OFChannelHandler" level="INFO"></logger> + <logger name="net.floodlightcontroller.core.internal.OFSwitchManager" level="INFO"></logger> + </configuration> diff --git a/src/test/java/org/sdnplatform/sync/test/MockSyncService.java b/src/test/java/org/sdnplatform/sync/test/MockSyncService.java index 4b9fca81d..325892b77 100644 --- a/src/test/java/org/sdnplatform/sync/test/MockSyncService.java +++ b/src/test/java/org/sdnplatform/sync/test/MockSyncService.java @@ -8,6 +8,7 @@ import org.sdnplatform.sync.error.SyncException; import org.sdnplatform.sync.error.UnknownStoreException; import org.sdnplatform.sync.internal.AbstractSyncManager; import org.sdnplatform.sync.internal.config.ClusterConfig; +import org.sdnplatform.sync.internal.rpc.IRPCListener; import org.sdnplatform.sync.internal.store.IStorageEngine; import org.sdnplatform.sync.internal.store.IStore; import org.sdnplatform.sync.internal.store.InMemoryStorageEngine; @@ -121,15 +122,21 @@ public class MockSyncService extends AbstractSyncManager { localStores = new HashMap<String, ListenerStorageEngine>(); } + + /** + * Tulio Ribeiro + */ @Override - public ClusterConfig getClusterConfig() { + public void addRPCListener(IRPCListener listener) { // TODO Auto-generated method stub - return null; + } - + /** + * Tulio Ribeiro + */ @Override - public HashMap<Short, Integer> getConnections() { + public void removeRPCListener(IRPCListener listener) { // TODO Auto-generated method stub - return null; + } } -- GitLab