Removed Floodlight's hot-standby HA framework
diff --git a/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java b/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java
index 93ba58e..436af3d 100644
--- a/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java
+++ b/src/main/java/net/floodlightcontroller/core/IFloodlightProviderService.java
@@ -83,11 +83,6 @@
public Map<Long, IOFSwitch> getSwitches();
/**
- * Get the current role of the controller
- */
- public Role getRole();
-
- /**
* Get the current mapping of controller IDs to their IP addresses
* Returns a copy of the current mapping.
* @see IHAListener
@@ -100,11 +95,6 @@
public String getControllerId();
/**
- * Set the role of the controller
- */
- public void setRole(Role role);
-
- /**
* Add a switch listener
* @param listener The module that wants to listen for events
*/
@@ -117,18 +107,6 @@
public void removeOFSwitchListener(IOFSwitchListener listener);
/**
- * Adds a listener for HA role events
- * @param listener The module that wants to listen for events
- */
- public void addHAListener(IHAListener listener);
-
- /**
- * Removes a listener for HA role events
- * @param listener The module that no longer wants to listen for events
- */
- public void removeHAListener(IHAListener listener);
-
- /**
* Terminate the process
*/
public void terminate();
diff --git a/src/main/java/net/floodlightcontroller/core/IHAListener.java b/src/main/java/net/floodlightcontroller/core/IHAListener.java
deleted file mode 100644
index c76f46a..0000000
--- a/src/main/java/net/floodlightcontroller/core/IHAListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.floodlightcontroller.core;
-
-import java.util.Map;
-
-import net.floodlightcontroller.core.IFloodlightProviderService.Role;
-
-public interface IHAListener {
- /**
- * Gets called when the controller changes role (i.e. Master -> Slave).
- * Note that oldRole CAN be null.
- * @param oldRole The controller's old role
- * @param newRole The controller's new role
- */
- public void roleChanged(Role oldRole, Role newRole);
-
- /**
- * Gets called when the IP addresses of the controller nodes in the
- * controller cluster change. All parameters map controller ID to
- * the controller's IP.
- *
- * @param curControllerNodeIPs The current mapping of controller IDs to IP
- * @param addedControllerNodeIPs These IPs were added since the last update
- * @param removedControllerNodeIPs These IPs were removed since the last update
- */
- public void controllerNodeIPsChanged(
- Map<String, String> curControllerNodeIPs,
- Map<String, String> addedControllerNodeIPs,
- Map<String, String> removedControllerNodeIPs
- );
-}
diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 485cba7..38cd5d0 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -46,7 +46,6 @@
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IHAListener;
import net.floodlightcontroller.core.IListener.Command;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
@@ -162,7 +161,6 @@
protected HashMap<String, String> controllerNodeIPsCache;
protected Set<IOFSwitchListener> switchListeners;
- protected Set<IHAListener> haListeners;
protected BlockingQueue<IUpdate> updates;
// Module dependencies
@@ -257,71 +255,6 @@
}
}
- /**
- * Update message indicating controller's role has changed
- */
- protected class HARoleUpdate implements IUpdate {
- public Role oldRole;
- public Role newRole;
- public HARoleUpdate(Role newRole, Role oldRole) {
- this.oldRole = oldRole;
- this.newRole = newRole;
- }
- public void dispatch() {
- // Make sure that old and new roles are different.
- if (oldRole == newRole) {
- if (log.isTraceEnabled()) {
- log.trace("HA role update ignored as the old and " +
- "new roles are the same. newRole = {}" +
- "oldRole = {}", newRole, oldRole);
- }
- return;
- }
- if (log.isTraceEnabled()) {
- log.trace("Dispatching HA Role update newRole = {}, oldRole = {}",
- newRole, oldRole);
- }
- if (haListeners != null) {
- for (IHAListener listener : haListeners) {
- listener.roleChanged(oldRole, newRole);
- }
- }
- }
- }
-
- /**
- * Update message indicating
- * IPs of controllers in controller cluster have changed.
- */
- protected class HAControllerNodeIPUpdate implements IUpdate {
- public Map<String,String> curControllerNodeIPs;
- public Map<String,String> addedControllerNodeIPs;
- public Map<String,String> removedControllerNodeIPs;
- public HAControllerNodeIPUpdate(
- HashMap<String,String> curControllerNodeIPs,
- HashMap<String,String> addedControllerNodeIPs,
- HashMap<String,String> removedControllerNodeIPs) {
- this.curControllerNodeIPs = curControllerNodeIPs;
- this.addedControllerNodeIPs = addedControllerNodeIPs;
- this.removedControllerNodeIPs = removedControllerNodeIPs;
- }
- public void dispatch() {
- if (log.isTraceEnabled()) {
- log.trace("Dispatching HA Controller Node IP update "
- + "curIPs = {}, addedIPs = {}, removedIPs = {}",
- new Object[] { curControllerNodeIPs, addedControllerNodeIPs,
- removedControllerNodeIPs }
- );
- }
- if (haListeners != null) {
- for (IHAListener listener: haListeners) {
- listener.controllerNodeIPsChanged(curControllerNodeIPs,
- addedControllerNodeIPs, removedControllerNodeIPs);
- }
- }
- }
- }
-
// ***************
// Getters/Setters
// ***************
@@ -347,47 +280,6 @@
public void setLinkDiscoveryService(ILinkDiscoveryService linkDiscovery) {
this.linkDiscovery = linkDiscovery;
}
-
- @Override
- public Role getRole() {
- synchronized(roleChanger) {
- return role;
- }
- }
-
- @Override
- public void setRole(Role role) {
- if (role == null) throw new NullPointerException("Role can not be null.");
- //if (role == Role.MASTER && this.role == Role.SLAVE) {
- // Reset db state to Inactive for all switches.
- //updateAllInactiveSwitchInfo();
- //}
-
- // Need to synchronize to ensure a reliable ordering on role request
- // messages send and to ensure the list of connected switches is stable
- // RoleChanger will handle the actual sending of the message and
- // timeout handling
- // @see RoleChanger
- synchronized(roleChanger) {
- if (role.equals(this.role)) {
- log.debug("Ignoring role change: role is already {}", role);
- return;
- }
-
- Role oldRole = this.role;
- this.role = role;
-
- log.debug("Submitting role change request to role {}", role);
- roleChanger.submitRequest(connectedSwitches, role);
-
- // Enqueue an update for our listeners.
- try {
- this.updates.put(new HARoleUpdate(role, oldRole));
- } catch (InterruptedException e) {
- log.error("Failure adding update to queue", e);
- }
- }
- }
public void publishUpdate(IUpdate update) {
try {
@@ -1918,7 +1810,6 @@
ListenerDispatcher<OFType,
IOFMessageListener>>();
this.switchListeners = new CopyOnWriteArraySet<IOFSwitchListener>();
- this.haListeners = new CopyOnWriteArraySet<IHAListener>();
this.activeSwitches = new ConcurrentHashMap<Long, IOFSwitch>();
this.connectedSwitches = new HashSet<OFSwitchImpl>();
this.controllerNodeIPsCache = new HashMap<String, String>();
@@ -1950,16 +1841,6 @@
// Add our REST API
restApi.addRestletRoutable(new CoreWebRoutable());
}
-
- @Override
- public void addHAListener(IHAListener listener) {
- this.haListeners.add(listener);
- }
-
- @Override
- public void removeHAListener(IHAListener listener) {
- this.haListeners.remove(listener);
- }
@Override
public Map<String, String> getControllerNodeIPs() {
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
index 1a52418..752675a 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
@@ -36,8 +36,8 @@
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IFloodlightProviderService.Role;
+import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.annotations.LogMessageDoc;
import net.floodlightcontroller.core.annotations.LogMessageDocs;
@@ -57,12 +57,12 @@
import org.openflow.protocol.OFMatch;
import org.openflow.protocol.OFMessage;
import org.openflow.protocol.OFPhysicalPort;
-import org.openflow.protocol.OFPort;
-import org.openflow.protocol.OFType;
-import org.openflow.protocol.OFVendor;
import org.openflow.protocol.OFPhysicalPort.OFPortConfig;
import org.openflow.protocol.OFPhysicalPort.OFPortState;
+import org.openflow.protocol.OFPort;
import org.openflow.protocol.OFStatisticsRequest;
+import org.openflow.protocol.OFType;
+import org.openflow.protocol.OFVendor;
import org.openflow.protocol.statistics.OFDescriptionStatistics;
import org.openflow.protocol.statistics.OFStatistics;
import org.openflow.util.HexString;
diff --git a/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java b/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java
deleted file mode 100644
index 2ed87cb..0000000
--- a/src/main/java/net/floodlightcontroller/core/web/ControllerRoleResource.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.floodlightcontroller.core.web;
-
-import org.restlet.data.Status;
-import org.restlet.resource.ServerResource;
-
-import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IFloodlightProviderService.Role;
-import net.floodlightcontroller.core.annotations.LogMessageDoc;
-
-import org.restlet.resource.Get;
-import org.restlet.resource.Post;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ControllerRoleResource extends ServerResource {
-
- protected final static Logger log = LoggerFactory.getLogger(ControllerRoleResource.class);
-
- @Get("json")
- public RoleInfo getRole() {
- IFloodlightProviderService floodlightProvider =
- (IFloodlightProviderService)getContext().getAttributes().
- get(IFloodlightProviderService.class.getCanonicalName());
- return new RoleInfo(floodlightProvider.getRole());
- }
-
- @Post("json")
- @LogMessageDoc(level="WARN",
- message="Invalid role value specified in REST API to " +
- "set controller role",
- explanation="An HA role change request was malformed.",
- recommendation=LogMessageDoc.CHECK_CONTROLLER)
- public void setRole(RoleInfo roleInfo) {
- //Role role = Role.lookupRole(roleInfo.getRole());
- Role role = null;
- try {
- role = Role.valueOf(roleInfo.getRole().toUpperCase());
- }
- catch (IllegalArgumentException e) {
- // The role value in the REST call didn't match a valid
- // role name, so just leave the role as null and handle
- // the error below.
- }
- if (role == null) {
- log.warn ("Invalid role value specified in REST API to " +
- "set controller role");
- setStatus(Status.CLIENT_ERROR_BAD_REQUEST, "Invalid role value");
- return;
- }
-
- IFloodlightProviderService floodlightProvider =
- (IFloodlightProviderService)getContext().getAttributes().
- get(IFloodlightProviderService.class.getCanonicalName());
-
- floodlightProvider.setRole(role);
- }
-}
diff --git a/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java b/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java
index 7339d6c..00127a6 100644
--- a/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java
+++ b/src/main/java/net/floodlightcontroller/core/web/CoreWebRoutable.java
@@ -58,7 +58,6 @@
EventHistoryTopologyLinkResource.class);
router.attach("/event-history/topology-cluster/{count}/json",
EventHistoryTopologyClusterResource.class);
- router.attach("/role/json", ControllerRoleResource.class);
router.attach("/health/json", HealthCheckResource.class);
router.attach("/system/uptime/json", SystemUptimeResource.class);
// Following added by ONOS
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index 0eac66b..9956a29 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -38,8 +38,6 @@
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IFloodlightProviderService.Role;
-import net.floodlightcontroller.core.IHAListener;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.IUpdate;
@@ -82,8 +80,7 @@
*/
public class DeviceManagerImpl implements
IDeviceService, IOFMessageListener, ITopologyListener,
-IFloodlightModule, IEntityClassListener,
-IHAListener {
+IFloodlightModule, IEntityClassListener {
protected final static Logger logger =
LoggerFactory.getLogger(DeviceManagerImpl.class);
@@ -647,7 +644,6 @@
apComparator = new AttachmentPointComparator();
floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
- floodlightProvider.addHAListener(this);
if (topology != null)
topology.addListener(this);
entityClassifier.addListener(this);
@@ -672,30 +668,6 @@
}
}
- // ***************
- // IHAListener
- // ***************
-
- @Override
- public void roleChanged(Role oldRole, Role newRole) {
- switch(newRole) {
- case SLAVE:
- logger.debug("Resetting device state because of role change");
- startUp(null);
- break;
- default:
- break;
- }
- }
-
- @Override
- public void controllerNodeIPsChanged(
- Map<String, String> curControllerNodeIPs,
- Map<String, String> addedControllerNodeIPs,
- Map<String, String> removedControllerNodeIPs) {
- // no-op
- }
-
// ****************
// Internal methods
// ****************
diff --git a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
index 3e624e7..5b98593 100644
--- a/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
+++ b/src/main/java/net/floodlightcontroller/topology/TopologyManager.java
@@ -16,10 +16,8 @@
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IFloodlightProviderService.Role;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
-import net.floodlightcontroller.core.IHAListener;
import net.floodlightcontroller.core.annotations.LogMessageCategory;
import net.floodlightcontroller.core.annotations.LogMessageDoc;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
@@ -44,9 +42,9 @@
import org.openflow.protocol.OFPacketIn;
import org.openflow.protocol.OFPacketOut;
import org.openflow.protocol.OFPort;
+import org.openflow.protocol.OFType;
import org.openflow.protocol.action.OFAction;
import org.openflow.protocol.action.OFActionOutput;
-import org.openflow.protocol.OFType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,7 +57,7 @@
public class TopologyManager implements
IFloodlightModule, ITopologyService,
IRoutingService, ILinkDiscoveryListener,
- IOFMessageListener, IHAListener {
+ IOFMessageListener {
protected final static Logger log = LoggerFactory.getLogger(TopologyManager.class);
@@ -564,38 +562,6 @@
return Command.CONTINUE;
}
- // ***************
- // IHAListener
- // ***************
-
- @Override
- public void roleChanged(Role oldRole, Role newRole) {
- switch(newRole) {
- case MASTER:
- if (oldRole == Role.SLAVE) {
- log.debug("Re-computing topology due " +
- "to HA change from SLAVE->MASTER");
- newInstanceTask.reschedule(1, TimeUnit.MILLISECONDS);
- }
- break;
- case SLAVE:
- log.debug("Clearing topology due to " +
- "HA change to SLAVE");
- clearCurrentTopology();
- break;
- default:
- break;
- }
- }
-
- @Override
- public void controllerNodeIPsChanged(
- Map<String, String> curControllerNodeIPs,
- Map<String, String> addedControllerNodeIPs,
- Map<String, String> removedControllerNodeIPs) {
- // no-op
- }
-
// *****************
// IFloodlightModule
// *****************
@@ -661,7 +627,6 @@
newInstanceTask = new SingletonTask(ses, new UpdateTopologyWorker());
linkDiscovery.addListener(this);
floodlightProvider.addOFMessageListener(OFType.PACKET_IN, this);
- floodlightProvider.addHAListener(this);
addRestletRoutable();
}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index 7b80095..8077201 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -40,8 +40,6 @@
import net.floodlightcontroller.core.FloodlightContext;
import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IFloodlightProviderService.Role;
-import net.floodlightcontroller.core.IHAListener;
import net.floodlightcontroller.core.IOFMessageListener;
import net.floodlightcontroller.core.IOFSwitch;
import net.floodlightcontroller.core.IOFSwitchListener;
@@ -115,8 +113,7 @@
@LogMessageCategory("Network Topology")
public class LinkDiscoveryManager
implements IOFMessageListener, IOFSwitchListener,
-ILinkDiscoveryService,
-IFloodlightModule, IHAListener {
+ILinkDiscoveryService, IFloodlightModule {
protected IFloodlightProviderService controller;
protected final static Logger log = LoggerFactory.getLogger(LinkDiscoveryManager.class);
@@ -1683,28 +1680,18 @@
log.error("Exception in LLDP send timer.", e);
} finally {
if (!shuttingDown) {
- // null role implies HA mode is not enabled.
- Role role = floodlightProvider.getRole();
- if (role == null || role == Role.MASTER) {
- log.trace("Rescheduling discovery task as role = {}", role);
- discoveryTask.reschedule(DISCOVERY_TASK_INTERVAL,
- TimeUnit.SECONDS);
- } else {
- log.trace("Stopped LLDP rescheduling due to role = {}.", role);
- }
+ // Always reschedule link discovery if we're not
+ // shutting down (no chance of SLAVE role now)
+ log.trace("Rescheduling discovery task");
+ discoveryTask.reschedule(DISCOVERY_TASK_INTERVAL,
+ TimeUnit.SECONDS);
}
}
}
});
- // null role implies HA mode is not enabled.
- Role role = floodlightProvider.getRole();
- if (role == null || role == Role.MASTER) {
- log.trace("Setup: Rescheduling discovery task. role = {}", role);
- discoveryTask.reschedule(DISCOVERY_TASK_INTERVAL, TimeUnit.SECONDS);
- } else {
- log.trace("Setup: Not scheduling LLDP as role = {}.", role);
- }
+ // Always reschedule link discovery as we are never in SLAVE role now
+ discoveryTask.reschedule(DISCOVERY_TASK_INTERVAL, TimeUnit.SECONDS);
// Setup the BDDP task. It is invoked whenever switch port tuples
// are added to the quarantine list.
@@ -1717,7 +1704,6 @@
floodlightProvider.addOFMessageListener(OFType.PORT_STATUS, this);
// Register for switch updates
floodlightProvider.addOFSwitchListener(this);
- floodlightProvider.addHAListener(this);
if (restApi != null)
restApi.addRestletRoutable(new LinkDiscoveryWebRoutable());
setControllerTLV();
@@ -1802,45 +1788,6 @@
evTopoCluster = evHistTopologyCluster.put(evTopoCluster, action);
}
- // IHARoleListener
- @Override
- public void roleChanged(Role oldRole, Role newRole) {
- switch(newRole) {
- case MASTER:
- if (oldRole == Role.SLAVE) {
- if (log.isTraceEnabled()) {
- log.trace("Sending LLDPs " +
- "to HA change from SLAVE->MASTER");
- }
- //clearAllLinks();
- log.debug("Role Change to Master: Rescheduling discovery task.");
- discoveryTask.reschedule(1, TimeUnit.MICROSECONDS);
- }
- break;
- case SLAVE:
- if (log.isTraceEnabled()) {
- log.trace("Clearing links due to " +
- "HA change to SLAVE");
- }
- switchLinks.clear();
- links.clear();
- portLinks.clear();
- portBroadcastDomainLinks.clear();
- discoverOnAllPorts();
- break;
- default:
- break;
- }
- }
-
- @Override
- public void controllerNodeIPsChanged(
- Map<String, String> curControllerNodeIPs,
- Map<String, String> addedControllerNodeIPs,
- Map<String, String> removedControllerNodeIPs) {
- // ignore
- }
-
public boolean isAutoPortFastFeature() {
return autoPortFastFeature;
}