From f9da5db0ff14879e47a6d83244ba63d45b4d432d Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Tue, 8 Dec 2015 11:32:02 -0800 Subject: onos-1.4.0-rc1 tag Change-Id: I7f6b85bbf2574b9e174ad919ff36acde28ca50a1 Signed-off-by: Ashlee Young --- build.sh | 11 +- framework/src/onos/apps/aaa/pom.xml | 2 +- framework/src/onos/apps/acl/pom.xml | 4 +- framework/src/onos/apps/bgprouter/pom.xml | 2 +- framework/src/onos/apps/cip/pom.xml | 2 +- framework/src/onos/apps/cordfabric/pom.xml | 2 +- framework/src/onos/apps/cordvtn/pom.xml | 2 +- framework/src/onos/apps/cpman/pom.xml | 4 +- framework/src/onos/apps/demo/cord-gui/pom.xml | 2 +- .../onos/apps/demo/cord-gui/src/scripts/pullwar.sh | 2 +- .../src/onos/apps/demo/cord-gui/src/scripts/run.me | 2 +- framework/src/onos/apps/dhcp/api/pom.xml | 2 +- framework/src/onos/apps/dhcp/app/pom.xml | 2 +- framework/src/onos/apps/dhcp/pom.xml | 2 +- .../src/onos/apps/faultmanagement/app/pom.xml | 2 +- .../src/onos/apps/faultmanagement/fmmgr/pom.xml | 2 +- .../src/onos/apps/faultmanagement/fmweb/pom.xml | 2 +- framework/src/onos/apps/faultmanagement/pom.xml | 2 +- framework/src/onos/apps/flowanalyzer/pom.xml | 2 +- framework/src/onos/apps/fwd/pom.xml | 2 +- framework/src/onos/apps/igmp/pom.xml | 2 +- framework/src/onos/apps/iptopology-api/pom.xml | 2 +- framework/src/onos/apps/metrics/pom.xml | 2 +- framework/src/onos/apps/mfwd/pom.xml | 2 +- framework/src/onos/apps/mlb/pom.xml | 2 +- framework/src/onos/apps/mobility/pom.xml | 2 +- framework/src/onos/apps/olt/pom.xml | 2 +- .../src/onos/apps/openstackswitching/api/pom.xml | 2 +- .../src/onos/apps/openstackswitching/app/pom.xml | 2 +- framework/src/onos/apps/openstackswitching/pom.xml | 2 +- framework/src/onos/apps/optical/pom.xml | 2 +- framework/src/onos/apps/pathpainter/pom.xml | 2 +- framework/src/onos/apps/pcep-api/pom.xml | 2 +- framework/src/onos/apps/pim/pom.xml | 2 +- framework/src/onos/apps/pom.xml | 2 +- framework/src/onos/apps/proxyarp/pom.xml | 2 +- framework/src/onos/apps/reactive-routing/pom.xml | 2 +- framework/src/onos/apps/routing-api/pom.xml | 2 +- framework/src/onos/apps/routing/pom.xml | 2 +- framework/src/onos/apps/sdnip/pom.xml | 2 +- framework/src/onos/apps/segmentrouting/pom.xml | 2 +- framework/src/onos/apps/test/demo/pom.xml | 2 +- .../onos/apps/test/distributed-primitives/pom.xml | 4 +- framework/src/onos/apps/test/election/pom.xml | 2 +- framework/src/onos/apps/test/intent-perf/pom.xml | 2 +- .../src/onos/apps/test/messaging-perf/pom.xml | 2 +- framework/src/onos/apps/test/pom.xml | 2 +- framework/src/onos/apps/virtualbng/pom.xml | 2 +- framework/src/onos/apps/vtn/app/pom.xml | 2 +- framework/src/onos/apps/vtn/pom.xml | 2 +- framework/src/onos/apps/vtn/sfcmgr/pom.xml | 2 +- framework/src/onos/apps/vtn/vtnmgr/pom.xml | 2 +- framework/src/onos/apps/vtn/vtnrsc/pom.xml | 2 +- .../flowclassifier/FlowClassifierService.java | 17 +- .../flowclassifier/impl/FlowClassifierManager.java | 23 +- framework/src/onos/apps/vtn/vtnweb/pom.xml | 2 +- framework/src/onos/apps/xos-integration/pom.xml | 2 +- framework/src/onos/cli/pom.xml | 2 +- framework/src/onos/core/api/pom.xml | 2 +- framework/src/onos/core/common/pom.xml | 2 +- framework/src/onos/core/net/pom.xml | 2 +- .../org/onosproject/core/impl/CoreManager.java | 2 +- framework/src/onos/core/pom.xml | 2 +- framework/src/onos/core/security/pom.xml | 2 +- framework/src/onos/core/store/dist/pom.xml | 2 +- framework/src/onos/core/store/persistence/pom.xml | 2 +- framework/src/onos/core/store/pom.xml | 2 +- framework/src/onos/core/store/serializers/pom.xml | 2 +- framework/src/onos/docs/external.xml | 4 +- framework/src/onos/docs/internal.xml | 4 +- framework/src/onos/drivers/pom.xml | 2 +- framework/src/onos/features/pom.xml | 2 +- framework/src/onos/incubator/api/pom.xml | 2 +- framework/src/onos/incubator/net/pom.xml | 2 +- framework/src/onos/incubator/pom.xml | 2 +- framework/src/onos/incubator/rpc-grpc/pom.xml | 2 +- framework/src/onos/incubator/rpc/pom.xml | 2 +- framework/src/onos/incubator/store/pom.xml | 2 +- framework/src/onos/pom.xml | 2 +- framework/src/onos/protocols/bgp/api/pom.xml | 2 +- framework/src/onos/protocols/bgp/bgpio/pom.xml | 2 +- framework/src/onos/protocols/bgp/ctl/pom.xml | 2 +- framework/src/onos/protocols/bgp/pom.xml | 2 +- framework/src/onos/protocols/netconf/api/pom.xml | 2 +- framework/src/onos/protocols/netconf/ctl/pom.xml | 2 +- framework/src/onos/protocols/netconf/pom.xml | 2 +- framework/src/onos/protocols/netconf/rfc/pom.xml | 2 +- framework/src/onos/protocols/openflow/api/pom.xml | 2 +- framework/src/onos/protocols/openflow/ctl/pom.xml | 2 +- framework/src/onos/protocols/openflow/pom.xml | 2 +- framework/src/onos/protocols/ovsdb/api/pom.xml | 2 +- framework/src/onos/protocols/ovsdb/ctl/pom.xml | 2 +- framework/src/onos/protocols/ovsdb/pom.xml | 2 +- framework/src/onos/protocols/ovsdb/rfc/pom.xml | 2 +- framework/src/onos/protocols/pcep/api/pom.xml | 2 +- framework/src/onos/protocols/pcep/ctl/pom.xml | 2 +- framework/src/onos/protocols/pcep/pcepio/pom.xml | 2 +- framework/src/onos/protocols/pcep/pom.xml | 2 +- framework/src/onos/protocols/pom.xml | 2 +- framework/src/onos/providers/bgp/app/pom.xml | 2 +- framework/src/onos/providers/bgp/pom.xml | 2 +- framework/src/onos/providers/bgp/topology/pom.xml | 2 +- framework/src/onos/providers/host/pom.xml | 2 +- framework/src/onos/providers/lldp/pom.xml | 2 +- framework/src/onos/providers/netcfghost/pom.xml | 2 +- framework/src/onos/providers/netconf/app/pom.xml | 2 +- .../src/onos/providers/netconf/device/pom.xml | 2 +- framework/src/onos/providers/netconf/pom.xml | 2 +- framework/src/onos/providers/null/pom.xml | 2 +- framework/src/onos/providers/openflow/app/pom.xml | 2 +- framework/src/onos/providers/openflow/base/pom.xml | 2 +- .../src/onos/providers/openflow/device/pom.xml | 2 +- framework/src/onos/providers/openflow/flow/pom.xml | 2 +- .../flow/impl/NewAdaptiveFlowStatsCollector.java | 1764 ++++++++++---------- .../src/onos/providers/openflow/group/pom.xml | 2 +- .../src/onos/providers/openflow/meter/pom.xml | 2 +- .../src/onos/providers/openflow/packet/pom.xml | 2 +- framework/src/onos/providers/openflow/pom.xml | 2 +- framework/src/onos/providers/ovsdb/app/pom.xml | 2 +- framework/src/onos/providers/ovsdb/device/pom.xml | 2 +- framework/src/onos/providers/ovsdb/host/pom.xml | 2 +- framework/src/onos/providers/ovsdb/pom.xml | 2 +- framework/src/onos/providers/ovsdb/tunnel/pom.xml | 2 +- framework/src/onos/providers/pcep/app/pom.xml | 2 +- framework/src/onos/providers/pcep/pom.xml | 2 +- framework/src/onos/providers/pcep/topology/pom.xml | 2 +- framework/src/onos/providers/pcep/tunnel/pom.xml | 2 +- framework/src/onos/providers/pom.xml | 2 +- framework/src/onos/providers/snmp/alarm/pom.xml | 2 +- framework/src/onos/providers/snmp/pom.xml | 2 +- framework/src/onos/tools/build/envDefaults | 4 +- .../src/onos/tools/package/archetypes/api/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../onos/tools/package/archetypes/bundle/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/onos/tools/package/archetypes/cli/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/onos/tools/package/archetypes/pom.xml | 2 +- .../src/onos/tools/package/archetypes/ui/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../onos/tools/package/archetypes/uitab/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../onos/tools/package/archetypes/uitopo/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- framework/src/onos/tools/package/branding/pom.xml | 2 +- .../src/onos/tools/test/bin/onos-archetypes-test | 2 +- framework/src/onos/tools/test/bin/stc | 2 +- framework/src/onos/tools/test/topos/onos.py | 2 +- framework/src/onos/utils/catalyst/pom.xml | 2 +- framework/src/onos/utils/jdvue/bin/jdvue | 2 +- framework/src/onos/utils/jdvue/pom.xml | 2 +- framework/src/onos/utils/jnc/pom.xml | 2 +- framework/src/onos/utils/junit/pom.xml | 2 +- framework/src/onos/utils/misc/pom.xml | 2 +- framework/src/onos/utils/netty/pom.xml | 2 +- framework/src/onos/utils/nio/pom.xml | 2 +- framework/src/onos/utils/osgi/pom.xml | 2 +- framework/src/onos/utils/pom.xml | 2 +- framework/src/onos/utils/rest/pom.xml | 2 +- framework/src/onos/utils/stc/bin/stc | 2 +- framework/src/onos/utils/stc/pom.xml | 2 +- framework/src/onos/utils/thirdparty/pom.xml | 2 +- framework/src/onos/web/api/pom.xml | 2 +- framework/src/onos/web/gui/pom.xml | 2 +- framework/src/onos/web/pom.xml | 2 +- 165 files changed, 1090 insertions(+), 1059 deletions(-) diff --git a/build.sh b/build.sh index f6dd0b16..1dfca199 100755 --- a/build.sh +++ b/build.sh @@ -18,9 +18,9 @@ # limitations under the License. ##### Settings ##### -VERSION=1.0.8 +VERSION=1.0.9 AUTHOR="Ashlee Young" -MODIFIED="December 6, 2015" +MODIFIED="December 8, 2015" GERRITURL="git clone ssh://im2bz2pee@gerrit.opnfv.org:29418/onosfw" ONOSURL="https://github.com/opennetworkinglab/onos" SURICATAURL="https://github.com/inliniac/suricata" @@ -77,6 +77,7 @@ export RPMBUILDPATH=~/rpmbuild export PATCHES=$GERRITROOT/framework/patches export SURICATAROOT=$BUILDROOT/suricata export SURICATASRC=$GERRITROOT/framework/src/suricata +export ONOSTAG=b209dc68e239009a9c1fdfe6fddeca0cf94fe9bf # 1.4.0-rc1 tag ##### End Set build environment ##### ##### Ask Function ##### @@ -135,11 +136,14 @@ updateONOS() printf "\n" cd $BUILDROOT git clone $ONOSURL onosproject + cd onosproject + git checkout $ONOSTAG + cd ../ rsync -arvP --delete --exclude=.git --exclude=.gitignore --exclude=.gitreview onosproject/ ../src/onos/ cd onosproject git log > ../onos_update.$(date +%s) cd ../ - rm -rf onosproject + #rm -rf onosproject cd $GERRITROOT # End applying patches fi @@ -572,3 +576,4 @@ main() ##### End Execution order ##### main # Launches the build process + diff --git a/framework/src/onos/apps/aaa/pom.xml b/framework/src/onos/apps/aaa/pom.xml index b03930a9..78c18ed7 100644 --- a/framework/src/onos/apps/aaa/pom.xml +++ b/framework/src/onos/apps/aaa/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/acl/pom.xml b/framework/src/onos/apps/acl/pom.xml index 454ac7e6..c029cef7 100644 --- a/framework/src/onos/apps/acl/pom.xml +++ b/framework/src/onos/apps/acl/pom.xml @@ -26,12 +26,12 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-app-acl - 1.4.0-SNAPSHOT + 1.4.0-rc1 bundle ONOS ACL application diff --git a/framework/src/onos/apps/bgprouter/pom.xml b/framework/src/onos/apps/bgprouter/pom.xml index 6503ee79..72fa806a 100644 --- a/framework/src/onos/apps/bgprouter/pom.xml +++ b/framework/src/onos/apps/bgprouter/pom.xml @@ -20,7 +20,7 @@ onos-apps org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml 4.0.0 diff --git a/framework/src/onos/apps/cip/pom.xml b/framework/src/onos/apps/cip/pom.xml index 77cfe150..1befe45a 100644 --- a/framework/src/onos/apps/cip/pom.xml +++ b/framework/src/onos/apps/cip/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/cordfabric/pom.xml b/framework/src/onos/apps/cordfabric/pom.xml index a10db440..be28c210 100644 --- a/framework/src/onos/apps/cordfabric/pom.xml +++ b/framework/src/onos/apps/cordfabric/pom.xml @@ -20,7 +20,7 @@ onos-apps org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml 4.0.0 diff --git a/framework/src/onos/apps/cordvtn/pom.xml b/framework/src/onos/apps/cordvtn/pom.xml index 3f3ec23b..2d530be2 100644 --- a/framework/src/onos/apps/cordvtn/pom.xml +++ b/framework/src/onos/apps/cordvtn/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/cpman/pom.xml b/framework/src/onos/apps/cpman/pom.xml index c01af6d8..e40cace6 100644 --- a/framework/src/onos/apps/cpman/pom.xml +++ b/framework/src/onos/apps/cpman/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml @@ -33,7 +33,7 @@ org.onosproject onos-api - 1.4.0-SNAPSHOT + 1.4.0-rc1 diff --git a/framework/src/onos/apps/demo/cord-gui/pom.xml b/framework/src/onos/apps/demo/cord-gui/pom.xml index 16ed5d95..8ac0ad06 100644 --- a/framework/src/onos/apps/demo/cord-gui/pom.xml +++ b/framework/src/onos/apps/demo/cord-gui/pom.xml @@ -27,7 +27,7 @@ cord-gui - 1.4.0-SNAPSHOT + 1.4.0-rc1 war Demo CORD Subscriber Web GUI diff --git a/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh b/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh index d5a75289..3e764314 100644 --- a/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh +++ b/framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh @@ -1 +1 @@ -cp $ONOS_ROOT/apps/demo/cord-gui/target/cord-gui-1.4.0-SNAPSHOT.war . +cp $ONOS_ROOT/apps/demo/cord-gui/target/cord-gui-1.4.0-rc1.war . diff --git a/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me b/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me index 496b18e4..ef18d13c 100644 --- a/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me +++ b/framework/src/onos/apps/demo/cord-gui/src/scripts/run.me @@ -4,7 +4,7 @@ export LISTENPORT=8080 export JETTY="-jar jetty-runner.jar" -export CORD=./cord-gui-1.4.0-SNAPSHOT.war +export CORD=./cord-gui-1.4.0-rc1.war export LOGDBG=-Dorg.onosproject.cord.gui.LEVEL=DEBUG export DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n" export LOG=cord.log diff --git a/framework/src/onos/apps/dhcp/api/pom.xml b/framework/src/onos/apps/dhcp/api/pom.xml index fb5246f7..e9899071 100644 --- a/framework/src/onos/apps/dhcp/api/pom.xml +++ b/framework/src/onos/apps/dhcp/api/pom.xml @@ -22,7 +22,7 @@ onos-dhcp org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/dhcp/app/pom.xml b/framework/src/onos/apps/dhcp/app/pom.xml index 6589402a..d29dc0f2 100644 --- a/framework/src/onos/apps/dhcp/app/pom.xml +++ b/framework/src/onos/apps/dhcp/app/pom.xml @@ -21,7 +21,7 @@ onos-dhcp org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/dhcp/pom.xml b/framework/src/onos/apps/dhcp/pom.xml index 473caea6..45f7f302 100644 --- a/framework/src/onos/apps/dhcp/pom.xml +++ b/framework/src/onos/apps/dhcp/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/faultmanagement/app/pom.xml b/framework/src/onos/apps/faultmanagement/app/pom.xml index ef41cdde..c446c0ae 100644 --- a/framework/src/onos/apps/faultmanagement/app/pom.xml +++ b/framework/src/onos/apps/faultmanagement/app/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-app-fm - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/faultmanagement/fmmgr/pom.xml b/framework/src/onos/apps/faultmanagement/fmmgr/pom.xml index 86b7cb67..a6bb3103 100644 --- a/framework/src/onos/apps/faultmanagement/fmmgr/pom.xml +++ b/framework/src/onos/apps/faultmanagement/fmmgr/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-app-fm - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/faultmanagement/fmweb/pom.xml b/framework/src/onos/apps/faultmanagement/fmweb/pom.xml index 8d759710..edaa9d3c 100644 --- a/framework/src/onos/apps/faultmanagement/fmweb/pom.xml +++ b/framework/src/onos/apps/faultmanagement/fmweb/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-app-fm - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/faultmanagement/pom.xml b/framework/src/onos/apps/faultmanagement/pom.xml index e7bb6a1b..3ea3bc81 100644 --- a/framework/src/onos/apps/faultmanagement/pom.xml +++ b/framework/src/onos/apps/faultmanagement/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/flowanalyzer/pom.xml b/framework/src/onos/apps/flowanalyzer/pom.xml index b0920412..1981bff9 100644 --- a/framework/src/onos/apps/flowanalyzer/pom.xml +++ b/framework/src/onos/apps/flowanalyzer/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/fwd/pom.xml b/framework/src/onos/apps/fwd/pom.xml index 977a75a4..78601300 100644 --- a/framework/src/onos/apps/fwd/pom.xml +++ b/framework/src/onos/apps/fwd/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/igmp/pom.xml b/framework/src/onos/apps/igmp/pom.xml index 7980d2c0..aac02439 100644 --- a/framework/src/onos/apps/igmp/pom.xml +++ b/framework/src/onos/apps/igmp/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/iptopology-api/pom.xml b/framework/src/onos/apps/iptopology-api/pom.xml index 50cb4adc..0250bb05 100644 --- a/framework/src/onos/apps/iptopology-api/pom.xml +++ b/framework/src/onos/apps/iptopology-api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-app-iptopology-api bundle diff --git a/framework/src/onos/apps/metrics/pom.xml b/framework/src/onos/apps/metrics/pom.xml index 8a39990a..e9e0fc45 100644 --- a/framework/src/onos/apps/metrics/pom.xml +++ b/framework/src/onos/apps/metrics/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/mfwd/pom.xml b/framework/src/onos/apps/mfwd/pom.xml index 835de836..5256b85b 100644 --- a/framework/src/onos/apps/mfwd/pom.xml +++ b/framework/src/onos/apps/mfwd/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/mlb/pom.xml b/framework/src/onos/apps/mlb/pom.xml index 21692374..a6548209 100644 --- a/framework/src/onos/apps/mlb/pom.xml +++ b/framework/src/onos/apps/mlb/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/mobility/pom.xml b/framework/src/onos/apps/mobility/pom.xml index 59fd6668..d5a54c5c 100644 --- a/framework/src/onos/apps/mobility/pom.xml +++ b/framework/src/onos/apps/mobility/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/olt/pom.xml b/framework/src/onos/apps/olt/pom.xml index f803a61a..855a80f8 100644 --- a/framework/src/onos/apps/olt/pom.xml +++ b/framework/src/onos/apps/olt/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/openstackswitching/api/pom.xml b/framework/src/onos/apps/openstackswitching/api/pom.xml index f5e6f94f..7bb09465 100644 --- a/framework/src/onos/apps/openstackswitching/api/pom.xml +++ b/framework/src/onos/apps/openstackswitching/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-openstackswitching - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/openstackswitching/app/pom.xml b/framework/src/onos/apps/openstackswitching/app/pom.xml index 7d26f8f2..edd43e02 100644 --- a/framework/src/onos/apps/openstackswitching/app/pom.xml +++ b/framework/src/onos/apps/openstackswitching/app/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-openstackswitching - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/openstackswitching/pom.xml b/framework/src/onos/apps/openstackswitching/pom.xml index 9dbdcf5f..cfeaa5b3 100644 --- a/framework/src/onos/apps/openstackswitching/pom.xml +++ b/framework/src/onos/apps/openstackswitching/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/optical/pom.xml b/framework/src/onos/apps/optical/pom.xml index 9ae6f85e..0ec42e68 100644 --- a/framework/src/onos/apps/optical/pom.xml +++ b/framework/src/onos/apps/optical/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/pathpainter/pom.xml b/framework/src/onos/apps/pathpainter/pom.xml index c14294c8..b46f7d10 100644 --- a/framework/src/onos/apps/pathpainter/pom.xml +++ b/framework/src/onos/apps/pathpainter/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/pcep-api/pom.xml b/framework/src/onos/apps/pcep-api/pom.xml index 5e871678..2e5be63b 100644 --- a/framework/src/onos/apps/pcep-api/pom.xml +++ b/framework/src/onos/apps/pcep-api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-app-pcep-api bundle diff --git a/framework/src/onos/apps/pim/pom.xml b/framework/src/onos/apps/pim/pom.xml index 83a366b6..6d3785e9 100644 --- a/framework/src/onos/apps/pim/pom.xml +++ b/framework/src/onos/apps/pim/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/pom.xml b/framework/src/onos/apps/pom.xml index 1a279c53..3708e6b9 100644 --- a/framework/src/onos/apps/pom.xml +++ b/framework/src/onos/apps/pom.xml @@ -19,7 +19,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/proxyarp/pom.xml b/framework/src/onos/apps/proxyarp/pom.xml index 69f64ddb..28adaf8a 100644 --- a/framework/src/onos/apps/proxyarp/pom.xml +++ b/framework/src/onos/apps/proxyarp/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/reactive-routing/pom.xml b/framework/src/onos/apps/reactive-routing/pom.xml index 58fb91ee..3272f599 100644 --- a/framework/src/onos/apps/reactive-routing/pom.xml +++ b/framework/src/onos/apps/reactive-routing/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/routing-api/pom.xml b/framework/src/onos/apps/routing-api/pom.xml index 4c2d7d37..6a10092c 100644 --- a/framework/src/onos/apps/routing-api/pom.xml +++ b/framework/src/onos/apps/routing-api/pom.xml @@ -20,7 +20,7 @@ onos-apps org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml 4.0.0 diff --git a/framework/src/onos/apps/routing/pom.xml b/framework/src/onos/apps/routing/pom.xml index 2882f52e..c4562106 100644 --- a/framework/src/onos/apps/routing/pom.xml +++ b/framework/src/onos/apps/routing/pom.xml @@ -20,7 +20,7 @@ onos-apps org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml 4.0.0 diff --git a/framework/src/onos/apps/sdnip/pom.xml b/framework/src/onos/apps/sdnip/pom.xml index 99314aa8..8ff8cbcf 100644 --- a/framework/src/onos/apps/sdnip/pom.xml +++ b/framework/src/onos/apps/sdnip/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/segmentrouting/pom.xml b/framework/src/onos/apps/segmentrouting/pom.xml index d170a7ab..76d90490 100644 --- a/framework/src/onos/apps/segmentrouting/pom.xml +++ b/framework/src/onos/apps/segmentrouting/pom.xml @@ -21,7 +21,7 @@ onos-apps org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/test/demo/pom.xml b/framework/src/onos/apps/test/demo/pom.xml index 4b08430d..d82139d0 100644 --- a/framework/src/onos/apps/test/demo/pom.xml +++ b/framework/src/onos/apps/test/demo/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps-test - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/test/distributed-primitives/pom.xml b/framework/src/onos/apps/test/distributed-primitives/pom.xml index f77fd57f..0c303d66 100644 --- a/framework/src/onos/apps/test/distributed-primitives/pom.xml +++ b/framework/src/onos/apps/test/distributed-primitives/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-apps-test - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml @@ -54,7 +54,7 @@ org.onosproject onos-core-dist - 1.4.0-SNAPSHOT + 1.4.0-rc1 org.osgi diff --git a/framework/src/onos/apps/test/election/pom.xml b/framework/src/onos/apps/test/election/pom.xml index 3ceadb4d..7ffb0b57 100644 --- a/framework/src/onos/apps/test/election/pom.xml +++ b/framework/src/onos/apps/test/election/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-apps-test - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/test/intent-perf/pom.xml b/framework/src/onos/apps/test/intent-perf/pom.xml index b837d114..e0596cc3 100644 --- a/framework/src/onos/apps/test/intent-perf/pom.xml +++ b/framework/src/onos/apps/test/intent-perf/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps-test - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/test/messaging-perf/pom.xml b/framework/src/onos/apps/test/messaging-perf/pom.xml index 28de5b7c..ea78791b 100644 --- a/framework/src/onos/apps/test/messaging-perf/pom.xml +++ b/framework/src/onos/apps/test/messaging-perf/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps-test - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/test/pom.xml b/framework/src/onos/apps/test/pom.xml index ead2252e..89167713 100644 --- a/framework/src/onos/apps/test/pom.xml +++ b/framework/src/onos/apps/test/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/virtualbng/pom.xml b/framework/src/onos/apps/virtualbng/pom.xml index 01caa66c..f2d7ea8f 100644 --- a/framework/src/onos/apps/virtualbng/pom.xml +++ b/framework/src/onos/apps/virtualbng/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/app/pom.xml b/framework/src/onos/apps/vtn/app/pom.xml index 5a877363..93d2d95c 100644 --- a/framework/src/onos/apps/vtn/app/pom.xml +++ b/framework/src/onos/apps/vtn/app/pom.xml @@ -14,7 +14,7 @@ org.onosproject onos-app-vtn - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/pom.xml b/framework/src/onos/apps/vtn/pom.xml index e4528517..8bbd2657 100644 --- a/framework/src/onos/apps/vtn/pom.xml +++ b/framework/src/onos/apps/vtn/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/sfcmgr/pom.xml b/framework/src/onos/apps/vtn/sfcmgr/pom.xml index 8b5f1983..bac0cc36 100644 --- a/framework/src/onos/apps/vtn/sfcmgr/pom.xml +++ b/framework/src/onos/apps/vtn/sfcmgr/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-app-vtn - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/vtnmgr/pom.xml b/framework/src/onos/apps/vtn/vtnmgr/pom.xml index 03e66708..890b2168 100644 --- a/framework/src/onos/apps/vtn/vtnmgr/pom.xml +++ b/framework/src/onos/apps/vtn/vtnmgr/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-app-vtn - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/vtnrsc/pom.xml b/framework/src/onos/apps/vtn/vtnrsc/pom.xml index 816624cb..a2905909 100644 --- a/framework/src/onos/apps/vtn/vtnrsc/pom.xml +++ b/framework/src/onos/apps/vtn/vtnrsc/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-app-vtn - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java index 48438846..e3cbf9ac 100644 --- a/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java +++ b/framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java @@ -15,14 +15,13 @@ */ package org.onosproject.vtnrsc.flowclassifier; -import org.onosproject.event.ListenerService; import org.onosproject.vtnrsc.FlowClassifier; import org.onosproject.vtnrsc.FlowClassifierId; /** * Provides Services for Flow Classifier. */ -public interface FlowClassifierService extends ListenerService { +public interface FlowClassifierService { /** * Check whether Flow Classifier is present based on given Flow Classifier @@ -80,4 +79,18 @@ public interface FlowClassifierService extends ListenerService - implements FlowClassifierService { +public class FlowClassifierManager implements FlowClassifierService { private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null"; private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null"; private static final String LISTENER_NOT_NULL = "Listener cannot be null"; private final Logger log = getLogger(FlowClassifierManager.class); - + private final Set listeners = Sets.newCopyOnWriteArraySet(); private EventuallyConsistentMap flowClassifierStore; @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) @@ -75,6 +75,7 @@ public class FlowClassifierManager extends AbstractListenerManager org.onosproject onos-app-vtn - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/apps/xos-integration/pom.xml b/framework/src/onos/apps/xos-integration/pom.xml index 68eafd16..9f0cb918 100644 --- a/framework/src/onos/apps/xos-integration/pom.xml +++ b/framework/src/onos/apps/xos-integration/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-apps - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/cli/pom.xml b/framework/src/onos/cli/pom.xml index 3d29a26e..de8cd9e8 100644 --- a/framework/src/onos/cli/pom.xml +++ b/framework/src/onos/cli/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/api/pom.xml b/framework/src/onos/core/api/pom.xml index 23a051c4..5469c28c 100644 --- a/framework/src/onos/core/api/pom.xml +++ b/framework/src/onos/core/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/common/pom.xml b/framework/src/onos/core/common/pom.xml index e4d25eed..a371a3fa 100644 --- a/framework/src/onos/core/common/pom.xml +++ b/framework/src/onos/core/common/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/net/pom.xml b/framework/src/onos/core/net/pom.xml index c5d31263..d5eb9576 100644 --- a/framework/src/onos/core/net/pom.xml +++ b/framework/src/onos/core/net/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java index ec99c18b..4a702ef0 100644 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java +++ b/framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java @@ -63,7 +63,7 @@ public class CoreManager implements CoreService { private final Logger log = LoggerFactory.getLogger(getClass()); private static final File VERSION_FILE = new File("../VERSION"); - private static Version version = Version.version("1.4.0-SNAPSHOT"); + private static Version version = Version.version("1.4.0-rc1"); @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) protected ApplicationIdStore applicationIdStore; diff --git a/framework/src/onos/core/pom.xml b/framework/src/onos/core/pom.xml index c4f25545..d8b80b6f 100644 --- a/framework/src/onos/core/pom.xml +++ b/framework/src/onos/core/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/security/pom.xml b/framework/src/onos/core/security/pom.xml index 8dbc6c0d..4635c686 100644 --- a/framework/src/onos/core/security/pom.xml +++ b/framework/src/onos/core/security/pom.xml @@ -22,7 +22,7 @@ onos-core org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/store/dist/pom.xml b/framework/src/onos/core/store/dist/pom.xml index 0b8b72bc..d61fc1b6 100644 --- a/framework/src/onos/core/store/dist/pom.xml +++ b/framework/src/onos/core/store/dist/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core-store - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/store/persistence/pom.xml b/framework/src/onos/core/store/persistence/pom.xml index 5692c531..bb3cd8e1 100644 --- a/framework/src/onos/core/store/persistence/pom.xml +++ b/framework/src/onos/core/store/persistence/pom.xml @@ -34,7 +34,7 @@ org.onosproject onos-core-store - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/store/pom.xml b/framework/src/onos/core/store/pom.xml index 94c077a4..24326575 100644 --- a/framework/src/onos/core/store/pom.xml +++ b/framework/src/onos/core/store/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/core/store/serializers/pom.xml b/framework/src/onos/core/store/serializers/pom.xml index 867ce0f0..6fe4c160 100644 --- a/framework/src/onos/core/store/serializers/pom.xml +++ b/framework/src/onos/core/store/serializers/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-core-store - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/docs/external.xml b/framework/src/onos/docs/external.xml index aac47eb5..04c18d2d 100644 --- a/framework/src/onos/docs/external.xml +++ b/framework/src/onos/docs/external.xml @@ -26,7 +26,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml @@ -53,7 +53,7 @@ **/generated-sources/** true - ONOS Java API (1.4.0-SNAPSHOT) + ONOS Java API (1.4.0-rc1) Network Model & Services diff --git a/framework/src/onos/docs/internal.xml b/framework/src/onos/docs/internal.xml index 569da1b8..42cb80f4 100644 --- a/framework/src/onos/docs/internal.xml +++ b/framework/src/onos/docs/internal.xml @@ -26,7 +26,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml @@ -49,7 +49,7 @@ package true - ONOS Java API (1.4.0-SNAPSHOT) + ONOS Java API (1.4.0-rc1) @internal-excludes **/generated-sources/** diff --git a/framework/src/onos/drivers/pom.xml b/framework/src/onos/drivers/pom.xml index db0a3985..1aab60af 100644 --- a/framework/src/onos/drivers/pom.xml +++ b/framework/src/onos/drivers/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/features/pom.xml b/framework/src/onos/features/pom.xml index 7b362791..caeb8ea0 100644 --- a/framework/src/onos/features/pom.xml +++ b/framework/src/onos/features/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/incubator/api/pom.xml b/framework/src/onos/incubator/api/pom.xml index 9d7c7a6b..cbb69dc0 100644 --- a/framework/src/onos/incubator/api/pom.xml +++ b/framework/src/onos/incubator/api/pom.xml @@ -24,7 +24,7 @@ org.onosproject onos-incubator - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/incubator/net/pom.xml b/framework/src/onos/incubator/net/pom.xml index e60a2710..2ffebe6b 100644 --- a/framework/src/onos/incubator/net/pom.xml +++ b/framework/src/onos/incubator/net/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-incubator - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/incubator/pom.xml b/framework/src/onos/incubator/pom.xml index 8122a680..a6b0fb19 100644 --- a/framework/src/onos/incubator/pom.xml +++ b/framework/src/onos/incubator/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/incubator/rpc-grpc/pom.xml b/framework/src/onos/incubator/rpc-grpc/pom.xml index 367b50a2..e2d16aec 100644 --- a/framework/src/onos/incubator/rpc-grpc/pom.xml +++ b/framework/src/onos/incubator/rpc-grpc/pom.xml @@ -19,7 +19,7 @@ onos-incubator org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-incubator-rpc-grpc diff --git a/framework/src/onos/incubator/rpc/pom.xml b/framework/src/onos/incubator/rpc/pom.xml index 8619f92e..d48ce19e 100644 --- a/framework/src/onos/incubator/rpc/pom.xml +++ b/framework/src/onos/incubator/rpc/pom.xml @@ -19,7 +19,7 @@ onos-incubator org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-incubator-rpc diff --git a/framework/src/onos/incubator/store/pom.xml b/framework/src/onos/incubator/store/pom.xml index 797ccc0b..43e51727 100644 --- a/framework/src/onos/incubator/store/pom.xml +++ b/framework/src/onos/incubator/store/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-incubator - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/pom.xml b/framework/src/onos/pom.xml index c72a4594..898dd2af 100644 --- a/framework/src/onos/pom.xml +++ b/framework/src/onos/pom.xml @@ -33,7 +33,7 @@ org.onosproject onos pom - 1.4.0-SNAPSHOT + 1.4.0-rc1 ${project.artifactId} Open Network Operating System root project diff --git a/framework/src/onos/protocols/bgp/api/pom.xml b/framework/src/onos/protocols/bgp/api/pom.xml index 2390e5f6..d233c48e 100755 --- a/framework/src/onos/protocols/bgp/api/pom.xml +++ b/framework/src/onos/protocols/bgp/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-bgp - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/bgp/bgpio/pom.xml b/framework/src/onos/protocols/bgp/bgpio/pom.xml index 5d67f18c..06206e8f 100755 --- a/framework/src/onos/protocols/bgp/bgpio/pom.xml +++ b/framework/src/onos/protocols/bgp/bgpio/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-bgp - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/bgp/ctl/pom.xml b/framework/src/onos/protocols/bgp/ctl/pom.xml index 629e9ee7..fd5f2b54 100755 --- a/framework/src/onos/protocols/bgp/ctl/pom.xml +++ b/framework/src/onos/protocols/bgp/ctl/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-bgp - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/bgp/pom.xml b/framework/src/onos/protocols/bgp/pom.xml index 3b28181e..64062a66 100755 --- a/framework/src/onos/protocols/bgp/pom.xml +++ b/framework/src/onos/protocols/bgp/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-protocols - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/netconf/api/pom.xml b/framework/src/onos/protocols/netconf/api/pom.xml index 062ec932..74a37838 100644 --- a/framework/src/onos/protocols/netconf/api/pom.xml +++ b/framework/src/onos/protocols/netconf/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-netconf - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/netconf/ctl/pom.xml b/framework/src/onos/protocols/netconf/ctl/pom.xml index bae59f07..ce6f9f73 100644 --- a/framework/src/onos/protocols/netconf/ctl/pom.xml +++ b/framework/src/onos/protocols/netconf/ctl/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-netconf - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/netconf/pom.xml b/framework/src/onos/protocols/netconf/pom.xml index f0d6ca70..37b78e78 100644 --- a/framework/src/onos/protocols/netconf/pom.xml +++ b/framework/src/onos/protocols/netconf/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-protocols - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/netconf/rfc/pom.xml b/framework/src/onos/protocols/netconf/rfc/pom.xml index fa1e06e2..c9a24f17 100644 --- a/framework/src/onos/protocols/netconf/rfc/pom.xml +++ b/framework/src/onos/protocols/netconf/rfc/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-netconf - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/openflow/api/pom.xml b/framework/src/onos/protocols/openflow/api/pom.xml index e535ac64..6a47e2ee 100644 --- a/framework/src/onos/protocols/openflow/api/pom.xml +++ b/framework/src/onos/protocols/openflow/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/openflow/ctl/pom.xml b/framework/src/onos/protocols/openflow/ctl/pom.xml index 56d48550..947e12f8 100644 --- a/framework/src/onos/protocols/openflow/ctl/pom.xml +++ b/framework/src/onos/protocols/openflow/ctl/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-of - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/openflow/pom.xml b/framework/src/onos/protocols/openflow/pom.xml index 3bf976b5..07074660 100644 --- a/framework/src/onos/protocols/openflow/pom.xml +++ b/framework/src/onos/protocols/openflow/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-protocols - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/ovsdb/api/pom.xml b/framework/src/onos/protocols/ovsdb/api/pom.xml index c264ae97..d4bee9a0 100644 --- a/framework/src/onos/protocols/ovsdb/api/pom.xml +++ b/framework/src/onos/protocols/ovsdb/api/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-ovsdb - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-ovsdb-api bundle diff --git a/framework/src/onos/protocols/ovsdb/ctl/pom.xml b/framework/src/onos/protocols/ovsdb/ctl/pom.xml index b8366296..c9cfb9dc 100644 --- a/framework/src/onos/protocols/ovsdb/ctl/pom.xml +++ b/framework/src/onos/protocols/ovsdb/ctl/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-ovsdb - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/ovsdb/pom.xml b/framework/src/onos/protocols/ovsdb/pom.xml index 03e9d98c..7a56d7fb 100644 --- a/framework/src/onos/protocols/ovsdb/pom.xml +++ b/framework/src/onos/protocols/ovsdb/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-protocols - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/ovsdb/rfc/pom.xml b/framework/src/onos/protocols/ovsdb/rfc/pom.xml index d4d37587..c8b72d6f 100644 --- a/framework/src/onos/protocols/ovsdb/rfc/pom.xml +++ b/framework/src/onos/protocols/ovsdb/rfc/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-ovsdb - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-ovsdb-rfc diff --git a/framework/src/onos/protocols/pcep/api/pom.xml b/framework/src/onos/protocols/pcep/api/pom.xml index 4588ad6f..b5b209c2 100644 --- a/framework/src/onos/protocols/pcep/api/pom.xml +++ b/framework/src/onos/protocols/pcep/api/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-pcep-controller - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/pcep/ctl/pom.xml b/framework/src/onos/protocols/pcep/ctl/pom.xml index f0ed5c2f..0427c237 100644 --- a/framework/src/onos/protocols/pcep/ctl/pom.xml +++ b/framework/src/onos/protocols/pcep/ctl/pom.xml @@ -21,7 +21,7 @@ org.onosproject onos-pcep-controller - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/pcep/pcepio/pom.xml b/framework/src/onos/protocols/pcep/pcepio/pom.xml index d121a83e..8b2e25b4 100755 --- a/framework/src/onos/protocols/pcep/pcepio/pom.xml +++ b/framework/src/onos/protocols/pcep/pcepio/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-pcep-controller - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/pcep/pom.xml b/framework/src/onos/protocols/pcep/pom.xml index 466b0c3c..5a0426e0 100755 --- a/framework/src/onos/protocols/pcep/pom.xml +++ b/framework/src/onos/protocols/pcep/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-protocols - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/protocols/pom.xml b/framework/src/onos/protocols/pom.xml index 25219fa0..472251d2 100644 --- a/framework/src/onos/protocols/pom.xml +++ b/framework/src/onos/protocols/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/bgp/app/pom.xml b/framework/src/onos/providers/bgp/app/pom.xml index 4ac3acdc..aa20a5a9 100755 --- a/framework/src/onos/providers/bgp/app/pom.xml +++ b/framework/src/onos/providers/bgp/app/pom.xml @@ -19,7 +19,7 @@ org.onosproject onos-bgp-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/bgp/pom.xml b/framework/src/onos/providers/bgp/pom.xml index b2e3a51d..d7d4ac05 100755 --- a/framework/src/onos/providers/bgp/pom.xml +++ b/framework/src/onos/providers/bgp/pom.xml @@ -18,7 +18,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-bgp-providers diff --git a/framework/src/onos/providers/bgp/topology/pom.xml b/framework/src/onos/providers/bgp/topology/pom.xml index b033742d..f7a111b0 100755 --- a/framework/src/onos/providers/bgp/topology/pom.xml +++ b/framework/src/onos/providers/bgp/topology/pom.xml @@ -18,7 +18,7 @@ org.onosproject onos-bgp-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-bgp-provider-topology diff --git a/framework/src/onos/providers/host/pom.xml b/framework/src/onos/providers/host/pom.xml index ddbdbfc5..ac1e4273 100644 --- a/framework/src/onos/providers/host/pom.xml +++ b/framework/src/onos/providers/host/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/lldp/pom.xml b/framework/src/onos/providers/lldp/pom.xml index f9052760..adf0d0dc 100644 --- a/framework/src/onos/providers/lldp/pom.xml +++ b/framework/src/onos/providers/lldp/pom.xml @@ -23,7 +23,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/netcfghost/pom.xml b/framework/src/onos/providers/netcfghost/pom.xml index 15363c8d..9d106921 100644 --- a/framework/src/onos/providers/netcfghost/pom.xml +++ b/framework/src/onos/providers/netcfghost/pom.xml @@ -20,7 +20,7 @@ onos-providers org.onosproject - 1.4.0-SNAPSHOT + 1.4.0-rc1 4.0.0 diff --git a/framework/src/onos/providers/netconf/app/pom.xml b/framework/src/onos/providers/netconf/app/pom.xml index 0aa55ff5..41fbd1f5 100644 --- a/framework/src/onos/providers/netconf/app/pom.xml +++ b/framework/src/onos/providers/netconf/app/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-netconf-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/netconf/device/pom.xml b/framework/src/onos/providers/netconf/device/pom.xml index 15ad475a..9319a509 100644 --- a/framework/src/onos/providers/netconf/device/pom.xml +++ b/framework/src/onos/providers/netconf/device/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-netconf-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/netconf/pom.xml b/framework/src/onos/providers/netconf/pom.xml index 8c4681df..ca044a2d 100644 --- a/framework/src/onos/providers/netconf/pom.xml +++ b/framework/src/onos/providers/netconf/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/null/pom.xml b/framework/src/onos/providers/null/pom.xml index 1db0753f..ef2e3347 100644 --- a/framework/src/onos/providers/null/pom.xml +++ b/framework/src/onos/providers/null/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/app/pom.xml b/framework/src/onos/providers/openflow/app/pom.xml index ac5f6eee..37564272 100644 --- a/framework/src/onos/providers/openflow/app/pom.xml +++ b/framework/src/onos/providers/openflow/app/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/base/pom.xml b/framework/src/onos/providers/openflow/base/pom.xml index 9eb170c3..231a17a4 100644 --- a/framework/src/onos/providers/openflow/base/pom.xml +++ b/framework/src/onos/providers/openflow/base/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/device/pom.xml b/framework/src/onos/providers/openflow/device/pom.xml index 0408f73e..e1c42a5d 100644 --- a/framework/src/onos/providers/openflow/device/pom.xml +++ b/framework/src/onos/providers/openflow/device/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/flow/pom.xml b/framework/src/onos/providers/openflow/flow/pom.xml index 1f65656e..16d7d32d 100644 --- a/framework/src/onos/providers/openflow/flow/pom.xml +++ b/framework/src/onos/providers/openflow/flow/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java index aa8df947..d5186fa9 100644 --- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java +++ b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java @@ -1,882 +1,882 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.provider.of.flow.impl; - -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import org.onosproject.net.flow.DefaultTypedFlowEntry; -import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.FlowId; -import org.onosproject.net.flow.FlowRule; -import org.onosproject.net.flow.StoredFlowEntry; -import org.onosproject.net.flow.TypedStoredFlowEntry; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.Instructions; -import org.onosproject.openflow.controller.OpenFlowSwitch; -import org.onosproject.openflow.controller.RoleState; -import org.projectfloodlight.openflow.protocol.OFFlowStatsRequest; -import org.projectfloodlight.openflow.protocol.match.Match; -import org.projectfloodlight.openflow.types.OFPort; -import org.projectfloodlight.openflow.types.TableId; -import org.slf4j.Logger; - -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.onlab.util.Tools.groupedThreads; -import static org.onosproject.net.flow.TypedStoredFlowEntry.FlowLiveType; -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Efficiently and adaptively collects flow statistics for the specified switch. - */ -public class NewAdaptiveFlowStatsCollector { - - private final Logger log = getLogger(getClass()); - - private final OpenFlowSwitch sw; - - private ScheduledExecutorService adaptiveFlowStatsScheduler = - Executors.newScheduledThreadPool(4, groupedThreads("onos/flow", "device-stats-collector-%d")); - private ScheduledFuture calAndShortFlowsThread; - private ScheduledFuture midFlowsThread; - private ScheduledFuture longFlowsThread; - - // Task that calculates all flowEntries' FlowLiveType and collects stats IMMEDIATE flows every calAndPollInterval - private CalAndShortFlowsTask calAndShortFlowsTask; - // Task that collects stats MID flows every 2*calAndPollInterval - private MidFlowsTask midFlowsTask; - // Task that collects stats LONG flows every 3*calAndPollInterval - private LongFlowsTask longFlowsTask; - - private static final int CAL_AND_POLL_TIMES = 1; // must be always 0 - private static final int MID_POLL_TIMES = 2; // variable greater or equal than 1 - private static final int LONG_POLL_TIMES = 3; // variable greater or equal than MID_POLL_TIMES - //TODO: make ENTIRE_POLL_TIMES configurable with enable or disable - // must be variable greater or equal than common multiple of MID_POLL_TIMES and LONG_POLL_TIMES - private static final int ENTIRE_POLL_TIMES = 6; - - private static final int DEFAULT_CAL_AND_POLL_FREQUENCY = 5; - private static final int MIN_CAL_AND_POLL_FREQUENCY = 2; - private static final int MAX_CAL_AND_POLL_FREQUENCY = 60; - - private int calAndPollInterval; // CAL_AND_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; - private int midPollInterval; // MID_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; - private int longPollInterval; // LONG_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; - // only used for checking condition at each task if it collects entire flows from a given switch or not - private int entirePollInterval; // ENTIRE_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; - - // Number of call count of each Task, - // for undoing collection except only entire flows collecting task in CalAndShortFlowsTask - private int callCountCalAndShortFlowsTask = 0; // increased CAL_AND_POLL_TIMES whenever Task is called - private int callCountMidFlowsTask = 0; // increased MID_POLL_TIMES whenever Task is called - private int callCountLongFlowsTask = 0; // increased LONG_POLL_TIMES whenever Task is called - - private InternalDeviceFlowTable deviceFlowTable = new InternalDeviceFlowTable(); - - private boolean isFirstTimeStart = true; - - public static final long NO_FLOW_MISSING_XID = (-1); - private long flowMissingXid = NO_FLOW_MISSING_XID; - - /** - * Creates a new adaptive collector for the given switch and default cal_and_poll frequency. - * - * @param sw switch to pull - * @param pollInterval cal and immediate poll frequency in seconds - */ - NewAdaptiveFlowStatsCollector(OpenFlowSwitch sw, int pollInterval) { - this.sw = sw; - - initMemberVars(pollInterval); - } - - // check calAndPollInterval validity and set all pollInterval values and finally initialize each task call count - private void initMemberVars(int pollInterval) { - if (pollInterval < MIN_CAL_AND_POLL_FREQUENCY) { - this.calAndPollInterval = MIN_CAL_AND_POLL_FREQUENCY; - } else if (pollInterval >= MAX_CAL_AND_POLL_FREQUENCY) { - this.calAndPollInterval = MAX_CAL_AND_POLL_FREQUENCY; - } else { - this.calAndPollInterval = pollInterval; - } - - calAndPollInterval = CAL_AND_POLL_TIMES * calAndPollInterval; - midPollInterval = MID_POLL_TIMES * calAndPollInterval; - longPollInterval = LONG_POLL_TIMES * calAndPollInterval; - entirePollInterval = ENTIRE_POLL_TIMES * calAndPollInterval; - - callCountCalAndShortFlowsTask = 0; - callCountMidFlowsTask = 0; - callCountLongFlowsTask = 0; - - flowMissingXid = NO_FLOW_MISSING_XID; - } - - /** - * Adjusts adaptive poll frequency. - * - * @param pollInterval poll frequency in seconds - */ - synchronized void adjustCalAndPollInterval(int pollInterval) { - initMemberVars(pollInterval); - - if (calAndShortFlowsThread != null) { - calAndShortFlowsThread.cancel(false); - } - if (midFlowsThread != null) { - midFlowsThread.cancel(false); - } - if (longFlowsThread != null) { - longFlowsThread.cancel(false); - } - - calAndShortFlowsTask = new CalAndShortFlowsTask(); - calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - calAndShortFlowsTask, - 0, - calAndPollInterval, - TimeUnit.SECONDS); - - midFlowsTask = new MidFlowsTask(); - midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - midFlowsTask, - 0, - midPollInterval, - TimeUnit.SECONDS); - - longFlowsTask = new LongFlowsTask(); - longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - longFlowsTask, - 0, - longPollInterval, - TimeUnit.SECONDS); - - log.debug("calAndPollInterval=" + calAndPollInterval + "is adjusted"); - } - - private class CalAndShortFlowsTask implements Runnable { - @Override - public void run() { - if (sw.getRole() == RoleState.MASTER) { - log.trace("CalAndShortFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); - - if (isFirstTimeStart) { - // isFirstTimeStart, get entire flow stats from a given switch sw - log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats at first time start for {}", - sw.getStringId()); - ofFlowStatsRequestAllSend(); - - callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES; - isFirstTimeStart = false; - } else if (callCountCalAndShortFlowsTask == ENTIRE_POLL_TIMES) { - // entire_poll_times, get entire flow stats from a given switch sw - log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats for {}", sw.getStringId()); - ofFlowStatsRequestAllSend(); - - callCountCalAndShortFlowsTask = CAL_AND_POLL_TIMES; - //TODO: check flows deleted in switch, but exist in controller flow table, then remove them - // - } else { - calAndShortFlowsTaskInternal(); - callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES; - } - } - } - } - - // send openflow flow stats request message with getting all flow entries to a given switch sw - private void ofFlowStatsRequestAllSend() { - OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest() - .setMatch(sw.factory().matchWildcardAll()) - .setTableId(TableId.ALL) - .setOutPort(OFPort.NO_MASK) - .build(); - - synchronized (this) { - // set the request xid to check the reply in OpenFlowRuleProvider - // After processing the reply of this request message, - // this must be set to NO_FLOW_MISSING_XID(-1) by provider - setFlowMissingXid(request.getXid()); - log.debug("ofFlowStatsRequestAllSend,Request={},for {}", request.toString(), sw.getStringId()); - - sw.sendMsg(request); - } - } - - // send openflow flow stats request message with getting the specific flow entry(fe) to a given switch sw - private void ofFlowStatsRequestFlowSend(FlowEntry fe) { - // set find match - Match match = FlowModBuilder.builder(fe, sw.factory(), Optional.empty(), - Optional.empty()).buildMatch(); - // set find tableId - TableId tableId = TableId.of(fe.tableId()); - // set output port - Instruction ins = fe.treatment().allInstructions().stream() - .filter(i -> (i.type() == Instruction.Type.OUTPUT)) - .findFirst() - .orElse(null); - OFPort ofPort = OFPort.NO_MASK; - if (ins != null) { - Instructions.OutputInstruction out = (Instructions.OutputInstruction) ins; - ofPort = OFPort.of((int) ((out.port().toLong()))); - } - - OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest() - .setMatch(match) - .setTableId(tableId) - .setOutPort(ofPort) - .build(); - - synchronized (this) { - if (getFlowMissingXid() != NO_FLOW_MISSING_XID) { - log.debug("ofFlowStatsRequestFlowSend: previous FlowStatsRequestAll does not be processed yet," - + " set no flow missing xid anyway, for {}", - sw.getStringId()); - setFlowMissingXid(NO_FLOW_MISSING_XID); - } - - sw.sendMsg(request); - } - } - - private void calAndShortFlowsTaskInternal() { - deviceFlowTable.checkAndMoveLiveFlowAll(); - - deviceFlowTable.getShortFlows().forEach(fe -> { - ofFlowStatsRequestFlowSend(fe); - }); - } - - private class MidFlowsTask implements Runnable { - @Override - public void run() { - if (sw.getRole() == RoleState.MASTER) { - log.trace("MidFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); - - // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw - if (callCountMidFlowsTask == ENTIRE_POLL_TIMES) { - callCountMidFlowsTask = MID_POLL_TIMES; - } else { - midFlowsTaskInternal(); - callCountMidFlowsTask += MID_POLL_TIMES; - } - } - } - } - - private void midFlowsTaskInternal() { - deviceFlowTable.getMidFlows().forEach(fe -> { - ofFlowStatsRequestFlowSend(fe); - }); - } - - private class LongFlowsTask implements Runnable { - @Override - public void run() { - if (sw.getRole() == RoleState.MASTER) { - log.trace("LongFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); - - // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw - if (callCountLongFlowsTask == ENTIRE_POLL_TIMES) { - callCountLongFlowsTask = LONG_POLL_TIMES; - } else { - longFlowsTaskInternal(); - callCountLongFlowsTask += LONG_POLL_TIMES; - } - } - } - } - - private void longFlowsTaskInternal() { - deviceFlowTable.getLongFlows().forEach(fe -> { - ofFlowStatsRequestFlowSend(fe); - }); - } - - /** - * start adaptive flow statistic collection. - * - */ - public synchronized void start() { - log.debug("Starting AdaptiveStats collection thread for {}", sw.getStringId()); - callCountCalAndShortFlowsTask = 0; - callCountMidFlowsTask = 0; - callCountLongFlowsTask = 0; - - isFirstTimeStart = true; - - // Initially start polling quickly. Then drop down to configured value - calAndShortFlowsTask = new CalAndShortFlowsTask(); - calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - calAndShortFlowsTask, - 1, - calAndPollInterval, - TimeUnit.SECONDS); - - midFlowsTask = new MidFlowsTask(); - midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - midFlowsTask, - 1, - midPollInterval, - TimeUnit.SECONDS); - - longFlowsTask = new LongFlowsTask(); - longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( - longFlowsTask, - 1, - longPollInterval, - TimeUnit.SECONDS); - - log.info("Started"); - } - - /** - * stop adaptive flow statistic collection. - * - */ - public synchronized void stop() { - log.debug("Stopping AdaptiveStats collection thread for {}", sw.getStringId()); - if (calAndShortFlowsThread != null) { - calAndShortFlowsThread.cancel(true); - } - if (midFlowsThread != null) { - midFlowsThread.cancel(true); - } - if (longFlowsThread != null) { - longFlowsThread.cancel(true); - } - - adaptiveFlowStatsScheduler.shutdownNow(); - - isFirstTimeStart = false; - - log.info("Stopped"); - } - - /** - * add typed flow entry from flow rule into the internal flow table. - * - * @param flowRules the flow rules - * - */ - public synchronized void addWithFlowRule(FlowRule... flowRules) { - for (FlowRule fr : flowRules) { - // First remove old entry unconditionally, if exist - deviceFlowTable.remove(fr); - - // add new flow entry, we suppose IMMEDIATE_FLOW - TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fr, - FlowLiveType.IMMEDIATE_FLOW); - deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry); - } - } - - /** - * add or update typed flow entry from flow entry into the internal flow table. - * - * @param flowEntries the flow entries - * - */ - public synchronized void addOrUpdateFlows(FlowEntry... flowEntries) { - for (FlowEntry fe : flowEntries) { - // check if this new rule is an update to an existing entry - TypedStoredFlowEntry stored = deviceFlowTable.getFlowEntry(fe); - - if (stored != null) { - // duplicated flow entry is collected!, just skip - if (fe.bytes() == stored.bytes() && fe.packets() == stored.packets() - && fe.life() == stored.life()) { - log.debug("addOrUpdateFlows:, FlowId=" + Long.toHexString(fe.id().value()) - + ",is DUPLICATED stats collection, just skip." - + " AdaptiveStats collection thread for {}", - sw.getStringId()); - - stored.setLastSeen(); - continue; - } else if (fe.life() < stored.life()) { - // Invalid updates the stats values, i.e., bytes, packets, durations ... - log.debug("addOrUpdateFlows():" + - " Invalid Flow Update! The new life is SMALLER than the previous one, jus skip." + - " new flowId=" + Long.toHexString(fe.id().value()) + - ", old flowId=" + Long.toHexString(stored.id().value()) + - ", new bytes=" + fe.bytes() + ", old bytes=" + stored.bytes() + - ", new life=" + fe.life() + ", old life=" + stored.life() + - ", new lastSeen=" + fe.lastSeen() + ", old lastSeen=" + stored.lastSeen()); - // go next - stored.setLastSeen(); - continue; - } - - // update now - stored.setLife(fe.life()); - stored.setPackets(fe.packets()); - stored.setBytes(fe.bytes()); - stored.setLastSeen(); - if (stored.state() == FlowEntry.FlowEntryState.PENDING_ADD) { - // flow is really RULE_ADDED - stored.setState(FlowEntry.FlowEntryState.ADDED); - } - // flow is RULE_UPDATED, skip adding and just updating flow live table - //deviceFlowTable.calAndSetFlowLiveType(stored); - continue; - } - - // add new flow entry, we suppose IMMEDIATE_FLOW - TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fe, - FlowLiveType.IMMEDIATE_FLOW); - deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry); - } - } - - /** - * remove typed flow entry from the internal flow table. - * - * @param flowRules the flow entries - * - */ - public synchronized void removeFlows(FlowRule... flowRules) { - for (FlowRule rule : flowRules) { - deviceFlowTable.remove(rule); - } - } - - // same as removeFlows() function - /** - * remove typed flow entry from the internal flow table. - * - * @param flowRules the flow entries - * - */ - public void flowRemoved(FlowRule... flowRules) { - removeFlows(flowRules); - } - - // same as addOrUpdateFlows() function - /** - * add or update typed flow entry from flow entry into the internal flow table. - * - * @param flowEntries the flow entry list - * - */ - public void pushFlowMetrics(List flowEntries) { - flowEntries.forEach(fe -> { - addOrUpdateFlows(fe); - }); - } - - /** - * returns flowMissingXid that indicates the execution of flowMissing process or not(NO_FLOW_MISSING_XID(-1)). - * - * @return xid of missing flow - */ - public long getFlowMissingXid() { - return flowMissingXid; - } - - /** - * set flowMissingXid, namely OFFlowStatsRequest match any ALL message Id. - * - * @param flowMissingXid the OFFlowStatsRequest message Id - * - */ - public void setFlowMissingXid(long flowMissingXid) { - this.flowMissingXid = flowMissingXid; - } - - private class InternalDeviceFlowTable { - - private final Map> - flowEntries = Maps.newConcurrentMap(); - - private final Set shortFlows = new HashSet<>(); - private final Set midFlows = new HashSet<>(); - private final Set longFlows = new HashSet<>(); - - // Assumed latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply - private final long latencyFlowStatsRequestAndReplyMillis = 500; - - - // Statistics for table operation - private long addCount = 0, addWithSetFlowLiveTypeCount = 0; - private long removeCount = 0; - - /** - * Resets all count values with zero. - * - */ - public void resetAllCount() { - addCount = 0; - addWithSetFlowLiveTypeCount = 0; - removeCount = 0; - } - - // get set of flow entries for the given flowId - private Set getFlowEntriesInternal(FlowId flowId) { - return flowEntries.computeIfAbsent(flowId, id -> Sets.newCopyOnWriteArraySet()); - } - - // get flow entry for the given flow rule - private TypedStoredFlowEntry getFlowEntryInternal(FlowRule rule) { - Set flowEntries = getFlowEntriesInternal(rule.id()); - return flowEntries.stream() - .filter(entry -> Objects.equal(entry, rule)) - .findAny() - .orElse(null); - } - - // get the flow entries for all flows in flow table - private Set getFlowEntriesInternal() { - Set result = Sets.newHashSet(); - - flowEntries.values().forEach(result::addAll); - return result; - } - - /** - * Gets the number of flow entry in flow table. - * - * @return the number of flow entry. - * - */ - public long getFlowCount() { - return flowEntries.values().stream().mapToLong(Set::size).sum(); - } - - /** - * Gets the number of flow entry in flow table. - * - * @param rule the flow rule - * @return the typed flow entry. - * - */ - public TypedStoredFlowEntry getFlowEntry(FlowRule rule) { - checkNotNull(rule); - - return getFlowEntryInternal(rule); - } - - /** - * Gets the all typed flow entries in flow table. - * - * @return the set of typed flow entry. - * - */ - public Set getFlowEntries() { - return getFlowEntriesInternal(); - } - - /** - * Gets the short typed flow entries in flow table. - * - * @return the set of typed flow entry. - * - */ - public Set getShortFlows() { - return ImmutableSet.copyOf(shortFlows); //Sets.newHashSet(shortFlows); - } - - /** - * Gets the mid typed flow entries in flow table. - * - * @return the set of typed flow entry. - * - */ - public Set getMidFlows() { - return ImmutableSet.copyOf(midFlows); //Sets.newHashSet(midFlows); - } - - /** - * Gets the long typed flow entries in flow table. - * - * @return the set of typed flow entry. - * - */ - public Set getLongFlows() { - return ImmutableSet.copyOf(longFlows); //Sets.newHashSet(longFlows); - } - - /** - * Add typed flow entry into table only. - * - * @param rule the flow rule - * - */ - public synchronized void add(TypedStoredFlowEntry rule) { - checkNotNull(rule); - - //rule have to be new DefaultTypedFlowEntry - boolean result = getFlowEntriesInternal(rule.id()).add(rule); - - if (result) { - addCount++; - } - } - - /** - * Calculates and set the flow live type at the first time, - * and then add it into a corresponding typed flow table. - * - * @param rule the flow rule - * - */ - public void calAndSetFlowLiveType(TypedStoredFlowEntry rule) { - checkNotNull(rule); - - calAndSetFlowLiveTypeInternal(rule); - } - - /** - * Add the typed flow entry into table, and calculates and set the flow live type, - * and then add it into a corresponding typed flow table. - * - * @param rule the flow rule - * - */ - public synchronized void addWithCalAndSetFlowLiveType(TypedStoredFlowEntry rule) { - checkNotNull(rule); - - //rule have to be new DefaultTypedFlowEntry - boolean result = getFlowEntriesInternal(rule.id()).add(rule); - if (result) { - calAndSetFlowLiveTypeInternal(rule); - addWithSetFlowLiveTypeCount++; - } else { - log.debug("addWithCalAndSetFlowLiveType, FlowId=" + Long.toHexString(rule.id().value()) - + " ADD Failed, cause it may already exists in table !!!," - + " AdaptiveStats collection thread for {}", - sw.getStringId()); - } - } - - // In real, calculates and set the flow live type at the first time, - // and then add it into a corresponding typed flow table - private void calAndSetFlowLiveTypeInternal(TypedStoredFlowEntry rule) { - long life = rule.life(); - FlowLiveType prevFlowLiveType = rule.flowLiveType(); - - if (life >= longPollInterval) { - rule.setFlowLiveType(FlowLiveType.LONG_FLOW); - longFlows.add(rule); - } else if (life >= midPollInterval) { - rule.setFlowLiveType(FlowLiveType.MID_FLOW); - midFlows.add(rule); - } else if (life >= calAndPollInterval) { - rule.setFlowLiveType(FlowLiveType.SHORT_FLOW); - shortFlows.add(rule); - } else if (life >= 0) { - rule.setFlowLiveType(FlowLiveType.IMMEDIATE_FLOW); - } else { // life < 0 - rule.setFlowLiveType(FlowLiveType.UNKNOWN_FLOW); - } - - if (rule.flowLiveType() != prevFlowLiveType) { - switch (prevFlowLiveType) { - // delete it from previous flow table - case SHORT_FLOW: - shortFlows.remove(rule); - break; - case MID_FLOW: - midFlows.remove(rule); - break; - case LONG_FLOW: - longFlows.remove(rule); - break; - default: - break; - } - } - } - - - // check the flow live type based on current time, then set and add it into corresponding table - private boolean checkAndMoveLiveFlowInternal(TypedStoredFlowEntry fe, long cTime) { - long curTime = (cTime > 0 ? cTime : System.currentTimeMillis()); - // For latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply - long fromLastSeen = ((curTime - fe.lastSeen() + latencyFlowStatsRequestAndReplyMillis) / 1000); - // fe.life() unit is SECOND! - long liveTime = fe.life() + fromLastSeen; - - - switch (fe.flowLiveType()) { - case IMMEDIATE_FLOW: - if (liveTime >= longPollInterval) { - fe.setFlowLiveType(FlowLiveType.LONG_FLOW); - longFlows.add(fe); - } else if (liveTime >= midPollInterval) { - fe.setFlowLiveType(FlowLiveType.MID_FLOW); - midFlows.add(fe); - } else if (liveTime >= calAndPollInterval) { - fe.setFlowLiveType(FlowLiveType.SHORT_FLOW); - shortFlows.add(fe); - } - break; - case SHORT_FLOW: - if (liveTime >= longPollInterval) { - fe.setFlowLiveType(FlowLiveType.LONG_FLOW); - shortFlows.remove(fe); - longFlows.add(fe); - } else if (liveTime >= midPollInterval) { - fe.setFlowLiveType(FlowLiveType.MID_FLOW); - shortFlows.remove(fe); - midFlows.add(fe); - } - break; - case MID_FLOW: - if (liveTime >= longPollInterval) { - fe.setFlowLiveType(FlowLiveType.LONG_FLOW); - midFlows.remove(fe); - longFlows.add(fe); - } - break; - case LONG_FLOW: - if (fromLastSeen > entirePollInterval) { - log.trace("checkAndMoveLiveFlowInternal, flow is already removed at switch."); - return false; - } - break; - case UNKNOWN_FLOW: // Unknown flow is an internal error flow type, just fall through - default : - // Error Unknown Live Type - log.error("checkAndMoveLiveFlowInternal, Unknown Live Type error!" - + "AdaptiveStats collection thread for {}", - sw.getStringId()); - return false; - } - - log.debug("checkAndMoveLiveFlowInternal, FlowId=" + Long.toHexString(fe.id().value()) - + ", state=" + fe.state() - + ", After liveType=" + fe.flowLiveType() - + ", liveTime=" + liveTime - + ", life=" + fe.life() - + ", bytes=" + fe.bytes() - + ", packets=" + fe.packets() - + ", fromLastSeen=" + fromLastSeen - + ", priority=" + fe.priority() - + ", selector=" + fe.selector().criteria() - + ", treatment=" + fe.treatment() - + " AdaptiveStats collection thread for {}", - sw.getStringId()); - - return true; - } - - /** - * Check and move live type for all type flow entries in table at every calAndPollInterval time. - * - */ - public void checkAndMoveLiveFlowAll() { - Set typedFlowEntries = getFlowEntriesInternal(); - - long calCurTime = System.currentTimeMillis(); - typedFlowEntries.forEach(fe -> { - if (!checkAndMoveLiveFlowInternal(fe, calCurTime)) { - remove(fe); - } - }); - - // print table counts for debug - if (log.isDebugEnabled()) { - synchronized (this) { - long totalFlowCount = getFlowCount(); - long shortFlowCount = shortFlows.size(); - long midFlowCount = midFlows.size(); - long longFlowCount = longFlows.size(); - long immediateFlowCount = totalFlowCount - shortFlowCount - midFlowCount - longFlowCount; - long calTotalCount = addCount + addWithSetFlowLiveTypeCount - removeCount; - - log.debug("--------------------------------------------------------------------------- for {}", - sw.getStringId()); - log.debug("checkAndMoveLiveFlowAll, Total Flow_Count=" + totalFlowCount - + ", add - remove_Count=" + calTotalCount - + ", IMMEDIATE_FLOW_Count=" + immediateFlowCount - + ", SHORT_FLOW_Count=" + shortFlowCount - + ", MID_FLOW_Count=" + midFlowCount - + ", LONG_FLOW_Count=" + longFlowCount - + ", add_Count=" + addCount - + ", addWithSetFlowLiveType_Count=" + addWithSetFlowLiveTypeCount - + ", remove_Count=" + removeCount - + " AdaptiveStats collection thread for {}", sw.getStringId()); - log.debug("--------------------------------------------------------------------------- for {}", - sw.getStringId()); - if (totalFlowCount != calTotalCount) { - log.error("checkAndMoveLiveFlowAll, Real total flow count and " - + "calculated total flow count do NOT match, something is wrong internally " - + "or check counter value bound is over!"); - } - if (immediateFlowCount < 0) { - log.error("checkAndMoveLiveFlowAll, IMMEDIATE_FLOW count is negative, " - + "something is wrong internally " - + "or check counter value bound is over!"); - } - } - } - log.trace("checkAndMoveLiveFlowAll, AdaptiveStats for {}", sw.getStringId()); - } - - /** - * Remove the typed flow entry from table. - * - * @param rule the flow rule - * - */ - public synchronized void remove(FlowRule rule) { - checkNotNull(rule); - - TypedStoredFlowEntry removeStore = getFlowEntryInternal(rule); - if (removeStore != null) { - removeLiveFlowsInternal((TypedStoredFlowEntry) removeStore); - boolean result = getFlowEntriesInternal(rule.id()).remove(removeStore); - - if (result) { - removeCount++; - } - } - } - - // Remove the typed flow entry from corresponding table - private void removeLiveFlowsInternal(TypedStoredFlowEntry fe) { - switch (fe.flowLiveType()) { - case IMMEDIATE_FLOW: - // do nothing - break; - case SHORT_FLOW: - shortFlows.remove(fe); - break; - case MID_FLOW: - midFlows.remove(fe); - break; - case LONG_FLOW: - longFlows.remove(fe); - break; - default: // error in Flow Live Type - log.error("removeLiveFlowsInternal, Unknown Live Type error!"); - break; - } - } - } -} +/* + * Copyright 2015 Open Networking Laboratory + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.provider.of.flow.impl; + +import com.google.common.base.Objects; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.onosproject.net.flow.DefaultTypedFlowEntry; +import org.onosproject.net.flow.FlowEntry; +import org.onosproject.net.flow.FlowId; +import org.onosproject.net.flow.FlowRule; +import org.onosproject.net.flow.StoredFlowEntry; +import org.onosproject.net.flow.TypedStoredFlowEntry; +import org.onosproject.net.flow.instructions.Instruction; +import org.onosproject.net.flow.instructions.Instructions; +import org.onosproject.openflow.controller.OpenFlowSwitch; +import org.onosproject.openflow.controller.RoleState; +import org.projectfloodlight.openflow.protocol.OFFlowStatsRequest; +import org.projectfloodlight.openflow.protocol.match.Match; +import org.projectfloodlight.openflow.types.OFPort; +import org.projectfloodlight.openflow.types.TableId; +import org.slf4j.Logger; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.onlab.util.Tools.groupedThreads; +import static org.onosproject.net.flow.TypedStoredFlowEntry.FlowLiveType; +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Efficiently and adaptively collects flow statistics for the specified switch. + */ +public class NewAdaptiveFlowStatsCollector { + + private final Logger log = getLogger(getClass()); + + private final OpenFlowSwitch sw; + + private ScheduledExecutorService adaptiveFlowStatsScheduler = + Executors.newScheduledThreadPool(4, groupedThreads("onos/flow", "device-stats-collector-%d")); + private ScheduledFuture calAndShortFlowsThread; + private ScheduledFuture midFlowsThread; + private ScheduledFuture longFlowsThread; + + // Task that calculates all flowEntries' FlowLiveType and collects stats IMMEDIATE flows every calAndPollInterval + private CalAndShortFlowsTask calAndShortFlowsTask; + // Task that collects stats MID flows every 2*calAndPollInterval + private MidFlowsTask midFlowsTask; + // Task that collects stats LONG flows every 3*calAndPollInterval + private LongFlowsTask longFlowsTask; + + private static final int CAL_AND_POLL_TIMES = 1; // must be always 0 + private static final int MID_POLL_TIMES = 2; // variable greater or equal than 1 + private static final int LONG_POLL_TIMES = 3; // variable greater or equal than MID_POLL_TIMES + //TODO: make ENTIRE_POLL_TIMES configurable with enable or disable + // must be variable greater or equal than common multiple of MID_POLL_TIMES and LONG_POLL_TIMES + private static final int ENTIRE_POLL_TIMES = 6; + + private static final int DEFAULT_CAL_AND_POLL_FREQUENCY = 5; + private static final int MIN_CAL_AND_POLL_FREQUENCY = 2; + private static final int MAX_CAL_AND_POLL_FREQUENCY = 60; + + private int calAndPollInterval; // CAL_AND_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; + private int midPollInterval; // MID_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; + private int longPollInterval; // LONG_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; + // only used for checking condition at each task if it collects entire flows from a given switch or not + private int entirePollInterval; // ENTIRE_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY; + + // Number of call count of each Task, + // for undoing collection except only entire flows collecting task in CalAndShortFlowsTask + private int callCountCalAndShortFlowsTask = 0; // increased CAL_AND_POLL_TIMES whenever Task is called + private int callCountMidFlowsTask = 0; // increased MID_POLL_TIMES whenever Task is called + private int callCountLongFlowsTask = 0; // increased LONG_POLL_TIMES whenever Task is called + + private InternalDeviceFlowTable deviceFlowTable = new InternalDeviceFlowTable(); + + private boolean isFirstTimeStart = true; + + public static final long NO_FLOW_MISSING_XID = (-1); + private long flowMissingXid = NO_FLOW_MISSING_XID; + + /** + * Creates a new adaptive collector for the given switch and default cal_and_poll frequency. + * + * @param sw switch to pull + * @param pollInterval cal and immediate poll frequency in seconds + */ + NewAdaptiveFlowStatsCollector(OpenFlowSwitch sw, int pollInterval) { + this.sw = sw; + + initMemberVars(pollInterval); + } + + // check calAndPollInterval validity and set all pollInterval values and finally initialize each task call count + private void initMemberVars(int pollInterval) { + if (pollInterval < MIN_CAL_AND_POLL_FREQUENCY) { + this.calAndPollInterval = MIN_CAL_AND_POLL_FREQUENCY; + } else if (pollInterval >= MAX_CAL_AND_POLL_FREQUENCY) { + this.calAndPollInterval = MAX_CAL_AND_POLL_FREQUENCY; + } else { + this.calAndPollInterval = pollInterval; + } + + calAndPollInterval = CAL_AND_POLL_TIMES * calAndPollInterval; + midPollInterval = MID_POLL_TIMES * calAndPollInterval; + longPollInterval = LONG_POLL_TIMES * calAndPollInterval; + entirePollInterval = ENTIRE_POLL_TIMES * calAndPollInterval; + + callCountCalAndShortFlowsTask = 0; + callCountMidFlowsTask = 0; + callCountLongFlowsTask = 0; + + flowMissingXid = NO_FLOW_MISSING_XID; + } + + /** + * Adjusts adaptive poll frequency. + * + * @param pollInterval poll frequency in seconds + */ + synchronized void adjustCalAndPollInterval(int pollInterval) { + initMemberVars(pollInterval); + + if (calAndShortFlowsThread != null) { + calAndShortFlowsThread.cancel(false); + } + if (midFlowsThread != null) { + midFlowsThread.cancel(false); + } + if (longFlowsThread != null) { + longFlowsThread.cancel(false); + } + + calAndShortFlowsTask = new CalAndShortFlowsTask(); + calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + calAndShortFlowsTask, + 0, + calAndPollInterval, + TimeUnit.SECONDS); + + midFlowsTask = new MidFlowsTask(); + midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + midFlowsTask, + 0, + midPollInterval, + TimeUnit.SECONDS); + + longFlowsTask = new LongFlowsTask(); + longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + longFlowsTask, + 0, + longPollInterval, + TimeUnit.SECONDS); + + log.debug("calAndPollInterval=" + calAndPollInterval + "is adjusted"); + } + + private class CalAndShortFlowsTask implements Runnable { + @Override + public void run() { + if (sw.getRole() == RoleState.MASTER) { + log.trace("CalAndShortFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); + + if (isFirstTimeStart) { + // isFirstTimeStart, get entire flow stats from a given switch sw + log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats at first time start for {}", + sw.getStringId()); + ofFlowStatsRequestAllSend(); + + callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES; + isFirstTimeStart = false; + } else if (callCountCalAndShortFlowsTask == ENTIRE_POLL_TIMES) { + // entire_poll_times, get entire flow stats from a given switch sw + log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats for {}", sw.getStringId()); + ofFlowStatsRequestAllSend(); + + callCountCalAndShortFlowsTask = CAL_AND_POLL_TIMES; + //TODO: check flows deleted in switch, but exist in controller flow table, then remove them + // + } else { + calAndShortFlowsTaskInternal(); + callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES; + } + } + } + } + + // send openflow flow stats request message with getting all flow entries to a given switch sw + private void ofFlowStatsRequestAllSend() { + OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest() + .setMatch(sw.factory().matchWildcardAll()) + .setTableId(TableId.ALL) + .setOutPort(OFPort.NO_MASK) + .build(); + + synchronized (this) { + // set the request xid to check the reply in OpenFlowRuleProvider + // After processing the reply of this request message, + // this must be set to NO_FLOW_MISSING_XID(-1) by provider + setFlowMissingXid(request.getXid()); + log.debug("ofFlowStatsRequestAllSend,Request={},for {}", request.toString(), sw.getStringId()); + + sw.sendMsg(request); + } + } + + // send openflow flow stats request message with getting the specific flow entry(fe) to a given switch sw + private void ofFlowStatsRequestFlowSend(FlowEntry fe) { + // set find match + Match match = FlowModBuilder.builder(fe, sw.factory(), Optional.empty(), + Optional.empty()).buildMatch(); + // set find tableId + TableId tableId = TableId.of(fe.tableId()); + // set output port + Instruction ins = fe.treatment().allInstructions().stream() + .filter(i -> (i.type() == Instruction.Type.OUTPUT)) + .findFirst() + .orElse(null); + OFPort ofPort = OFPort.NO_MASK; + if (ins != null) { + Instructions.OutputInstruction out = (Instructions.OutputInstruction) ins; + ofPort = OFPort.of((int) ((out.port().toLong()))); + } + + OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest() + .setMatch(match) + .setTableId(tableId) + .setOutPort(ofPort) + .build(); + + synchronized (this) { + if (getFlowMissingXid() != NO_FLOW_MISSING_XID) { + log.debug("ofFlowStatsRequestFlowSend: previous FlowStatsRequestAll does not be processed yet," + + " set no flow missing xid anyway, for {}", + sw.getStringId()); + setFlowMissingXid(NO_FLOW_MISSING_XID); + } + + sw.sendMsg(request); + } + } + + private void calAndShortFlowsTaskInternal() { + deviceFlowTable.checkAndMoveLiveFlowAll(); + + deviceFlowTable.getShortFlows().forEach(fe -> { + ofFlowStatsRequestFlowSend(fe); + }); + } + + private class MidFlowsTask implements Runnable { + @Override + public void run() { + if (sw.getRole() == RoleState.MASTER) { + log.trace("MidFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); + + // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw + if (callCountMidFlowsTask == ENTIRE_POLL_TIMES) { + callCountMidFlowsTask = MID_POLL_TIMES; + } else { + midFlowsTaskInternal(); + callCountMidFlowsTask += MID_POLL_TIMES; + } + } + } + } + + private void midFlowsTaskInternal() { + deviceFlowTable.getMidFlows().forEach(fe -> { + ofFlowStatsRequestFlowSend(fe); + }); + } + + private class LongFlowsTask implements Runnable { + @Override + public void run() { + if (sw.getRole() == RoleState.MASTER) { + log.trace("LongFlowsTask Collecting AdaptiveStats for {}", sw.getStringId()); + + // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw + if (callCountLongFlowsTask == ENTIRE_POLL_TIMES) { + callCountLongFlowsTask = LONG_POLL_TIMES; + } else { + longFlowsTaskInternal(); + callCountLongFlowsTask += LONG_POLL_TIMES; + } + } + } + } + + private void longFlowsTaskInternal() { + deviceFlowTable.getLongFlows().forEach(fe -> { + ofFlowStatsRequestFlowSend(fe); + }); + } + + /** + * start adaptive flow statistic collection. + * + */ + public synchronized void start() { + log.debug("Starting AdaptiveStats collection thread for {}", sw.getStringId()); + callCountCalAndShortFlowsTask = 0; + callCountMidFlowsTask = 0; + callCountLongFlowsTask = 0; + + isFirstTimeStart = true; + + // Initially start polling quickly. Then drop down to configured value + calAndShortFlowsTask = new CalAndShortFlowsTask(); + calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + calAndShortFlowsTask, + 1, + calAndPollInterval, + TimeUnit.SECONDS); + + midFlowsTask = new MidFlowsTask(); + midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + midFlowsTask, + 1, + midPollInterval, + TimeUnit.SECONDS); + + longFlowsTask = new LongFlowsTask(); + longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay( + longFlowsTask, + 1, + longPollInterval, + TimeUnit.SECONDS); + + log.info("Started"); + } + + /** + * stop adaptive flow statistic collection. + * + */ + public synchronized void stop() { + log.debug("Stopping AdaptiveStats collection thread for {}", sw.getStringId()); + if (calAndShortFlowsThread != null) { + calAndShortFlowsThread.cancel(true); + } + if (midFlowsThread != null) { + midFlowsThread.cancel(true); + } + if (longFlowsThread != null) { + longFlowsThread.cancel(true); + } + + adaptiveFlowStatsScheduler.shutdownNow(); + + isFirstTimeStart = false; + + log.info("Stopped"); + } + + /** + * add typed flow entry from flow rule into the internal flow table. + * + * @param flowRules the flow rules + * + */ + public synchronized void addWithFlowRule(FlowRule... flowRules) { + for (FlowRule fr : flowRules) { + // First remove old entry unconditionally, if exist + deviceFlowTable.remove(fr); + + // add new flow entry, we suppose IMMEDIATE_FLOW + TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fr, + FlowLiveType.IMMEDIATE_FLOW); + deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry); + } + } + + /** + * add or update typed flow entry from flow entry into the internal flow table. + * + * @param flowEntries the flow entries + * + */ + public synchronized void addOrUpdateFlows(FlowEntry... flowEntries) { + for (FlowEntry fe : flowEntries) { + // check if this new rule is an update to an existing entry + TypedStoredFlowEntry stored = deviceFlowTable.getFlowEntry(fe); + + if (stored != null) { + // duplicated flow entry is collected!, just skip + if (fe.bytes() == stored.bytes() && fe.packets() == stored.packets() + && fe.life() == stored.life()) { + log.debug("addOrUpdateFlows:, FlowId=" + Long.toHexString(fe.id().value()) + + ",is DUPLICATED stats collection, just skip." + + " AdaptiveStats collection thread for {}", + sw.getStringId()); + + stored.setLastSeen(); + continue; + } else if (fe.life() < stored.life()) { + // Invalid updates the stats values, i.e., bytes, packets, durations ... + log.debug("addOrUpdateFlows():" + + " Invalid Flow Update! The new life is SMALLER than the previous one, jus skip." + + " new flowId=" + Long.toHexString(fe.id().value()) + + ", old flowId=" + Long.toHexString(stored.id().value()) + + ", new bytes=" + fe.bytes() + ", old bytes=" + stored.bytes() + + ", new life=" + fe.life() + ", old life=" + stored.life() + + ", new lastSeen=" + fe.lastSeen() + ", old lastSeen=" + stored.lastSeen()); + // go next + stored.setLastSeen(); + continue; + } + + // update now + stored.setLife(fe.life()); + stored.setPackets(fe.packets()); + stored.setBytes(fe.bytes()); + stored.setLastSeen(); + if (stored.state() == FlowEntry.FlowEntryState.PENDING_ADD) { + // flow is really RULE_ADDED + stored.setState(FlowEntry.FlowEntryState.ADDED); + } + // flow is RULE_UPDATED, skip adding and just updating flow live table + //deviceFlowTable.calAndSetFlowLiveType(stored); + continue; + } + + // add new flow entry, we suppose IMMEDIATE_FLOW + TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fe, + FlowLiveType.IMMEDIATE_FLOW); + deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry); + } + } + + /** + * remove typed flow entry from the internal flow table. + * + * @param flowRules the flow entries + * + */ + public synchronized void removeFlows(FlowRule... flowRules) { + for (FlowRule rule : flowRules) { + deviceFlowTable.remove(rule); + } + } + + // same as removeFlows() function + /** + * remove typed flow entry from the internal flow table. + * + * @param flowRules the flow entries + * + */ + public void flowRemoved(FlowRule... flowRules) { + removeFlows(flowRules); + } + + // same as addOrUpdateFlows() function + /** + * add or update typed flow entry from flow entry into the internal flow table. + * + * @param flowEntries the flow entry list + * + */ + public void pushFlowMetrics(List flowEntries) { + flowEntries.forEach(fe -> { + addOrUpdateFlows(fe); + }); + } + + /** + * returns flowMissingXid that indicates the execution of flowMissing process or not(NO_FLOW_MISSING_XID(-1)). + * + * @return xid of missing flow + */ + public long getFlowMissingXid() { + return flowMissingXid; + } + + /** + * set flowMissingXid, namely OFFlowStatsRequest match any ALL message Id. + * + * @param flowMissingXid the OFFlowStatsRequest message Id + * + */ + public void setFlowMissingXid(long flowMissingXid) { + this.flowMissingXid = flowMissingXid; + } + + private class InternalDeviceFlowTable { + + private final Map> + flowEntries = Maps.newConcurrentMap(); + + private final Set shortFlows = new HashSet<>(); + private final Set midFlows = new HashSet<>(); + private final Set longFlows = new HashSet<>(); + + // Assumed latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply + private final long latencyFlowStatsRequestAndReplyMillis = 500; + + + // Statistics for table operation + private long addCount = 0, addWithSetFlowLiveTypeCount = 0; + private long removeCount = 0; + + /** + * Resets all count values with zero. + * + */ + public void resetAllCount() { + addCount = 0; + addWithSetFlowLiveTypeCount = 0; + removeCount = 0; + } + + // get set of flow entries for the given flowId + private Set getFlowEntriesInternal(FlowId flowId) { + return flowEntries.computeIfAbsent(flowId, id -> Sets.newCopyOnWriteArraySet()); + } + + // get flow entry for the given flow rule + private TypedStoredFlowEntry getFlowEntryInternal(FlowRule rule) { + Set flowEntries = getFlowEntriesInternal(rule.id()); + return flowEntries.stream() + .filter(entry -> Objects.equal(entry, rule)) + .findAny() + .orElse(null); + } + + // get the flow entries for all flows in flow table + private Set getFlowEntriesInternal() { + Set result = Sets.newHashSet(); + + flowEntries.values().forEach(result::addAll); + return result; + } + + /** + * Gets the number of flow entry in flow table. + * + * @return the number of flow entry. + * + */ + public long getFlowCount() { + return flowEntries.values().stream().mapToLong(Set::size).sum(); + } + + /** + * Gets the number of flow entry in flow table. + * + * @param rule the flow rule + * @return the typed flow entry. + * + */ + public TypedStoredFlowEntry getFlowEntry(FlowRule rule) { + checkNotNull(rule); + + return getFlowEntryInternal(rule); + } + + /** + * Gets the all typed flow entries in flow table. + * + * @return the set of typed flow entry. + * + */ + public Set getFlowEntries() { + return getFlowEntriesInternal(); + } + + /** + * Gets the short typed flow entries in flow table. + * + * @return the set of typed flow entry. + * + */ + public Set getShortFlows() { + return ImmutableSet.copyOf(shortFlows); //Sets.newHashSet(shortFlows); + } + + /** + * Gets the mid typed flow entries in flow table. + * + * @return the set of typed flow entry. + * + */ + public Set getMidFlows() { + return ImmutableSet.copyOf(midFlows); //Sets.newHashSet(midFlows); + } + + /** + * Gets the long typed flow entries in flow table. + * + * @return the set of typed flow entry. + * + */ + public Set getLongFlows() { + return ImmutableSet.copyOf(longFlows); //Sets.newHashSet(longFlows); + } + + /** + * Add typed flow entry into table only. + * + * @param rule the flow rule + * + */ + public synchronized void add(TypedStoredFlowEntry rule) { + checkNotNull(rule); + + //rule have to be new DefaultTypedFlowEntry + boolean result = getFlowEntriesInternal(rule.id()).add(rule); + + if (result) { + addCount++; + } + } + + /** + * Calculates and set the flow live type at the first time, + * and then add it into a corresponding typed flow table. + * + * @param rule the flow rule + * + */ + public void calAndSetFlowLiveType(TypedStoredFlowEntry rule) { + checkNotNull(rule); + + calAndSetFlowLiveTypeInternal(rule); + } + + /** + * Add the typed flow entry into table, and calculates and set the flow live type, + * and then add it into a corresponding typed flow table. + * + * @param rule the flow rule + * + */ + public synchronized void addWithCalAndSetFlowLiveType(TypedStoredFlowEntry rule) { + checkNotNull(rule); + + //rule have to be new DefaultTypedFlowEntry + boolean result = getFlowEntriesInternal(rule.id()).add(rule); + if (result) { + calAndSetFlowLiveTypeInternal(rule); + addWithSetFlowLiveTypeCount++; + } else { + log.debug("addWithCalAndSetFlowLiveType, FlowId=" + Long.toHexString(rule.id().value()) + + " ADD Failed, cause it may already exists in table !!!," + + " AdaptiveStats collection thread for {}", + sw.getStringId()); + } + } + + // In real, calculates and set the flow live type at the first time, + // and then add it into a corresponding typed flow table + private void calAndSetFlowLiveTypeInternal(TypedStoredFlowEntry rule) { + long life = rule.life(); + FlowLiveType prevFlowLiveType = rule.flowLiveType(); + + if (life >= longPollInterval) { + rule.setFlowLiveType(FlowLiveType.LONG_FLOW); + longFlows.add(rule); + } else if (life >= midPollInterval) { + rule.setFlowLiveType(FlowLiveType.MID_FLOW); + midFlows.add(rule); + } else if (life >= calAndPollInterval) { + rule.setFlowLiveType(FlowLiveType.SHORT_FLOW); + shortFlows.add(rule); + } else if (life >= 0) { + rule.setFlowLiveType(FlowLiveType.IMMEDIATE_FLOW); + } else { // life < 0 + rule.setFlowLiveType(FlowLiveType.UNKNOWN_FLOW); + } + + if (rule.flowLiveType() != prevFlowLiveType) { + switch (prevFlowLiveType) { + // delete it from previous flow table + case SHORT_FLOW: + shortFlows.remove(rule); + break; + case MID_FLOW: + midFlows.remove(rule); + break; + case LONG_FLOW: + longFlows.remove(rule); + break; + default: + break; + } + } + } + + + // check the flow live type based on current time, then set and add it into corresponding table + private boolean checkAndMoveLiveFlowInternal(TypedStoredFlowEntry fe, long cTime) { + long curTime = (cTime > 0 ? cTime : System.currentTimeMillis()); + // For latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply + long fromLastSeen = ((curTime - fe.lastSeen() + latencyFlowStatsRequestAndReplyMillis) / 1000); + // fe.life() unit is SECOND! + long liveTime = fe.life() + fromLastSeen; + + + switch (fe.flowLiveType()) { + case IMMEDIATE_FLOW: + if (liveTime >= longPollInterval) { + fe.setFlowLiveType(FlowLiveType.LONG_FLOW); + longFlows.add(fe); + } else if (liveTime >= midPollInterval) { + fe.setFlowLiveType(FlowLiveType.MID_FLOW); + midFlows.add(fe); + } else if (liveTime >= calAndPollInterval) { + fe.setFlowLiveType(FlowLiveType.SHORT_FLOW); + shortFlows.add(fe); + } + break; + case SHORT_FLOW: + if (liveTime >= longPollInterval) { + fe.setFlowLiveType(FlowLiveType.LONG_FLOW); + shortFlows.remove(fe); + longFlows.add(fe); + } else if (liveTime >= midPollInterval) { + fe.setFlowLiveType(FlowLiveType.MID_FLOW); + shortFlows.remove(fe); + midFlows.add(fe); + } + break; + case MID_FLOW: + if (liveTime >= longPollInterval) { + fe.setFlowLiveType(FlowLiveType.LONG_FLOW); + midFlows.remove(fe); + longFlows.add(fe); + } + break; + case LONG_FLOW: + if (fromLastSeen > entirePollInterval) { + log.trace("checkAndMoveLiveFlowInternal, flow is already removed at switch."); + return false; + } + break; + case UNKNOWN_FLOW: // Unknown flow is an internal error flow type, just fall through + default : + // Error Unknown Live Type + log.error("checkAndMoveLiveFlowInternal, Unknown Live Type error!" + + "AdaptiveStats collection thread for {}", + sw.getStringId()); + return false; + } + + log.debug("checkAndMoveLiveFlowInternal, FlowId=" + Long.toHexString(fe.id().value()) + + ", state=" + fe.state() + + ", After liveType=" + fe.flowLiveType() + + ", liveTime=" + liveTime + + ", life=" + fe.life() + + ", bytes=" + fe.bytes() + + ", packets=" + fe.packets() + + ", fromLastSeen=" + fromLastSeen + + ", priority=" + fe.priority() + + ", selector=" + fe.selector().criteria() + + ", treatment=" + fe.treatment() + + " AdaptiveStats collection thread for {}", + sw.getStringId()); + + return true; + } + + /** + * Check and move live type for all type flow entries in table at every calAndPollInterval time. + * + */ + public void checkAndMoveLiveFlowAll() { + Set typedFlowEntries = getFlowEntriesInternal(); + + long calCurTime = System.currentTimeMillis(); + typedFlowEntries.forEach(fe -> { + if (!checkAndMoveLiveFlowInternal(fe, calCurTime)) { + remove(fe); + } + }); + + // print table counts for debug + if (log.isDebugEnabled()) { + synchronized (this) { + long totalFlowCount = getFlowCount(); + long shortFlowCount = shortFlows.size(); + long midFlowCount = midFlows.size(); + long longFlowCount = longFlows.size(); + long immediateFlowCount = totalFlowCount - shortFlowCount - midFlowCount - longFlowCount; + long calTotalCount = addCount + addWithSetFlowLiveTypeCount - removeCount; + + log.debug("--------------------------------------------------------------------------- for {}", + sw.getStringId()); + log.debug("checkAndMoveLiveFlowAll, Total Flow_Count=" + totalFlowCount + + ", add - remove_Count=" + calTotalCount + + ", IMMEDIATE_FLOW_Count=" + immediateFlowCount + + ", SHORT_FLOW_Count=" + shortFlowCount + + ", MID_FLOW_Count=" + midFlowCount + + ", LONG_FLOW_Count=" + longFlowCount + + ", add_Count=" + addCount + + ", addWithSetFlowLiveType_Count=" + addWithSetFlowLiveTypeCount + + ", remove_Count=" + removeCount + + " AdaptiveStats collection thread for {}", sw.getStringId()); + log.debug("--------------------------------------------------------------------------- for {}", + sw.getStringId()); + if (totalFlowCount != calTotalCount) { + log.error("checkAndMoveLiveFlowAll, Real total flow count and " + + "calculated total flow count do NOT match, something is wrong internally " + + "or check counter value bound is over!"); + } + if (immediateFlowCount < 0) { + log.error("checkAndMoveLiveFlowAll, IMMEDIATE_FLOW count is negative, " + + "something is wrong internally " + + "or check counter value bound is over!"); + } + } + } + log.trace("checkAndMoveLiveFlowAll, AdaptiveStats for {}", sw.getStringId()); + } + + /** + * Remove the typed flow entry from table. + * + * @param rule the flow rule + * + */ + public synchronized void remove(FlowRule rule) { + checkNotNull(rule); + + TypedStoredFlowEntry removeStore = getFlowEntryInternal(rule); + if (removeStore != null) { + removeLiveFlowsInternal((TypedStoredFlowEntry) removeStore); + boolean result = getFlowEntriesInternal(rule.id()).remove(removeStore); + + if (result) { + removeCount++; + } + } + } + + // Remove the typed flow entry from corresponding table + private void removeLiveFlowsInternal(TypedStoredFlowEntry fe) { + switch (fe.flowLiveType()) { + case IMMEDIATE_FLOW: + // do nothing + break; + case SHORT_FLOW: + shortFlows.remove(fe); + break; + case MID_FLOW: + midFlows.remove(fe); + break; + case LONG_FLOW: + longFlows.remove(fe); + break; + default: // error in Flow Live Type + log.error("removeLiveFlowsInternal, Unknown Live Type error!"); + break; + } + } + } +} diff --git a/framework/src/onos/providers/openflow/group/pom.xml b/framework/src/onos/providers/openflow/group/pom.xml index 049ccaff..c63a016d 100644 --- a/framework/src/onos/providers/openflow/group/pom.xml +++ b/framework/src/onos/providers/openflow/group/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/meter/pom.xml b/framework/src/onos/providers/openflow/meter/pom.xml index 55068cd7..46bcefcf 100644 --- a/framework/src/onos/providers/openflow/meter/pom.xml +++ b/framework/src/onos/providers/openflow/meter/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/packet/pom.xml b/framework/src/onos/providers/openflow/packet/pom.xml index cc2316c9..b8dbb689 100644 --- a/framework/src/onos/providers/openflow/packet/pom.xml +++ b/framework/src/onos/providers/openflow/packet/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-of-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/openflow/pom.xml b/framework/src/onos/providers/openflow/pom.xml index 1250af61..349168e1 100644 --- a/framework/src/onos/providers/openflow/pom.xml +++ b/framework/src/onos/providers/openflow/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/ovsdb/app/pom.xml b/framework/src/onos/providers/ovsdb/app/pom.xml index b615d124..9101c0f8 100644 --- a/framework/src/onos/providers/ovsdb/app/pom.xml +++ b/framework/src/onos/providers/ovsdb/app/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-ovsdb-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/ovsdb/device/pom.xml b/framework/src/onos/providers/ovsdb/device/pom.xml index 8f9b834b..f770d73f 100644 --- a/framework/src/onos/providers/ovsdb/device/pom.xml +++ b/framework/src/onos/providers/ovsdb/device/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-ovsdb-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-ovsdb-provider-device diff --git a/framework/src/onos/providers/ovsdb/host/pom.xml b/framework/src/onos/providers/ovsdb/host/pom.xml index f54a496b..3acc7a20 100644 --- a/framework/src/onos/providers/ovsdb/host/pom.xml +++ b/framework/src/onos/providers/ovsdb/host/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-ovsdb-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-ovsdb-provider-host diff --git a/framework/src/onos/providers/ovsdb/pom.xml b/framework/src/onos/providers/ovsdb/pom.xml index cce971d5..1256f1a2 100644 --- a/framework/src/onos/providers/ovsdb/pom.xml +++ b/framework/src/onos/providers/ovsdb/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-ovsdb-providers diff --git a/framework/src/onos/providers/ovsdb/tunnel/pom.xml b/framework/src/onos/providers/ovsdb/tunnel/pom.xml index 3eae2588..455b1747 100644 --- a/framework/src/onos/providers/ovsdb/tunnel/pom.xml +++ b/framework/src/onos/providers/ovsdb/tunnel/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-ovsdb-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-ovsdb-provider-tunnel diff --git a/framework/src/onos/providers/pcep/app/pom.xml b/framework/src/onos/providers/pcep/app/pom.xml index 35c1e9cf..62a87453 100644 --- a/framework/src/onos/providers/pcep/app/pom.xml +++ b/framework/src/onos/providers/pcep/app/pom.xml @@ -19,7 +19,7 @@ org.onosproject onos-pcep-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/pcep/pom.xml b/framework/src/onos/providers/pcep/pom.xml index b6a425bb..4cde516a 100644 --- a/framework/src/onos/providers/pcep/pom.xml +++ b/framework/src/onos/providers/pcep/pom.xml @@ -18,7 +18,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-pcep-providers diff --git a/framework/src/onos/providers/pcep/topology/pom.xml b/framework/src/onos/providers/pcep/topology/pom.xml index ff14b653..cb8e0034 100644 --- a/framework/src/onos/providers/pcep/topology/pom.xml +++ b/framework/src/onos/providers/pcep/topology/pom.xml @@ -18,7 +18,7 @@ org.onosproject onos-pcep-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-pcep-provider-topology diff --git a/framework/src/onos/providers/pcep/tunnel/pom.xml b/framework/src/onos/providers/pcep/tunnel/pom.xml index 2613c41c..af303f89 100644 --- a/framework/src/onos/providers/pcep/tunnel/pom.xml +++ b/framework/src/onos/providers/pcep/tunnel/pom.xml @@ -19,7 +19,7 @@ org.onosproject onos-pcep-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml onos-pcep-provider-tunnel diff --git a/framework/src/onos/providers/pom.xml b/framework/src/onos/providers/pom.xml index 5665d324..5b6b6cc5 100644 --- a/framework/src/onos/providers/pom.xml +++ b/framework/src/onos/providers/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/snmp/alarm/pom.xml b/framework/src/onos/providers/snmp/alarm/pom.xml index f0a292e9..1ca18212 100644 --- a/framework/src/onos/providers/snmp/alarm/pom.xml +++ b/framework/src/onos/providers/snmp/alarm/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-snmp-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/providers/snmp/pom.xml b/framework/src/onos/providers/snmp/pom.xml index 21031d98..c9338f05 100644 --- a/framework/src/onos/providers/snmp/pom.xml +++ b/framework/src/onos/providers/snmp/pom.xml @@ -22,7 +22,7 @@ org.onosproject onos-providers - 1.4.0-SNAPSHOT + 1.4.0-rc1 ../pom.xml diff --git a/framework/src/onos/tools/build/envDefaults b/framework/src/onos/tools/build/envDefaults index 34fcccb2..db54a73e 100644 --- a/framework/src/onos/tools/build/envDefaults +++ b/framework/src/onos/tools/build/envDefaults @@ -18,8 +18,8 @@ export PATH="$PATH:$ONOS_ROOT/tools/build" export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)~$(date +'%Y/%m/%d@%H:%M')} # ONOS Version and onos.tar.gz staging environment -export ONOS_POM_VERSION="1.4.0-SNAPSHOT" -export ONOS_VERSION=${ONOS_VERSION:-1.4.0.$BUILD_NUMBER} +export ONOS_POM_VERSION="1.4.0-rc1" +export ONOS_VERSION=${ONOS_VERSION:-1.4.0-rc1.$BUILD_NUMBER} # ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment export ONOS_BITS=onos-${ONOS_VERSION%~*} diff --git a/framework/src/onos/tools/package/archetypes/api/pom.xml b/framework/src/onos/tools/package/archetypes/api/pom.xml index 8deaada9..0ad9b69b 100644 --- a/framework/src/onos/tools/package/archetypes/api/pom.xml +++ b/framework/src/onos/tools/package/archetypes/api/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-api-archetype diff --git a/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml index a0e54f3f..89a4f464 100644 --- a/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml +++ b/framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml @@ -26,7 +26,7 @@ http://onosproject.org - 1.4.0-SNAPSHOT + 1.4.0-rc1 diff --git a/framework/src/onos/tools/package/archetypes/bundle/pom.xml b/framework/src/onos/tools/package/archetypes/bundle/pom.xml index 65b55b2b..0709acd5 100644 --- a/framework/src/onos/tools/package/archetypes/bundle/pom.xml +++ b/framework/src/onos/tools/package/archetypes/bundle/pom.xml @@ -20,7 +20,7 @@ org.onosproject onos-archetypes - 1.4.0-SNAPSHOT + 1.4.0-rc1 onos-bundle-archetype diff --git a/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml b/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml index 222e8b03..bf0f7ea1 100644 --- a/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml +++ b/framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml @@ -26,7 +26,7 @@ http://onosproject.org - 1.4.0-SNAPSHOT + 1.4.0-rc1