Refactor ForwardingRulesmanager 18/518/4
authorAlessandro Boch <aboch@cisco.com>
Fri, 21 Jun 2013 17:09:11 +0000 (10:09 -0700)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 27 Jun 2013 19:30:29 +0000 (19:30 +0000)
commit432ddf481f3bb6c297b1353f76a797fc9ef0e454
tree0de9fb6a03f42aab85fa95b27cb39b9a26f18cde
parente2ac8294fb64f05cc6bef9c01c27ba8439fe0e3a
Refactor ForwardingRulesmanager

- Refactor flow entries database in order to remove synchronized methods which hit performance and
  to better accomodate cluster cache syncing:
  - Installed entries as a flat concurrent map of FlowInstallEntry key/elements
  - Modified FlowEntry hashCode function to take into account only the flow parameters which uniquely identify
    a flow entry: node, match and priority. Modified FlowEntryInstall hashCode function to only account install
    FlowEntry hash code.
  - Added a per node and per group index databases for efficiently access node or group flow entries in the flat map
  - Fixed bugs in MatchField hashcode (did not account MAC addresses), added Junit test for hashcode in Match,
    FlowEntry and FlowEntryInstall
- Have flow entries parameter classes implement Serializable so that FRM flow DB is synced across cluster cntroller nodes
- Added api to remove all flows part of a group, uninstallFlowEntryGroup()
- Added a event handler thread in FRM so that FRM does not hog switch handler thread on southbound events processing
- Changed the installation of startup configured static flows from synchronous to asynchronous flow install
- Modified FlowConfig.isValid() to return a status object, changed test code accordingly
- Fixed issue where internal generated static flows (the ones for proactive forwarding switches) were getting removed on container creation
- Fixed Flows GUI which was not showing static flow state correctly
- Minor coding style changes
- Changes tested with 2K static flows on two software switches with a custer of two controllers

Change-Id: Ic4c0167094988c0ebd44763e45541fe728d95ead
Signed-off-by: Alessandro Boch <aboch@cisco.com>
46 files changed:
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntry.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntryInstall.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/IForwardingRulesManager.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/IForwardingRulesManagerAware.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/PortGroup.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/PortGroupChangeListener.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/PortGroupConfig.java
opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/PortGroupProvider.java
opendaylight/forwardingrulesmanager/api/src/test/java/org/opendaylight/controller/forwardingrulesmanager/frmTest.java
opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/Activator.java
opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManagerImpl.java
opendaylight/forwardingrulesmanager/integrationtest/src/test/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManagerIT.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Action.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/ActionType.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Controller.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Drop.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Flood.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/FloodAll.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/HwPath.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Loopback.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/Output.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/PopVlan.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/PushVlan.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetDlDst.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetDlSrc.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetDlType.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetNextHop.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetNwDst.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetNwSrc.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetNwTos.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetTpDst.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetTpSrc.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetVlanCfi.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetVlanId.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SetVlanPcp.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/action/SwPath.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/flowprogrammer/Flow.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/flowprogrammer/IFlowProgrammerListener.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/Match.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchField.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchType.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/reader/FlowOnNode.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/match/MatchTest.java
opendaylight/web/flows/src/main/resources/js/page.js