onos-1.4.0-rc1 tag 05/4105/1
authorAshlee Young <ashlee@wildernessvoice.com>
Tue, 8 Dec 2015 19:32:02 +0000 (11:32 -0800)
committerAshlee Young <ashlee@wildernessvoice.com>
Tue, 8 Dec 2015 19:32:02 +0000 (11:32 -0800)
Change-Id: I7f6b85bbf2574b9e174ad919ff36acde28ca50a1
Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
165 files changed:
build.sh
framework/src/onos/apps/aaa/pom.xml
framework/src/onos/apps/acl/pom.xml
framework/src/onos/apps/bgprouter/pom.xml
framework/src/onos/apps/cip/pom.xml
framework/src/onos/apps/cordfabric/pom.xml
framework/src/onos/apps/cordvtn/pom.xml
framework/src/onos/apps/cpman/pom.xml
framework/src/onos/apps/demo/cord-gui/pom.xml
framework/src/onos/apps/demo/cord-gui/src/scripts/pullwar.sh
framework/src/onos/apps/demo/cord-gui/src/scripts/run.me
framework/src/onos/apps/dhcp/api/pom.xml
framework/src/onos/apps/dhcp/app/pom.xml
framework/src/onos/apps/dhcp/pom.xml
framework/src/onos/apps/faultmanagement/app/pom.xml
framework/src/onos/apps/faultmanagement/fmmgr/pom.xml
framework/src/onos/apps/faultmanagement/fmweb/pom.xml
framework/src/onos/apps/faultmanagement/pom.xml
framework/src/onos/apps/flowanalyzer/pom.xml
framework/src/onos/apps/fwd/pom.xml
framework/src/onos/apps/igmp/pom.xml
framework/src/onos/apps/iptopology-api/pom.xml
framework/src/onos/apps/metrics/pom.xml
framework/src/onos/apps/mfwd/pom.xml
framework/src/onos/apps/mlb/pom.xml
framework/src/onos/apps/mobility/pom.xml
framework/src/onos/apps/olt/pom.xml
framework/src/onos/apps/openstackswitching/api/pom.xml
framework/src/onos/apps/openstackswitching/app/pom.xml
framework/src/onos/apps/openstackswitching/pom.xml
framework/src/onos/apps/optical/pom.xml
framework/src/onos/apps/pathpainter/pom.xml
framework/src/onos/apps/pcep-api/pom.xml
framework/src/onos/apps/pim/pom.xml
framework/src/onos/apps/pom.xml
framework/src/onos/apps/proxyarp/pom.xml
framework/src/onos/apps/reactive-routing/pom.xml
framework/src/onos/apps/routing-api/pom.xml
framework/src/onos/apps/routing/pom.xml
framework/src/onos/apps/sdnip/pom.xml
framework/src/onos/apps/segmentrouting/pom.xml
framework/src/onos/apps/test/demo/pom.xml
framework/src/onos/apps/test/distributed-primitives/pom.xml
framework/src/onos/apps/test/election/pom.xml
framework/src/onos/apps/test/intent-perf/pom.xml
framework/src/onos/apps/test/messaging-perf/pom.xml
framework/src/onos/apps/test/pom.xml
framework/src/onos/apps/virtualbng/pom.xml
framework/src/onos/apps/vtn/app/pom.xml
framework/src/onos/apps/vtn/pom.xml
framework/src/onos/apps/vtn/sfcmgr/pom.xml
framework/src/onos/apps/vtn/vtnmgr/pom.xml
framework/src/onos/apps/vtn/vtnrsc/pom.xml
framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/FlowClassifierService.java
framework/src/onos/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
framework/src/onos/apps/vtn/vtnweb/pom.xml
framework/src/onos/apps/xos-integration/pom.xml
framework/src/onos/cli/pom.xml
framework/src/onos/core/api/pom.xml
framework/src/onos/core/common/pom.xml
framework/src/onos/core/net/pom.xml
framework/src/onos/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
framework/src/onos/core/pom.xml
framework/src/onos/core/security/pom.xml
framework/src/onos/core/store/dist/pom.xml
framework/src/onos/core/store/persistence/pom.xml
framework/src/onos/core/store/pom.xml
framework/src/onos/core/store/serializers/pom.xml
framework/src/onos/docs/external.xml
framework/src/onos/docs/internal.xml
framework/src/onos/drivers/pom.xml
framework/src/onos/features/pom.xml
framework/src/onos/incubator/api/pom.xml
framework/src/onos/incubator/net/pom.xml
framework/src/onos/incubator/pom.xml
framework/src/onos/incubator/rpc-grpc/pom.xml
framework/src/onos/incubator/rpc/pom.xml
framework/src/onos/incubator/store/pom.xml
framework/src/onos/pom.xml
framework/src/onos/protocols/bgp/api/pom.xml
framework/src/onos/protocols/bgp/bgpio/pom.xml
framework/src/onos/protocols/bgp/ctl/pom.xml
framework/src/onos/protocols/bgp/pom.xml
framework/src/onos/protocols/netconf/api/pom.xml
framework/src/onos/protocols/netconf/ctl/pom.xml
framework/src/onos/protocols/netconf/pom.xml
framework/src/onos/protocols/netconf/rfc/pom.xml
framework/src/onos/protocols/openflow/api/pom.xml
framework/src/onos/protocols/openflow/ctl/pom.xml
framework/src/onos/protocols/openflow/pom.xml
framework/src/onos/protocols/ovsdb/api/pom.xml
framework/src/onos/protocols/ovsdb/ctl/pom.xml
framework/src/onos/protocols/ovsdb/pom.xml
framework/src/onos/protocols/ovsdb/rfc/pom.xml
framework/src/onos/protocols/pcep/api/pom.xml
framework/src/onos/protocols/pcep/ctl/pom.xml
framework/src/onos/protocols/pcep/pcepio/pom.xml
framework/src/onos/protocols/pcep/pom.xml
framework/src/onos/protocols/pom.xml
framework/src/onos/providers/bgp/app/pom.xml
framework/src/onos/providers/bgp/pom.xml
framework/src/onos/providers/bgp/topology/pom.xml
framework/src/onos/providers/host/pom.xml
framework/src/onos/providers/lldp/pom.xml
framework/src/onos/providers/netcfghost/pom.xml
framework/src/onos/providers/netconf/app/pom.xml
framework/src/onos/providers/netconf/device/pom.xml
framework/src/onos/providers/netconf/pom.xml
framework/src/onos/providers/null/pom.xml
framework/src/onos/providers/openflow/app/pom.xml
framework/src/onos/providers/openflow/base/pom.xml
framework/src/onos/providers/openflow/device/pom.xml
framework/src/onos/providers/openflow/flow/pom.xml
framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/NewAdaptiveFlowStatsCollector.java
framework/src/onos/providers/openflow/group/pom.xml
framework/src/onos/providers/openflow/meter/pom.xml
framework/src/onos/providers/openflow/packet/pom.xml
framework/src/onos/providers/openflow/pom.xml
framework/src/onos/providers/ovsdb/app/pom.xml
framework/src/onos/providers/ovsdb/device/pom.xml
framework/src/onos/providers/ovsdb/host/pom.xml
framework/src/onos/providers/ovsdb/pom.xml
framework/src/onos/providers/ovsdb/tunnel/pom.xml
framework/src/onos/providers/pcep/app/pom.xml
framework/src/onos/providers/pcep/pom.xml
framework/src/onos/providers/pcep/topology/pom.xml
framework/src/onos/providers/pcep/tunnel/pom.xml
framework/src/onos/providers/pom.xml
framework/src/onos/providers/snmp/alarm/pom.xml
framework/src/onos/providers/snmp/pom.xml
framework/src/onos/tools/build/envDefaults
framework/src/onos/tools/package/archetypes/api/pom.xml
framework/src/onos/tools/package/archetypes/api/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/archetypes/bundle/pom.xml
framework/src/onos/tools/package/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/archetypes/cli/pom.xml
framework/src/onos/tools/package/archetypes/cli/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/archetypes/pom.xml
framework/src/onos/tools/package/archetypes/ui/pom.xml
framework/src/onos/tools/package/archetypes/ui/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/archetypes/uitab/pom.xml
framework/src/onos/tools/package/archetypes/uitab/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/archetypes/uitopo/pom.xml
framework/src/onos/tools/package/archetypes/uitopo/src/main/resources/archetype-resources/pom.xml
framework/src/onos/tools/package/branding/pom.xml
framework/src/onos/tools/test/bin/onos-archetypes-test
framework/src/onos/tools/test/bin/stc
framework/src/onos/tools/test/topos/onos.py
framework/src/onos/utils/catalyst/pom.xml
framework/src/onos/utils/jdvue/bin/jdvue
framework/src/onos/utils/jdvue/pom.xml
framework/src/onos/utils/jnc/pom.xml
framework/src/onos/utils/junit/pom.xml
framework/src/onos/utils/misc/pom.xml
framework/src/onos/utils/netty/pom.xml
framework/src/onos/utils/nio/pom.xml
framework/src/onos/utils/osgi/pom.xml
framework/src/onos/utils/pom.xml
framework/src/onos/utils/rest/pom.xml
framework/src/onos/utils/stc/bin/stc
framework/src/onos/utils/stc/pom.xml
framework/src/onos/utils/thirdparty/pom.xml
framework/src/onos/web/api/pom.xml
framework/src/onos/web/gui/pom.xml
framework/src/onos/web/pom.xml

