diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchManager.java index 1450bc3160f5e6bfe77bf689f7ff60db489ca54e..789fe686876da4a06992be22073e9b2d373608b6 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 1dd74659cdddfc5c407df995d483ceebbde5dda8..a0a65ba13f0759ca8bb497d404b16c79c9baadcd 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 5b3680ca61f00fabe5a8972e45a7abb9112b20a9..58bf1dc10a11b0d376a1534c38b754d6576c57ba 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 b0692fab2fbef9550a86d96fd5631f9814c55fc3..db8e575e8bbe462eb5282bbe68705f0dadaca42a 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 29f61db1e09afe68891709cc9de7c50156d9bbe3..fbe81c5b81ecd970a60ca6817f36417b9205d5b7 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 0000000000000000000000000000000000000000..aaa4e4e8a88fe3b4215e42c819c596b89878e24f --- /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 2835e21355c81d9abe7f2defc623c59226a8e13b..824d1717f14869d8f9014d73eb71b49b240f35f7 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 d0ad9e999eab9315211473a9d464a4accb2d9d1a..06bd3fee69be08d1a120a74da7860b3740941209 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 4b9fca81dfaf0785a331cc6293f274aeacd6528a..325892b772fe75dfb8c2aa3aa4bbedfd20430070 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; + } }