From 430d5bb0d303faf21afcdca7f1f39d53c7ecf4a2 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Tue, 26 May 2015 21:15:13 -0400 Subject: [PATCH 01/12] updating poms for 0.13.0-SNAPSHOT development --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 1163750..ec5189f 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index 51ca189..c8ed28c 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index fa1fe51..1e04934 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index 90df53c..64bd296 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index 02dade1..7ad9a16 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index 2b8afc7..d68cb5e 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 665054b..3813be7 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index fa53cfd..502e1b0 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index a733036..791662a 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index 073262d..b75f200 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index 1216ef9..dacf9a3 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 2ed35e9..8cef7a9 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index 506fe61..44376a1 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index a7f9c8d..88ea3ec 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index 4a2b405..ae56c4f 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 2674700..92e4360 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index 727e337..77a65b3 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index 2529112..774c8ba 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 1576fb5..32bb9e2 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.0-SNAPSHOT + 0.13.0-SNAPSHOT twitter-framework From e900fbc3f3be2789768e77d821d2d107fba0dfb3 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Tue, 26 May 2015 21:17:58 -0400 Subject: [PATCH 02/12] updating develop poms to master versions to avoid merge conflicts --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index ec5189f..5bde54e 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.0 pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index c8ed28c..10127c7 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.0 streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index 1e04934..4e53041 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.0 streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index 64bd296..c30b548 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index 7ad9a16..b5fe072 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.12.0 streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index d68cb5e..13b342c 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.12.0 streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 3813be7..716e089 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index 502e1b0..dba6b9b 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.0 streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index 791662a..0d695fe 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.0 streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index b75f200..15ce2bf 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.0 streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index dacf9a3..bf3f88d 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 8cef7a9..6740d3a 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index 44376a1..d4ffd18 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index 88ea3ec..b15d6d5 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index ae56c4f..ce0500c 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.0 streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 92e4360..8152909 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.0 streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index 77a65b3..47def39 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.12.0 core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index 774c8ba..6b7dda2 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.0 streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 32bb9e2..48ba905 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.12.0 twitter-framework From 525908a7e50b2b7e3f503d14ecd7744c095bfde6 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Tue, 26 May 2015 21:18:00 -0400 Subject: [PATCH 03/12] Updating develop poms back to pre merge state --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 5bde54e..ec5189f 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.12.0 + 0.13.0-SNAPSHOT pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index 10127c7..c8ed28c 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.12.0 + 0.13.0-SNAPSHOT streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index 4e53041..1e04934 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0 + 0.13.0-SNAPSHOT streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index c30b548..64bd296 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index b5fe072..7ad9a16 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.0 + 0.13.0-SNAPSHOT streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index 13b342c..d68cb5e 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.0 + 0.13.0-SNAPSHOT streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 716e089..3813be7 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index dba6b9b..502e1b0 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0 + 0.13.0-SNAPSHOT streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index 0d695fe..791662a 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0 + 0.13.0-SNAPSHOT streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index 15ce2bf..b75f200 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.0 + 0.13.0-SNAPSHOT streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index bf3f88d..dacf9a3 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 6740d3a..8cef7a9 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index d4ffd18..44376a1 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index b15d6d5..88ea3ec 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index ce0500c..ae56c4f 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.0 + 0.13.0-SNAPSHOT streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 8152909..92e4360 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0 + 0.13.0-SNAPSHOT streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index 47def39..77a65b3 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.0 + 0.13.0-SNAPSHOT core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index 6b7dda2..774c8ba 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.0 + 0.13.0-SNAPSHOT streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 48ba905..32bb9e2 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.0 + 0.13.0-SNAPSHOT twitter-framework From 64e763156bc2d5bdcdbbd125e2029d139f2c97a5 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Tue, 9 Jun 2015 21:01:06 -0400 Subject: [PATCH 04/12] Updating develop poms to hotfix version to avoid merge conflicts --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index ec5189f..aea08fc 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.1 pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index c8ed28c..8d999cc 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.1 streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index 1e04934..0fe77ab 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.1 streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index 64bd296..e6821cf 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index 7ad9a16..2347642 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.12.1 streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index d68cb5e..07ff422 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.12.1 streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 3813be7..9a8a820 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index 502e1b0..87a1bb3 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.1 streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index 791662a..286c3ee 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.1 streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index b75f200..2c5d4c9 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.12.1 streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index dacf9a3..2267e21 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 8cef7a9..3a64d23 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index 44376a1..e40727a 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index 88ea3ec..79a695a 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index ae56c4f..11370c1 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.12.1 streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 92e4360..4cba082 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.1 streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index 77a65b3..a34b173 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.12.1 core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index 774c8ba..fc229f1 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.12.1 streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 32bb9e2..8a94102 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.12.1 twitter-framework From a847a425a1ce6158a4f363d5158764e59a1c9153 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Tue, 9 Jun 2015 21:01:07 -0400 Subject: [PATCH 05/12] Updating develop poms back to pre merge state --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index aea08fc..ec5189f 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.12.1 + 0.13.0-SNAPSHOT pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index 8d999cc..c8ed28c 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.12.1 + 0.13.0-SNAPSHOT streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index 0fe77ab..1e04934 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.1 + 0.13.0-SNAPSHOT streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index e6821cf..64bd296 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index 2347642..7ad9a16 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.1 + 0.13.0-SNAPSHOT streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index 07ff422..d68cb5e 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.12.1 + 0.13.0-SNAPSHOT streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 9a8a820..3813be7 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index 87a1bb3..502e1b0 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.1 + 0.13.0-SNAPSHOT streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index 286c3ee..791662a 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.1 + 0.13.0-SNAPSHOT streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index 2c5d4c9..b75f200 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.12.1 + 0.13.0-SNAPSHOT streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index 2267e21..dacf9a3 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 3a64d23..8cef7a9 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index e40727a..44376a1 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index 79a695a..88ea3ec 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index 11370c1..ae56c4f 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.12.1 + 0.13.0-SNAPSHOT streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 4cba082..92e4360 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.1 + 0.13.0-SNAPSHOT streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index a34b173..77a65b3 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.1 + 0.13.0-SNAPSHOT core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index fc229f1..774c8ba 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.12.1 + 0.13.0-SNAPSHOT streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 8a94102..32bb9e2 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.12.1 + 0.13.0-SNAPSHOT twitter-framework From 62a15ede220607afd58db82d6d95bdca04c99b0d Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Thu, 2 Jul 2015 03:08:25 -0400 Subject: [PATCH 06/12] #37: Upgraded Storm to version 0.9.5 --- pom.xml | 2 +- .../src/main/java/streamflow/model/Cluster.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ec5189f..5ce491b 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ UTF-8 - 0.9.3 + 0.9.5 9.0.0.RC2 2.4.1 1.17.1 diff --git a/streamflow-core/streamflow-model/src/main/java/streamflow/model/Cluster.java b/streamflow-core/streamflow-model/src/main/java/streamflow/model/Cluster.java index d0f2a95..ec98a5c 100644 --- a/streamflow-core/streamflow-model/src/main/java/streamflow/model/Cluster.java +++ b/streamflow-core/streamflow-model/src/main/java/streamflow/model/Cluster.java @@ -30,7 +30,7 @@ public class Cluster implements Serializable { private Integer nimbusPort = 6627; - private String version = "0.9.1"; + private String version = "0.9.5"; private String logServerHost = "localhost"; From cc95de57b9483ec73b612db36f9c4a1e26870e88 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Thu, 2 Jul 2015 03:19:13 -0400 Subject: [PATCH 07/12] #38: Included additional topology properties in the auto-complete list for Storm 0.9.5. --- .../src/main/webapp/app/topology/topology.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/streamflow-core/streamflow-server/src/main/webapp/app/topology/topology.js b/streamflow-core/streamflow-server/src/main/webapp/app/topology/topology.js index 969eb3b..1fa95c3 100644 --- a/streamflow-core/streamflow-server/src/main/webapp/app/topology/topology.js +++ b/streamflow-core/streamflow-server/src/main/webapp/app/topology/topology.js @@ -554,7 +554,9 @@ topologyModule.controller('TopologyPropertiesNewController', [ 'storm.messaging.netty.max_wait_ms', 'storm.messaging.netty.min_wait_ms', 'storm.messaging.netty.transfer.batch.size', + 'storm.messaging.netty.socket.backlog', 'storm.messaging.netty.flush.check.interval.ms', + 'storm.messaging.netty.authentication', 'topology.enable.message.timeouts', 'topology.debug', 'topology.workers', @@ -584,8 +586,10 @@ topologyModule.controller('TopologyPropertiesNewController', [ 'topology.kryo.factory', 'topology.tuple.serializer', 'topology.trident.batch.emit.interval.millis', + 'storm.group.mapping.service.cache.duration.secs', 'topology.classpath', - 'topology.environment' + 'topology.environment', + 'topology.bolts.outgoing.overflow.buffer.enable' ]; $scope.add = function() { From 7b0437bb497c0fb654b99c137c1b8e89ce32044f Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Sun, 12 Jul 2015 15:59:23 -0400 Subject: [PATCH 08/12] #39 Added higher resolution icons to streamflow-service. --- .../src/main/resources/icons/storm-bolt.png | Bin 11444 -> 14654 bytes .../src/main/resources/icons/storm-spout.png | Bin 7834 -> 10483 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/streamflow-core/streamflow-service/src/main/resources/icons/storm-bolt.png b/streamflow-core/streamflow-service/src/main/resources/icons/storm-bolt.png index 57e410ea8732c6b20a8638fc92cddc4e4a95b6a1..7f2e842418f142cd723ff0a933fffbce9dcea040 100644 GIT binary patch literal 14654 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 literal 7834 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 From 393d0cd45ed2e652c7bc01d43283264760db3309 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Sun, 12 Jul 2015 17:42:48 -0400 Subject: [PATCH 09/12] Added Twitter framework.yml definition back to the code while framework annotations are being looked into further. --- .../resources/STREAMFLOW-INF/framework.yml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 streamflow-frameworks/twitter-framework/src/main/resources/STREAMFLOW-INF/framework.yml diff --git a/streamflow-frameworks/twitter-framework/src/main/resources/STREAMFLOW-INF/framework.yml b/streamflow-frameworks/twitter-framework/src/main/resources/STREAMFLOW-INF/framework.yml new file mode 100644 index 0000000..df29380 --- /dev/null +++ b/streamflow-frameworks/twitter-framework/src/main/resources/STREAMFLOW-INF/framework.yml @@ -0,0 +1,44 @@ +name: twitter-framework +label: Twitter Framework +version: ${project.version} +description: Spouts and Bolts supporting Twitter functionality + +components: + - name: twitter-sample-spout + label: Twitter Sample Spout + type: storm-spout + description: Utilizes Twitter Streaming API to stream of 1% Twitter data for analysis. Twitter OAuth credentials for you application are required for use. + mainClass: streamflow.spout.twitter.TwitterSampleSpout + icon: icons/twitter.png + properties: + - name: oauth-consumer-key + label: OAuth Consumer Key + type: text + description: Twitter OAuth Consumer Key + defaultValue: + required: true + - name: oauth-consumer-secret + label: OAuth Consumer Secret + type: text + description: Twitter OAuth Consumer Secret + defaultValue: + required: true + - name: oauth-access-token + label: OAuth Access Token + type: text + description: Twitter OAuth Access Token + defaultValue: + required: true + - name: oauth-access-token-secret + label: OAuth Access Token Secret + type: text + description: Twitter OAuth Access Token Secret + defaultValue: + required: true + outputs: + - key: default + description: Twitter Status + + +#serializations: +# - typeClass: twitter4j.Status From edd5aef5233bef5609988f8955f38c3c10d14a7a Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Sun, 30 Aug 2015 11:42:28 -0400 Subject: [PATCH 10/12] #40: Added Topology Monitor Service that checks running topologies to ensure they stay up even after a cluster outage. --- .gitignore | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- .../java/streamflow/engine/StormEngine.java | 233 ++++----- .../engine/topology/TopologySubmitter.java | 6 +- .../model/config/MonitorConfig.java | 91 ++++ .../model/config/StreamflowConfig.java | 19 +- .../server/config/GuavaServiceModule.java | 23 + .../streamflow/server/config/WebConfig.java | 16 +- .../service/TopologyMonitorService.java | 71 +++ .../streamflow/service/FrameworkService.java | 469 ++++++++++-------- .../java/streamflow/service/LogService.java | 4 +- .../streamflow/service/TopologyService.java | 12 +- .../streamflow/util/config/ConfigModule.java | 9 +- 13 files changed, 610 insertions(+), 347 deletions(-) create mode 100644 streamflow-core/streamflow-model/src/main/java/streamflow/model/config/MonitorConfig.java create mode 100644 streamflow-core/streamflow-server/src/main/java/streamflow/server/config/GuavaServiceModule.java create mode 100644 streamflow-core/streamflow-server/src/main/java/streamflow/server/service/TopologyMonitorService.java diff --git a/.gitignore b/.gitignore index 6a7917c..561e014 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ nbactions.xml .DS_Store *.DS_Store *.iml -.idea +.idea/ diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index dacf9a3..7eb27cd 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -50,7 +50,7 @@ com.google.guava guava - 13.0 + 18.0 com.google.inject diff --git a/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/StormEngine.java b/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/StormEngine.java index 123ab04..09d9149 100644 --- a/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/StormEngine.java +++ b/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/StormEngine.java @@ -130,10 +130,13 @@ public boolean killTopology(Topology topology, int waitTimeSecs, boolean async) killed = waitForTopologyRemoval(topology, waitTimeSecs + KILL_BUFFER_SECS); } + } catch (NotAliveException ex) { + // Topology is not running on the cluster so just ignore + killed = true; } catch (Exception ex) { LOG.error("Exception occurred while killing the remote topology: ID = " + topology.getId() + ", Reason = " + ex.getMessage()); - + ex.printStackTrace(); killed = false; } } @@ -252,7 +255,7 @@ public TopologyInfo getTopologyInfo(Topology topology) { } catch (NotAliveException ex) { LOG.error("The requested topology was not found in the cluster: ID = " + stormTopologyId); } catch (TException ex) { - LOG.error("Exception while retrieving the remote topology info: ", ex); + LOG.error("Exception while retrieving the remote topology info: ", ex.getMessage()); } finally { tTransport.close(); } @@ -267,167 +270,169 @@ public TopologyInfo getTopologyInfo(Topology topology) { */ TopologyInfo topologyInfo = new TopologyInfo(); - topologyInfo.setId(info.get_id()); - topologyInfo.setName(info.get_name()); - topologyInfo.setStatus(info.get_status()); - topologyInfo.setUptimeSecs(info.get_uptime_secs()); - topologyInfo.setTopologyConf(topologyConf); - - for (Map.Entry> error - : info.get_errors().entrySet()) { - List errorInfoList = new ArrayList<>(); - for (backtype.storm.generated.ErrorInfo ei : error.getValue()) { - ErrorInfo errorInfo = new ErrorInfo(); - errorInfo.setError(ei.get_error()); - errorInfo.setErrorTimeSecs(ei.get_error_time_secs()); - errorInfo.setHost(ei.get_host()); - errorInfo.setPort(ei.get_port()); - - errorInfoList.add(errorInfo); + if (info != null) { + topologyInfo.setId(info.get_id()); + topologyInfo.setName(info.get_name()); + topologyInfo.setStatus(info.get_status()); + topologyInfo.setUptimeSecs(info.get_uptime_secs()); + topologyInfo.setTopologyConf(topologyConf); + + for (Map.Entry> error + : info.get_errors().entrySet()) { + List errorInfoList = new ArrayList<>(); + for (backtype.storm.generated.ErrorInfo ei : error.getValue()) { + ErrorInfo errorInfo = new ErrorInfo(); + errorInfo.setError(ei.get_error()); + errorInfo.setErrorTimeSecs(ei.get_error_time_secs()); + errorInfo.setHost(ei.get_host()); + errorInfo.setPort(ei.get_port()); + + errorInfoList.add(errorInfo); + } + + topologyInfo.getErrors().put(error.getKey(), errorInfoList); } - topologyInfo.getErrors().put(error.getKey(), errorInfoList); - } + List executorSummaries = new ArrayList<>(); + for (backtype.storm.generated.ExecutorSummary es : info.get_executors()) { + ExecutorSummary executor = new ExecutorSummary(); + executor.setComponentId(es.get_component_id()); + executor.setHost(es.get_host()); + executor.setPort(es.get_port()); + executor.setUptimeSecs(es.get_uptime_secs()); + + backtype.storm.generated.ExecutorInfo ei = es.get_executor_info(); + if (ei != null) { + ExecutorInfo executorInfo = new ExecutorInfo(); + executorInfo.setTaskStart(ei.get_task_start()); + executorInfo.setTaskEnd(ei.get_task_end()); + + executor.setExecutorInfo(executorInfo); + } - List executorSummaries = new ArrayList<>(); - for (backtype.storm.generated.ExecutorSummary es : info.get_executors()) { - ExecutorSummary executor = new ExecutorSummary(); - executor.setComponentId(es.get_component_id()); - executor.setHost(es.get_host()); - executor.setPort(es.get_port()); - executor.setUptimeSecs(es.get_uptime_secs()); - - backtype.storm.generated.ExecutorInfo ei = es.get_executor_info(); - if (ei != null) { - ExecutorInfo executorInfo = new ExecutorInfo(); - executorInfo.setTaskStart(ei.get_task_start()); - executorInfo.setTaskEnd(ei.get_task_end()); - - executor.setExecutorInfo(executorInfo); - } + backtype.storm.generated.ExecutorStats eStats = es.get_stats(); + if (eStats != null) { + ExecutorStats stats = new ExecutorStats(); + stats.setEmitted(eStats.get_emitted()); + stats.setTransferred(eStats.get_transferred()); - backtype.storm.generated.ExecutorStats eStats = es.get_stats(); - if (eStats != null) { - ExecutorStats stats = new ExecutorStats(); - stats.setEmitted(eStats.get_emitted()); - stats.setTransferred(eStats.get_transferred()); + backtype.storm.generated.ExecutorSpecificStats ess = eStats.get_specific(); + if (ess != null) { + ExecutorSpecificStats specific = new ExecutorSpecificStats(); - backtype.storm.generated.ExecutorSpecificStats ess = eStats.get_specific(); - if (ess != null) { - ExecutorSpecificStats specific = new ExecutorSpecificStats(); + if (ess.is_set_bolt()) { + backtype.storm.generated.BoltStats bs = ess.get_bolt(); + if (bs != null) { + BoltStats boltStats = new BoltStats(); - if (ess.is_set_bolt()) { - backtype.storm.generated.BoltStats bs = ess.get_bolt(); - if (bs != null) { - BoltStats boltStats = new BoltStats(); + for (Map.Entry> ae + : bs.get_acked().entrySet()) { + Map ackedMap = new HashMap<>(); - for (Map.Entry> ae - : bs.get_acked().entrySet()) { - Map ackedMap = new HashMap<>(); + for (Map.Entry aem + : ae.getValue().entrySet()) { + backtype.storm.generated.GlobalStreamId gsi = aem.getKey(); - for (Map.Entry aem - : ae.getValue().entrySet()) { - backtype.storm.generated.GlobalStreamId gsi = aem.getKey(); + String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); - String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); + ackedMap.put(globalStreamId, aem.getValue()); + } - ackedMap.put(globalStreamId, aem.getValue()); + boltStats.getAcked().put(ae.getKey(), ackedMap); } - boltStats.getAcked().put(ae.getKey(), ackedMap); - } + for (Map.Entry> fe + : bs.get_failed().entrySet()) { + Map failedMap = new HashMap<>(); - for (Map.Entry> fe - : bs.get_failed().entrySet()) { - Map failedMap = new HashMap<>(); + for (Map.Entry fem + : fe.getValue().entrySet()) { + backtype.storm.generated.GlobalStreamId gsi = fem.getKey(); - for (Map.Entry fem - : fe.getValue().entrySet()) { - backtype.storm.generated.GlobalStreamId gsi = fem.getKey(); + String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); - String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); + failedMap.put(globalStreamId, fem.getValue()); + } - failedMap.put(globalStreamId, fem.getValue()); + boltStats.getFailed().put(fe.getKey(), failedMap); } - boltStats.getFailed().put(fe.getKey(), failedMap); - } + for (Map.Entry> ee + : bs.get_executed().entrySet()) { + Map executedMap = new HashMap<>(); - for (Map.Entry> ee - : bs.get_executed().entrySet()) { - Map executedMap = new HashMap<>(); + for (Map.Entry eem + : ee.getValue().entrySet()) { + backtype.storm.generated.GlobalStreamId gsi = eem.getKey(); - for (Map.Entry eem - : ee.getValue().entrySet()) { - backtype.storm.generated.GlobalStreamId gsi = eem.getKey(); + String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); - String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); + executedMap.put(globalStreamId, eem.getValue()); + } - executedMap.put(globalStreamId, eem.getValue()); + boltStats.getExecuted().put(ee.getKey(), executedMap); } - boltStats.getExecuted().put(ee.getKey(), executedMap); - } + for (Map.Entry> ema + : bs.get_execute_ms_avg().entrySet()) { + Map executedMap = new HashMap<>(); - for (Map.Entry> ema - : bs.get_execute_ms_avg().entrySet()) { - Map executedMap = new HashMap<>(); + for (Map.Entry emam + : ema.getValue().entrySet()) { + backtype.storm.generated.GlobalStreamId gsi = emam.getKey(); - for (Map.Entry emam - : ema.getValue().entrySet()) { - backtype.storm.generated.GlobalStreamId gsi = emam.getKey(); + String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); - String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); + executedMap.put(globalStreamId, emam.getValue()); + } - executedMap.put(globalStreamId, emam.getValue()); + boltStats.getExecuteMsAvg().put(ema.getKey(), executedMap); } - boltStats.getExecuteMsAvg().put(ema.getKey(), executedMap); - } + for (Map.Entry> pma + : bs.get_process_ms_avg().entrySet()) { + Map processMap = new HashMap<>(); - for (Map.Entry> pma - : bs.get_process_ms_avg().entrySet()) { - Map processMap = new HashMap<>(); + for (Map.Entry pmam + : pma.getValue().entrySet()) { + backtype.storm.generated.GlobalStreamId gsi = pmam.getKey(); - for (Map.Entry pmam - : pma.getValue().entrySet()) { - backtype.storm.generated.GlobalStreamId gsi = pmam.getKey(); + String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); - String globalStreamId = gsi.get_componentId() + ":" + gsi.get_streamId(); + processMap.put(globalStreamId, pmam.getValue()); + } - processMap.put(globalStreamId, pmam.getValue()); + boltStats.getProcessMsAvg().put(pma.getKey(), processMap); } - boltStats.getProcessMsAvg().put(pma.getKey(), processMap); + specific.setBolt(boltStats); } - - specific.setBolt(boltStats); } - } - if (ess.is_set_spout()) { - backtype.storm.generated.SpoutStats ss = ess.get_spout(); - if (ss != null) { - SpoutStats spoutStats = new SpoutStats(); - spoutStats.setAcked(ss.get_acked()); - spoutStats.setFailed(ss.get_failed()); - spoutStats.setCompleteMsAvg(ss.get_complete_ms_avg()); + if (ess.is_set_spout()) { + backtype.storm.generated.SpoutStats ss = ess.get_spout(); + if (ss != null) { + SpoutStats spoutStats = new SpoutStats(); + spoutStats.setAcked(ss.get_acked()); + spoutStats.setFailed(ss.get_failed()); + spoutStats.setCompleteMsAvg(ss.get_complete_ms_avg()); - specific.setSpout(spoutStats); + specific.setSpout(spoutStats); + } } + + stats.setSpecific(specific); } - stats.setSpecific(specific); + executor.setStats(stats); } - executor.setStats(stats); + executorSummaries.add(executor); } - executorSummaries.add(executor); + topologyInfo.setExecutors(executorSummaries); } - topologyInfo.setExecutors(executorSummaries); - return topologyInfo; } diff --git a/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/topology/TopologySubmitter.java b/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/topology/TopologySubmitter.java index 8ba4ea5..b8f242c 100644 --- a/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/topology/TopologySubmitter.java +++ b/streamflow-core/streamflow-engine/src/main/java/streamflow/engine/topology/TopologySubmitter.java @@ -102,13 +102,13 @@ public void run() { localCluster.submitTopology(topology.getId(), stormConfig, stormTopology); } } catch (AlreadyAliveException ex) { - LOG.error("The specified topology is already running on the cluster: {}", ex); + LOG.error("The specified topology is already running on the cluster:", ex); } catch (InvalidTopologyException ex) { LOG.error("The specified topology is invalid: " + ex); } catch (FrameworkException ex) { - LOG.error("The topology was unable to load a dependent framework: {}", ex); + LOG.error("The topology was unable to load a dependent framework:", ex); } catch (Exception ex) { - LOG.error("The topology threw an uncaught exception: {}", ex); + LOG.error("The topology threw an uncaught exception:", ex); } } diff --git a/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/MonitorConfig.java b/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/MonitorConfig.java new file mode 100644 index 0000000..0c911d2 --- /dev/null +++ b/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/MonitorConfig.java @@ -0,0 +1,91 @@ +/** + * Copyright 2014 Lockheed Martin Corporation + * + * 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 streamflow.model.config; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class MonitorConfig implements Serializable { + + static Logger LOG = LoggerFactory.getLogger(MonitorConfig.class); + + private boolean enabled = false; + + private int pollingInterval = 60; + + public MonitorConfig() { + } + + public boolean isEnabled() { + return Boolean.parseBoolean( + System.getProperty("monitor.enabled", Boolean.toString(enabled))); + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public int getPollingInterval() { + if (System.getProperty("monitor.pollingInterval") != null) { + try { + pollingInterval = Integer.parseInt(System.getProperty("monitor.pollingInterval")); + } catch (Exception ex) { + } + } + return pollingInterval; + } + + public void setPollingInterval(int pollingInterval) { + this.pollingInterval = pollingInterval; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 43 * hash + (this.enabled ? 1 : 0); + hash = 43 * hash + this.pollingInterval; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final MonitorConfig other = (MonitorConfig) obj; + if (this.enabled != other.enabled) { + return false; + } + if (this.pollingInterval != other.pollingInterval) { + return false; + } + return true; + } + + @Override + public String toString() { + return "MonitorConfig{" + "enabled=" + enabled + ", pollingInterval=" + pollingInterval + '}'; + } +} diff --git a/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/StreamflowConfig.java b/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/StreamflowConfig.java index 9756c9d..76dc7d0 100644 --- a/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/StreamflowConfig.java +++ b/streamflow-core/streamflow-model/src/main/java/streamflow/model/config/StreamflowConfig.java @@ -34,7 +34,9 @@ public class StreamflowConfig implements Serializable { private LoggerConfig logger = new LoggerConfig(); private AuthConfig auth = new AuthConfig(); - + + private MonitorConfig monitor = new MonitorConfig(); + private LocalClusterConfig localCluster = new LocalClusterConfig(); private List clusters = new ArrayList<>(); @@ -84,6 +86,14 @@ public void setAuth(AuthConfig auth) { this.auth = auth; } + public MonitorConfig getMonitor() { + return monitor; + } + + public void setMonitor(MonitorConfig monitor) { + this.monitor = monitor; + } + public LocalClusterConfig getLocalCluster() { return localCluster; } @@ -116,6 +126,7 @@ public int hashCode() { hash = 29 * hash + (this.datastore != null ? this.datastore.hashCode() : 0); hash = 29 * hash + (this.logger != null ? this.logger.hashCode() : 0); hash = 29 * hash + (this.auth != null ? this.auth.hashCode() : 0); + hash = 29 * hash + (this.monitor != null ? this.monitor.hashCode() : 0); hash = 29 * hash + (this.localCluster != null ? this.localCluster.hashCode() : 0); hash = 29 * hash + (this.clusters != null ? this.clusters.hashCode() : 0); return hash; @@ -150,6 +161,10 @@ public boolean equals(Object obj) { || !this.auth.equals(other.auth))) { return false; } + if (this.monitor != other.monitor && (this.monitor == null + || !this.monitor.equals(other.monitor))) { + return false; + } if (this.localCluster != other.localCluster && (this.localCluster == null || !this.localCluster.equals(other.localCluster))) { return false; @@ -165,7 +180,7 @@ public boolean equals(Object obj) { public String toString() { return "StreamFlowConfig{" + "server=" + server + ", proxy=" + proxy + ", datastore=" + datastore + ", logger=" + logger - + ", auth=" + auth + ", localCluster=" + localCluster + + ", auth=" + auth + ", monitor=" + monitor + ", localCluster=" + localCluster + ", clusters=" + clusters + '}'; } } diff --git a/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/GuavaServiceModule.java b/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/GuavaServiceModule.java new file mode 100644 index 0000000..e78f1cb --- /dev/null +++ b/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/GuavaServiceModule.java @@ -0,0 +1,23 @@ +package streamflow.server.config; + +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.Service; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import streamflow.model.config.MonitorConfig; +import streamflow.model.config.StreamflowConfig; +import streamflow.server.service.TopologyMonitorService; +import streamflow.util.config.ConfigLoader; + +import java.util.Set; + +public class GuavaServiceModule extends AbstractModule { + + @Override + protected void configure() { + MonitorConfig monitorConfig = ConfigLoader.getConfig().getMonitor(); + if (monitorConfig.isEnabled()) { + bind(TopologyMonitorService.class); + } + } +} diff --git a/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/WebConfig.java b/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/WebConfig.java index f283d20..cd75871 100644 --- a/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/WebConfig.java +++ b/streamflow-core/streamflow-server/src/main/java/streamflow/server/config/WebConfig.java @@ -15,14 +15,18 @@ */ package streamflow.server.config; +//import com.google.common.util.concurrent.ServiceManager; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceServletContextListener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.annotation.WebListener; + +import org.apache.storm.guava.util.concurrent.ServiceManager; import streamflow.datastore.config.DatastoreModule; import streamflow.engine.config.EngineModule; +import streamflow.server.service.TopologyMonitorService; import streamflow.service.config.ServiceModule; import streamflow.util.config.ConfigModule; import org.apache.shiro.guice.web.ShiroWebModule; @@ -39,9 +43,17 @@ protected Injector getInjector() { StreamflowEnvironment.setStreamflowHome(System.getenv("STREAMFLOW_HOME")); StreamflowEnvironment.initialize(); - return Guice.createInjector(new ConfigModule(), new DatastoreModule(), - new ServiceModule(), new EngineModule(), new JerseyModule(), + Injector injector = Guice.createInjector(new ConfigModule(), new DatastoreModule(), + new ServiceModule(), new GuavaServiceModule(), new EngineModule(), new JerseyModule(), new SecurityModule(servletContext), ShiroWebModule.guiceFilterModule()); + + // Initialize the service manager to manage daemon services + //ServiceManager manager = injector.getInstance(ServiceManager.class); + //manager.startAsync().awaitHealthy(); + TopologyMonitorService topologyMonitorService = injector.getInstance(TopologyMonitorService.class); + topologyMonitorService.startAsync().awaitRunning(); + + return injector; } @Override diff --git a/streamflow-core/streamflow-server/src/main/java/streamflow/server/service/TopologyMonitorService.java b/streamflow-core/streamflow-server/src/main/java/streamflow/server/service/TopologyMonitorService.java new file mode 100644 index 0000000..cf4670a --- /dev/null +++ b/streamflow-core/streamflow-server/src/main/java/streamflow/server/service/TopologyMonitorService.java @@ -0,0 +1,71 @@ +package streamflow.server.service; + +import com.google.common.util.concurrent.AbstractScheduledService; +import com.google.inject.Inject; +import com.google.inject.Singleton; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import streamflow.model.Topology; +import streamflow.model.config.MonitorConfig; +import streamflow.service.TopologyService; + +import java.util.concurrent.TimeUnit; + +@Singleton +public class TopologyMonitorService extends AbstractScheduledService { + + public static final Logger LOG = LoggerFactory.getLogger(TopologyMonitorService.class); + + private TopologyService topologyService; + private MonitorConfig monitorConfig; + + @Inject + public TopologyMonitorService(TopologyService topologyService, MonitorConfig monitorConfig) { + this.topologyService = topologyService; + this.monitorConfig = monitorConfig; + } + + @Override + protected void startUp() throws Exception { + LOG.info("Topology Status Monitor Started..."); + } + + @Override + protected void runOneIteration() throws Exception { + // Iterate over all of the topologies for each user to check live status + for (Topology topology : topologyService.listAllTopologies()) { + try { + // Get the current live status of the topology + String topologyStatusDesired = topology.getStatus(); + String topologyStatusActual = topologyService.getTopology(topology.getId(), topology.getUserId()).getStatus(); + + if (topologyStatusDesired.equalsIgnoreCase("ACTIVE")) { + // Topology should be submitted, but isn't active so resubmit to desired state + if (!topologyStatusActual.equalsIgnoreCase("ACTIVE")) { + LOG.warn("Topology has a desired state of ACTIVE but is not currently deployed. " + + "Redeploying topology... ID = " + topology.getId() + ", Name = " + topology.getName()); + + // Resubmit the topology using the same settings as originally submitted + Topology submittedTopology = topologyService.submitTopology( + topology.getId(), topology.getUserId(), topology.getClusterId(), + topology.getLogLevel(), topology.getClassLoaderPolicy()); + + if (topology != null && topology.getStatus().equalsIgnoreCase("ACTIVE")) { + LOG.info("Topology redeploy succeeded: ID = " + topology.getId() + ", Name = " + topology.getName()); + } else { + LOG.error("Topology redeploy failed: ID = " + topology.getId() + ", Name = " + topology.getName()); + } + } + } + } catch (Exception ex) { + LOG.error("An exception occurred while checking topology status: ID = " + + topology.getId() + ", Name = " + topology.getName(), ex); + } + } + } + + @Override + protected Scheduler scheduler() { + return Scheduler.newFixedRateSchedule(monitorConfig.getPollingInterval(), monitorConfig.getPollingInterval(), TimeUnit.SECONDS); + } +} diff --git a/streamflow-core/streamflow-service/src/main/java/streamflow/service/FrameworkService.java b/streamflow-core/streamflow-service/src/main/java/streamflow/service/FrameworkService.java index 1333051..af854a6 100644 --- a/streamflow-core/streamflow-service/src/main/java/streamflow/service/FrameworkService.java +++ b/streamflow-core/streamflow-service/src/main/java/streamflow/service/FrameworkService.java @@ -1,17 +1,15 @@ /** * Copyright 2014 Lockheed Martin Corporation * - * 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 + * 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 + * 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. + * 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 streamflow.service; @@ -23,7 +21,6 @@ import java.util.Date; import java.util.Enumeration; import java.util.List; -import java.util.UUID; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipEntry; @@ -156,182 +153,233 @@ public byte[] getFrameworkJar(String frameworkId) { return frameworkJarContent; } - + /** * Process the annotations found in a framework jar + * * @param jarFile * @return a FrameworkConfig or null if no annotations were found */ - public FrameworkConfig processFrameworkAnnotations(File jarFile){ - FrameworkConfig config = new FrameworkConfig(); - ArrayList components = new ArrayList(); - String frameworkLevel = null; - boolean foundFrameworkAnnotations = false; - ZipFile zipFile = null; - - try { - zipFile = new ZipFile(jarFile); - - Enumeration entries = zipFile.entries(); - while(entries.hasMoreElements()){ - ZipEntry entry = entries.nextElement(); - String entryName = entry.getName(); - if(entry.isDirectory()){ - if(frameworkLevel != null){ - if(entryName.startsWith(frameworkLevel) == false) frameworkLevel = null; - } - ZipEntry packageInfoEntry = zipFile.getEntry(entryName+"package-info.class"); - if(packageInfoEntry != null){ - InputStream fileInputStream = zipFile.getInputStream(packageInfoEntry); - DataInputStream dstream = new DataInputStream(fileInputStream); - ClassFile cf = new ClassFile(dstream); - String cfName = cf.getName(); - AnnotationsAttribute attr = (AnnotationsAttribute)cf.getAttribute(AnnotationsAttribute.visibleTag); - Annotation annotation = attr.getAnnotation("streamflow.annotations.Framework"); - if(annotation == null) continue; - - frameworkLevel = cfName; - foundFrameworkAnnotations = true; - StringMemberValue frameworkLabel = (StringMemberValue) annotation.getMemberValue("label"); - if(frameworkLabel != null) config.setLabel(frameworkLabel.getValue()); - StringMemberValue frameworkName = (StringMemberValue) annotation.getMemberValue("name"); - if(frameworkName != null) config.setName(frameworkName.getValue()); - StringMemberValue frameworkVersion = (StringMemberValue) annotation.getMemberValue("version"); - if(frameworkVersion != null) config.setVersion(frameworkVersion.getValue()); - - Annotation descriptionAnnotation = attr.getAnnotation("streamflow.annotations.Description"); - if(descriptionAnnotation != null){ - StringMemberValue frameworkDescription = (StringMemberValue) descriptionAnnotation.getMemberValue("value"); - if(frameworkDescription != null) config.setDescription(frameworkDescription.getValue()); - } - - - } - } else if(frameworkLevel != null && entryName.endsWith(".class") && entryName.endsWith("package-info.class") == false){ - ZipEntry packageInfoEntry = zipFile.getEntry(entryName); - InputStream fileInputStream = zipFile.getInputStream(packageInfoEntry); - DataInputStream dstream = new DataInputStream(fileInputStream); - ClassFile cf = new ClassFile(dstream); - String cfName = cf.getName(); - AnnotationsAttribute attr = (AnnotationsAttribute)cf.getAttribute(AnnotationsAttribute.visibleTag); - if(attr == null) continue; - Annotation componentAnnotation = attr.getAnnotation("streamflow.annotations.Component"); - - if(componentAnnotation == null) continue; - - ComponentConfig component = new ComponentConfig(); - component.setMainClass(cf.getName()); - StringMemberValue componentLabel = (StringMemberValue) componentAnnotation.getMemberValue("label"); - if(componentLabel != null) component.setLabel(componentLabel.getValue()); - StringMemberValue componentName = (StringMemberValue) componentAnnotation.getMemberValue("name"); - if(componentName != null) component.setName(componentName.getValue()); - StringMemberValue componentType = (StringMemberValue) componentAnnotation.getMemberValue("type"); - if(componentType != null) component.setType(componentType.getValue()); - StringMemberValue componentIcon = (StringMemberValue) componentAnnotation.getMemberValue("icon"); - if(componentIcon != null) component.setIcon(componentIcon.getValue()); - - Annotation componentDescriptionAnnotation = attr.getAnnotation("streamflow.annotations.Description"); - if(componentDescriptionAnnotation != null){ - StringMemberValue componentDescription = (StringMemberValue) componentDescriptionAnnotation.getMemberValue("value"); - if(componentDescription != null) component.setDescription(componentDescription.getValue()); - } - - Annotation componentInputsAnnotation = attr.getAnnotation("streamflow.annotations.ComponentInputs"); - if(componentInputsAnnotation != null){ - ArrayList inputs = new ArrayList(); - ArrayMemberValue componentInputs = (ArrayMemberValue) componentInputsAnnotation.getMemberValue("value"); - for(MemberValue value : componentInputs.getValue()){ - AnnotationMemberValue annotationMember = (AnnotationMemberValue)value; - Annotation annotationValue = annotationMember.getValue(); - StringMemberValue keyAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("key"); - StringMemberValue descriptionAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("description"); - ComponentInterface inputInterface = new ComponentInterface(); - if(keyAnnotationValue != null) inputInterface.setKey(keyAnnotationValue.getValue()); - if(descriptionAnnotationValue != null) inputInterface.setDescription(descriptionAnnotationValue.getValue()); - inputs.add(inputInterface); - } - - component.setInputs(inputs); - } - - Annotation componentOutputsAnnotation = attr.getAnnotation("streamflow.annotations.ComponentOutputs"); - if(componentOutputsAnnotation != null){ - ArrayList outputs = new ArrayList(); - ArrayMemberValue componentOutputs = (ArrayMemberValue) componentOutputsAnnotation.getMemberValue("value"); - for(MemberValue value : componentOutputs.getValue()){ - AnnotationMemberValue annotationMember = (AnnotationMemberValue)value; - Annotation annotationValue = annotationMember.getValue(); - StringMemberValue keyAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("key"); - StringMemberValue descriptionAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("description"); - ComponentInterface outputInterface = new ComponentInterface(); - if(keyAnnotationValue != null) outputInterface.setKey(keyAnnotationValue.getValue()); - if(descriptionAnnotationValue != null) outputInterface.setDescription(descriptionAnnotationValue.getValue()); - outputs.add(outputInterface); - } - - component.setOutputs(outputs); - } - - - List memberMethods = cf.getMethods(); - if(memberMethods != null){ - ArrayList properties = new ArrayList(); - - for(MethodInfo method : memberMethods){ - AnnotationsAttribute methodAttr = (AnnotationsAttribute) method.getAttribute(AnnotationsAttribute.visibleTag); - if(methodAttr == null) continue; - Annotation propertyAnnotation = methodAttr.getAnnotation("streamflow.annotations.ComponentProperty"); - if(propertyAnnotation == null) continue; - - ComponentProperty property = new ComponentProperty(); - - StringMemberValue propertyName = (StringMemberValue) propertyAnnotation.getMemberValue("name"); - if(propertyName != null) property.setName(propertyName.getValue()); - StringMemberValue propertylabel = (StringMemberValue) propertyAnnotation.getMemberValue("label"); - if(propertylabel != null) property.setLabel(propertylabel.getValue()); - StringMemberValue propertyType = (StringMemberValue) propertyAnnotation.getMemberValue("type"); - if(propertyType != null) property.setType(propertyType.getValue()); - StringMemberValue propertyDefaultValue = (StringMemberValue) propertyAnnotation.getMemberValue("defaultValue"); - if(propertyDefaultValue != null) property.setDefaultValue(propertyDefaultValue.getValue()); - BooleanMemberValue propertyRequired = (BooleanMemberValue)propertyAnnotation.getMemberValue("required"); - if(propertyRequired != null) property.setRequired(propertyRequired.getValue()); - - Annotation methodDescriptionAnnotation = methodAttr.getAnnotation("streamflow.annotations.Description"); - if(methodDescriptionAnnotation != null){ - StringMemberValue methodDescription = (StringMemberValue) methodDescriptionAnnotation.getMemberValue("value"); - if(methodDescription != null) property.setDescription(methodDescription.getValue()); - } - properties.add(property); - } - component.setProperties(properties); - - } - - components.add(component); - } - } - - config.setComponents(components); - - // return null if no framework annotations were located - if(foundFrameworkAnnotations == false) return null; - - return config; - } catch (IOException ex){ + public FrameworkConfig processFrameworkAnnotations(File jarFile) { + FrameworkConfig config = new FrameworkConfig(); + ArrayList components = new ArrayList(); + String frameworkLevel = null; + boolean foundFrameworkAnnotations = false; + ZipFile zipFile = null; + + try { + zipFile = new ZipFile(jarFile); + + Enumeration entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + String entryName = entry.getName(); + if (entry.isDirectory()) { + if (frameworkLevel != null) { + if (entryName.startsWith(frameworkLevel) == false) { + frameworkLevel = null; + } + } + ZipEntry packageInfoEntry = zipFile.getEntry(entryName + "package-info.class"); + if (packageInfoEntry != null) { + InputStream fileInputStream = zipFile.getInputStream(packageInfoEntry); + DataInputStream dstream = new DataInputStream(fileInputStream); + ClassFile cf = new ClassFile(dstream); + String cfName = cf.getName(); + AnnotationsAttribute attr = (AnnotationsAttribute) cf.getAttribute(AnnotationsAttribute.visibleTag); + Annotation annotation = attr.getAnnotation("streamflow.annotations.Framework"); + if (annotation == null) { + continue; + } + + frameworkLevel = cfName; + foundFrameworkAnnotations = true; + StringMemberValue frameworkLabel = (StringMemberValue) annotation.getMemberValue("label"); + if (frameworkLabel != null) { + config.setLabel(frameworkLabel.getValue()); + } + StringMemberValue frameworkName = (StringMemberValue) annotation.getMemberValue("name"); + if (frameworkName != null) { + config.setName(frameworkName.getValue()); + } + StringMemberValue frameworkVersion = (StringMemberValue) annotation.getMemberValue("version"); + if (frameworkVersion != null) { + config.setVersion(frameworkVersion.getValue()); + } + + Annotation descriptionAnnotation = attr.getAnnotation("streamflow.annotations.Description"); + if (descriptionAnnotation != null) { + StringMemberValue frameworkDescription = (StringMemberValue) descriptionAnnotation.getMemberValue("value"); + if (frameworkDescription != null) { + config.setDescription(frameworkDescription.getValue()); + } + } + + } + } else if (frameworkLevel != null && entryName.endsWith(".class") && entryName.endsWith("package-info.class") == false) { + ZipEntry packageInfoEntry = zipFile.getEntry(entryName); + InputStream fileInputStream = zipFile.getInputStream(packageInfoEntry); + DataInputStream dstream = new DataInputStream(fileInputStream); + ClassFile cf = new ClassFile(dstream); + String cfName = cf.getName(); + AnnotationsAttribute attr = (AnnotationsAttribute) cf.getAttribute(AnnotationsAttribute.visibleTag); + if (attr == null) { + continue; + } + Annotation componentAnnotation = attr.getAnnotation("streamflow.annotations.Component"); + + if (componentAnnotation == null) { + continue; + } + + ComponentConfig component = new ComponentConfig(); + component.setMainClass(cf.getName()); + StringMemberValue componentLabel = (StringMemberValue) componentAnnotation.getMemberValue("label"); + if (componentLabel != null) { + component.setLabel(componentLabel.getValue()); + } + StringMemberValue componentName = (StringMemberValue) componentAnnotation.getMemberValue("name"); + if (componentName != null) { + component.setName(componentName.getValue()); + } + StringMemberValue componentType = (StringMemberValue) componentAnnotation.getMemberValue("type"); + if (componentType != null) { + component.setType(componentType.getValue()); + } + StringMemberValue componentIcon = (StringMemberValue) componentAnnotation.getMemberValue("icon"); + if (componentIcon != null) { + component.setIcon(componentIcon.getValue()); + } + + Annotation componentDescriptionAnnotation = attr.getAnnotation("streamflow.annotations.Description"); + if (componentDescriptionAnnotation != null) { + StringMemberValue componentDescription = (StringMemberValue) componentDescriptionAnnotation.getMemberValue("value"); + if (componentDescription != null) { + component.setDescription(componentDescription.getValue()); + } + } + + Annotation componentInputsAnnotation = attr.getAnnotation("streamflow.annotations.ComponentInputs"); + if (componentInputsAnnotation != null) { + ArrayList inputs = new ArrayList(); + ArrayMemberValue componentInputs = (ArrayMemberValue) componentInputsAnnotation.getMemberValue("value"); + for (MemberValue value : componentInputs.getValue()) { + AnnotationMemberValue annotationMember = (AnnotationMemberValue) value; + Annotation annotationValue = annotationMember.getValue(); + StringMemberValue keyAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("key"); + StringMemberValue descriptionAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("description"); + ComponentInterface inputInterface = new ComponentInterface(); + if (keyAnnotationValue != null) { + inputInterface.setKey(keyAnnotationValue.getValue()); + } + if (descriptionAnnotationValue != null) { + inputInterface.setDescription(descriptionAnnotationValue.getValue()); + } + inputs.add(inputInterface); + } + + component.setInputs(inputs); + } + + Annotation componentOutputsAnnotation = attr.getAnnotation("streamflow.annotations.ComponentOutputs"); + if (componentOutputsAnnotation != null) { + ArrayList outputs = new ArrayList(); + ArrayMemberValue componentOutputs = (ArrayMemberValue) componentOutputsAnnotation.getMemberValue("value"); + for (MemberValue value : componentOutputs.getValue()) { + AnnotationMemberValue annotationMember = (AnnotationMemberValue) value; + Annotation annotationValue = annotationMember.getValue(); + StringMemberValue keyAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("key"); + StringMemberValue descriptionAnnotationValue = (StringMemberValue) annotationValue.getMemberValue("description"); + ComponentInterface outputInterface = new ComponentInterface(); + if (keyAnnotationValue != null) { + outputInterface.setKey(keyAnnotationValue.getValue()); + } + if (descriptionAnnotationValue != null) { + outputInterface.setDescription(descriptionAnnotationValue.getValue()); + } + outputs.add(outputInterface); + } + + component.setOutputs(outputs); + } + + List memberMethods = cf.getMethods(); + if (memberMethods != null) { + ArrayList properties = new ArrayList(); + + for (MethodInfo method : memberMethods) { + AnnotationsAttribute methodAttr = (AnnotationsAttribute) method.getAttribute(AnnotationsAttribute.visibleTag); + if (methodAttr == null) { + continue; + } + Annotation propertyAnnotation = methodAttr.getAnnotation("streamflow.annotations.ComponentProperty"); + if (propertyAnnotation == null) { + continue; + } + + ComponentProperty property = new ComponentProperty(); + + StringMemberValue propertyName = (StringMemberValue) propertyAnnotation.getMemberValue("name"); + if (propertyName != null) { + property.setName(propertyName.getValue()); + } + StringMemberValue propertylabel = (StringMemberValue) propertyAnnotation.getMemberValue("label"); + if (propertylabel != null) { + property.setLabel(propertylabel.getValue()); + } + StringMemberValue propertyType = (StringMemberValue) propertyAnnotation.getMemberValue("type"); + if (propertyType != null) { + property.setType(propertyType.getValue()); + } + StringMemberValue propertyDefaultValue = (StringMemberValue) propertyAnnotation.getMemberValue("defaultValue"); + if (propertyDefaultValue != null) { + property.setDefaultValue(propertyDefaultValue.getValue()); + } + BooleanMemberValue propertyRequired = (BooleanMemberValue) propertyAnnotation.getMemberValue("required"); + if (propertyRequired != null) { + property.setRequired(propertyRequired.getValue()); + } + + Annotation methodDescriptionAnnotation = methodAttr.getAnnotation("streamflow.annotations.Description"); + if (methodDescriptionAnnotation != null) { + StringMemberValue methodDescription = (StringMemberValue) methodDescriptionAnnotation.getMemberValue("value"); + if (methodDescription != null) { + property.setDescription(methodDescription.getValue()); + } + } + properties.add(property); + } + component.setProperties(properties); + + } + + components.add(component); + } + } + + config.setComponents(components); + + // return null if no framework annotations were located + if (foundFrameworkAnnotations == false) { + return null; + } + + return config; + } catch (IOException ex) { LOG.error("Error while parsing framework annotations: ", ex); - + throw new EntityInvalidException("Error while parsing framework annotations: " - + ex.getMessage()); - } finally { - if(zipFile != null){ - try { - zipFile.close(); - } catch (IOException e) { - LOG.error("Error while closing framework zip"); - } - } - } - + + ex.getMessage()); + } finally { + if (zipFile != null) { + try { + zipFile.close(); + } catch (IOException e) { + LOG.error("Error while closing framework zip"); + } + } + } + } public FileInfo getFrameworkFileInfo(String frameworkId) { @@ -348,22 +396,19 @@ public FileInfo getFrameworkFileInfo(String frameworkId) { public Framework processFrameworkJar(byte[] frameworkJar, boolean isPublic) { Framework framework = null; - + try { String frameworkHash = DigestUtils.md5Hex(frameworkJar); - + // Write out a temporary file for the jar so it can be processed File tempFrameworkFile = new File(StreamflowEnvironment.getFrameworksDir(), frameworkHash + ".jar"); FileUtils.writeByteArrayToFile(tempFrameworkFile, frameworkJar); - + FrameworkConfig frameworkConfig = processFrameworkConfig(tempFrameworkFile); if (frameworkConfig != null) { - - - String frameworkId = frameworkConfig.getName(); // If the framework already exists, delete it first to clear out children @@ -400,13 +445,13 @@ public Framework processFrameworkJar(byte[] frameworkJar, boolean isPublic) { LOG.error("Exception while processing the framework jar", ex); throw new EntityInvalidException( - "Exception while processing the framework framework: Exception = " - + ex.getMessage()); + "Exception while processing the framework framework: Exception = " + + ex.getMessage()); } return framework; } - + public String storeFrameworkJar(byte[] frameworkJar) { FileInfo frameworkFile = new FileInfo(); frameworkFile.setFileName(IDUtils.randomUUID()); @@ -420,18 +465,18 @@ public String storeFrameworkJar(byte[] frameworkJar) { if (frameworkFile == null) { throw new ServiceException("Unable to save framework jar file"); } - + return frameworkFile.getId(); } - + public FrameworkConfig processFrameworkConfig(File tempFrameworkFile) { FrameworkConfig frameworkConfig = null; try { JarFile frameworkJarFile = new JarFile(tempFrameworkFile.getAbsoluteFile()); - + JarEntry frameworkYamlEntry = frameworkJarFile.getJarEntry("STREAMFLOW-INF/framework.yml"); - + JarEntry frameworkJsonEntry = frameworkJarFile.getJarEntry("STREAMFLOW-INF/framework.json"); if (frameworkYamlEntry != null) { @@ -444,27 +489,27 @@ public FrameworkConfig processFrameworkConfig(File tempFrameworkFile) { } else if (frameworkJsonEntry != null) { String frameworkJson = IOUtils.toString( frameworkJarFile.getInputStream(frameworkJsonEntry)); - + // Attempt to deserialize the inbuilt streams-framework.json frameworkConfig = jsonMapper.readValue( frameworkJson, FrameworkConfig.class); } else { - frameworkConfig = processFrameworkAnnotations(tempFrameworkFile); - if(frameworkConfig == null){ - throw new EntityInvalidException( - "The framework configuration file was not found in the framework jar"); - } + frameworkConfig = processFrameworkAnnotations(tempFrameworkFile); + if (frameworkConfig == null) { + throw new EntityInvalidException( + "The framework configuration file was not found in the framework jar"); + } } } catch (IOException ex) { LOG.error("Error while loaded the framework configuration: ", ex); - + throw new EntityInvalidException("Error while loading the framework configuration: " - + ex.getMessage()); + + ex.getMessage()); } - + return frameworkConfig; } - + public void processFrameworkComponents(Framework framework, FrameworkConfig frameworkConfig, File frameworkFile) { for (ComponentConfig componentConfig : frameworkConfig.getComponents()) { Component component = new Component(); @@ -480,7 +525,7 @@ public void processFrameworkComponents(Framework framework, FrameworkConfig fram componentService.addComponent(component); } } - + public void processFrameworkResources(Framework framework, FrameworkConfig frameworkConfig) { for (ResourceConfig resourceConfig : frameworkConfig.getResources()) { Resource resource = new Resource(); @@ -495,7 +540,7 @@ public void processFrameworkResources(Framework framework, FrameworkConfig frame resourceService.addResource(resource); } } - + public void processFrameworkSerializations(Framework framework, FrameworkConfig frameworkConfig) { // Keep track of the order or the serializations specified in the config int serializationPriority = 0; @@ -513,7 +558,7 @@ public void processFrameworkSerializations(Framework framework, FrameworkConfig serializationService.addSerialization(serialization); } } - + public String loadFrameworkComponentIcon(ComponentConfig componentConfig, File frameworkFile) { String iconId = null; byte[] iconData = null; @@ -521,7 +566,7 @@ public String loadFrameworkComponentIcon(ComponentConfig componentConfig, File f if (componentConfig.getIcon() != null) { try { JarFile frameworkJarFile = new JarFile(frameworkFile); - + JarEntry iconEntry = frameworkJarFile.getJarEntry(componentConfig.getIcon()); if (iconEntry != null) { iconData = IOUtils.toByteArray(frameworkJarFile.getInputStream(iconEntry)); @@ -535,31 +580,31 @@ public String loadFrameworkComponentIcon(ComponentConfig componentConfig, File f try { if (componentConfig.getType().equalsIgnoreCase(Component.STORM_SPOUT_TYPE)) { iconData = IOUtils.toByteArray(Thread.currentThread() - .getContextClassLoader().getResourceAsStream("icons/storm-spout.png")); + .getContextClassLoader().getResourceAsStream("icons/storm-spout.png")); } else if (componentConfig.getType().equalsIgnoreCase(Component.STORM_BOLT_TYPE)) { iconData = IOUtils.toByteArray(Thread.currentThread() - .getContextClassLoader().getResourceAsStream("icons/storm-bolt.png")); + .getContextClassLoader().getResourceAsStream("icons/storm-bolt.png")); } else { iconData = IOUtils.toByteArray(Thread.currentThread() - .getContextClassLoader().getResourceAsStream("icons/storm-trident.png")); + .getContextClassLoader().getResourceAsStream("icons/storm-trident.png")); } } catch (IOException ex) { LOG.error("Error occurred while loading the default component icon: ", ex); } } - + if (iconData != null) { FileInfo iconFile = new FileInfo(); iconFile.setFileName(iconFile.getFileName()); iconFile.setFileType("image/png"); iconFile.setFileSize(iconData.length); iconFile.setContentHash(DigestUtils.md5Hex(iconData)); - + iconFile = fileService.saveFile(iconFile, iconData); iconId = iconFile.getId(); } - + return iconId; } } diff --git a/streamflow-core/streamflow-service/src/main/java/streamflow/service/LogService.java b/streamflow-core/streamflow-service/src/main/java/streamflow/service/LogService.java index 5744b7a..95a1cda 100644 --- a/streamflow-core/streamflow-service/src/main/java/streamflow/service/LogService.java +++ b/streamflow-core/streamflow-service/src/main/java/streamflow/service/LogService.java @@ -166,7 +166,9 @@ public void clearTopologyLog(Topology topology, Cluster cluster) { try { // Delete the local log file from the server - FileUtils.forceDelete(logFile); + if (logFile.exists()) { + FileUtils.forceDelete(logFile); + } } catch (IOException ex) { LOG.error("Error deleting local topology log file: " + logFile.getAbsolutePath()); } diff --git a/streamflow-core/streamflow-service/src/main/java/streamflow/service/TopologyService.java b/streamflow-core/streamflow-service/src/main/java/streamflow/service/TopologyService.java index 1f7eaa7..77e0ef4 100644 --- a/streamflow-core/streamflow-service/src/main/java/streamflow/service/TopologyService.java +++ b/streamflow-core/streamflow-service/src/main/java/streamflow/service/TopologyService.java @@ -112,6 +112,10 @@ public TopologyService(TopologyDao topologyDao, ComponentService componentServic this.streamflowConfig = streamflowConfig; } + public List listAllTopologies() { + return topologyDao.findAll(); + } + public List listTopologies(String userId) { List topologies = topologyDao.findAll(userId); @@ -398,7 +402,7 @@ public Topology initializeTopologyObject(Topology topology) { } catch (ServiceException ex) { LOG.error("Exception while initializing the topology config object", ex); - throw new ServiceException("Exception while intializing the " + throw new ServiceException("Exception while initializing the " + "Topology config object: " + ex.getMessage()); } } @@ -418,9 +422,9 @@ public String generateTopologyJar(Topology topology, Cluster cluster) { jarBuilder.open(); // Keep track of already added dependencies - HashSet frameworkDependencies = new HashSet(); + HashSet frameworkDependencies = new HashSet<>(); - HashSet processedSerializations = new HashSet(); + HashSet processedSerializations = new HashSet<>(); TopologyConfig topologyConfig = topology.getDeployedConfig(); @@ -663,7 +667,7 @@ private void clearTopologyProject(String projectId) { FileUtils.forceDelete(new File(StreamflowEnvironment.getTopologiesDir(), projectId + ".jar")); } catch (IOException ex) { - LOG.error("Exception while clearing the topology project: ", ex); + //LOG.error("Exception while clearing the topology project: ", ex); } } } diff --git a/streamflow-core/streamflow-util/src/main/java/streamflow/util/config/ConfigModule.java b/streamflow-core/streamflow-util/src/main/java/streamflow/util/config/ConfigModule.java index 5feeb81..5927608 100644 --- a/streamflow-core/streamflow-util/src/main/java/streamflow/util/config/ConfigModule.java +++ b/streamflow-core/streamflow-util/src/main/java/streamflow/util/config/ConfigModule.java @@ -16,15 +16,9 @@ package streamflow.util.config; import com.google.inject.AbstractModule; -import streamflow.model.config.AuthConfig; -import streamflow.model.config.DatastoreConfig; -import streamflow.model.config.StreamflowConfig; -import streamflow.model.config.LoggerConfig; -import streamflow.model.config.ProxyConfig; -import streamflow.model.config.ServerConfig; +import streamflow.model.config.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import streamflow.model.config.LocalClusterConfig; public class ConfigModule extends AbstractModule { @@ -37,6 +31,7 @@ protected void configure() { bind(StreamflowConfig.class).toInstance(streamflowConfig); bind(ServerConfig.class).toInstance(streamflowConfig.getServer()); bind(AuthConfig.class).toInstance(streamflowConfig.getAuth()); + bind(MonitorConfig.class).toInstance(streamflowConfig.getMonitor()); bind(ProxyConfig.class).toInstance(streamflowConfig.getProxy()); bind(LoggerConfig.class).toInstance(streamflowConfig.getLogger()); bind(LocalClusterConfig.class).toInstance(streamflowConfig.getLocalCluster()); From 21be750c1c891ef234092db6aaee3a686b810057 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Sun, 30 Aug 2015 15:37:05 -0400 Subject: [PATCH 11/12] Update jgitflow plugin version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ce491b..82b21e1 100644 --- a/pom.xml +++ b/pom.xml @@ -588,7 +588,7 @@ external.atlassian.jgitflow jgitflow-maven-plugin - 1.0-m4.3 + 1.0-m5.1 true true From c930dad2af81df6607ab0e69ff0350e189da77b1 Mon Sep 17 00:00:00 2001 From: Julien Cruz Date: Sun, 30 Aug 2015 15:38:23 -0400 Subject: [PATCH 12/12] updating poms for branch'release/0.13.0' with non-snapshot versions --- pom.xml | 2 +- streamflow-annotations/pom.xml | 2 +- streamflow-core/pom.xml | 2 +- streamflow-core/streamflow-app/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-jar/pom.xml | 2 +- streamflow-core/streamflow-app/streamflow-app-war/pom.xml | 2 +- streamflow-core/streamflow-datastore/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-core/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-jdbc/pom.xml | 2 +- .../streamflow-datastore/streamflow-datastore-mongodb/pom.xml | 2 +- streamflow-core/streamflow-engine/pom.xml | 2 +- streamflow-core/streamflow-model/pom.xml | 2 +- streamflow-core/streamflow-server/pom.xml | 2 +- streamflow-core/streamflow-service/pom.xml | 2 +- streamflow-core/streamflow-util/pom.xml | 2 +- streamflow-dist/pom.xml | 2 +- streamflow-frameworks/core-framework/pom.xml | 2 +- streamflow-frameworks/pom.xml | 2 +- streamflow-frameworks/twitter-framework/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 82b21e1..bacb6d8 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.13.0 pom StreamFlow diff --git a/streamflow-annotations/pom.xml b/streamflow-annotations/pom.xml index c8ed28c..38aedb0 100644 --- a/streamflow-annotations/pom.xml +++ b/streamflow-annotations/pom.xml @@ -20,7 +20,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.13.0 streamflow-annotations diff --git a/streamflow-core/pom.xml b/streamflow-core/pom.xml index 1e04934..81cd3c9 100644 --- a/streamflow-core/pom.xml +++ b/streamflow-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.13.0 streamflow-core diff --git a/streamflow-core/streamflow-app/pom.xml b/streamflow-core/streamflow-app/pom.xml index 64bd296..b0b30f3 100644 --- a/streamflow-core/streamflow-app/pom.xml +++ b/streamflow-core/streamflow-app/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-app diff --git a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml index 7ad9a16..9aba1dc 100644 --- a/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-jar/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.13.0 streamflow-app-jar diff --git a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml index d68cb5e..cbaf727 100644 --- a/streamflow-core/streamflow-app/streamflow-app-war/pom.xml +++ b/streamflow-core/streamflow-app/streamflow-app-war/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-app - 0.13.0-SNAPSHOT + 0.13.0 streamflow-app-war diff --git a/streamflow-core/streamflow-datastore/pom.xml b/streamflow-core/streamflow-datastore/pom.xml index 3813be7..f950dc0 100644 --- a/streamflow-core/streamflow-datastore/pom.xml +++ b/streamflow-core/streamflow-datastore/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-datastore diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml index 502e1b0..81ce350 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-core/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.13.0 streamflow-datastore-core diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml index 791662a..62adf47 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-jdbc/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.13.0 streamflow-datastore-jdbc diff --git a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml index b75f200..b985b18 100644 --- a/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml +++ b/streamflow-core/streamflow-datastore/streamflow-datastore-mongodb/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-datastore - 0.13.0-SNAPSHOT + 0.13.0 streamflow-datastore-mongodb diff --git a/streamflow-core/streamflow-engine/pom.xml b/streamflow-core/streamflow-engine/pom.xml index 7eb27cd..32b3234 100644 --- a/streamflow-core/streamflow-engine/pom.xml +++ b/streamflow-core/streamflow-engine/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-engine diff --git a/streamflow-core/streamflow-model/pom.xml b/streamflow-core/streamflow-model/pom.xml index 8cef7a9..07e4e79 100644 --- a/streamflow-core/streamflow-model/pom.xml +++ b/streamflow-core/streamflow-model/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-model diff --git a/streamflow-core/streamflow-server/pom.xml b/streamflow-core/streamflow-server/pom.xml index 44376a1..e5f4f9c 100644 --- a/streamflow-core/streamflow-server/pom.xml +++ b/streamflow-core/streamflow-server/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-server diff --git a/streamflow-core/streamflow-service/pom.xml b/streamflow-core/streamflow-service/pom.xml index 88ea3ec..68c8ee8 100644 --- a/streamflow-core/streamflow-service/pom.xml +++ b/streamflow-core/streamflow-service/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-service diff --git a/streamflow-core/streamflow-util/pom.xml b/streamflow-core/streamflow-util/pom.xml index ae56c4f..8fa06c1 100644 --- a/streamflow-core/streamflow-util/pom.xml +++ b/streamflow-core/streamflow-util/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-core - 0.13.0-SNAPSHOT + 0.13.0 streamflow-util diff --git a/streamflow-dist/pom.xml b/streamflow-dist/pom.xml index 92e4360..e2b4aba 100644 --- a/streamflow-dist/pom.xml +++ b/streamflow-dist/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.13.0 streamflow-dist diff --git a/streamflow-frameworks/core-framework/pom.xml b/streamflow-frameworks/core-framework/pom.xml index 77a65b3..91b01a0 100644 --- a/streamflow-frameworks/core-framework/pom.xml +++ b/streamflow-frameworks/core-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.13.0 core-framework diff --git a/streamflow-frameworks/pom.xml b/streamflow-frameworks/pom.xml index 774c8ba..9049d91 100644 --- a/streamflow-frameworks/pom.xml +++ b/streamflow-frameworks/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow - 0.13.0-SNAPSHOT + 0.13.0 streamflow-frameworks diff --git a/streamflow-frameworks/twitter-framework/pom.xml b/streamflow-frameworks/twitter-framework/pom.xml index 32bb9e2..6b7b5ed 100644 --- a/streamflow-frameworks/twitter-framework/pom.xml +++ b/streamflow-frameworks/twitter-framework/pom.xml @@ -22,7 +22,7 @@ streamflow streamflow-frameworks - 0.13.0-SNAPSHOT + 0.13.0 twitter-framework