index f6dd0b1..1dfca19 100755 (executable)
--- 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
+
index b03930a..78c18ed 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 454ac7e..c029cef 100644 (file)
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
     <artifactId>onos-app-acl</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <packaging>bundle</packaging>
 
     <description>ONOS ACL application</description>
index 6503ee7..72fa806 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>onos-apps</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
index 77cfe15..1befe45 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index a10db44..be28c21 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>onos-apps</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
index 3f3ec23..2d530be 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c01af6d..e40cace 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -33,7 +33,7 @@
         <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onos-api</artifactId>
-            <version>1.4.0-SNAPSHOT</version>
+            <version>1.4.0-rc1</version>
         </dependency>
     </dependencies>
 </project>
index 16ed5d9..8ac0ad0 100644 (file)
@@ -27,7 +27,7 @@
     </parent>
 
     <artifactId>cord-gui</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <packaging>war</packaging>
 
     <description>Demo CORD Subscriber Web GUI</description>
index d5a7528..3e76431 100644 (file)
@@ -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 .
index 496b18e..ef18d13 100644 (file)
@@ -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
index fb5246f..e989907 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>onos-dhcp</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 6589402..d29dc0f 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>onos-dhcp</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 473caea..45f7f30 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index ef41cdd..c446c0a 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-fm</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 86b7cb6..a6bb310 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-fm</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8d75971..edaa9d3 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-fm</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index e7bb6a1..3ea3bc8 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index b092041..1981bff 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 977a75a..7860130 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 7980d2c..aac0243 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 50cb4ad..0250bb0 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
     <artifactId>onos-app-iptopology-api</artifactId>
     <packaging>bundle</packaging>
index 8a39990..e9e0fc4 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 835de83..5256b85 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 2169237..a654820 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 59fd666..d5a54c5 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f803a61..855a80f 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f5e6f94..7bb0946 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-openstackswitching</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 7d26f8f..edd43e0 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-openstackswitching</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 9dbdcf5..cfeaa5b 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 9ae6f85..0ec42e6 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c14294c..b46f7d1 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 5e87167..2e5be63 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
     <artifactId>onos-app-pcep-api</artifactId>
     <packaging>bundle</packaging>
index 83a366b..6d3785e 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 1a279c5..3708e6b 100644 (file)
@@ -19,7 +19,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 69f64dd..28adaf8 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 58fb91e..3272f59 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 4c2d7d3..6a10092 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>onos-apps</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
index 2882f52..c456210 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>onos-apps</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
index 99314aa..8ff8cbc 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index d170a7a..76d9049 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>onos-apps</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 4b08430..d82139d 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps-test</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f77fd57..0c303d6 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps-test</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -54,7 +54,7 @@
         <dependency>
             <groupId>org.onosproject</groupId>
             <artifactId>onos-core-dist</artifactId>
-            <version>1.4.0-SNAPSHOT</version>
+            <version>1.4.0-rc1</version>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
index 3ceadb4..7ffb0b5 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps-test</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index b837d11..e0596cc 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps-test</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 28de5b7..ea78791 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps-test</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index ead2252..8916771 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 01caa66..f2d7ea8 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 5a87736..93d2d95 100644 (file)
@@ -14,7 +14,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-vtn</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index e452851..8bbd265 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8b5f198..bac0cc3 100644 (file)
@@ -21,7 +21,7 @@
        <parent>
                <groupId>org.onosproject</groupId>
                <artifactId>onos-app-vtn</artifactId>
-               <version>1.4.0-SNAPSHOT</version>
+               <version>1.4.0-rc1</version>
                <relativePath>../pom.xml</relativePath>
        </parent>
 
index 03e6670..890b216 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-vtn</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 816624c..a290590 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-vtn</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 4843884..e3cbf9a 100644 (file)
  */
 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<FlowClassifierEvent, FlowClassifierListener> {
+public interface FlowClassifierService {
 
     /**
      * Check whether Flow Classifier is present based on given Flow Classifier
@@ -80,4 +79,18 @@ public interface FlowClassifierService extends ListenerService<FlowClassifierEve
      *         false
      */
     boolean removeFlowClassifier(FlowClassifierId id);
+
+    /**
+     * Adds the specified listener to Flow-Classifier manager.
+     *
+     * @param listener Flow-Classifier listener
+     */
+    void addListener(FlowClassifierListener listener);
+
+    /**
+     * Removes the specified listener to Flow-Classifier manager.
+     *
+     * @param listener Flow-Classifier listener
+     */
+    void removeListener(FlowClassifierListener listener);
 }
index 18f63b3..b29dc7a 100644 (file)
@@ -25,7 +25,6 @@ import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.util.KryoNamespace;
-import org.onosproject.event.AbstractListenerManager;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.EventuallyConsistentMap;
 import org.onosproject.store.service.MultiValuedTimestamp;
@@ -33,27 +32,28 @@ import org.onosproject.store.service.StorageService;
 import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.vtnrsc.FlowClassifierId;
 import org.onosproject.vtnrsc.FlowClassifier;
-import org.onosproject.vtnrsc.flowclassifier.FlowClassifierEvent;
 import org.onosproject.vtnrsc.flowclassifier.FlowClassifierListener;
 import org.onosproject.vtnrsc.flowclassifier.FlowClassifierService;
 import org.slf4j.Logger;
 
+import java.util.Set;
+
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
 
 /**
  * Provides implementation of the Flow Classifier Service.
  */
 @Component(immediate = true)
 @Service
-public class FlowClassifierManager extends AbstractListenerManager<FlowClassifierEvent, FlowClassifierListener>
-        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<FlowClassifierListener> listeners = Sets.newCopyOnWriteArraySet();
     private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -75,6 +75,7 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie
     @Deactivate
     protected void deactivate() {
         flowClassifierStore.destroy();
+        listeners.clear();
         log.info("Flow Classifier service deactivated");
     }
 
@@ -144,4 +145,16 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie
         }
         return true;
     }
+
+    @Override
+    public void addListener(FlowClassifierListener listener) {
+        checkNotNull(listener, LISTENER_NOT_NULL);
+        listeners.add(listener);
+    }
+
+    @Override
+    public void removeListener(FlowClassifierListener listener) {
+        checkNotNull(listener, LISTENER_NOT_NULL);
+        listeners.remove(listener);
+    }
 }
index bcb71d9..0aa1f61 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-app-vtn</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 68eafd1..9f0cb91 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 3d29a26..de8cd9e 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 23a051c..5469c28 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index e4d25ee..a371a3f 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c5d3126..d5eb957 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index ec99c18..4a702ef 100644 (file)
@@ -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;
index c4f2554..d8b80b6 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8dbc6c0..4635c68 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>onos-core</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 0b8b72b..d61fc1b 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core-store</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 5692c53..bb3cd8e 100644 (file)
@@ -34,7 +34,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core-store</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 94c077a..2432657 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 867ce0f..6fe4c16 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-core-store</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index aac47eb..04c18d2 100644 (file)
@@ -26,7 +26,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -53,7 +53,7 @@
                         <sourceFileExclude>**/generated-sources/**</sourceFileExclude>
                     </sourceFileExcludes>
                     <docfilessubdirs>true</docfilessubdirs>
-                    <doctitle>ONOS Java API (1.4.0-SNAPSHOT)</doctitle>
+                    <doctitle>ONOS Java API (1.4.0-rc1)</doctitle>
                     <groups>
                         <group>
                             <title>Network Model &amp; Services</title>
index 569da1b..42cb80f 100644 (file)
@@ -26,7 +26,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -49,7 +49,7 @@
                 <configuration>
                     <show>package</show>
                     <docfilessubdirs>true</docfilessubdirs>
-                    <doctitle>ONOS Java API (1.4.0-SNAPSHOT)</doctitle>
+                    <doctitle>ONOS Java API (1.4.0-rc1)</doctitle>
                     <excludePackageNames>@internal-excludes</excludePackageNames>
                     <sourceFileExcludes>
                         <sourceFileExclude>**/generated-sources/**</sourceFileExclude>
index db0a398..1aab60a 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 7b36279..caeb8ea 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 9d7c7a6..cbb69dc 100644 (file)
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-incubator</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index e60a271..2ffebe6 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-incubator</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8122a68..a6b0fb1 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 367b50a..e2d16ae 100644 (file)
@@ -19,7 +19,7 @@
     <parent>
         <artifactId>onos-incubator</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-incubator-rpc-grpc</artifactId>
index 8619f92..d48ce19 100644 (file)
@@ -19,7 +19,7 @@
     <parent>
         <artifactId>onos-incubator</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-incubator-rpc</artifactId>
index 797ccc0..43e5172 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-incubator</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c72a459..898dd2a 100644 (file)
@@ -33,7 +33,7 @@
     <groupId>org.onosproject</groupId>
     <artifactId>onos</artifactId>
     <packaging>pom</packaging>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
 
     <name>${project.artifactId}</name>
     <description>Open Network Operating System root project</description>
index 2390e5f..d233c48 100755 (executable)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-bgp</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 5d67f18..06206e8 100755 (executable)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-bgp</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 629e9ee..fd5f2b5 100755 (executable)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-bgp</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 3b28181..64062a6 100755 (executable)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-protocols</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 062ec93..74a3783 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-netconf</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index bae59f0..ce6f9f7 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-netconf</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f0d6ca7..37b78e7 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-protocols</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index fa1e06e..c9a24f1 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-netconf</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index e535ac6..6a47e2e 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 56d4855..947e12f 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 3bf976b..0707466 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-protocols</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c264ae9..d4bee9a 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
     <artifactId>onos-ovsdb-api</artifactId>
     <packaging>bundle</packaging>
index b836629..c9cfb9d 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 03e9d98..7a56d7f 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-protocols</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index d4d3758..c8b72d6 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>onos-ovsdb-rfc</artifactId>
index 4588ad6..b5b209c 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-pcep-controller</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f0ed5c2..0427c23 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-pcep-controller</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index d121a83..8b2e25b 100755 (executable)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-pcep-controller</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 466b0c3..5a0426e 100755 (executable)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-protocols</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 25219fa..472251d 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 4ac3acd..aa20a5a 100755 (executable)
@@ -19,7 +19,7 @@
         <parent>
                 <groupId>org.onosproject</groupId>
                 <artifactId>onos-bgp-providers</artifactId>
-                <version>1.4.0-SNAPSHOT</version>
+                <version>1.4.0-rc1</version>
                 <relativePath>../pom.xml</relativePath>
         </parent>
 
index b2e3a51..d7d4ac0 100755 (executable)
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-providers</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>onos-bgp-providers</artifactId>
index b033742..f7a111b 100755 (executable)
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-bgp-providers</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>onos-bgp-provider-topology</artifactId>
index ddbdbfc..ac1e427 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f905276..adf0d0d 100644 (file)
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 15363c8..9d10692 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <artifactId>onos-providers</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
index 0aa55ff..41fbd1f 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-netconf-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 15ad475..9319a50 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-netconf-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8c4681d..ca044a2 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 1db0753..ef2e334 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index ac5f6ee..3756427 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 9eb170c..231a17a 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 0408f73..e1c42a5 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 1f65656..16d7d32 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index aa8df94..d5186fa 100644 (file)
-/*
- * 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<FlowEntry> 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<FlowId, Set<TypedStoredFlowEntry>>
-                flowEntries = Maps.newConcurrentMap();
-
-        private final Set<StoredFlowEntry> shortFlows = new HashSet<>();
-        private final Set<StoredFlowEntry> midFlows = new HashSet<>();
-        private final Set<StoredFlowEntry> 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<TypedStoredFlowEntry> getFlowEntriesInternal(FlowId flowId) {
-            return flowEntries.computeIfAbsent(flowId, id -> Sets.newCopyOnWriteArraySet());
-        }
-
-        // get flow entry for the given flow rule
-        private TypedStoredFlowEntry getFlowEntryInternal(FlowRule rule) {
-            Set<TypedStoredFlowEntry> 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<TypedStoredFlowEntry> getFlowEntriesInternal() {
-            Set<TypedStoredFlowEntry> 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<TypedStoredFlowEntry> getFlowEntries() {
-            return getFlowEntriesInternal();
-        }
-
-        /**
-         * Gets the short typed flow entries in flow table.
-         *
-         * @return the set of typed flow entry.
-         *
-         */
-        public Set<StoredFlowEntry> 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<StoredFlowEntry> 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<StoredFlowEntry> 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<TypedStoredFlowEntry> 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;
-            }
-        }
-    }
-}
+/*\r
+ * Copyright 2015 Open Networking Laboratory\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package org.onosproject.provider.of.flow.impl;\r
+\r
+import com.google.common.base.Objects;\r
+import com.google.common.collect.ImmutableSet;\r
+import com.google.common.collect.Maps;\r
+import com.google.common.collect.Sets;\r
+import org.onosproject.net.flow.DefaultTypedFlowEntry;\r
+import org.onosproject.net.flow.FlowEntry;\r
+import org.onosproject.net.flow.FlowId;\r
+import org.onosproject.net.flow.FlowRule;\r
+import org.onosproject.net.flow.StoredFlowEntry;\r
+import org.onosproject.net.flow.TypedStoredFlowEntry;\r
+import org.onosproject.net.flow.instructions.Instruction;\r
+import org.onosproject.net.flow.instructions.Instructions;\r
+import org.onosproject.openflow.controller.OpenFlowSwitch;\r
+import org.onosproject.openflow.controller.RoleState;\r
+import org.projectfloodlight.openflow.protocol.OFFlowStatsRequest;\r
+import org.projectfloodlight.openflow.protocol.match.Match;\r
+import org.projectfloodlight.openflow.types.OFPort;\r
+import org.projectfloodlight.openflow.types.TableId;\r
+import org.slf4j.Logger;\r
+\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Optional;\r
+import java.util.Set;\r
+import java.util.concurrent.Executors;\r
+import java.util.concurrent.ScheduledExecutorService;\r
+import java.util.concurrent.ScheduledFuture;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import static com.google.common.base.Preconditions.checkNotNull;\r
+import static org.onlab.util.Tools.groupedThreads;\r
+import static org.onosproject.net.flow.TypedStoredFlowEntry.FlowLiveType;\r
+import static org.slf4j.LoggerFactory.getLogger;\r
+\r
+/**\r
+ * Efficiently and adaptively collects flow statistics for the specified switch.\r
+ */\r
+public class NewAdaptiveFlowStatsCollector {\r
+\r
+    private final Logger log = getLogger(getClass());\r
+\r
+    private final OpenFlowSwitch sw;\r
+\r
+    private ScheduledExecutorService adaptiveFlowStatsScheduler =\r
+            Executors.newScheduledThreadPool(4, groupedThreads("onos/flow", "device-stats-collector-%d"));\r
+    private ScheduledFuture<?> calAndShortFlowsThread;\r
+    private ScheduledFuture<?> midFlowsThread;\r
+    private ScheduledFuture<?> longFlowsThread;\r
+\r
+    // Task that calculates all flowEntries' FlowLiveType and collects stats IMMEDIATE flows every calAndPollInterval\r
+    private CalAndShortFlowsTask calAndShortFlowsTask;\r
+    // Task that collects stats MID flows every 2*calAndPollInterval\r
+    private MidFlowsTask midFlowsTask;\r
+    // Task that collects stats LONG flows every 3*calAndPollInterval\r
+    private LongFlowsTask longFlowsTask;\r
+\r
+    private static final int CAL_AND_POLL_TIMES = 1; // must be always 0\r
+    private static final int MID_POLL_TIMES = 2;     // variable greater or equal than 1\r
+    private static final int LONG_POLL_TIMES = 3;    // variable greater or equal than MID_POLL_TIMES\r
+    //TODO: make ENTIRE_POLL_TIMES configurable with enable or disable\r
+    // must be variable greater or equal than common multiple of MID_POLL_TIMES and LONG_POLL_TIMES\r
+    private static final int ENTIRE_POLL_TIMES = 6;\r
+\r
+    private static final int DEFAULT_CAL_AND_POLL_FREQUENCY = 5;\r
+    private static final int MIN_CAL_AND_POLL_FREQUENCY = 2;\r
+    private static final int MAX_CAL_AND_POLL_FREQUENCY = 60;\r
+\r
+    private int calAndPollInterval; // CAL_AND_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;\r
+    private int midPollInterval; // MID_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;\r
+    private int longPollInterval; // LONG_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;\r
+    // only used for checking condition at each task if it collects entire flows from a given switch or not\r
+    private int entirePollInterval; // ENTIRE_POLL_TIMES * DEFAULT_CAL_AND_POLL_FREQUENCY;\r
+\r
+    // Number of call count of each Task,\r
+    // for undoing collection except only entire flows collecting task in CalAndShortFlowsTask\r
+    private int callCountCalAndShortFlowsTask = 0; // increased CAL_AND_POLL_TIMES whenever Task is called\r
+    private int callCountMidFlowsTask = 0;   // increased MID_POLL_TIMES whenever Task is called\r
+    private int callCountLongFlowsTask = 0;  // increased LONG_POLL_TIMES whenever Task is called\r
+\r
+    private InternalDeviceFlowTable deviceFlowTable = new InternalDeviceFlowTable();\r
+\r
+    private boolean isFirstTimeStart = true;\r
+\r
+    public static final long NO_FLOW_MISSING_XID = (-1);\r
+    private long flowMissingXid = NO_FLOW_MISSING_XID;\r
+\r
+    /**\r
+     * Creates a new adaptive collector for the given switch and default cal_and_poll frequency.\r
+     *\r
+     * @param sw           switch to pull\r
+     * @param pollInterval cal and immediate poll frequency in seconds\r
+     */\r
+    NewAdaptiveFlowStatsCollector(OpenFlowSwitch sw, int pollInterval) {\r
+        this.sw = sw;\r
+\r
+        initMemberVars(pollInterval);\r
+    }\r
+\r
+    // check calAndPollInterval validity and set all pollInterval values and finally initialize each task call count\r
+    private void initMemberVars(int pollInterval) {\r
+        if (pollInterval < MIN_CAL_AND_POLL_FREQUENCY) {\r
+            this.calAndPollInterval = MIN_CAL_AND_POLL_FREQUENCY;\r
+        } else if (pollInterval >= MAX_CAL_AND_POLL_FREQUENCY) {\r
+            this.calAndPollInterval = MAX_CAL_AND_POLL_FREQUENCY;\r
+        } else {\r
+            this.calAndPollInterval = pollInterval;\r
+        }\r
+\r
+        calAndPollInterval = CAL_AND_POLL_TIMES * calAndPollInterval;\r
+        midPollInterval = MID_POLL_TIMES * calAndPollInterval;\r
+        longPollInterval = LONG_POLL_TIMES * calAndPollInterval;\r
+        entirePollInterval = ENTIRE_POLL_TIMES * calAndPollInterval;\r
+\r
+        callCountCalAndShortFlowsTask = 0;\r
+        callCountMidFlowsTask = 0;\r
+        callCountLongFlowsTask = 0;\r
+\r
+        flowMissingXid = NO_FLOW_MISSING_XID;\r
+    }\r
+\r
+    /**\r
+     * Adjusts adaptive poll frequency.\r
+     *\r
+     * @param pollInterval poll frequency in seconds\r
+     */\r
+    synchronized void adjustCalAndPollInterval(int pollInterval) {\r
+        initMemberVars(pollInterval);\r
+\r
+        if (calAndShortFlowsThread != null) {\r
+            calAndShortFlowsThread.cancel(false);\r
+        }\r
+        if (midFlowsThread != null) {\r
+            midFlowsThread.cancel(false);\r
+        }\r
+        if (longFlowsThread != null) {\r
+            longFlowsThread.cancel(false);\r
+        }\r
+\r
+        calAndShortFlowsTask = new CalAndShortFlowsTask();\r
+        calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                calAndShortFlowsTask,\r
+                0,\r
+                calAndPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        midFlowsTask = new MidFlowsTask();\r
+        midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                midFlowsTask,\r
+                0,\r
+                midPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        longFlowsTask = new LongFlowsTask();\r
+        longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                longFlowsTask,\r
+                0,\r
+                longPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        log.debug("calAndPollInterval=" + calAndPollInterval + "is adjusted");\r
+    }\r
+\r
+    private class CalAndShortFlowsTask implements Runnable {\r
+        @Override\r
+        public void run() {\r
+            if (sw.getRole() == RoleState.MASTER) {\r
+                log.trace("CalAndShortFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());\r
+\r
+                if (isFirstTimeStart) {\r
+                    // isFirstTimeStart, get entire flow stats from a given switch sw\r
+                    log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats at first time start for {}",\r
+                            sw.getStringId());\r
+                    ofFlowStatsRequestAllSend();\r
+\r
+                    callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES;\r
+                    isFirstTimeStart = false;\r
+                } else  if (callCountCalAndShortFlowsTask == ENTIRE_POLL_TIMES) {\r
+                    // entire_poll_times, get entire flow stats from a given switch sw\r
+                    log.trace("CalAndShortFlowsTask Collecting Entire AdaptiveStats for {}", sw.getStringId());\r
+                    ofFlowStatsRequestAllSend();\r
+\r
+                    callCountCalAndShortFlowsTask = CAL_AND_POLL_TIMES;\r
+                    //TODO: check flows deleted in switch, but exist in controller flow table, then remove them\r
+                    //\r
+                } else {\r
+                    calAndShortFlowsTaskInternal();\r
+                    callCountCalAndShortFlowsTask += CAL_AND_POLL_TIMES;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    // send openflow flow stats request message with getting all flow entries to a given switch sw\r
+    private void ofFlowStatsRequestAllSend() {\r
+        OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest()\r
+                .setMatch(sw.factory().matchWildcardAll())\r
+                .setTableId(TableId.ALL)\r
+                .setOutPort(OFPort.NO_MASK)\r
+                .build();\r
+\r
+        synchronized (this) {\r
+            // set the request xid to check the reply in OpenFlowRuleProvider\r
+            // After processing the reply of this request message,\r
+            // this must be set to NO_FLOW_MISSING_XID(-1) by provider\r
+            setFlowMissingXid(request.getXid());\r
+            log.debug("ofFlowStatsRequestAllSend,Request={},for {}", request.toString(), sw.getStringId());\r
+\r
+            sw.sendMsg(request);\r
+        }\r
+    }\r
+\r
+    // send openflow flow stats request message with getting the specific flow entry(fe) to a given switch sw\r
+    private void ofFlowStatsRequestFlowSend(FlowEntry fe) {\r
+        // set find match\r
+        Match match = FlowModBuilder.builder(fe, sw.factory(), Optional.empty(),\r
+                Optional.empty()).buildMatch();\r
+        // set find tableId\r
+        TableId tableId = TableId.of(fe.tableId());\r
+        // set output port\r
+        Instruction ins = fe.treatment().allInstructions().stream()\r
+                .filter(i -> (i.type() == Instruction.Type.OUTPUT))\r
+                .findFirst()\r
+                .orElse(null);\r
+        OFPort ofPort = OFPort.NO_MASK;\r
+        if (ins != null) {\r
+            Instructions.OutputInstruction out = (Instructions.OutputInstruction) ins;\r
+            ofPort = OFPort.of((int) ((out.port().toLong())));\r
+        }\r
+\r
+        OFFlowStatsRequest request = sw.factory().buildFlowStatsRequest()\r
+                .setMatch(match)\r
+                .setTableId(tableId)\r
+                .setOutPort(ofPort)\r
+                .build();\r
+\r
+        synchronized (this) {\r
+            if (getFlowMissingXid() != NO_FLOW_MISSING_XID) {\r
+                log.debug("ofFlowStatsRequestFlowSend: previous FlowStatsRequestAll does not be processed yet,"\r
+                                + " set no flow missing xid anyway, for {}",\r
+                        sw.getStringId());\r
+                setFlowMissingXid(NO_FLOW_MISSING_XID);\r
+            }\r
+\r
+            sw.sendMsg(request);\r
+        }\r
+    }\r
+\r
+    private void calAndShortFlowsTaskInternal() {\r
+        deviceFlowTable.checkAndMoveLiveFlowAll();\r
+\r
+        deviceFlowTable.getShortFlows().forEach(fe -> {\r
+            ofFlowStatsRequestFlowSend(fe);\r
+        });\r
+    }\r
+\r
+    private class MidFlowsTask implements Runnable {\r
+        @Override\r
+        public void run() {\r
+            if (sw.getRole() == RoleState.MASTER) {\r
+                log.trace("MidFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());\r
+\r
+                // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw\r
+                if (callCountMidFlowsTask == ENTIRE_POLL_TIMES) {\r
+                    callCountMidFlowsTask = MID_POLL_TIMES;\r
+                } else {\r
+                    midFlowsTaskInternal();\r
+                    callCountMidFlowsTask += MID_POLL_TIMES;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    private void midFlowsTaskInternal() {\r
+        deviceFlowTable.getMidFlows().forEach(fe -> {\r
+            ofFlowStatsRequestFlowSend(fe);\r
+        });\r
+    }\r
+\r
+    private class LongFlowsTask implements Runnable {\r
+        @Override\r
+        public void run() {\r
+            if (sw.getRole() == RoleState.MASTER) {\r
+                log.trace("LongFlowsTask Collecting AdaptiveStats for {}", sw.getStringId());\r
+\r
+                // skip collecting because CalAndShortFlowsTask collects entire flow stats from a given switch sw\r
+                if (callCountLongFlowsTask == ENTIRE_POLL_TIMES) {\r
+                    callCountLongFlowsTask = LONG_POLL_TIMES;\r
+                } else {\r
+                    longFlowsTaskInternal();\r
+                    callCountLongFlowsTask += LONG_POLL_TIMES;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    private void longFlowsTaskInternal() {\r
+        deviceFlowTable.getLongFlows().forEach(fe -> {\r
+            ofFlowStatsRequestFlowSend(fe);\r
+        });\r
+    }\r
+\r
+    /**\r
+     * start adaptive flow statistic collection.\r
+     *\r
+     */\r
+    public synchronized void start() {\r
+        log.debug("Starting AdaptiveStats collection thread for {}", sw.getStringId());\r
+        callCountCalAndShortFlowsTask = 0;\r
+        callCountMidFlowsTask = 0;\r
+        callCountLongFlowsTask = 0;\r
+\r
+        isFirstTimeStart = true;\r
+\r
+        // Initially start polling quickly. Then drop down to configured value\r
+        calAndShortFlowsTask = new CalAndShortFlowsTask();\r
+        calAndShortFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                calAndShortFlowsTask,\r
+                1,\r
+                calAndPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        midFlowsTask = new MidFlowsTask();\r
+        midFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                midFlowsTask,\r
+                1,\r
+                midPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        longFlowsTask = new LongFlowsTask();\r
+        longFlowsThread = adaptiveFlowStatsScheduler.scheduleWithFixedDelay(\r
+                longFlowsTask,\r
+                1,\r
+                longPollInterval,\r
+                TimeUnit.SECONDS);\r
+\r
+        log.info("Started");\r
+    }\r
+\r
+    /**\r
+     * stop adaptive flow statistic collection.\r
+     *\r
+     */\r
+    public synchronized void stop() {\r
+        log.debug("Stopping AdaptiveStats collection thread for {}", sw.getStringId());\r
+        if (calAndShortFlowsThread != null) {\r
+            calAndShortFlowsThread.cancel(true);\r
+        }\r
+        if (midFlowsThread != null) {\r
+            midFlowsThread.cancel(true);\r
+        }\r
+        if (longFlowsThread != null) {\r
+            longFlowsThread.cancel(true);\r
+        }\r
+\r
+        adaptiveFlowStatsScheduler.shutdownNow();\r
+\r
+        isFirstTimeStart = false;\r
+\r
+        log.info("Stopped");\r
+    }\r
+\r
+    /**\r
+     * add typed flow entry from flow rule into the internal flow table.\r
+     *\r
+     * @param flowRules the flow rules\r
+     *\r
+     */\r
+    public synchronized void addWithFlowRule(FlowRule... flowRules) {\r
+        for (FlowRule fr : flowRules) {\r
+            // First remove old entry unconditionally, if exist\r
+            deviceFlowTable.remove(fr);\r
+\r
+            // add new flow entry, we suppose IMMEDIATE_FLOW\r
+            TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fr,\r
+                    FlowLiveType.IMMEDIATE_FLOW);\r
+            deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * add or update typed flow entry from flow entry into the internal flow table.\r
+     *\r
+     * @param flowEntries the flow entries\r
+     *\r
+     */\r
+    public synchronized void addOrUpdateFlows(FlowEntry... flowEntries) {\r
+       for (FlowEntry fe : flowEntries) {\r
+           // check if this new rule is an update to an existing entry\r
+           TypedStoredFlowEntry stored = deviceFlowTable.getFlowEntry(fe);\r
+\r
+           if (stored != null) {\r
+               // duplicated flow entry is collected!, just skip\r
+               if (fe.bytes() == stored.bytes() && fe.packets() == stored.packets()\r
+                       && fe.life() == stored.life()) {\r
+                   log.debug("addOrUpdateFlows:, FlowId=" + Long.toHexString(fe.id().value())\r
+                                   + ",is DUPLICATED stats collection, just skip."\r
+                                   + " AdaptiveStats collection thread for {}",\r
+                           sw.getStringId());\r
+\r
+                   stored.setLastSeen();\r
+                   continue;\r
+               } else if (fe.life() < stored.life()) {\r
+                   // Invalid updates the stats values, i.e., bytes, packets, durations ...\r
+                   log.debug("addOrUpdateFlows():" +\r
+                               " Invalid Flow Update! The new life is SMALLER than the previous one, jus skip." +\r
+                               " new flowId=" + Long.toHexString(fe.id().value()) +\r
+                               ", old flowId=" + Long.toHexString(stored.id().value()) +\r
+                               ", new bytes=" + fe.bytes() + ", old bytes=" + stored.bytes() +\r
+                               ", new life=" + fe.life() + ", old life=" + stored.life() +\r
+                               ", new lastSeen=" + fe.lastSeen() + ", old lastSeen=" + stored.lastSeen());\r
+                   // go next\r
+                   stored.setLastSeen();\r
+                   continue;\r
+               }\r
+\r
+               // update now\r
+               stored.setLife(fe.life());\r
+               stored.setPackets(fe.packets());\r
+               stored.setBytes(fe.bytes());\r
+               stored.setLastSeen();\r
+               if (stored.state() == FlowEntry.FlowEntryState.PENDING_ADD) {\r
+                   // flow is really RULE_ADDED\r
+                   stored.setState(FlowEntry.FlowEntryState.ADDED);\r
+               }\r
+               // flow is RULE_UPDATED, skip adding and just updating flow live table\r
+               //deviceFlowTable.calAndSetFlowLiveType(stored);\r
+               continue;\r
+           }\r
+\r
+           // add new flow entry, we suppose IMMEDIATE_FLOW\r
+           TypedStoredFlowEntry newFlowEntry = new DefaultTypedFlowEntry(fe,\r
+                    FlowLiveType.IMMEDIATE_FLOW);\r
+           deviceFlowTable.addWithCalAndSetFlowLiveType(newFlowEntry);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * remove typed flow entry from the internal flow table.\r
+     *\r
+     * @param flowRules the flow entries\r
+     *\r
+     */\r
+    public synchronized void removeFlows(FlowRule...  flowRules) {\r
+        for (FlowRule rule : flowRules) {\r
+            deviceFlowTable.remove(rule);\r
+        }\r
+    }\r
+\r
+    // same as removeFlows() function\r
+    /**\r
+     * remove typed flow entry from the internal flow table.\r
+     *\r
+     * @param flowRules the flow entries\r
+     *\r
+     */\r
+    public void flowRemoved(FlowRule... flowRules) {\r
+        removeFlows(flowRules);\r
+    }\r
+\r
+    // same as addOrUpdateFlows() function\r
+    /**\r
+     * add or update typed flow entry from flow entry into the internal flow table.\r
+     *\r
+     * @param flowEntries the flow entry list\r
+     *\r
+     */\r
+    public void pushFlowMetrics(List<FlowEntry> flowEntries) {\r
+        flowEntries.forEach(fe -> {\r
+            addOrUpdateFlows(fe);\r
+        });\r
+    }\r
+\r
+    /**\r
+     * returns flowMissingXid that indicates the execution of flowMissing process or not(NO_FLOW_MISSING_XID(-1)).\r
+     *\r
+     * @return xid of missing flow\r
+     */\r
+    public long getFlowMissingXid() {\r
+        return flowMissingXid;\r
+    }\r
+\r
+    /**\r
+     * set flowMissingXid, namely OFFlowStatsRequest match any ALL message Id.\r
+     *\r
+     * @param flowMissingXid the OFFlowStatsRequest message Id\r
+     *\r
+     */\r
+    public void setFlowMissingXid(long flowMissingXid) {\r
+        this.flowMissingXid = flowMissingXid;\r
+    }\r
+\r
+    private class InternalDeviceFlowTable {\r
+\r
+        private final Map<FlowId, Set<TypedStoredFlowEntry>>\r
+                flowEntries = Maps.newConcurrentMap();\r
+\r
+        private final Set<StoredFlowEntry> shortFlows = new HashSet<>();\r
+        private final Set<StoredFlowEntry> midFlows = new HashSet<>();\r
+        private final Set<StoredFlowEntry> longFlows = new HashSet<>();\r
+\r
+        // Assumed latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply\r
+        private final long latencyFlowStatsRequestAndReplyMillis = 500;\r
+\r
+\r
+        // Statistics for table operation\r
+        private long addCount = 0, addWithSetFlowLiveTypeCount = 0;\r
+        private long removeCount = 0;\r
+\r
+        /**\r
+         * Resets all count values with zero.\r
+         *\r
+         */\r
+        public void resetAllCount() {\r
+            addCount = 0;\r
+            addWithSetFlowLiveTypeCount = 0;\r
+            removeCount = 0;\r
+        }\r
+\r
+        // get set of flow entries for the given flowId\r
+        private Set<TypedStoredFlowEntry> getFlowEntriesInternal(FlowId flowId) {\r
+            return flowEntries.computeIfAbsent(flowId, id -> Sets.newCopyOnWriteArraySet());\r
+        }\r
+\r
+        // get flow entry for the given flow rule\r
+        private TypedStoredFlowEntry getFlowEntryInternal(FlowRule rule) {\r
+            Set<TypedStoredFlowEntry> flowEntries = getFlowEntriesInternal(rule.id());\r
+            return flowEntries.stream()\r
+                    .filter(entry -> Objects.equal(entry, rule))\r
+                    .findAny()\r
+                    .orElse(null);\r
+        }\r
+\r
+        // get the flow entries for all flows in flow table\r
+        private Set<TypedStoredFlowEntry> getFlowEntriesInternal() {\r
+            Set<TypedStoredFlowEntry> result = Sets.newHashSet();\r
+\r
+            flowEntries.values().forEach(result::addAll);\r
+            return result;\r
+        }\r
+\r
+        /**\r
+         * Gets the number of flow entry in flow table.\r
+         *\r
+         * @return the number of flow entry.\r
+         *\r
+         */\r
+        public long getFlowCount() {\r
+            return flowEntries.values().stream().mapToLong(Set::size).sum();\r
+        }\r
+\r
+        /**\r
+         * Gets the number of flow entry in flow table.\r
+         *\r
+         * @param rule the flow rule\r
+         * @return the typed flow entry.\r
+         *\r
+         */\r
+        public TypedStoredFlowEntry getFlowEntry(FlowRule rule) {\r
+            checkNotNull(rule);\r
+\r
+            return getFlowEntryInternal(rule);\r
+        }\r
+\r
+        /**\r
+         * Gets the all typed flow entries in flow table.\r
+         *\r
+         * @return the set of typed flow entry.\r
+         *\r
+         */\r
+        public Set<TypedStoredFlowEntry> getFlowEntries() {\r
+            return getFlowEntriesInternal();\r
+        }\r
+\r
+        /**\r
+         * Gets the short typed flow entries in flow table.\r
+         *\r
+         * @return the set of typed flow entry.\r
+         *\r
+         */\r
+        public Set<StoredFlowEntry> getShortFlows() {\r
+            return ImmutableSet.copyOf(shortFlows); //Sets.newHashSet(shortFlows);\r
+        }\r
+\r
+        /**\r
+         * Gets the mid typed flow entries in flow table.\r
+         *\r
+         * @return the set of typed flow entry.\r
+         *\r
+         */\r
+        public Set<StoredFlowEntry> getMidFlows() {\r
+            return ImmutableSet.copyOf(midFlows); //Sets.newHashSet(midFlows);\r
+        }\r
+\r
+        /**\r
+         * Gets the long typed flow entries in flow table.\r
+         *\r
+         * @return the set of typed flow entry.\r
+         *\r
+         */\r
+        public Set<StoredFlowEntry> getLongFlows() {\r
+            return ImmutableSet.copyOf(longFlows); //Sets.newHashSet(longFlows);\r
+        }\r
+\r
+        /**\r
+         * Add typed flow entry into table only.\r
+         *\r
+         * @param rule the flow rule\r
+         *\r
+         */\r
+        public synchronized void add(TypedStoredFlowEntry rule) {\r
+            checkNotNull(rule);\r
+\r
+            //rule have to be new DefaultTypedFlowEntry\r
+            boolean result = getFlowEntriesInternal(rule.id()).add(rule);\r
+\r
+            if (result) {\r
+                addCount++;\r
+            }\r
+        }\r
+\r
+        /**\r
+         * Calculates and set the flow live type at the first time,\r
+         * and then add it into a corresponding typed flow table.\r
+         *\r
+         * @param rule the flow rule\r
+         *\r
+         */\r
+        public void calAndSetFlowLiveType(TypedStoredFlowEntry rule) {\r
+            checkNotNull(rule);\r
+\r
+            calAndSetFlowLiveTypeInternal(rule);\r
+        }\r
+\r
+        /**\r
+         * Add the typed flow entry into table, and calculates and set the flow live type,\r
+         * and then add it into a corresponding typed flow table.\r
+         *\r
+         * @param rule the flow rule\r
+         *\r
+         */\r
+       public synchronized void addWithCalAndSetFlowLiveType(TypedStoredFlowEntry rule) {\r
+            checkNotNull(rule);\r
+\r
+            //rule have to be new DefaultTypedFlowEntry\r
+            boolean result = getFlowEntriesInternal(rule.id()).add(rule);\r
+            if (result) {\r
+                calAndSetFlowLiveTypeInternal(rule);\r
+                addWithSetFlowLiveTypeCount++;\r
+            } else {\r
+                log.debug("addWithCalAndSetFlowLiveType, FlowId=" + Long.toHexString(rule.id().value())\r
+                                + " ADD Failed, cause it may already exists in table !!!,"\r
+                                + " AdaptiveStats collection thread for {}",\r
+                        sw.getStringId());\r
+            }\r
+        }\r
+\r
+        // In real, calculates and set the flow live type at the first time,\r
+        // and then add it into a corresponding typed flow table\r
+        private void calAndSetFlowLiveTypeInternal(TypedStoredFlowEntry rule) {\r
+            long life = rule.life();\r
+            FlowLiveType prevFlowLiveType = rule.flowLiveType();\r
+\r
+            if (life >= longPollInterval) {\r
+                rule.setFlowLiveType(FlowLiveType.LONG_FLOW);\r
+                longFlows.add(rule);\r
+            } else if (life >= midPollInterval) {\r
+                rule.setFlowLiveType(FlowLiveType.MID_FLOW);\r
+                midFlows.add(rule);\r
+            } else if (life >= calAndPollInterval) {\r
+                rule.setFlowLiveType(FlowLiveType.SHORT_FLOW);\r
+                shortFlows.add(rule);\r
+            } else if (life >= 0) {\r
+                rule.setFlowLiveType(FlowLiveType.IMMEDIATE_FLOW);\r
+            } else { // life < 0\r
+                rule.setFlowLiveType(FlowLiveType.UNKNOWN_FLOW);\r
+            }\r
+\r
+            if (rule.flowLiveType() != prevFlowLiveType) {\r
+                switch (prevFlowLiveType) {\r
+                    // delete it from previous flow table\r
+                    case SHORT_FLOW:\r
+                        shortFlows.remove(rule);\r
+                        break;\r
+                    case MID_FLOW:\r
+                        midFlows.remove(rule);\r
+                        break;\r
+                    case LONG_FLOW:\r
+                        longFlows.remove(rule);\r
+                        break;\r
+                    default:\r
+                        break;\r
+                }\r
+            }\r
+        }\r
+\r
+\r
+        // check the flow live type based on current time, then set and add it into corresponding table\r
+        private boolean checkAndMoveLiveFlowInternal(TypedStoredFlowEntry fe, long cTime) {\r
+            long curTime = (cTime > 0 ? cTime : System.currentTimeMillis());\r
+            // For latency adjustment(default=500 millisecond) between FlowStatsRequest and Reply\r
+            long fromLastSeen = ((curTime - fe.lastSeen() + latencyFlowStatsRequestAndReplyMillis) / 1000);\r
+            // fe.life() unit is SECOND!\r
+            long liveTime = fe.life() + fromLastSeen;\r
+\r
+\r
+            switch (fe.flowLiveType()) {\r
+                case IMMEDIATE_FLOW:\r
+                    if (liveTime >= longPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.LONG_FLOW);\r
+                         longFlows.add(fe);\r
+                    } else if (liveTime >= midPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.MID_FLOW);\r
+                        midFlows.add(fe);\r
+                    } else if (liveTime >= calAndPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.SHORT_FLOW);\r
+                        shortFlows.add(fe);\r
+                    }\r
+                    break;\r
+                case SHORT_FLOW:\r
+                    if (liveTime >= longPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.LONG_FLOW);\r
+                        shortFlows.remove(fe);\r
+                        longFlows.add(fe);\r
+                    } else if (liveTime >= midPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.MID_FLOW);\r
+                        shortFlows.remove(fe);\r
+                        midFlows.add(fe);\r
+                    }\r
+                    break;\r
+                case MID_FLOW:\r
+                    if (liveTime >= longPollInterval) {\r
+                        fe.setFlowLiveType(FlowLiveType.LONG_FLOW);\r
+                        midFlows.remove(fe);\r
+                        longFlows.add(fe);\r
+                    }\r
+                    break;\r
+                case LONG_FLOW:\r
+                    if (fromLastSeen > entirePollInterval) {\r
+                        log.trace("checkAndMoveLiveFlowInternal, flow is already removed at switch.");\r
+                        return false;\r
+                    }\r
+                    break;\r
+                case UNKNOWN_FLOW: // Unknown flow is an internal error flow type, just fall through\r
+                default :\r
+                    // Error Unknown Live Type\r
+                    log.error("checkAndMoveLiveFlowInternal, Unknown Live Type error!"\r
+                            + "AdaptiveStats collection thread for {}",\r
+                            sw.getStringId());\r
+                    return false;\r
+            }\r
+\r
+            log.debug("checkAndMoveLiveFlowInternal, FlowId=" + Long.toHexString(fe.id().value())\r
+                            + ", state=" + fe.state()\r
+                            + ", After liveType=" + fe.flowLiveType()\r
+                            + ", liveTime=" + liveTime\r
+                            + ", life=" + fe.life()\r
+                            + ", bytes=" + fe.bytes()\r
+                            + ", packets=" + fe.packets()\r
+                            + ", fromLastSeen=" + fromLastSeen\r
+                            + ", priority=" + fe.priority()\r
+                            + ", selector=" + fe.selector().criteria()\r
+                            + ", treatment=" + fe.treatment()\r
+                            + " AdaptiveStats collection thread for {}",\r
+                    sw.getStringId());\r
+\r
+            return true;\r
+        }\r
+\r
+        /**\r
+         * Check and move live type for all type flow entries in table at every calAndPollInterval time.\r
+         *\r
+         */\r
+        public void checkAndMoveLiveFlowAll() {\r
+            Set<TypedStoredFlowEntry> typedFlowEntries = getFlowEntriesInternal();\r
+\r
+            long calCurTime = System.currentTimeMillis();\r
+            typedFlowEntries.forEach(fe -> {\r
+                if (!checkAndMoveLiveFlowInternal(fe, calCurTime)) {\r
+                    remove(fe);\r
+                }\r
+            });\r
+\r
+            // print table counts for debug\r
+            if (log.isDebugEnabled()) {\r
+                synchronized (this) {\r
+                    long totalFlowCount = getFlowCount();\r
+                    long shortFlowCount = shortFlows.size();\r
+                    long midFlowCount = midFlows.size();\r
+                    long longFlowCount = longFlows.size();\r
+                    long immediateFlowCount = totalFlowCount - shortFlowCount - midFlowCount - longFlowCount;\r
+                    long calTotalCount = addCount + addWithSetFlowLiveTypeCount - removeCount;\r
+\r
+                    log.debug("--------------------------------------------------------------------------- for {}",\r
+                            sw.getStringId());\r
+                    log.debug("checkAndMoveLiveFlowAll, Total Flow_Count=" + totalFlowCount\r
+                            + ", add - remove_Count=" + calTotalCount\r
+                            + ", IMMEDIATE_FLOW_Count=" + immediateFlowCount\r
+                            + ", SHORT_FLOW_Count=" + shortFlowCount\r
+                            + ", MID_FLOW_Count=" + midFlowCount\r
+                            + ", LONG_FLOW_Count=" + longFlowCount\r
+                            + ", add_Count=" + addCount\r
+                            + ", addWithSetFlowLiveType_Count=" + addWithSetFlowLiveTypeCount\r
+                            + ", remove_Count=" + removeCount\r
+                            + " AdaptiveStats collection thread for {}", sw.getStringId());\r
+                    log.debug("--------------------------------------------------------------------------- for {}",\r
+                            sw.getStringId());\r
+                    if (totalFlowCount != calTotalCount) {\r
+                        log.error("checkAndMoveLiveFlowAll, Real total flow count and "\r
+                                + "calculated total flow count do NOT match, something is wrong internally "\r
+                                + "or check counter value bound is over!");\r
+                    }\r
+                    if (immediateFlowCount < 0) {\r
+                        log.error("checkAndMoveLiveFlowAll, IMMEDIATE_FLOW count is negative, "\r
+                                + "something is wrong internally "\r
+                                + "or check counter value bound is over!");\r
+                    }\r
+                }\r
+            }\r
+            log.trace("checkAndMoveLiveFlowAll, AdaptiveStats for {}", sw.getStringId());\r
+        }\r
+\r
+        /**\r
+         * Remove the typed flow entry from table.\r
+         *\r
+         * @param rule the flow rule\r
+         *\r
+         */\r
+        public synchronized void remove(FlowRule rule) {\r
+            checkNotNull(rule);\r
+\r
+            TypedStoredFlowEntry removeStore = getFlowEntryInternal(rule);\r
+            if (removeStore != null) {\r
+                removeLiveFlowsInternal((TypedStoredFlowEntry) removeStore);\r
+                boolean result = getFlowEntriesInternal(rule.id()).remove(removeStore);\r
+\r
+                if (result) {\r
+                    removeCount++;\r
+                }\r
+            }\r
+       }\r
+\r
+        // Remove the typed flow entry from corresponding table\r
+        private void removeLiveFlowsInternal(TypedStoredFlowEntry fe) {\r
+            switch (fe.flowLiveType()) {\r
+                case IMMEDIATE_FLOW:\r
+                    // do nothing\r
+                    break;\r
+                case SHORT_FLOW:\r
+                    shortFlows.remove(fe);\r
+                    break;\r
+                case MID_FLOW:\r
+                    midFlows.remove(fe);\r
+                    break;\r
+                case LONG_FLOW:\r
+                    longFlows.remove(fe);\r
+                    break;\r
+                default: // error in Flow Live Type\r
+                    log.error("removeLiveFlowsInternal, Unknown Live Type error!");\r
+                    break;\r
+            }\r
+        }\r
+    }\r
+}\r
index 049ccaf..c63a016 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 55068cd..46bcefc 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index cc2316c..b8dbb68 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-of-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 1250af6..349168e 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index b615d12..9101c0f 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8f9b834..f770d73 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-ovsdb-provider-device</artifactId>
index f54a496..3acc7a2 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-ovsdb-provider-host</artifactId>
index cce971d..1256f1a 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-ovsdb-providers</artifactId>
index 3eae258..455b174 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-ovsdb-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
 
     <artifactId>onos-ovsdb-provider-tunnel</artifactId>
index 35c1e9c..62a8745 100644 (file)
@@ -19,7 +19,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-pcep-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index b6a425b..4cde516 100644 (file)
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-providers</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>onos-pcep-providers</artifactId>
index ff14b65..cb8e003 100644 (file)
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-pcep-providers</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>onos-pcep-provider-topology</artifactId>
index 2613c41..af303f8 100644 (file)
@@ -19,7 +19,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-pcep-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <artifactId>onos-pcep-provider-tunnel</artifactId>
index 5665d32..5b6b6cc 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index f0a292e..1ca1821 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-snmp-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 21031d9..c9338f0 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-providers</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 34fcccb..db54a73 100644 (file)
@@ -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%~*}
index 8deaada..0ad9b69 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-api-archetype</artifactId>
index a0e54f3..89a4f46 100644 (file)
@@ -26,7 +26,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
     </properties>
 
     <dependencies>
index 65b55b2..0709acd 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-bundle-archetype</artifactId>
index 222e8b0..bf0f7ea 100644 (file)
@@ -26,7 +26,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
         <!-- Uncomment to generate ONOS app from this module.
         <onos.app.name>org.foo.app</onos.app.name>
         <onos.app.origin>Foo, Inc.</onos.app.origin>
index a071eed..b57a313 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-cli-archetype</artifactId>
index f460269..b344cc5 100644 (file)
@@ -26,7 +26,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
     </properties>
 
     <dependencies>
index 12a2322..8a0be1f 100644 (file)
@@ -28,7 +28,7 @@
 
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <packaging>pom</packaging>
 
     <description>ONOS archetypes project</description>
index 9bebe9d..c4ed2c0 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-ui-archetype</artifactId>
index d67c181..c067ee5 100644 (file)
@@ -26,7 +26,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
         <!-- Uncomment to generate ONOS app from this module.
         <onos.app.name>org.foo.app</onos.app.name>
         <onos.app.origin>Foo, Inc.</onos.app.origin>
index cb18f1f..e82c96f 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-uitab-archetype</artifactId>
index 05a62b2..3dbd873 100644 (file)
@@ -27,7 +27,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
         <!-- Uncomment to generate ONOS app from this module.
         <onos.app.name>org.foo.app</onos.app.name>
         <onos.app.origin>Foo, Inc.</onos.app.origin>
index 6ed7c87..b03c325 100644 (file)
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onos-archetypes</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
   </parent>
 
   <artifactId>onos-uitopo-archetype</artifactId>
index f0688ec..2c97cf4 100644 (file)
@@ -27,7 +27,7 @@
     <url>http://onosproject.org</url>
 
     <properties>
-        <onos.version>1.4.0-SNAPSHOT</onos.version>
+        <onos.version>1.4.0-rc1</onos.version>
         <!-- Uncomment to generate ONOS app from this module.
         <onos.app.name>org.foo.app</onos.app.name>
         <onos.app.origin>Foo, Inc.</onos.app.origin>
index be9c416..77ff7cd 100644 (file)
@@ -21,7 +21,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../../../pom.xml</relativePath>
     </parent>
 
index 331c433..e8470b9 100755 (executable)
@@ -19,7 +19,7 @@ _EOF_
 set -e
 
 export AROOT=/tmp/foo
-export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=1.4.0-SNAPSHOT"
+export ARCHETYPE_OPTS="-DarchetypeGroupId=org.onosproject -DarchetypeVersion=1.4.0-rc1"
 
 mkdir -p $AROOT
 for an in api bundle cli ui; do
index 60a1720..c4dde4e 100755 (executable)
@@ -3,7 +3,7 @@
 #   System Test Coordinator
 #-------------------------------------------------------------------------------
 
-VER=1.4.0-SNAPSHOT
+VER=1.4.0-rc1
 JAR=~/.m2/repository/org/onosproject/onlab-stc/$VER/onlab-stc-$VER.jar
 SCENARIOS=$ONOS_ROOT/tools/test/scenarios
 
index f9d4ba2..b77a497 100755 (executable)
@@ -62,7 +62,7 @@ class ONOS( Controller ):
    
     def start( self ):
         if self.inNamespace:
-            instanceOpts = ( '-furl mvn:org.onosproject/onos-features/1.4.0-SNAPSHOT/xml/features '
+            instanceOpts = ( '-furl mvn:org.onosproject/onos-features/1.4.0-rc1/xml/features '
                              '-s 8101' )
             if self.ip is not None:
                 instanceOpts += (' -a %s' % self.IP() )
index a4fc7aa..8a504bb 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>onlab-utils</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
index 3dda596..db9d164 100755 (executable)
@@ -8,7 +8,7 @@
 
 JDVUE_ROOT=${JDVUE_ROOT:-$(dirname $0)/..}
 cd $JDVUE_ROOT
-VER=1.4.0-SNAPSHOT
+VER=1.4.0-rc1
 JAR=$PWD/target/jdvue-${VER}.jar # start with the dev jar first
 cd - >/dev/null
 
index d150102..777eba3 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 6d0f834..3fd83b3 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c9787a4..da99f46 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 2e72113..39171e9 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 5ce4838..7bae10a 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 8395766..b92c9b7 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index cf79312..25690ca 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 2129c85..d3cd5a5 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index c9a7df7..80a2e32 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 241822c..541ddcb 100755 (executable)
@@ -5,7 +5,7 @@
 
 STC_ROOT=${STC_ROOT:-$(dirname $0)/..}
 cd $STC_ROOT
-VER=1.4.0-SNAPSHOT
+VER=1.4.0-rc1
 
 PATH=$PWD/bin:$PATH
 
index a71dcfe..568aa74 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onlab-utils</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index bb5e3e0..d383bd6 100644 (file)
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.onosproject</groupId>
     <artifactId>onlab-utils</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
+    <version>1.4.0-rc1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
index 99aeab2..6d4ab98 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-web</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index 6b8480a..b73b762 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos-web</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
index d7b6fe0..72bee28 100644 (file)
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.onosproject</groupId>
         <artifactId>onos</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
+        <version>1.4.0-rc1</version>
         <relativePath>../pom.xml</relativePath>
     </parent>