You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@heron.apache.org by nl...@apache.org on 2018/04/11 18:08:41 UTC
[incubator-heron] branch master updated: package rename and related
fixes (#2853)
This is an automated email from the ASF dual-hosted git repository.
nlu90 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-heron.git
The following commit(s) were added to refs/heads/master by this push:
new 6029c28 package rename and related fixes (#2853)
6029c28 is described below
commit 6029c28943b7ad85be6fa175d20e0e908fb199b6
Author: SreeV <44...@users.noreply.github.com>
AuthorDate: Wed Apr 11 11:08:38 2018 -0700
package rename and related fixes (#2853)
* rename com.twitter to org.apache and related. breaking change. [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* long line > 100, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* order of imports, checkstyle error [https://github.com/apache/incubator-heron/issues/2828]
* package rename from com.twitter to org.apache [https://github.com/apache/incubator-heron/issues/2828]
* add missed imports [https://github.com/apache/incubator-heron/issues/2828]
* package rename from com.twitter to org.apache; fix merge issues [https://github.com/apache/incubator-heron/issues/2828]
* incorporate review changes, fix merges, on package rename
* fix merge conflicts, from another PR and package rename
* Resolve merge conflict errors
* removed three inconsistent integration tests to pass the build
---
ADOPTERS.md | 2 +-
deploy/docker/README.md | 8 +-
deploy/docker/sandbox.sh | 2 +-
deploy/kubernetes/general/README.md | 16 +-
deploy/kubernetes/general/apiserver.yaml | 2 +-
deploy/kubernetes/gke/gcs-apiserver.yaml | 2 +-
deploy/kubernetes/helm/Chart.yaml.template | 4 +-
deploy/kubernetes/helm/templates/NOTES.txt | 2 +-
deploy/kubernetes/helm/templates/tools.yaml | 2 +-
deploy/kubernetes/minikube/README.md | 12 +-
deploy/kubernetes/minikube/apiserver.yaml | 2 +-
docker/Readme.md | 2 +-
eco-heron-examples/src/java/BUILD | 2 +-
.../twitter/heron/examples/eco/EvenAndOddBolt.java | 77 --
.../twitter/heron/examples/eco/LogInfoBolt.java | 41 --
.../twitter/heron/examples/eco/RandomString.java | 51 --
.../heron/examples/eco/StatefulConsumerBolt.java | 66 --
.../heron/examples/eco/StatefulNumberSpout.java | 83 ---
.../heron/examples/eco/StatefulRandomIntSpout.java | 73 --
.../heron/examples/eco/StatefulWindowSumBolt.java | 67 --
.../heron/examples/eco/TestFibonacciSpout.java | 65 --
.../heron/examples/eco/TestIBasicPrintBolt.java | 68 --
.../heron/examples/eco/TestNameCounter.java | 61 --
.../twitter/heron/examples/eco/TestNameSpout.java | 81 ---
.../twitter/heron/examples/eco/TestPrintBolt.java | 33 -
.../heron/examples/eco/TestPropertyHolder.java | 48 --
.../com/twitter/heron/examples/eco/TestUnits.java | 33 -
.../twitter/heron/examples/eco/TestWindowBolt.java | 46 --
.../com/twitter/heron/examples/eco/WordSpout.java | 64 --
.../examples/eco/heron-stateful-windowing.yaml | 52 --
.../examples/eco/heron-stateful-word-count.yaml | 38 -
.../heron/examples/eco/heron_fibonacci.yaml | 75 --
.../heron/examples/eco/heron_windowing.yaml | 66 --
.../heron/examples/eco/heron_wordcount.yaml | 73 --
.../apache/heron/examples/eco/EvenAndOddBolt.java | 76 ++
.../org/apache/heron/examples/eco/LogInfoBolt.java | 41 ++
.../apache/heron/examples/eco/RandomString.java | 51 ++
.../heron/examples/eco/StatefulConsumerBolt.java | 66 ++
.../heron/examples/eco/StatefulNumberSpout.java | 83 +++
.../heron/examples/eco/StatefulRandomIntSpout.java | 73 ++
.../heron/examples/eco/StatefulWindowSumBolt.java | 67 ++
.../heron/examples/eco/TestFibonacciSpout.java | 64 ++
.../heron/examples/eco/TestIBasicPrintBolt.java | 68 ++
.../apache/heron/examples/eco/TestNameCounter.java | 62 ++
.../apache/heron/examples/eco/TestNameSpout.java | 81 +++
.../apache/heron/examples/eco/TestPrintBolt.java | 33 +
.../heron/examples/eco/TestPropertyHolder.java | 48 ++
.../org/apache/heron/examples/eco/TestUnits.java | 33 +
.../apache/heron/examples/eco/TestWindowBolt.java | 46 ++
.../org/apache/heron/examples/eco/WordSpout.java | 64 ++
.../examples/eco/heron-stateful-windowing.yaml | 52 ++
.../examples/eco/heron-stateful-word-count.yaml | 38 +
.../apache/heron/examples/eco/heron_fibonacci.yaml | 75 ++
.../apache/heron/examples/eco/heron_windowing.yaml | 66 ++
.../apache/heron/examples/eco/heron_wordcount.yaml | 73 ++
.../apache}/heron/examples/eco/sample.properties | 0
eco-storm-examples/src/java/BUILD | 2 +-
.../twitter/heron/examples/eco/EvenAndOddBolt.java | 77 --
.../twitter/heron/examples/eco/LogInfoBolt.java | 41 --
.../heron/examples/eco/TestFibonacciSpout.java | 64 --
.../heron/examples/eco/TestIBasicPrintBolt.java | 68 --
.../heron/examples/eco/TestNameCounter.java | 61 --
.../twitter/heron/examples/eco/TestNameSpout.java | 81 ---
.../twitter/heron/examples/eco/TestPrintBolt.java | 33 -
.../heron/examples/eco/TestPropertyHolder.java | 48 --
.../com/twitter/heron/examples/eco/TestUnits.java | 33 -
.../twitter/heron/examples/eco/TestWindowBolt.java | 46 --
.../com/twitter/heron/examples/eco/fibonacci.yaml | 74 --
.../heron/examples/eco/simple_windowing.yaml | 65 --
.../heron/examples/eco/simple_wordcount.yaml | 72 --
.../apache/heron/examples/eco/EvenAndOddBolt.java | 76 ++
.../org/apache/heron/examples/eco/LogInfoBolt.java | 41 ++
.../heron/examples/eco/TestFibonacciSpout.java | 64 ++
.../heron/examples/eco/TestIBasicPrintBolt.java | 68 ++
.../apache/heron/examples/eco/TestNameCounter.java | 62 ++
.../apache/heron/examples/eco/TestNameSpout.java | 81 +++
.../apache/heron/examples/eco/TestPrintBolt.java | 33 +
.../heron/examples/eco/TestPropertyHolder.java | 48 ++
.../org/apache/heron/examples/eco/TestUnits.java | 33 +
.../apache/heron/examples/eco/TestWindowBolt.java | 46 ++
.../org/apache/heron/examples/eco/fibonacci.yaml | 74 ++
.../apache}/heron/examples/eco/sample.properties | 0
.../heron/examples/eco/simple_windowing.yaml | 65 ++
.../heron/examples/eco/simple_wordcount.yaml | 72 ++
eco/src/java/BUILD | 14 +-
eco/src/java/com/twitter/heron/eco/Eco.java | 230 ------
.../com/twitter/heron/eco/builder/BoltBuilder.java | 35 -
.../twitter/heron/eco/builder/BuilderUtility.java | 116 ---
.../heron/eco/builder/ComponentBuilder.java | 36 -
.../twitter/heron/eco/builder/ConfigBuilder.java | 202 ------
.../twitter/heron/eco/builder/ObjectBuilder.java | 311 --------
.../heron/eco/builder/heron/EcoBuilder.java | 79 --
.../heron/eco/builder/heron/SpoutBuilder.java | 43 --
.../heron/eco/builder/heron/StreamBuilder.java | 129 ----
.../heron/eco/builder/storm/EcoBuilder.java | 79 --
.../heron/eco/builder/storm/SpoutBuilder.java | 43 --
.../heron/eco/builder/storm/StreamBuilder.java | 129 ----
.../heron/eco/definition/BeanDefinition.java | 27 -
.../heron/eco/definition/BeanListReference.java | 30 -
.../heron/eco/definition/BeanReference.java | 30 -
.../heron/eco/definition/BoltDefinition.java | 17 -
.../heron/eco/definition/ComponentStream.java | 67 --
.../definition/ConfigurationMethodDefinition.java | 64 --
.../heron/eco/definition/EcoExecutionContext.java | 112 ---
.../eco/definition/EcoTopologyDefinition.java | 124 ----
.../heron/eco/definition/GroupingDefinition.java | 65 --
.../heron/eco/definition/ObjectDefinition.java | 106 ---
.../heron/eco/definition/PropertyDefinition.java | 55 --
.../heron/eco/definition/SpoutDefinition.java | 17 -
.../heron/eco/definition/StreamDefinition.java | 63 --
.../com/twitter/heron/eco/parser/EcoParser.java | 94 ---
.../com/twitter/heron/eco/submit/EcoSubmitter.java | 39 -
eco/src/java/org/apache/heron/eco/Eco.java | 228 ++++++
.../org/apache/heron/eco/builder/BoltBuilder.java | 35 +
.../apache/heron/eco/builder/BuilderUtility.java | 116 +++
.../apache/heron/eco/builder/ComponentBuilder.java | 36 +
.../apache/heron/eco/builder/ConfigBuilder.java | 201 ++++++
.../apache/heron/eco/builder/ObjectBuilder.java | 311 ++++++++
.../apache/heron/eco/builder/heron/EcoBuilder.java | 77 ++
.../heron/eco/builder/heron/SpoutBuilder.java | 40 ++
.../heron/eco/builder/heron/StreamBuilder.java | 127 ++++
.../apache/heron/eco/builder/storm/EcoBuilder.java | 76 ++
.../heron/eco/builder/storm/SpoutBuilder.java | 40 ++
.../heron/eco/builder/storm/StreamBuilder.java | 127 ++++
.../heron/eco/definition/BeanDefinition.java | 27 +
.../heron/eco/definition/BeanListReference.java | 30 +
.../apache/heron/eco/definition/BeanReference.java | 30 +
.../heron/eco/definition/BoltDefinition.java | 17 +
.../heron/eco/definition/ComponentStream.java | 67 ++
.../definition/ConfigurationMethodDefinition.java | 64 ++
.../heron/eco/definition/EcoExecutionContext.java | 111 +++
.../eco/definition/EcoTopologyDefinition.java | 124 ++++
.../heron/eco/definition/GroupingDefinition.java | 65 ++
.../heron/eco/definition/ObjectDefinition.java | 105 +++
.../heron/eco/definition/PropertyDefinition.java | 55 ++
.../heron/eco/definition/SpoutDefinition.java | 17 +
.../heron/eco/definition/StreamDefinition.java | 63 ++
.../org/apache/heron/eco/parser/EcoParser.java | 94 +++
.../org/apache/heron/eco/submit/EcoSubmitter.java | 37 +
eco/tests/java/BUILD | 28 +-
eco/tests/java/com/twitter/heron/eco/EcoTest.java | 98 ---
.../twitter/heron/eco/builder/BoltBuilderTest.java | 89 ---
.../heron/eco/builder/BuilderUtilityTest.java | 139 ----
.../heron/eco/builder/ComponentBuilderTest.java | 89 ---
.../heron/eco/builder/ConfigBuilderTest.java | 341 ---------
.../heron/eco/builder/ObjectBuilderTest.java | 159 -----
.../eco/builder/heron/HeronEcoBuilderTest.java | 133 ----
.../eco/builder/heron/HeronSpoutBuilderTest.java | 161 -----
.../eco/builder/heron/HeronStreamBuilderTest.java | 370 ----------
.../eco/builder/storm/StormEcoBuilderTest.java | 132 ----
.../eco/builder/storm/StormSpoutBuilderTest.java | 161 -----
.../eco/builder/storm/StormStreamBuilderTest.java | 372 ----------
.../twitter/heron/eco/parser/EcoParserTest.java | 477 -------------
.../twitter/heron/eco/submit/EcoSubmitterTest.java | 74 --
eco/tests/java/org/apache/heron/eco/EcoTest.java | 98 +++
.../apache/heron/eco/builder/BoltBuilderTest.java | 89 +++
.../heron/eco/builder/BuilderUtilityTest.java | 137 ++++
.../heron/eco/builder/ComponentBuilderTest.java | 89 +++
.../heron/eco/builder/ConfigBuilderTest.java | 341 +++++++++
.../heron/eco/builder/ObjectBuilderTest.java | 158 ++++
.../eco/builder/heron/HeronEcoBuilderTest.java | 131 ++++
.../eco/builder/heron/HeronSpoutBuilderTest.java | 160 +++++
.../eco/builder/heron/HeronStreamBuilderTest.java | 369 ++++++++++
.../eco/builder/storm/StormEcoBuilderTest.java | 131 ++++
.../eco/builder/storm/StormSpoutBuilderTest.java | 160 +++++
.../eco/builder/storm/StormStreamBuilderTest.java | 371 ++++++++++
.../org/apache/heron/eco/parser/EcoParserTest.java | 479 +++++++++++++
.../apache/heron/eco/submit/EcoSubmitterTest.java | 73 ++
examples/src/java/BUILD | 4 +-
.../twitter/heron/examples/api/AckingTopology.java | 170 -----
.../examples/api/ComponentJVMOptionsTopology.java | 122 ----
.../heron/examples/api/CustomGroupingTopology.java | 109 ---
.../heron/examples/api/ExampleResources.java | 37 -
.../heron/examples/api/ExclamationTopology.java | 136 ----
.../api/MultiSpoutExclamationTopology.java | 111 ---
.../examples/api/MultiStageAckingTopology.java | 184 -----
.../examples/api/SentenceWordCountTopology.java | 190 -----
.../heron/examples/api/SlidingWindowTopology.java | 113 ---
.../api/StatefulSlidingWindowTopology.java | 175 -----
.../examples/api/StatefulWordCountTopology.java | 215 ------
.../heron/examples/api/TaskHookTopology.java | 288 --------
.../examples/api/WindowedWordCountTopology.java | 134 ----
.../heron/examples/api/WordCountTopology.java | 194 -----
.../heron/examples/api/bolt/PrinterBolt.java | 34 -
.../examples/api/bolt/SlidingWindowSumBolt.java | 78 --
.../examples/api/spout/RandomIntegerSpout.java | 70 --
.../heron/examples/api/spout/TestWordSpout.java | 75 --
.../examples/streamlet/FilesystemSinkTopology.java | 141 ----
.../streamlet/FormattedOutputTopology.java | 113 ---
.../streamlet/ImpressionsAndClicksTopology.java | 197 -----
.../streamlet/IntegerProcessingTopology.java | 73 --
.../examples/streamlet/RepartitionTopology.java | 111 ---
.../streamlet/SimplePulsarSourceTopology.java | 126 ----
.../examples/streamlet/SmartWatchTopology.java | 123 ----
.../examples/streamlet/StreamletCloneTopology.java | 158 ----
.../examples/streamlet/TransformsTopology.java | 122 ----
.../streamlet/WindowedWordCountTopology.java | 96 ---
.../examples/streamlet/WireRequestsTopology.java | 193 -----
.../examples/streamlet/utils/StreamletUtils.java | 69 --
.../apache/heron/examples/api/AckingTopology.java | 170 +++++
.../examples/api/ComponentJVMOptionsTopology.java | 122 ++++
.../heron/examples/api/CustomGroupingTopology.java | 109 +++
.../heron/examples/api/ExampleResources.java | 37 +
.../heron/examples/api/ExclamationTopology.java | 136 ++++
.../api/MultiSpoutExclamationTopology.java | 111 +++
.../examples/api/MultiStageAckingTopology.java | 184 +++++
.../examples/api/SentenceWordCountTopology.java | 190 +++++
.../heron/examples/api/SlidingWindowTopology.java | 113 +++
.../api/StatefulSlidingWindowTopology.java | 175 +++++
.../examples/api/StatefulWordCountTopology.java | 215 ++++++
.../heron/examples/api/TaskHookTopology.java | 288 ++++++++
.../examples/api/WindowedWordCountTopology.java | 134 ++++
.../heron/examples/api/WordCountTopology.java | 194 +++++
.../heron/examples/api/bolt/PrinterBolt.java | 34 +
.../examples/api/bolt/SlidingWindowSumBolt.java | 78 ++
.../examples/api/spout/RandomIntegerSpout.java | 70 ++
.../heron/examples/api/spout/TestWordSpout.java | 75 ++
.../examples/streamlet/FilesystemSinkTopology.java | 141 ++++
.../streamlet/FormattedOutputTopology.java | 113 +++
.../streamlet/ImpressionsAndClicksTopology.java | 197 +++++
.../streamlet/IntegerProcessingTopology.java | 73 ++
.../examples/streamlet/RepartitionTopology.java | 111 +++
.../streamlet/SimplePulsarSourceTopology.java | 125 ++++
.../examples/streamlet/SmartWatchTopology.java | 123 ++++
.../examples/streamlet/StreamletCloneTopology.java | 158 ++++
.../examples/streamlet/TransformsTopology.java | 122 ++++
.../streamlet/WindowedWordCountTopology.java | 96 +++
.../examples/streamlet/WireRequestsTopology.java | 193 +++++
.../examples/streamlet/utils/StreamletUtils.java | 69 ++
examples/src/scala/BUILD | 4 +-
.../com/twitter/heron/examples/SomeHeronBolt.scala | 60 --
.../com/twitter/heron/examples/SomeStormBolt.scala | 60 --
.../scala/ScalaClassicalMusicTopology.scala | 105 ---
.../scala/ScalaIntegerProcessingTopology.scala | 71 --
.../streamlet/scala/ScalaRepartitionTopology.scala | 82 ---
.../scala/ScalaTransformsAndCloneTopology.scala | 105 ---
.../scala/ScalaWindowedWordCountTopology.scala | 80 ---
.../scala/common/ScalaTopologyExampleUtils.scala | 32 -
examples/src/scala/compile.sh | 2 +-
.../org/apache/heron/examples/SomeHeronBolt.scala | 60 ++
.../org/apache/heron/examples/SomeStormBolt.scala | 60 ++
.../scala/ScalaClassicalMusicTopology.scala | 105 +++
.../scala/ScalaIntegerProcessingTopology.scala | 71 ++
.../streamlet/scala/ScalaRepartitionTopology.scala | 82 +++
.../scala/ScalaTransformsAndCloneTopology.scala | 105 +++
.../scala/ScalaWindowedWordCountTopology.scala | 80 +++
.../scala/common/ScalaTopologyExampleUtils.scala | 32 +
.../services/javax.annotation.processing.Processor | 2 +-
heron/api/src/cpp/spout/ispout.h | 2 +-
heron/api/src/java/BUILD | 12 +-
.../api/src/java/com/twitter/heron/api/Config.java | 793 ---------------------
.../src/java/com/twitter/heron/api/Constants.java | 42 --
.../java/com/twitter/heron/api/HeronSubmitter.java | 157 ----
.../java/com/twitter/heron/api/HeronTopology.java | 115 ---
heron/api/src/java/com/twitter/heron/api/Pair.java | 126 ----
.../com/twitter/heron/api/bolt/BaseBasicBolt.java | 52 --
.../com/twitter/heron/api/bolt/BaseRichBolt.java | 44 --
.../heron/api/bolt/BaseStatefulWindowedBolt.java | 153 ----
.../twitter/heron/api/bolt/BaseWindowedBolt.java | 360 ----------
.../twitter/heron/api/bolt/BasicBoltExecutor.java | 106 ---
.../heron/api/bolt/BasicOutputCollector.java | 77 --
.../com/twitter/heron/api/bolt/IBasicBolt.java | 53 --
.../heron/api/bolt/IBasicOutputCollector.java | 44 --
.../src/java/com/twitter/heron/api/bolt/IBolt.java | 102 ---
.../com/twitter/heron/api/bolt/IErrorReporter.java | 38 -
.../twitter/heron/api/bolt/IOutputCollector.java | 52 --
.../java/com/twitter/heron/api/bolt/IRichBolt.java | 45 --
.../heron/api/bolt/IStatefulWindowedBolt.java | 23 -
.../com/twitter/heron/api/bolt/IWindowedBolt.java | 69 --
.../twitter/heron/api/bolt/OutputCollector.java | 246 -------
.../api/bolt/StatefulWindowedBoltExecutor.java | 57 --
.../heron/api/bolt/WindowedBoltExecutor.java | 496 -------------
.../heron/api/exception/AlreadyAliveException.java | 38 -
.../heron/api/exception/FailedException.java | 54 --
.../api/exception/InvalidTopologyException.java | 46 --
.../api/exception/ReportedFailedException.java | 54 --
.../api/exception/TopologySubmissionException.java | 31 -
.../heron/api/grouping/CustomStreamGrouping.java | 63 --
.../com/twitter/heron/api/hooks/BaseTaskHook.java | 78 --
.../com/twitter/heron/api/hooks/ITaskHook.java | 87 ---
.../twitter/heron/api/hooks/info/BoltAckInfo.java | 62 --
.../heron/api/hooks/info/BoltExecuteInfo.java | 62 --
.../twitter/heron/api/hooks/info/BoltFailInfo.java | 62 --
.../com/twitter/heron/api/hooks/info/EmitInfo.java | 67 --
.../twitter/heron/api/hooks/info/SpoutAckInfo.java | 60 --
.../heron/api/hooks/info/SpoutFailInfo.java | 60 --
.../twitter/heron/api/metric/AssignableMetric.java | 51 --
.../twitter/heron/api/metric/CombinedMetric.java | 55 --
.../heron/api/metric/ConcurrentCountMetric.java | 56 --
.../com/twitter/heron/api/metric/CountMetric.java | 60 --
.../heron/api/metric/CountStatAndMetric.java | 231 ------
.../twitter/heron/api/metric/GlobalMetrics.java | 124 ----
.../com/twitter/heron/api/metric/ICombiner.java | 44 --
.../java/com/twitter/heron/api/metric/IMetric.java | 42 --
.../twitter/heron/api/metric/IMetricsRegister.java | 47 --
.../com/twitter/heron/api/metric/IReducer.java | 48 --
.../heron/api/metric/LatencyStatAndMetric.java | 286 --------
.../com/twitter/heron/api/metric/MeanReducer.java | 54 --
.../twitter/heron/api/metric/MeanReducerState.java | 39 -
.../twitter/heron/api/metric/MetricStatTimer.java | 48 --
.../heron/api/metric/MultiAssignableMetric.java | 76 --
.../twitter/heron/api/metric/MultiCountMetric.java | 61 --
.../heron/api/metric/MultiReducedMetric.java | 71 --
.../twitter/heron/api/metric/ReducedMetric.java | 61 --
.../heron/api/serializer/IPluggableSerializer.java | 44 --
.../heron/api/serializer/JavaSerializer.java | 72 --
.../com/twitter/heron/api/spout/BaseRichSpout.java | 60 --
.../heron/api/spout/IMultiSchemableSpout.java | 40 --
.../com/twitter/heron/api/spout/IRichSpout.java | 45 --
.../twitter/heron/api/spout/ISchemableSpout.java | 41 --
.../java/com/twitter/heron/api/spout/ISpout.java | 123 ----
.../heron/api/spout/ISpoutOutputCollector.java | 48 --
.../com/twitter/heron/api/spout/MultiScheme.java | 45 --
.../twitter/heron/api/spout/RawMultiScheme.java | 55 --
.../com/twitter/heron/api/spout/RawScheme.java | 52 --
.../java/com/twitter/heron/api/spout/Scheme.java | 46 --
.../heron/api/spout/SchemeAsMultiScheme.java | 63 --
.../heron/api/spout/SpoutOutputCollector.java | 153 ----
.../com/twitter/heron/api/state/HashMapState.java | 45 --
.../java/com/twitter/heron/api/state/State.java | 45 --
.../twitter/heron/api/topology/BaseComponent.java | 45 --
.../heron/api/topology/BaseComponentDeclarer.java | 83 ---
.../api/topology/BaseConfigurationDeclarer.java | 63 --
.../twitter/heron/api/topology/BoltDeclarer.java | 202 ------
.../topology/ComponentConfigurationDeclarer.java | 46 --
.../heron/api/topology/GeneralTopologyContext.java | 128 ----
.../com/twitter/heron/api/topology/IComponent.java | 59 --
.../heron/api/topology/IStatefulComponent.java | 66 --
.../com/twitter/heron/api/topology/IUpdatable.java | 48 --
.../heron/api/topology/OutputFieldsDeclarer.java | 49 --
.../heron/api/topology/OutputFieldsGetter.java | 78 --
.../twitter/heron/api/topology/SpoutDeclarer.java | 75 --
.../heron/api/topology/TopologyBuilder.java | 299 --------
.../heron/api/topology/TopologyContext.java | 127 ----
.../java/com/twitter/heron/api/tuple/Fields.java | 119 ----
.../java/com/twitter/heron/api/tuple/Tuple.java | 198 -----
.../java/com/twitter/heron/api/tuple/Values.java | 54 --
.../api/utils/DefaultMaxSpoutPendingTuner.java | 204 ------
.../com/twitter/heron/api/utils/TopologyUtils.java | 361 ----------
.../com/twitter/heron/api/utils/TupleUtils.java | 48 --
.../java/com/twitter/heron/api/utils/Utils.java | 172 -----
.../api/windowing/DefaultEvictionContext.java | 97 ---
.../com/twitter/heron/api/windowing/Event.java | 66 --
.../com/twitter/heron/api/windowing/EventImpl.java | 66 --
.../heron/api/windowing/EvictionContext.java | 70 --
.../heron/api/windowing/EvictionPolicy.java | 118 ---
.../heron/api/windowing/TimestampExtractor.java | 50 --
.../heron/api/windowing/TriggerHandler.java | 46 --
.../twitter/heron/api/windowing/TriggerPolicy.java | 111 ---
.../windowing/TupleFieldTimestampExtractor.java | 61 --
.../twitter/heron/api/windowing/TupleWindow.java | 42 --
.../heron/api/windowing/TupleWindowImpl.java | 118 ---
.../heron/api/windowing/WaterMarkEvent.java | 57 --
.../api/windowing/WaterMarkEventGenerator.java | 127 ----
.../com/twitter/heron/api/windowing/Window.java | 83 ---
.../api/windowing/WindowLifecycleListener.java | 62 --
.../twitter/heron/api/windowing/WindowManager.java | 376 ----------
.../heron/api/windowing/WindowingConfigs.java | 176 -----
.../windowing/evictors/CountEvictionPolicy.java | 114 ---
.../api/windowing/evictors/TimeEvictionPolicy.java | 129 ----
.../evictors/WatermarkCountEvictionPolicy.java | 143 ----
.../evictors/WatermarkTimeEvictionPolicy.java | 104 ---
.../triggers/AbstractBaseTriggerPolicy.java | 107 ---
.../api/windowing/triggers/CountTriggerPolicy.java | 95 ---
.../api/windowing/triggers/TimeTriggerPolicy.java | 104 ---
.../triggers/WatermarkCountTriggerPolicy.java | 106 ---
.../triggers/WatermarkTimeTriggerPolicy.java | 141 ----
.../classification/HeronAnnotationProcessor.java | 65 --
.../heron/classification/InterfaceAudience.java | 71 --
.../heron/classification/InterfaceStability.java | 62 --
.../java/com/twitter/heron/streamlet/Builder.java | 42 --
.../java/com/twitter/heron/streamlet/Config.java | 278 --------
.../java/com/twitter/heron/streamlet/Context.java | 66 --
.../java/com/twitter/heron/streamlet/JoinType.java | 43 --
.../java/com/twitter/heron/streamlet/KeyValue.java | 59 --
.../com/twitter/heron/streamlet/KeyedWindow.java | 48 --
.../java/com/twitter/heron/streamlet/Runner.java | 46 --
.../heron/streamlet/SerializableBiFunction.java | 29 -
.../streamlet/SerializableBinaryOperator.java | 25 -
.../heron/streamlet/SerializableConsumer.java | 28 -
.../heron/streamlet/SerializableFunction.java | 29 -
.../heron/streamlet/SerializablePredicate.java | 28 -
.../heron/streamlet/SerializableSupplier.java | 28 -
.../heron/streamlet/SerializableTransformer.java | 30 -
.../src/java/com/twitter/heron/streamlet/Sink.java | 29 -
.../java/com/twitter/heron/streamlet/Source.java | 30 -
.../com/twitter/heron/streamlet/Streamlet.java | 220 ------
.../java/com/twitter/heron/streamlet/Window.java | 56 --
.../com/twitter/heron/streamlet/WindowConfig.java | 81 ---
.../twitter/heron/streamlet/impl/BuilderImpl.java | 76 --
.../twitter/heron/streamlet/impl/ContextImpl.java | 86 ---
.../heron/streamlet/impl/KryoSerializer.java | 105 ---
.../heron/streamlet/impl/StreamletImpl.java | 491 -------------
.../heron/streamlet/impl/WindowConfigImpl.java | 73 --
.../impl/groupings/JoinCustomGrouping.java | 53 --
.../ReduceByKeyAndWindowCustomGrouping.java | 55 --
.../impl/groupings/RemapCustomGrouping.java | 55 --
.../streamlet/impl/operators/FilterOperator.java | 56 --
.../streamlet/impl/operators/FlatMapOperator.java | 58 --
.../GeneralReduceByKeyAndWindowOperator.java | 94 ---
.../streamlet/impl/operators/JoinOperator.java | 199 ------
.../streamlet/impl/operators/MapOperator.java | 54 --
.../operators/ReduceByKeyAndWindowOperator.java | 96 ---
.../impl/operators/StreamletOperator.java | 50 --
.../impl/operators/StreamletWindowOperator.java | 39 -
.../impl/operators/TransformOperator.java | 73 --
.../streamlet/impl/operators/UnionOperator.java | 48 --
.../heron/streamlet/impl/sinks/ComplexSink.java | 64 --
.../heron/streamlet/impl/sinks/ConsumerSink.java | 51 --
.../heron/streamlet/impl/sinks/LogSink.java | 50 --
.../streamlet/impl/sources/ComplexSource.java | 68 --
.../streamlet/impl/sources/StreamletSource.java | 51 --
.../streamlet/impl/sources/SupplierSource.java | 49 --
.../impl/streamlets/ConsumerStreamlet.java | 46 --
.../streamlet/impl/streamlets/FilterStreamlet.java | 45 --
.../impl/streamlets/FlatMapStreamlet.java | 48 --
.../GeneralReduceByKeyAndWindowStreamlet.java | 69 --
.../streamlet/impl/streamlets/JoinStreamlet.java | 93 ---
.../streamlet/impl/streamlets/LogStreamlet.java | 43 --
.../streamlet/impl/streamlets/MapStreamlet.java | 45 --
.../streamlets/ReduceByKeyAndWindowStreamlet.java | 69 --
.../streamlet/impl/streamlets/RemapStreamlet.java | 52 --
.../streamlet/impl/streamlets/SinkStreamlet.java | 46 --
.../streamlet/impl/streamlets/SourceStreamlet.java | 43 --
.../impl/streamlets/SupplierStreamlet.java | 43 --
.../impl/streamlets/TransformStreamlet.java | 48 --
.../streamlet/impl/streamlets/UnionStreamlet.java | 49 --
.../api/src/java/org/apache/heron/api/Config.java | 793 +++++++++++++++++++++
.../src/java/org/apache/heron/api/Constants.java | 42 ++
.../java/org/apache/heron/api/HeronSubmitter.java | 157 ++++
.../java/org/apache/heron/api/HeronTopology.java | 115 +++
heron/api/src/java/org/apache/heron/api/Pair.java | 126 ++++
.../org/apache/heron/api/bolt/BaseBasicBolt.java | 52 ++
.../org/apache/heron/api/bolt/BaseRichBolt.java | 44 ++
.../heron/api/bolt/BaseStatefulWindowedBolt.java | 153 ++++
.../apache/heron/api/bolt/BaseWindowedBolt.java | 360 ++++++++++
.../apache/heron/api/bolt/BasicBoltExecutor.java | 106 +++
.../heron/api/bolt/BasicOutputCollector.java | 77 ++
.../java/org/apache/heron/api/bolt/IBasicBolt.java | 53 ++
.../heron/api/bolt/IBasicOutputCollector.java | 44 ++
.../src/java/org/apache/heron/api/bolt/IBolt.java | 102 +++
.../org/apache/heron/api/bolt/IErrorReporter.java | 38 +
.../apache/heron/api/bolt/IOutputCollector.java | 52 ++
.../java/org/apache/heron/api/bolt/IRichBolt.java | 45 ++
.../heron/api/bolt/IStatefulWindowedBolt.java | 23 +
.../org/apache/heron/api/bolt/IWindowedBolt.java | 69 ++
.../org/apache/heron/api/bolt/OutputCollector.java | 246 +++++++
.../api/bolt/StatefulWindowedBoltExecutor.java | 57 ++
.../heron/api/bolt/WindowedBoltExecutor.java | 496 +++++++++++++
.../heron/api/exception/AlreadyAliveException.java | 38 +
.../heron/api/exception/FailedException.java | 54 ++
.../api/exception/InvalidTopologyException.java | 46 ++
.../api/exception/ReportedFailedException.java | 54 ++
.../api/exception/TopologySubmissionException.java | 31 +
.../heron/api/grouping/CustomStreamGrouping.java | 63 ++
.../org/apache/heron/api/hooks/BaseTaskHook.java | 78 ++
.../java/org/apache/heron/api/hooks/ITaskHook.java | 87 +++
.../apache/heron/api/hooks/info/BoltAckInfo.java | 62 ++
.../heron/api/hooks/info/BoltExecuteInfo.java | 62 ++
.../apache/heron/api/hooks/info/BoltFailInfo.java | 62 ++
.../org/apache/heron/api/hooks/info/EmitInfo.java | 67 ++
.../apache/heron/api/hooks/info/SpoutAckInfo.java | 60 ++
.../apache/heron/api/hooks/info/SpoutFailInfo.java | 60 ++
.../apache/heron/api/metric/AssignableMetric.java | 51 ++
.../apache/heron/api/metric/CombinedMetric.java | 55 ++
.../heron/api/metric/ConcurrentCountMetric.java | 56 ++
.../org/apache/heron/api/metric/CountMetric.java | 60 ++
.../heron/api/metric/CountStatAndMetric.java | 231 ++++++
.../org/apache/heron/api/metric/GlobalMetrics.java | 124 ++++
.../org/apache/heron/api/metric/ICombiner.java | 44 ++
.../java/org/apache/heron/api/metric/IMetric.java | 42 ++
.../apache/heron/api/metric/IMetricsRegister.java | 47 ++
.../java/org/apache/heron/api/metric/IReducer.java | 48 ++
.../heron/api/metric/LatencyStatAndMetric.java | 286 ++++++++
.../org/apache/heron/api/metric/MeanReducer.java | 54 ++
.../apache/heron/api/metric/MeanReducerState.java | 39 +
.../apache/heron/api/metric/MetricStatTimer.java | 48 ++
.../heron/api/metric/MultiAssignableMetric.java | 76 ++
.../apache/heron/api/metric/MultiCountMetric.java | 61 ++
.../heron/api/metric/MultiReducedMetric.java | 71 ++
.../org/apache/heron/api/metric/ReducedMetric.java | 61 ++
.../heron/api/serializer/IPluggableSerializer.java | 44 ++
.../heron/api/serializer/JavaSerializer.java | 72 ++
.../org/apache/heron/api/spout/BaseRichSpout.java | 60 ++
.../heron/api/spout/IMultiSchemableSpout.java | 40 ++
.../org/apache/heron/api/spout/IRichSpout.java | 45 ++
.../apache/heron/api/spout/ISchemableSpout.java | 41 ++
.../java/org/apache/heron/api/spout/ISpout.java | 123 ++++
.../heron/api/spout/ISpoutOutputCollector.java | 48 ++
.../org/apache/heron/api/spout/MultiScheme.java | 45 ++
.../org/apache/heron/api/spout/RawMultiScheme.java | 55 ++
.../java/org/apache/heron/api/spout/RawScheme.java | 52 ++
.../java/org/apache/heron/api/spout/Scheme.java | 46 ++
.../heron/api/spout/SchemeAsMultiScheme.java | 63 ++
.../heron/api/spout/SpoutOutputCollector.java | 153 ++++
.../org/apache/heron/api/state/HashMapState.java | 45 ++
.../src/java/org/apache/heron/api/state/State.java | 45 ++
.../apache/heron/api/topology/BaseComponent.java | 45 ++
.../heron/api/topology/BaseComponentDeclarer.java | 83 +++
.../api/topology/BaseConfigurationDeclarer.java | 63 ++
.../apache/heron/api/topology/BoltDeclarer.java | 202 ++++++
.../topology/ComponentConfigurationDeclarer.java | 46 ++
.../heron/api/topology/GeneralTopologyContext.java | 128 ++++
.../org/apache/heron/api/topology/IComponent.java | 59 ++
.../heron/api/topology/IStatefulComponent.java | 66 ++
.../org/apache/heron/api/topology/IUpdatable.java | 48 ++
.../heron/api/topology/OutputFieldsDeclarer.java | 49 ++
.../heron/api/topology/OutputFieldsGetter.java | 78 ++
.../apache/heron/api/topology/SpoutDeclarer.java | 75 ++
.../apache/heron/api/topology/TopologyBuilder.java | 299 ++++++++
.../apache/heron/api/topology/TopologyContext.java | 127 ++++
.../java/org/apache/heron/api/tuple/Fields.java | 119 ++++
.../src/java/org/apache/heron/api/tuple/Tuple.java | 198 +++++
.../java/org/apache/heron/api/tuple/Values.java | 54 ++
.../api/utils/DefaultMaxSpoutPendingTuner.java | 204 ++++++
.../org/apache/heron/api/utils/TopologyUtils.java | 361 ++++++++++
.../org/apache/heron/api/utils/TupleUtils.java | 48 ++
.../src/java/org/apache/heron/api/utils/Utils.java | 172 +++++
.../api/windowing/DefaultEvictionContext.java | 97 +++
.../java/org/apache/heron/api/windowing/Event.java | 66 ++
.../org/apache/heron/api/windowing/EventImpl.java | 66 ++
.../heron/api/windowing/EvictionContext.java | 70 ++
.../apache/heron/api/windowing/EvictionPolicy.java | 118 +++
.../heron/api/windowing/TimestampExtractor.java | 50 ++
.../apache/heron/api/windowing/TriggerHandler.java | 46 ++
.../apache/heron/api/windowing/TriggerPolicy.java | 111 +++
.../windowing/TupleFieldTimestampExtractor.java | 61 ++
.../apache/heron/api/windowing/TupleWindow.java | 42 ++
.../heron/api/windowing/TupleWindowImpl.java | 118 +++
.../apache/heron/api/windowing/WaterMarkEvent.java | 57 ++
.../api/windowing/WaterMarkEventGenerator.java | 127 ++++
.../org/apache/heron/api/windowing/Window.java | 83 +++
.../api/windowing/WindowLifecycleListener.java | 62 ++
.../apache/heron/api/windowing/WindowManager.java | 376 ++++++++++
.../heron/api/windowing/WindowingConfigs.java | 176 +++++
.../windowing/evictors/CountEvictionPolicy.java | 114 +++
.../api/windowing/evictors/TimeEvictionPolicy.java | 129 ++++
.../evictors/WatermarkCountEvictionPolicy.java | 143 ++++
.../evictors/WatermarkTimeEvictionPolicy.java | 104 +++
.../triggers/AbstractBaseTriggerPolicy.java | 107 +++
.../api/windowing/triggers/CountTriggerPolicy.java | 95 +++
.../api/windowing/triggers/TimeTriggerPolicy.java | 104 +++
.../triggers/WatermarkCountTriggerPolicy.java | 106 +++
.../triggers/WatermarkTimeTriggerPolicy.java | 141 ++++
.../classification/HeronAnnotationProcessor.java | 65 ++
.../heron/classification/InterfaceAudience.java | 71 ++
.../heron/classification/InterfaceStability.java | 62 ++
.../java/org/apache/heron/streamlet/Builder.java | 42 ++
.../java/org/apache/heron/streamlet/Config.java | 278 ++++++++
.../java/org/apache/heron/streamlet/Context.java | 66 ++
.../java/org/apache/heron/streamlet/JoinType.java | 43 ++
.../java/org/apache/heron/streamlet/KeyValue.java | 59 ++
.../org/apache/heron/streamlet/KeyedWindow.java | 48 ++
.../java/org/apache/heron/streamlet/Runner.java | 46 ++
.../heron/streamlet/SerializableBiFunction.java | 29 +
.../streamlet/SerializableBinaryOperator.java | 25 +
.../heron/streamlet/SerializableConsumer.java | 28 +
.../heron/streamlet/SerializableFunction.java | 29 +
.../heron/streamlet/SerializablePredicate.java | 28 +
.../heron/streamlet/SerializableSupplier.java | 28 +
.../heron/streamlet/SerializableTransformer.java | 30 +
.../src/java/org/apache/heron/streamlet/Sink.java | 29 +
.../java/org/apache/heron/streamlet/Source.java | 30 +
.../java/org/apache/heron/streamlet/Streamlet.java | 220 ++++++
.../java/org/apache/heron/streamlet/Window.java | 56 ++
.../org/apache/heron/streamlet/WindowConfig.java | 81 +++
.../apache/heron/streamlet/impl/BuilderImpl.java | 76 ++
.../apache/heron/streamlet/impl/ContextImpl.java | 86 +++
.../heron/streamlet/impl/KryoSerializer.java | 105 +++
.../apache/heron/streamlet/impl/StreamletImpl.java | 491 +++++++++++++
.../heron/streamlet/impl/WindowConfigImpl.java | 73 ++
.../impl/groupings/JoinCustomGrouping.java | 53 ++
.../ReduceByKeyAndWindowCustomGrouping.java | 55 ++
.../impl/groupings/RemapCustomGrouping.java | 55 ++
.../streamlet/impl/operators/FilterOperator.java | 56 ++
.../streamlet/impl/operators/FlatMapOperator.java | 58 ++
.../GeneralReduceByKeyAndWindowOperator.java | 94 +++
.../streamlet/impl/operators/JoinOperator.java | 199 ++++++
.../streamlet/impl/operators/MapOperator.java | 54 ++
.../operators/ReduceByKeyAndWindowOperator.java | 96 +++
.../impl/operators/StreamletOperator.java | 50 ++
.../impl/operators/StreamletWindowOperator.java | 39 +
.../impl/operators/TransformOperator.java | 73 ++
.../streamlet/impl/operators/UnionOperator.java | 48 ++
.../heron/streamlet/impl/sinks/ComplexSink.java | 64 ++
.../heron/streamlet/impl/sinks/ConsumerSink.java | 51 ++
.../apache/heron/streamlet/impl/sinks/LogSink.java | 50 ++
.../streamlet/impl/sources/ComplexSource.java | 68 ++
.../streamlet/impl/sources/StreamletSource.java | 51 ++
.../streamlet/impl/sources/SupplierSource.java | 49 ++
.../impl/streamlets/ConsumerStreamlet.java | 46 ++
.../streamlet/impl/streamlets/FilterStreamlet.java | 45 ++
.../impl/streamlets/FlatMapStreamlet.java | 48 ++
.../GeneralReduceByKeyAndWindowStreamlet.java | 69 ++
.../streamlet/impl/streamlets/JoinStreamlet.java | 93 +++
.../streamlet/impl/streamlets/LogStreamlet.java | 43 ++
.../streamlet/impl/streamlets/MapStreamlet.java | 45 ++
.../streamlets/ReduceByKeyAndWindowStreamlet.java | 69 ++
.../streamlet/impl/streamlets/RemapStreamlet.java | 52 ++
.../streamlet/impl/streamlets/SinkStreamlet.java | 46 ++
.../streamlet/impl/streamlets/SourceStreamlet.java | 43 ++
.../impl/streamlets/SupplierStreamlet.java | 43 ++
.../impl/streamlets/TransformStreamlet.java | 48 ++
.../streamlet/impl/streamlets/UnionStreamlet.java | 49 ++
heron/api/src/java/shade.conf | 2 +-
heron/api/src/scala/BUILD | 2 +-
.../twitter/heron/streamlet/scala/Builder.scala | 50 --
.../com/twitter/heron/streamlet/scala/Runner.scala | 51 --
.../streamlet/scala/SerializableTransformer.scala | 31 -
.../com/twitter/heron/streamlet/scala/Sink.scala | 33 -
.../com/twitter/heron/streamlet/scala/Source.scala | 34 -
.../twitter/heron/streamlet/scala/Streamlet.scala | 244 -------
.../scala/converter/ScalaToJavaConverter.scala | 130 ----
.../heron/streamlet/scala/impl/BuilderImpl.scala | 43 --
.../heron/streamlet/scala/impl/StreamletImpl.scala | 374 ----------
.../org/apache/heron/streamlet/scala/Builder.scala | 50 ++
.../org/apache/heron/streamlet/scala/Runner.scala | 51 ++
.../streamlet/scala/SerializableTransformer.scala | 33 +
.../org/apache/heron/streamlet/scala/Sink.scala | 33 +
.../org/apache/heron/streamlet/scala/Source.scala | 34 +
.../apache/heron/streamlet/scala/Streamlet.scala | 244 +++++++
.../scala/converter/ScalaToJavaConverter.scala | 130 ++++
.../heron/streamlet/scala/impl/BuilderImpl.scala | 43 ++
.../heron/streamlet/scala/impl/StreamletImpl.scala | 374 ++++++++++
heron/api/tests/java/BUILD | 24 +-
.../java/com/twitter/heron/api/ConfigTest.java | 49 --
.../com/twitter/heron/api/HeronSubmitterTest.java | 213 ------
.../heron/api/bolt/BaseWindowedBoltTest.java | 276 -------
.../heron/api/bolt/WindowedBoltExecutorTest.java | 241 -------
.../heron/api/metric/CountStatAndMetricTest.java | 83 ---
.../heron/api/metric/LatencyStatAndMetricTest.java | 81 ---
.../api/windowing/WaterMarkEventGeneratorTest.java | 118 ---
.../heron/api/windowing/WindowManagerTest.java | 674 -----------------
.../heron/streamlet/impl/StreamletImplTest.java | 396 ----------
.../GeneralReduceByKeyAndWindowOperatorTest.java | 174 -----
.../streamlet/impl/operators/JoinOperatorTest.java | 380 ----------
.../ReduceByKeyAndWindowOperatorTest.java | 172 -----
.../java/org/apache/heron/api/ConfigTest.java | 49 ++
.../org/apache/heron/api/HeronSubmitterTest.java | 213 ++++++
.../heron/api/bolt/BaseWindowedBoltTest.java | 276 +++++++
.../heron/api/bolt/WindowedBoltExecutorTest.java | 243 +++++++
.../heron/api/metric/CountStatAndMetricTest.java | 83 +++
.../heron/api/metric/LatencyStatAndMetricTest.java | 81 +++
.../api/windowing/WaterMarkEventGeneratorTest.java | 120 ++++
.../heron/api/windowing/WindowManagerTest.java | 674 +++++++++++++++++
.../heron/streamlet/impl/StreamletImplTest.java | 399 +++++++++++
.../GeneralReduceByKeyAndWindowOperatorTest.java | 174 +++++
.../streamlet/impl/operators/JoinOperatorTest.java | 380 ++++++++++
.../ReduceByKeyAndWindowOperatorTest.java | 172 +++++
heron/api/tests/scala/BUILD | 2 +-
.../twitter/heron/streamlet/scala/SinkTest.scala | 54 --
.../twitter/heron/streamlet/scala/SourceTest.scala | 54 --
.../streamlet/scala/common/BaseFunSuite.scala | 22 -
.../heron/streamlet/scala/common/TestContext.scala | 50 --
.../TestIncrementSerializableTransformer.scala | 29 -
.../scala/common/TestListBufferSink.scala | 30 -
.../scala/converter/ScalaToJavaConverterTest.scala | 180 -----
.../streamlet/scala/impl/BuilderImplTest.scala | 67 --
.../streamlet/scala/impl/StreamletImplTest.scala | 471 ------------
.../apache/heron/streamlet/scala/SinkTest.scala | 54 ++
.../apache/heron/streamlet/scala/SourceTest.scala | 54 ++
.../streamlet/scala/common/BaseFunSuite.scala | 22 +
.../heron/streamlet/scala/common/TestContext.scala | 50 ++
.../TestIncrementSerializableTransformer.scala | 29 +
.../scala/common/TestListBufferSink.scala | 30 +
.../scala/converter/ScalaToJavaConverterTest.scala | 180 +++++
.../streamlet/scala/impl/BuilderImplTest.scala | 67 ++
.../streamlet/scala/impl/StreamletImplTest.scala | 471 ++++++++++++
.../twitter/heron/ckptmgr/CheckpointManager.java | 247 -------
.../heron/ckptmgr/CheckpointManagerConfig.java | 199 ------
.../heron/ckptmgr/CheckpointManagerConfigKey.java | 177 -----
.../heron/ckptmgr/CheckpointManagerException.java | 30 -
.../heron/ckptmgr/CheckpointManagerServer.java | 319 ---------
.../apache/heron/ckptmgr/CheckpointManager.java | 246 +++++++
.../heron/ckptmgr/CheckpointManagerConfig.java | 199 ++++++
.../heron/ckptmgr/CheckpointManagerConfigKey.java | 177 +++++
.../heron/ckptmgr/CheckpointManagerException.java | 30 +
.../heron/ckptmgr/CheckpointManagerServer.java | 319 +++++++++
heron/ckptmgr/src/java/shade.conf | 4 +-
heron/ckptmgr/tests/java/BUILD | 2 +-
.../heron/ckptmgr/CheckpointManagerServerTest.java | 257 -------
.../heron/ckptmgr/CheckpointManagerServerTest.java | 257 +++++++
heron/common/src/cpp/basics/mempool.cpp | 2 +-
.../twitter/heron/common/basics/ByteAmount.java | 242 -------
.../twitter/heron/common/basics/Communicator.java | 271 -------
.../heron/common/basics/DryRunFormatType.java | 29 -
.../com/twitter/heron/common/basics/FileUtils.java | 154 ----
.../heron/common/basics/ISelectHandler.java | 58 --
.../com/twitter/heron/common/basics/NIOLooper.java | 273 -------
.../twitter/heron/common/basics/PackageType.java | 33 -
.../java/com/twitter/heron/common/basics/Pair.java | 93 ---
.../heron/common/basics/SingletonRegistry.java | 84 ---
.../twitter/heron/common/basics/SlaveLooper.java | 92 ---
.../com/twitter/heron/common/basics/SysUtils.java | 76 --
.../com/twitter/heron/common/basics/TypeUtils.java | 131 ----
.../heron/common/basics/WakeableLooper.java | 231 ------
.../twitter/heron/common/config/ConfigReader.java | 113 ---
.../twitter/heron/common/config/SystemConfig.java | 365 ----------
.../heron/common/config/SystemConfigKey.java | 449 ------------
.../twitter/heron/common/network/HeronClient.java | 419 -----------
.../twitter/heron/common/network/HeronServer.java | 315 --------
.../heron/common/network/HeronSocketOptions.java | 78 --
.../heron/common/network/IncomingPacket.java | 136 ----
.../heron/common/network/OutgoingPacket.java | 107 ---
.../com/twitter/heron/common/network/REQID.java | 90 ---
.../heron/common/network/SocketChannelHelper.java | 282 --------
.../twitter/heron/common/network/StatusCode.java | 26 -
.../common/testhelpers/CommunicatorTestHelper.java | 49 --
.../common/testhelpers/HeronServerTester.java | 314 --------
.../utils/logging/ErrorReportLoggingHandler.java | 178 -----
.../heron/common/utils/logging/LoggingHelper.java | 252 -------
.../heron/common/utils/metrics/BoltMetrics.java | 116 ---
.../common/utils/metrics/ComponentMetrics.java | 28 -
.../common/utils/metrics/FullBoltMetrics.java | 185 -----
.../common/utils/metrics/FullSpoutMetrics.java | 145 ----
.../heron/common/utils/metrics/JVMMetrics.java | 458 ------------
.../common/utils/metrics/MetricsCollector.java | 185 -----
.../heron/common/utils/metrics/SpoutMetrics.java | 127 ----
.../utils/misc/CustomStreamGroupingHelper.java | 100 ---
.../common/utils/misc/PhysicalPlanHelper.java | 330 ---------
.../utils/misc/SerializeDeSerializeHelper.java | 59 --
.../heron/common/utils/misc/ThreadNames.java | 26 -
.../heron/common/utils/misc/TupleKeyGenerator.java | 34 -
.../utils/topology/GeneralTopologyContextImpl.java | 270 -------
.../common/utils/topology/TopologyContextImpl.java | 304 --------
.../heron/common/utils/topology/TopologyTests.java | 122 ----
.../heron/common/utils/tuple/TickTuple.java | 210 ------
.../heron/common/utils/tuple/TupleImpl.java | 261 -------
.../org/apache/heron/common/basics/ByteAmount.java | 242 +++++++
.../apache/heron/common/basics/Communicator.java | 271 +++++++
.../heron/common/basics/DryRunFormatType.java | 29 +
.../org/apache/heron/common/basics/FileUtils.java | 154 ++++
.../apache/heron/common/basics/ISelectHandler.java | 58 ++
.../org/apache/heron/common/basics/NIOLooper.java | 273 +++++++
.../apache/heron/common/basics/PackageType.java | 33 +
.../java/org/apache/heron/common/basics/Pair.java | 93 +++
.../heron/common/basics/SingletonRegistry.java | 84 +++
.../apache/heron/common/basics/SlaveLooper.java | 92 +++
.../org/apache/heron/common/basics/SysUtils.java | 76 ++
.../org/apache/heron/common/basics/TypeUtils.java | 131 ++++
.../apache/heron/common/basics/WakeableLooper.java | 231 ++++++
.../apache/heron/common/config/ConfigReader.java | 113 +++
.../apache/heron/common/config/SystemConfig.java | 365 ++++++++++
.../heron/common/config/SystemConfigKey.java | 449 ++++++++++++
.../apache/heron/common/network/HeronClient.java | 419 +++++++++++
.../apache/heron/common/network/HeronServer.java | 315 ++++++++
.../heron/common/network/HeronSocketOptions.java | 78 ++
.../heron/common/network/IncomingPacket.java | 136 ++++
.../heron/common/network/OutgoingPacket.java | 107 +++
.../org/apache/heron/common/network/REQID.java | 90 +++
.../heron/common/network/SocketChannelHelper.java | 282 ++++++++
.../apache/heron/common/network/StatusCode.java | 26 +
.../common/testhelpers/CommunicatorTestHelper.java | 49 ++
.../common/testhelpers/HeronServerTester.java | 314 ++++++++
.../utils/logging/ErrorReportLoggingHandler.java | 178 +++++
.../heron/common/utils/logging/LoggingHelper.java | 252 +++++++
.../heron/common/utils/metrics/BoltMetrics.java | 116 +++
.../common/utils/metrics/ComponentMetrics.java | 28 +
.../common/utils/metrics/FullBoltMetrics.java | 185 +++++
.../common/utils/metrics/FullSpoutMetrics.java | 145 ++++
.../heron/common/utils/metrics/JVMMetrics.java | 458 ++++++++++++
.../common/utils/metrics/MetricsCollector.java | 185 +++++
.../heron/common/utils/metrics/SpoutMetrics.java | 127 ++++
.../utils/misc/CustomStreamGroupingHelper.java | 100 +++
.../common/utils/misc/PhysicalPlanHelper.java | 330 +++++++++
.../utils/misc/SerializeDeSerializeHelper.java | 60 ++
.../heron/common/utils/misc/ThreadNames.java | 26 +
.../heron/common/utils/misc/TupleKeyGenerator.java | 34 +
.../utils/topology/GeneralTopologyContextImpl.java | 270 +++++++
.../common/utils/topology/TopologyContextImpl.java | 304 ++++++++
.../heron/common/utils/topology/TopologyTests.java | 122 ++++
.../apache/heron/common/utils/tuple/TickTuple.java | 210 ++++++
.../apache/heron/common/utils/tuple/TupleImpl.java | 261 +++++++
heron/common/tests/java/BUILD | 22 +-
.../heron/common/basics/ByteAmountTest.java | 211 ------
.../heron/common/basics/CommunicatorTest.java | 156 ----
.../twitter/heron/common/basics/FileUtilsTest.java | 190 -----
.../heron/common/basics/PackageTypeTest.java | 44 --
.../twitter/heron/common/basics/SysUtilsTest.java | 67 --
.../heron/common/basics/WakeableLooperTest.java | 241 -------
.../heron/common/config/ConfigReaderTest.java | 71 --
.../heron/common/config/SystemConfigTest.java | 53 --
.../com/twitter/heron/common/test/EchoTest.java | 181 -----
.../twitter/heron/common/test/HeronServerTest.java | 509 -------------
.../heron/common/utils/TopologyUtilsTest.java | 249 -------
.../apache/heron/common/basics/ByteAmountTest.java | 211 ++++++
.../heron/common/basics/CommunicatorTest.java | 156 ++++
.../apache/heron/common/basics/FileUtilsTest.java | 190 +++++
.../heron/common/basics/PackageTypeTest.java | 44 ++
.../apache/heron/common/basics/SysUtilsTest.java | 67 ++
.../heron/common/basics/WakeableLooperTest.java | 241 +++++++
.../heron/common/config/ConfigReaderTest.java | 72 ++
.../heron/common/config/SystemConfigTest.java | 53 ++
.../org/apache/heron/common/test/EchoTest.java | 181 +++++
.../apache/heron/common/test/HeronServerTest.java | 509 +++++++++++++
.../heron/common/utils/TopologyUtilsTest.java | 249 +++++++
heron/common/tests/resources/defaults.yaml | 2 +-
.../config/src/yaml/conf/aurora/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/aurora/packing.yaml | 4 +-
heron/config/src/yaml/conf/aurora/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/aurora/stateful.yaml | 2 +-
heron/config/src/yaml/conf/aurora/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/aurora/uploader.yaml | 2 +-
.../src/yaml/conf/examples/aurora_scheduler.yaml | 4 +-
.../src/yaml/conf/examples/local_scheduler.yaml | 4 +-
.../src/yaml/conf/examples/local_stateful.yaml | 2 +-
.../src/yaml/conf/examples/metrics_sinks.yaml | 16 +-
.../src/yaml/conf/kubernetes/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/kubernetes/packing.yaml | 4 +-
.../config/src/yaml/conf/kubernetes/scheduler.yaml | 4 +-
.../config/src/yaml/conf/kubernetes/stateful.yaml | 2 +-
.../config/src/yaml/conf/kubernetes/statemgr.yaml | 2 +-
.../config/src/yaml/conf/kubernetes/uploader.yaml | 2 +-
heron/config/src/yaml/conf/local/healthmgr.yaml | 6 +-
.../config/src/yaml/conf/local/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/local/packing.yaml | 4 +-
heron/config/src/yaml/conf/local/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/local/stateful.yaml | 2 +-
heron/config/src/yaml/conf/local/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/local/uploader.yaml | 2 +-
.../src/yaml/conf/localzk/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/localzk/packing.yaml | 4 +-
heron/config/src/yaml/conf/localzk/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/localzk/stateful.yaml | 2 +-
heron/config/src/yaml/conf/localzk/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/localzk/uploader.yaml | 2 +-
.../src/yaml/conf/marathon/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/marathon/packing.yaml | 4 +-
heron/config/src/yaml/conf/marathon/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/marathon/stateful.yaml | 2 +-
heron/config/src/yaml/conf/marathon/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/marathon/uploader.yaml | 2 +-
.../config/src/yaml/conf/mesos/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/mesos/packing.yaml | 4 +-
heron/config/src/yaml/conf/mesos/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/mesos/stateful.yaml | 2 +-
heron/config/src/yaml/conf/mesos/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/mesos/uploader.yaml | 2 +-
.../config/src/yaml/conf/nomad/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/nomad/packing.yaml | 4 +-
heron/config/src/yaml/conf/nomad/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/nomad/stateful.yaml | 2 +-
heron/config/src/yaml/conf/nomad/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/nomad/uploader.yaml | 2 +-
heron/config/src/yaml/conf/sandbox/healthmgr.yaml | 6 +-
.../src/yaml/conf/sandbox/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/sandbox/packing.yaml | 4 +-
heron/config/src/yaml/conf/sandbox/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/sandbox/stateful.yaml | 2 +-
heron/config/src/yaml/conf/sandbox/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/sandbox/uploader.yaml | 2 +-
.../config/src/yaml/conf/slurm/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/slurm/packing.yaml | 4 +-
heron/config/src/yaml/conf/slurm/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/slurm/stateful.yaml | 2 +-
heron/config/src/yaml/conf/slurm/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/slurm/uploader.yaml | 2 +-
.../src/yaml/conf/standalone/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/standalone/packing.yaml | 4 +-
.../config/src/yaml/conf/standalone/scheduler.yaml | 4 +-
.../config/src/yaml/conf/standalone/stateful.yaml | 2 +-
.../config/src/yaml/conf/standalone/statemgr.yaml | 2 +-
.../standalone/templates/apiserver.template.hcl | 2 +-
.../standalone/templates/scheduler.template.yaml | 4 +-
.../standalone/templates/statemgr.template.yaml | 2 +-
.../standalone/templates/uploader.template.yaml | 2 +-
.../config/src/yaml/conf/standalone/uploader.yaml | 2 +-
.../src/yaml/conf/test/test_metrics_sinks.yaml | 16 +-
heron/config/src/yaml/conf/yarn/healthmgr.yaml | 4 +-
heron/config/src/yaml/conf/yarn/metrics_sinks.yaml | 14 +-
heron/config/src/yaml/conf/yarn/packing.yaml | 4 +-
heron/config/src/yaml/conf/yarn/scheduler.yaml | 4 +-
heron/config/src/yaml/conf/yarn/stateful.yaml | 2 +-
heron/config/src/yaml/conf/yarn/statemgr.yaml | 2 +-
heron/config/src/yaml/conf/yarn/uploader.yaml | 2 +-
heron/downloaders/src/java/BUILD | 2 +-
.../com/twitter/heron/downloader/DLDownloader.java | 75 --
.../twitter/heron/downloader/DownloadRunner.java | 47 --
.../com/twitter/heron/downloader/Downloader.java | 21 -
.../com/twitter/heron/downloader/Extractor.java | 56 --
.../twitter/heron/downloader/FileDownloader.java | 30 -
.../twitter/heron/downloader/HttpDownloader.java | 27 -
.../com/twitter/heron/downloader/Registry.java | 60 --
.../org/apache/heron/downloader/DLDownloader.java | 74 ++
.../apache/heron/downloader/DownloadRunner.java | 47 ++
.../org/apache/heron/downloader/Downloader.java | 21 +
.../org/apache/heron/downloader/Extractor.java | 56 ++
.../apache/heron/downloader/FileDownloader.java | 30 +
.../apache/heron/downloader/HttpDownloader.java | 27 +
.../java/org/apache/heron/downloader/Registry.java | 60 ++
heron/downloaders/tests/java/BUILD | 2 +-
.../twitter/heron/downloader/DLDownloaderTest.java | 110 ---
.../twitter/heron/downloader/ExtractorTests.java | 131 ----
.../com/twitter/heron/downloader/RegistryTest.java | 37 -
.../apache/heron/downloader/DLDownloaderTest.java | 110 +++
.../apache/heron/downloader/ExtractorTests.java | 131 ++++
.../org/apache/heron/downloader/RegistryTest.java | 37 +
heron/executor/src/python/heron_executor.py | 12 +-
.../tests/python/heron_executor_unittest.py | 8 +-
.../com/twitter/heron/healthmgr/HealthManager.java | 528 --------------
.../heron/healthmgr/HealthManagerMetrics.java | 181 -----
.../heron/healthmgr/HealthPolicyConfig.java | 56 --
.../heron/healthmgr/HealthPolicyConfigReader.java | 96 ---
.../healthmgr/common/HealthManagerEvents.java | 41 --
.../healthmgr/common/InvalidStateException.java | 26 -
.../heron/healthmgr/common/MetricsStats.java | 36 -
.../healthmgr/common/PackingPlanProvider.java | 107 ---
.../healthmgr/common/PhysicalPlanProvider.java | 85 ---
.../heron/healthmgr/common/TopologyProvider.java | 96 ---
.../healthmgr/detectors/BackPressureDetector.java | 81 ---
.../heron/healthmgr/detectors/BaseDetector.java | 51 --
.../detectors/GrowingWaitQueueDetector.java | 102 ---
.../detectors/LargeWaitQueueDetector.java | 80 ---
.../detectors/ProcessingRateSkewDetector.java | 32 -
.../heron/healthmgr/detectors/SkewDetector.java | 114 ---
.../healthmgr/detectors/WaitQueueSkewDetector.java | 32 -
.../heron/healthmgr/diagnosers/BaseDiagnoser.java | 50 --
.../healthmgr/diagnosers/DataSkewDiagnoser.java | 88 ---
.../diagnosers/SlowInstanceDiagnoser.java | 87 ---
.../diagnosers/UnderProvisioningDiagnoser.java | 70 --
.../AutoRestartBackpressureContainerPolicy.java | 75 --
.../policy/DynamicResourceAllocationPolicy.java | 111 ---
.../resolvers/RestartContainerResolver.java | 108 ---
.../heron/healthmgr/resolvers/ScaleUpResolver.java | 221 ------
.../healthmgr/sensors/BackPressureSensor.java | 93 ---
.../heron/healthmgr/sensors/BaseSensor.java | 102 ---
.../heron/healthmgr/sensors/BufferSizeSensor.java | 89 ---
.../healthmgr/sensors/ExecuteCountSensor.java | 53 --
.../sensors/MetricsCacheMetricsProvider.java | 193 -----
.../healthmgr/sensors/TrackerMetricsProvider.java | 132 ----
.../org/apache/heron/healthmgr/HealthManager.java | 527 ++++++++++++++
.../heron/healthmgr/HealthManagerMetrics.java | 181 +++++
.../apache/heron/healthmgr/HealthPolicyConfig.java | 56 ++
.../heron/healthmgr/HealthPolicyConfigReader.java | 96 +++
.../healthmgr/common/HealthManagerEvents.java | 41 ++
.../healthmgr/common/InvalidStateException.java | 26 +
.../heron/healthmgr/common/MetricsStats.java | 36 +
.../healthmgr/common/PackingPlanProvider.java | 107 +++
.../healthmgr/common/PhysicalPlanProvider.java | 85 +++
.../heron/healthmgr/common/TopologyProvider.java | 96 +++
.../healthmgr/detectors/BackPressureDetector.java | 81 +++
.../heron/healthmgr/detectors/BaseDetector.java | 51 ++
.../detectors/GrowingWaitQueueDetector.java | 102 +++
.../detectors/LargeWaitQueueDetector.java | 80 +++
.../detectors/ProcessingRateSkewDetector.java | 32 +
.../heron/healthmgr/detectors/SkewDetector.java | 114 +++
.../healthmgr/detectors/WaitQueueSkewDetector.java | 32 +
.../heron/healthmgr/diagnosers/BaseDiagnoser.java | 50 ++
.../healthmgr/diagnosers/DataSkewDiagnoser.java | 88 +++
.../diagnosers/SlowInstanceDiagnoser.java | 87 +++
.../diagnosers/UnderProvisioningDiagnoser.java | 70 ++
.../AutoRestartBackpressureContainerPolicy.java | 75 ++
.../policy/DynamicResourceAllocationPolicy.java | 111 +++
.../resolvers/RestartContainerResolver.java | 108 +++
.../heron/healthmgr/resolvers/ScaleUpResolver.java | 221 ++++++
.../healthmgr/sensors/BackPressureSensor.java | 93 +++
.../apache/heron/healthmgr/sensors/BaseSensor.java | 102 +++
.../heron/healthmgr/sensors/BufferSizeSensor.java | 89 +++
.../healthmgr/sensors/ExecuteCountSensor.java | 53 ++
.../sensors/MetricsCacheMetricsProvider.java | 193 +++++
.../healthmgr/sensors/TrackerMetricsProvider.java | 132 ++++
.../twitter/heron/healthmgr/HealthManagerTest.java | 113 ---
.../healthmgr/HealthPolicyConfigReaderTest.java | 59 --
.../healthmgr/common/PackingPlanProviderTest.java | 98 ---
.../healthmgr/common/TopologyProviderTest.java | 103 ---
.../detectors/BackPressureDetectorTest.java | 96 ---
.../detectors/GrowingWaitQueueDetectorTest.java | 102 ---
.../detectors/LargeWaitQueueDetectorTest.java | 78 --
.../detectors/ProcessingRateSkewDetectorTest.java | 187 -----
.../detectors/WaitQueueSkewDetectorTest.java | 88 ---
.../diagnosers/DataSkewDiagnoserTest.java | 135 ----
.../diagnosers/SlowInstanceDiagnoserTest.java | 112 ---
.../diagnosers/UnderProvisioningDiagnoserTest.java | 96 ---
.../healthmgr/resolvers/ScaleUpResolverTest.java | 185 -----
.../healthmgr/sensors/BackPressureSensorTest.java | 100 ---
.../healthmgr/sensors/BufferSizeSensorTest.java | 82 ---
.../healthmgr/sensors/ExecuteCountSensorTest.java | 79 --
.../sensors/MetricsCacheMetricsProviderTest.java | 303 --------
.../sensors/TrackerMetricsProviderTest.java | 207 ------
.../apache/heron/healthmgr/HealthManagerTest.java | 113 +++
.../healthmgr/HealthPolicyConfigReaderTest.java | 59 ++
.../healthmgr/common/PackingPlanProviderTest.java | 98 +++
.../healthmgr/common/TopologyProviderTest.java | 103 +++
.../detectors/BackPressureDetectorTest.java | 96 +++
.../detectors/GrowingWaitQueueDetectorTest.java | 102 +++
.../detectors/LargeWaitQueueDetectorTest.java | 78 ++
.../detectors/ProcessingRateSkewDetectorTest.java | 187 +++++
.../detectors/WaitQueueSkewDetectorTest.java | 88 +++
.../diagnosers/DataSkewDiagnoserTest.java | 135 ++++
.../diagnosers/SlowInstanceDiagnoserTest.java | 112 +++
.../diagnosers/UnderProvisioningDiagnoserTest.java | 96 +++
.../healthmgr/resolvers/ScaleUpResolverTest.java | 185 +++++
.../healthmgr/sensors/BackPressureSensorTest.java | 100 +++
.../healthmgr/sensors/BufferSizeSensorTest.java | 82 +++
.../healthmgr/sensors/ExecuteCountSensorTest.java | 79 ++
.../sensors/MetricsCacheMetricsProviderTest.java | 304 ++++++++
.../sensors/TrackerMetricsProviderTest.java | 207 ++++++
heron/instance/src/java/BUILD | 2 +-
.../heron/instance/AbstractOutputCollector.java | 182 -----
.../java/com/twitter/heron/instance/Gateway.java | 169 -----
.../com/twitter/heron/instance/HeronInstance.java | 461 ------------
.../java/com/twitter/heron/instance/IInstance.java | 90 ---
.../twitter/heron/instance/InstanceControlMsg.java | 89 ---
.../heron/instance/OutgoingTupleCollection.java | 227 ------
.../src/java/com/twitter/heron/instance/Slave.java | 379 ----------
.../twitter/heron/instance/bolt/BoltInstance.java | 325 ---------
.../instance/bolt/BoltOutputCollectorImpl.java | 190 -----
.../heron/instance/spout/RootTupleInfo.java | 54 --
.../heron/instance/spout/SpoutInstance.java | 468 ------------
.../instance/spout/SpoutOutputCollectorImpl.java | 183 -----
.../twitter/heron/instance/util/InstanceUtils.java | 43 --
.../twitter/heron/instance/util/JvmVersion.java | 26 -
.../com/twitter/heron/metrics/GatewayMetrics.java | 177 -----
.../heron/network/MetricsManagerClient.java | 204 ------
.../twitter/heron/network/StreamManagerClient.java | 377 ----------
.../heron/instance/AbstractOutputCollector.java | 182 +++++
.../java/org/apache/heron/instance/Gateway.java | 169 +++++
.../org/apache/heron/instance/HeronInstance.java | 460 ++++++++++++
.../java/org/apache/heron/instance/IInstance.java | 90 +++
.../apache/heron/instance/InstanceControlMsg.java | 89 +++
.../heron/instance/OutgoingTupleCollection.java | 227 ++++++
.../src/java/org/apache/heron/instance/Slave.java | 379 ++++++++++
.../apache/heron/instance/bolt/BoltInstance.java | 325 +++++++++
.../instance/bolt/BoltOutputCollectorImpl.java | 190 +++++
.../apache/heron/instance/spout/RootTupleInfo.java | 54 ++
.../apache/heron/instance/spout/SpoutInstance.java | 468 ++++++++++++
.../instance/spout/SpoutOutputCollectorImpl.java | 183 +++++
.../apache/heron/instance/util/InstanceUtils.java | 43 ++
.../org/apache/heron/instance/util/JvmVersion.java | 26 +
.../org/apache/heron/metrics/GatewayMetrics.java | 177 +++++
.../apache/heron/network/MetricsManagerClient.java | 204 ++++++
.../apache/heron/network/StreamManagerClient.java | 377 ++++++++++
heron/instance/src/java/shade.conf | 6 +-
heron/instance/tests/java/BUILD | 22 +-
.../heron/grouping/AbstractTupleRoutingTest.java | 235 ------
.../twitter/heron/grouping/CustomGroupingTest.java | 77 --
.../twitter/heron/grouping/EmitDirectBoltTest.java | 48 --
.../heron/grouping/EmitDirectRoundRobinBolt.java | 70 --
.../heron/grouping/EmitDirectRoundRobinSpout.java | 61 --
.../heron/grouping/EmitDirectSpoutTest.java | 46 --
.../twitter/heron/instance/CommunicatorTester.java | 118 ---
.../com/twitter/heron/instance/SlaveTester.java | 51 --
.../heron/instance/bolt/BoltInstanceTest.java | 140 ----
.../instance/spout/ActivateDeactivateTest.java | 89 ---
.../heron/instance/spout/SpoutInstanceTest.java | 344 ---------
.../twitter/heron/metrics/GlobalMetricsTest.java | 74 --
.../heron/metrics/MultiAssignableMetricTest.java | 48 --
.../twitter/heron/network/AbstractNetworkTest.java | 193 -----
.../com/twitter/heron/network/ConnectTest.java | 90 ---
.../com/twitter/heron/network/HandleReadTest.java | 135 ----
.../com/twitter/heron/network/HandleWriteTest.java | 99 ---
.../java/com/twitter/heron/resource/Constants.java | 54 --
.../java/com/twitter/heron/resource/TestBolt.java | 97 ---
.../java/com/twitter/heron/resource/TestSpout.java | 124 ----
.../com/twitter/heron/resource/UnitTestHelper.java | 194 -----
.../heron/grouping/AbstractTupleRoutingTest.java | 235 ++++++
.../apache/heron/grouping/CustomGroupingTest.java | 77 ++
.../apache/heron/grouping/EmitDirectBoltTest.java | 48 ++
.../heron/grouping/EmitDirectRoundRobinBolt.java | 70 ++
.../heron/grouping/EmitDirectRoundRobinSpout.java | 61 ++
.../apache/heron/grouping/EmitDirectSpoutTest.java | 46 ++
.../apache/heron/instance/CommunicatorTester.java | 118 +++
.../org/apache/heron/instance/SlaveTester.java | 51 ++
.../heron/instance/bolt/BoltInstanceTest.java | 140 ++++
.../instance/spout/ActivateDeactivateTest.java | 89 +++
.../heron/instance/spout/SpoutInstanceTest.java | 344 +++++++++
.../apache/heron/metrics/GlobalMetricsTest.java | 74 ++
.../heron/metrics/MultiAssignableMetricTest.java | 48 ++
.../apache/heron/network/AbstractNetworkTest.java | 193 +++++
.../java/org/apache/heron/network/ConnectTest.java | 90 +++
.../org/apache/heron/network/HandleReadTest.java | 135 ++++
.../org/apache/heron/network/HandleWriteTest.java | 99 +++
.../java/org/apache/heron/resource/Constants.java | 54 ++
.../java/org/apache/heron/resource/TestBolt.java | 97 +++
.../java/org/apache/heron/resource/TestSpout.java | 124 ++++
.../org/apache/heron/resource/UnitTestHelper.java | 194 +++++
heron/io/dlog/src/java/BUILD | 2 +-
.../java/com/twitter/heron/dlog/DLInputStream.java | 140 ----
.../com/twitter/heron/dlog/DLOutputStream.java | 68 --
.../dlog/src/java/com/twitter/heron/dlog/Util.java | 144 ----
.../java/org/apache/heron/dlog/DLInputStream.java | 140 ++++
.../java/org/apache/heron/dlog/DLOutputStream.java | 68 ++
.../dlog/src/java/org/apache/heron/dlog/Util.java | 143 ++++
.../com/twitter/heron/dlog/DLInputStreamTest.java | 99 ---
.../com/twitter/heron/dlog/DLOutputStreamTest.java | 69 --
.../org/apache/heron/dlog/DLInputStreamTest.java | 99 +++
.../org/apache/heron/dlog/DLOutputStreamTest.java | 70 ++
heron/metricscachemgr/src/java/BUILD | 2 +-
.../heron/metricscachemgr/MetricsCacheManager.java | 426 -----------
.../MetricsCacheManagerHttpServer.java | 212 ------
.../metricscachemgr/MetricsCacheManagerServer.java | 101 ---
.../metricscachemgr/metricscache/CacheCore.java | 570 ---------------
.../metricscachemgr/metricscache/MetricsCache.java | 207 ------
.../metricscache/MetricsCacheQueryUtils.java | 215 ------
.../metricscache/query/ExceptionDatum.java | 105 ---
.../metricscache/query/ExceptionRequest.java | 62 --
.../metricscache/query/ExceptionResponse.java | 32 -
.../metricscache/query/MetricDatum.java | 55 --
.../metricscache/query/MetricGranularity.java | 21 -
.../metricscache/query/MetricRequest.java | 127 ----
.../metricscache/query/MetricResponse.java | 32 -
.../metricscache/query/MetricTimeRangeValue.java | 69 --
.../metricscache/store/ExceptionDatapoint.java | 69 --
.../metricscache/store/MetricDatapoint.java | 57 --
.../heron/metricscachemgr/MetricsCacheManager.java | 425 +++++++++++
.../MetricsCacheManagerHttpServer.java | 212 ++++++
.../metricscachemgr/MetricsCacheManagerServer.java | 101 +++
.../metricscachemgr/metricscache/CacheCore.java | 570 +++++++++++++++
.../metricscachemgr/metricscache/MetricsCache.java | 207 ++++++
.../metricscache/MetricsCacheQueryUtils.java | 215 ++++++
.../metricscache/query/ExceptionDatum.java | 105 +++
.../metricscache/query/ExceptionRequest.java | 62 ++
.../metricscache/query/ExceptionResponse.java | 32 +
.../metricscache/query/MetricDatum.java | 55 ++
.../metricscache/query/MetricGranularity.java | 21 +
.../metricscache/query/MetricRequest.java | 127 ++++
.../metricscache/query/MetricResponse.java | 32 +
.../metricscache/query/MetricTimeRangeValue.java | 69 ++
.../metricscache/store/ExceptionDatapoint.java | 69 ++
.../metricscache/store/MetricDatapoint.java | 57 ++
heron/metricscachemgr/tests/java/BUILD | 6 +-
.../metricscache/CacheCoreTest.java | 713 ------------------
.../metricscache/MetricsCacheQueryUtilsTest.java | 287 --------
.../metricscache/MetricsCacheTest.java | 69 --
.../metricscache/CacheCoreTest.java | 713 ++++++++++++++++++
.../metricscache/MetricsCacheQueryUtilsTest.java | 289 ++++++++
.../metricscache/MetricsCacheTest.java | 69 ++
.../twitter/heron/metricsmgr/MetricsManager.java | 592 ---------------
.../heron/metricsmgr/MetricsManagerServer.java | 366 ----------
.../heron/metricsmgr/MetricsSinksConfig.java | 80 ---
.../com/twitter/heron/metricsmgr/MetricsUtil.java | 41 --
.../heron/metricsmgr/executor/SinkExecutor.java | 144 ----
.../heron/metricsmgr/sink/AbstractWebSink.java | 172 -----
.../twitter/heron/metricsmgr/sink/FileSink.java | 189 -----
.../heron/metricsmgr/sink/GraphiteSink.java | 238 -------
.../heron/metricsmgr/sink/PrometheusSink.java | 273 -------
.../heron/metricsmgr/sink/SinkContextImpl.java | 89 ---
.../com/twitter/heron/metricsmgr/sink/WebSink.java | 143 ----
.../sink/metricscache/MetricsCacheClient.java | 123 ----
.../sink/metricscache/MetricsCacheSink.java | 430 -----------
.../heron/metricsmgr/sink/scribe/ScribeSink.java | 276 -------
.../metricsmgr/sink/tmaster/TMasterClient.java | 118 ---
.../heron/metricsmgr/sink/tmaster/TMasterSink.java | 419 -----------
.../apache/heron/metricsmgr/MetricsManager.java | 591 +++++++++++++++
.../heron/metricsmgr/MetricsManagerServer.java | 366 ++++++++++
.../heron/metricsmgr/MetricsSinksConfig.java | 80 +++
.../org/apache/heron/metricsmgr/MetricsUtil.java | 41 ++
.../heron/metricsmgr/executor/SinkExecutor.java | 144 ++++
.../heron/metricsmgr/sink/AbstractWebSink.java | 171 +++++
.../org/apache/heron/metricsmgr/sink/FileSink.java | 189 +++++
.../apache/heron/metricsmgr/sink/GraphiteSink.java | 238 +++++++
.../heron/metricsmgr/sink/PrometheusSink.java | 273 +++++++
.../heron/metricsmgr/sink/SinkContextImpl.java | 89 +++
.../org/apache/heron/metricsmgr/sink/WebSink.java | 142 ++++
.../sink/metricscache/MetricsCacheClient.java | 123 ++++
.../sink/metricscache/MetricsCacheSink.java | 430 +++++++++++
.../heron/metricsmgr/sink/scribe/ScribeSink.java | 275 +++++++
.../metricsmgr/sink/tmaster/TMasterClient.java | 118 +++
.../heron/metricsmgr/sink/tmaster/TMasterSink.java | 419 +++++++++++
heron/metricsmgr/tests/java/BUILD | 18 +-
.../metricsmgr/HandleTMasterLocationTest.java | 180 -----
.../heron/metricsmgr/LatchedMultiCountMetric.java | 117 ---
.../heron/metricsmgr/MetricsManagerServerTest.java | 202 ------
.../twitter/heron/metricsmgr/MetricsUtilTests.java | 52 --
.../metricsmgr/executor/SinkExecutorTest.java | 262 -------
.../heron/metricsmgr/sink/FileSinkTest.java | 113 ---
.../heron/metricsmgr/sink/PrometheusSinkTests.java | 205 ------
.../twitter/heron/metricsmgr/sink/WebSinkTest.java | 260 -------
.../sink/metricscache/MetricsCacheSinkTest.java | 186 -----
.../metricsmgr/sink/tmaster/TMasterSinkTest.java | 185 -----
.../metricsmgr/HandleTMasterLocationTest.java | 180 +++++
.../heron/metricsmgr/LatchedMultiCountMetric.java | 117 +++
.../heron/metricsmgr/MetricsManagerServerTest.java | 202 ++++++
.../apache/heron/metricsmgr/MetricsUtilTests.java | 52 ++
.../metricsmgr/executor/SinkExecutorTest.java | 262 +++++++
.../apache/heron/metricsmgr/sink/FileSinkTest.java | 113 +++
.../heron/metricsmgr/sink/PrometheusSinkTests.java | 205 ++++++
.../apache/heron/metricsmgr/sink/WebSinkTest.java | 260 +++++++
.../sink/metricscache/MetricsCacheSinkTest.java | 186 +++++
.../metricsmgr/sink/tmaster/TMasterSinkTest.java | 185 +++++
.../com/twitter/heron/packing/RamRequirement.java | 60 --
.../heron/packing/ResourceExceededException.java | 29 -
.../binpacking/FirstFitDecreasingPacking.java | 328 ---------
.../twitter/heron/packing/builder/Container.java | 194 -----
.../heron/packing/builder/ContainerIdScorer.java | 58 --
.../heron/packing/builder/HomogeneityScorer.java | 64 --
.../heron/packing/builder/InstanceCountScorer.java | 29 -
.../heron/packing/builder/PackingPlanBuilder.java | 483 -------------
.../com/twitter/heron/packing/builder/Scorer.java | 42 --
.../roundrobin/ResourceCompliantRRPacking.java | 387 ----------
.../packing/roundrobin/RoundRobinPacking.java | 391 ----------
.../twitter/heron/packing/utils/PackingUtils.java | 162 -----
.../org/apache/heron/packing/RamRequirement.java | 60 ++
.../heron/packing/ResourceExceededException.java | 29 +
.../binpacking/FirstFitDecreasingPacking.java | 328 +++++++++
.../apache/heron/packing/builder/Container.java | 194 +++++
.../heron/packing/builder/ContainerIdScorer.java | 58 ++
.../heron/packing/builder/HomogeneityScorer.java | 64 ++
.../heron/packing/builder/InstanceCountScorer.java | 29 +
.../heron/packing/builder/PackingPlanBuilder.java | 483 +++++++++++++
.../org/apache/heron/packing/builder/Scorer.java | 42 ++
.../roundrobin/ResourceCompliantRRPacking.java | 387 ++++++++++
.../packing/roundrobin/RoundRobinPacking.java | 391 ++++++++++
.../apache/heron/packing/utils/PackingUtils.java | 162 +++++
heron/packing/tests/java/BUILD | 2 +-
.../com/twitter/heron/packing/AssertPacking.java | 177 -----
.../twitter/heron/packing/CommonPackingTests.java | 350 ---------
.../twitter/heron/packing/PackingTestHelper.java | 113 ---
.../binpacking/FirstFitDecreasingPackingTest.java | 511 -------------
.../packing/builder/PackingPlanBuilderTest.java | 291 --------
.../twitter/heron/packing/builder/ScorerTest.java | 99 ---
.../roundrobin/ResourceCompliantRRPackingTest.java | 553 --------------
.../packing/roundrobin/RoundRobinPackingTest.java | 397 -----------
.../heron/packing/utils/PackingUtilsTest.java | 134 ----
.../org/apache/heron/packing/AssertPacking.java | 177 +++++
.../apache/heron/packing/CommonPackingTests.java | 350 +++++++++
.../apache/heron/packing/PackingTestHelper.java | 113 +++
.../binpacking/FirstFitDecreasingPackingTest.java | 511 +++++++++++++
.../packing/builder/PackingPlanBuilderTest.java | 291 ++++++++
.../apache/heron/packing/builder/ScorerTest.java | 99 +++
.../roundrobin/ResourceCompliantRRPackingTest.java | 553 ++++++++++++++
.../packing/roundrobin/RoundRobinPackingTest.java | 397 +++++++++++
.../heron/packing/utils/PackingUtilsTest.java | 134 ++++
heron/proto/ckptmgr.proto | 2 +-
heron/proto/common.proto | 2 +-
heron/proto/execution_state.proto | 2 +-
heron/proto/metrics.proto | 2 +-
heron/proto/networktests.proto | 2 +-
heron/proto/packing_plan.proto | 2 +-
heron/proto/physical_plan.proto | 2 +-
heron/proto/scheduler.proto | 2 +-
heron/proto/stats.proto | 2 +-
heron/proto/stmgr.proto | 2 +-
heron/proto/tmaster.proto | 2 +-
heron/proto/topology.proto | 2 +-
heron/proto/tuple.proto | 2 +-
.../java/com/twitter/heron/scheduler/Command.java | 33 -
.../com/twitter/heron/scheduler/ExecutorFlag.java | 73 --
.../com/twitter/heron/scheduler/LaunchRunner.java | 176 -----
.../heron/scheduler/RuntimeManagerMain.java | 506 -------------
.../heron/scheduler/RuntimeManagerRunner.java | 443 ------------
.../com/twitter/heron/scheduler/SchedulerMain.java | 430 -----------
.../com/twitter/heron/scheduler/SubmitterMain.java | 551 --------------
.../TopologyRuntimeManagementException.java | 30 -
.../scheduler/TopologySubmissionException.java | 30 -
.../heron/scheduler/UpdateTopologyManager.java | 409 -----------
.../client/HttpServiceSchedulerClient.java | 121 ----
.../heron/scheduler/client/ISchedulerClient.java | 46 --
.../scheduler/client/LibrarySchedulerClient.java | 80 ---
.../scheduler/client/SchedulerClientFactory.java | 77 --
.../heron/scheduler/dryrun/DryRunRender.java | 31 -
.../heron/scheduler/dryrun/DryRunResponse.java | 44 --
.../heron/scheduler/dryrun/FormatterUtils.java | 515 -------------
.../heron/scheduler/dryrun/JsonFormatterUtils.java | 87 ---
.../scheduler/dryrun/SubmitDryRunResponse.java | 32 -
.../scheduler/dryrun/SubmitJsonDryRunRenderer.java | 44 --
.../scheduler/dryrun/SubmitRawDryRunRenderer.java | 38 -
.../dryrun/SubmitTableDryRunRenderer.java | 64 --
.../scheduler/dryrun/UpdateDryRunResponse.java | 43 --
.../scheduler/dryrun/UpdateJsonDryRunRenderer.java | 57 --
.../scheduler/dryrun/UpdateRawDryRunRenderer.java | 40 --
.../dryrun/UpdateTableDryRunRenderer.java | 190 -----
.../server/ExceptionalRequestHandler.java | 80 ---
.../heron/scheduler/server/KillRequestHandler.java | 52 --
.../scheduler/server/RestartRequestHandler.java | 49 --
.../heron/scheduler/server/SchedulerServer.java | 85 ---
.../server/TerminateSchedulerException.java | 25 -
.../scheduler/server/UpdateRequestHandler.java | 48 --
.../heron/scheduler/utils/DryRunRenders.java | 61 --
.../heron/scheduler/utils/LauncherUtils.java | 164 -----
.../com/twitter/heron/scheduler/utils/Runtime.java | 83 ---
.../scheduler/utils/SchedulerConfigUtils.java | 87 ---
.../heron/scheduler/utils/SchedulerUtils.java | 570 ---------------
.../twitter/heron/scheduler/utils/Shutdown.java | 47 --
.../heron/scheduler/utils/SubmitterUtils.java | 48 --
.../java/org/apache/heron/scheduler/Command.java | 33 +
.../org/apache/heron/scheduler/ExecutorFlag.java | 73 ++
.../org/apache/heron/scheduler/LaunchRunner.java | 176 +++++
.../apache/heron/scheduler/RuntimeManagerMain.java | 505 +++++++++++++
.../heron/scheduler/RuntimeManagerRunner.java | 442 ++++++++++++
.../org/apache/heron/scheduler/SchedulerMain.java | 429 +++++++++++
.../org/apache/heron/scheduler/SubmitterMain.java | 550 ++++++++++++++
.../TopologyRuntimeManagementException.java | 30 +
.../scheduler/TopologySubmissionException.java | 30 +
.../heron/scheduler/UpdateTopologyManager.java | 409 +++++++++++
.../client/HttpServiceSchedulerClient.java | 121 ++++
.../heron/scheduler/client/ISchedulerClient.java | 46 ++
.../scheduler/client/LibrarySchedulerClient.java | 80 +++
.../scheduler/client/SchedulerClientFactory.java | 77 ++
.../heron/scheduler/dryrun/DryRunRender.java | 31 +
.../heron/scheduler/dryrun/DryRunResponse.java | 44 ++
.../heron/scheduler/dryrun/FormatterUtils.java | 515 +++++++++++++
.../heron/scheduler/dryrun/JsonFormatterUtils.java | 87 +++
.../scheduler/dryrun/SubmitDryRunResponse.java | 32 +
.../scheduler/dryrun/SubmitJsonDryRunRenderer.java | 44 ++
.../scheduler/dryrun/SubmitRawDryRunRenderer.java | 38 +
.../dryrun/SubmitTableDryRunRenderer.java | 64 ++
.../scheduler/dryrun/UpdateDryRunResponse.java | 43 ++
.../scheduler/dryrun/UpdateJsonDryRunRenderer.java | 57 ++
.../scheduler/dryrun/UpdateRawDryRunRenderer.java | 40 ++
.../dryrun/UpdateTableDryRunRenderer.java | 190 +++++
.../server/ExceptionalRequestHandler.java | 80 +++
.../heron/scheduler/server/KillRequestHandler.java | 52 ++
.../scheduler/server/RestartRequestHandler.java | 49 ++
.../heron/scheduler/server/SchedulerServer.java | 85 +++
.../server/TerminateSchedulerException.java | 25 +
.../scheduler/server/UpdateRequestHandler.java | 48 ++
.../heron/scheduler/utils/DryRunRenders.java | 60 ++
.../heron/scheduler/utils/LauncherUtils.java | 164 +++++
.../org/apache/heron/scheduler/utils/Runtime.java | 83 +++
.../scheduler/utils/SchedulerConfigUtils.java | 87 +++
.../heron/scheduler/utils/SchedulerUtils.java | 570 +++++++++++++++
.../org/apache/heron/scheduler/utils/Shutdown.java | 47 ++
.../heron/scheduler/utils/SubmitterUtils.java | 48 ++
heron/scheduler-core/tests/java/BUILD | 30 +-
.../twitter/heron/scheduler/LaunchRunnerTest.java | 312 --------
.../heron/scheduler/RuntimeManagerMainTest.java | 348 ---------
.../heron/scheduler/RuntimeManagerRunnerTest.java | 359 ----------
.../twitter/heron/scheduler/SchedulerMainTest.java | 259 -------
.../twitter/heron/scheduler/SubmitterMainTest.java | 214 ------
.../heron/scheduler/UpdateTopologyManagerTest.java | 281 --------
.../client/HttpServiceSchedulerClientTest.java | 144 ----
.../client/LibrarySchedulerClientTest.java | 82 ---
.../client/SchedulerClientFactoryTest.java | 120 ----
.../scheduler/dryrun/JsonFormatterUtilsTest.java | 70 --
.../scheduler/dryrun/SubmitDryRunRenderTest.java | 92 ---
.../scheduler/dryrun/UpdateDryRunRenderTest.java | 133 ----
.../scheduler/server/SchedulerServerTest.java | 39 -
.../heron/scheduler/utils/LauncherUtilsTest.java | 108 ---
.../heron/scheduler/utils/SchedulerUtilsTest.java | 171 -----
.../apache/heron/scheduler/LaunchRunnerTest.java | 312 ++++++++
.../heron/scheduler/RuntimeManagerMainTest.java | 348 +++++++++
.../heron/scheduler/RuntimeManagerRunnerTest.java | 359 ++++++++++
.../apache/heron/scheduler/SchedulerMainTest.java | 259 +++++++
.../apache/heron/scheduler/SubmitterMainTest.java | 214 ++++++
.../heron/scheduler/UpdateTopologyManagerTest.java | 280 ++++++++
.../client/HttpServiceSchedulerClientTest.java | 144 ++++
.../client/LibrarySchedulerClientTest.java | 82 +++
.../client/SchedulerClientFactoryTest.java | 120 ++++
.../scheduler/dryrun/JsonFormatterUtilsTest.java | 70 ++
.../scheduler/dryrun/SubmitDryRunRenderTest.java | 90 +++
.../scheduler/dryrun/UpdateDryRunRenderTest.java | 132 ++++
.../scheduler/server/SchedulerServerTest.java | 39 +
.../heron/scheduler/utils/LauncherUtilsTest.java | 108 +++
.../heron/scheduler/utils/SchedulerUtilsTest.java | 171 +++++
.../resources/JsonFormatterUtilsExpectedJson.txt | 2 +-
.../tests/resources/SubmitDryRunOutputATable.txt | 2 +-
.../resources/SubmitDryRunOutputATableNonRich.txt | 2 +-
.../tests/resources/UpdateDryRunOutputATable.txt | 2 +-
.../resources/UpdateDryRunOutputATableNonRich.txt | 2 +-
.../tests/resources/UpdateDryRunOutputBTable.txt | 2 +-
.../resources/UpdateDryRunOutputBTableNonRich.txt | 2 +-
heron/schedulers/src/java/BUILD | 18 +-
.../com/twitter/heron/scheduler/NullLauncher.java | 38 -
.../com/twitter/heron/scheduler/NullScheduler.java | 62 --
.../scheduler/aurora/AuroraCLIController.java | 198 -----
.../heron/scheduler/aurora/AuroraContext.java | 48 --
.../heron/scheduler/aurora/AuroraController.java | 37 -
.../heron/scheduler/aurora/AuroraField.java | 33 -
.../aurora/AuroraHeronShellController.java | 127 ----
.../heron/scheduler/aurora/AuroraLauncher.java | 53 --
.../heron/scheduler/aurora/AuroraScheduler.java | 279 --------
.../kubernetes/AppsV1beta1Controller.java | 464 ------------
.../scheduler/kubernetes/KubernetesCompat.java | 59 --
.../scheduler/kubernetes/KubernetesConstants.java | 104 ---
.../scheduler/kubernetes/KubernetesContext.java | 134 ----
.../scheduler/kubernetes/KubernetesController.java | 73 --
.../scheduler/kubernetes/KubernetesLauncher.java | 56 --
.../scheduler/kubernetes/KubernetesScheduler.java | 187 -----
.../scheduler/kubernetes/KubernetesUtils.java | 71 --
.../heron/scheduler/kubernetes/Volumes.java | 109 ---
.../heron/scheduler/local/LocalContext.java | 27 -
.../twitter/heron/scheduler/local/LocalKey.java | 65 --
.../heron/scheduler/local/LocalLauncher.java | 157 ----
.../heron/scheduler/local/LocalScheduler.java | 348 ---------
.../scheduler/marathon/MarathonConstants.java | 83 ---
.../heron/scheduler/marathon/MarathonContext.java | 41 --
.../scheduler/marathon/MarathonController.java | 197 -----
.../heron/scheduler/marathon/MarathonLauncher.java | 52 --
.../scheduler/marathon/MarathonScheduler.java | 223 ------
.../heron/scheduler/mesos/MesosContext.java | 55 --
.../heron/scheduler/mesos/MesosLauncher.java | 146 ----
.../heron/scheduler/mesos/MesosScheduler.java | 274 -------
.../scheduler/mesos/framework/BaseContainer.java | 98 ---
.../scheduler/mesos/framework/LaunchableTask.java | 225 ------
.../scheduler/mesos/framework/MesosFramework.java | 575 ---------------
.../scheduler/mesos/framework/TaskResources.java | 151 ----
.../heron/scheduler/mesos/framework/TaskUtils.java | 57 --
.../heron/scheduler/nomad/NomadConstants.java | 113 ---
.../heron/scheduler/nomad/NomadContext.java | 93 ---
.../twitter/heron/scheduler/nomad/NomadKey.java | 61 --
.../heron/scheduler/nomad/NomadLauncher.java | 52 --
.../heron/scheduler/nomad/NomadScheduler.java | 607 ----------------
.../heron/scheduler/slurm/SlurmContext.java | 39 -
.../heron/scheduler/slurm/SlurmController.java | 166 -----
.../heron/scheduler/slurm/SlurmLauncher.java | 108 ---
.../heron/scheduler/slurm/SlurmScheduler.java | 146 ----
.../heron/scheduler/utils/HttpJsonClient.java | 134 ----
.../scheduler/yarn/HeronClientConfiguration.java | 29 -
.../scheduler/yarn/HeronConfigurationOptions.java | 64 --
.../scheduler/yarn/HeronDriverConfiguration.java | 62 --
.../heron/scheduler/yarn/HeronExecutorTask.java | 200 ------
.../heron/scheduler/yarn/HeronMasterDriver.java | 725 -------------------
.../scheduler/yarn/HeronMasterDriverProvider.java | 47 --
.../heron/scheduler/yarn/HeronReefUtils.java | 41 --
.../scheduler/yarn/HeronTaskConfiguration.java | 59 --
.../scheduler/yarn/ReefClientSideHandlers.java | 94 ---
.../twitter/heron/scheduler/yarn/YarnContext.java | 34 -
.../com/twitter/heron/scheduler/yarn/YarnKey.java | 67 --
.../twitter/heron/scheduler/yarn/YarnLauncher.java | 193 -----
.../heron/scheduler/yarn/YarnScheduler.java | 125 ----
.../org/apache/heron/scheduler/NullLauncher.java | 38 +
.../org/apache/heron/scheduler/NullScheduler.java | 62 ++
.../scheduler/aurora/AuroraCLIController.java | 198 +++++
.../heron/scheduler/aurora/AuroraContext.java | 48 ++
.../heron/scheduler/aurora/AuroraController.java | 37 +
.../apache/heron/scheduler/aurora/AuroraField.java | 33 +
.../aurora/AuroraHeronShellController.java | 127 ++++
.../heron/scheduler/aurora/AuroraLauncher.java | 53 ++
.../heron/scheduler/aurora/AuroraScheduler.java | 279 ++++++++
.../kubernetes/AppsV1beta1Controller.java | 464 ++++++++++++
.../scheduler/kubernetes/KubernetesCompat.java | 59 ++
.../scheduler/kubernetes/KubernetesConstants.java | 104 +++
.../scheduler/kubernetes/KubernetesContext.java | 134 ++++
.../scheduler/kubernetes/KubernetesController.java | 73 ++
.../scheduler/kubernetes/KubernetesLauncher.java | 56 ++
.../scheduler/kubernetes/KubernetesScheduler.java | 187 +++++
.../scheduler/kubernetes/KubernetesUtils.java | 71 ++
.../apache/heron/scheduler/kubernetes/Volumes.java | 109 +++
.../apache/heron/scheduler/local/LocalContext.java | 27 +
.../org/apache/heron/scheduler/local/LocalKey.java | 65 ++
.../heron/scheduler/local/LocalLauncher.java | 157 ++++
.../heron/scheduler/local/LocalScheduler.java | 348 +++++++++
.../scheduler/marathon/MarathonConstants.java | 83 +++
.../heron/scheduler/marathon/MarathonContext.java | 41 ++
.../scheduler/marathon/MarathonController.java | 197 +++++
.../heron/scheduler/marathon/MarathonLauncher.java | 52 ++
.../scheduler/marathon/MarathonScheduler.java | 223 ++++++
.../apache/heron/scheduler/mesos/MesosContext.java | 55 ++
.../heron/scheduler/mesos/MesosLauncher.java | 146 ++++
.../heron/scheduler/mesos/MesosScheduler.java | 273 +++++++
.../scheduler/mesos/framework/BaseContainer.java | 98 +++
.../scheduler/mesos/framework/LaunchableTask.java | 224 ++++++
.../scheduler/mesos/framework/MesosFramework.java | 574 +++++++++++++++
.../scheduler/mesos/framework/TaskResources.java | 151 ++++
.../heron/scheduler/mesos/framework/TaskUtils.java | 57 ++
.../heron/scheduler/nomad/NomadConstants.java | 113 +++
.../apache/heron/scheduler/nomad/NomadContext.java | 93 +++
.../org/apache/heron/scheduler/nomad/NomadKey.java | 61 ++
.../heron/scheduler/nomad/NomadLauncher.java | 52 ++
.../heron/scheduler/nomad/NomadScheduler.java | 607 ++++++++++++++++
.../apache/heron/scheduler/slurm/SlurmContext.java | 39 +
.../heron/scheduler/slurm/SlurmController.java | 166 +++++
.../heron/scheduler/slurm/SlurmLauncher.java | 108 +++
.../heron/scheduler/slurm/SlurmScheduler.java | 146 ++++
.../heron/scheduler/utils/HttpJsonClient.java | 134 ++++
.../scheduler/yarn/HeronClientConfiguration.java | 29 +
.../scheduler/yarn/HeronConfigurationOptions.java | 64 ++
.../scheduler/yarn/HeronDriverConfiguration.java | 61 ++
.../heron/scheduler/yarn/HeronExecutorTask.java | 199 ++++++
.../heron/scheduler/yarn/HeronMasterDriver.java | 724 +++++++++++++++++++
.../scheduler/yarn/HeronMasterDriverProvider.java | 47 ++
.../heron/scheduler/yarn/HeronReefUtils.java | 41 ++
.../scheduler/yarn/HeronTaskConfiguration.java | 58 ++
.../scheduler/yarn/ReefClientSideHandlers.java | 94 +++
.../apache/heron/scheduler/yarn/YarnContext.java | 34 +
.../org/apache/heron/scheduler/yarn/YarnKey.java | 67 ++
.../apache/heron/scheduler/yarn/YarnLauncher.java | 192 +++++
.../apache/heron/scheduler/yarn/YarnScheduler.java | 125 ++++
heron/schedulers/tests/java/BUILD | 54 +-
.../scheduler/aurora/AuroraCLIControllerTest.java | 194 -----
.../heron/scheduler/aurora/AuroraContextTest.java | 43 --
.../heron/scheduler/aurora/AuroraLauncherTest.java | 73 --
.../scheduler/aurora/AuroraSchedulerTest.java | 360 ----------
.../kubernetes/KubernetesControllerTest.java | 86 ---
.../kubernetes/KubernetesLauncherTest.java | 76 --
.../kubernetes/KubernetesSchedulerTest.java | 238 -------
.../heron/scheduler/kubernetes/VolumesTests.java | 79 --
.../heron/scheduler/local/LocalLauncherTest.java | 86 ---
.../heron/scheduler/local/LocalSchedulerTest.java | 331 ---------
.../scheduler/marathon/MarathonControllerTest.java | 349 ---------
.../scheduler/marathon/MarathonLauncherTest.java | 76 --
.../scheduler/marathon/MarathonSchedulerTest.java | 163 -----
.../heron/scheduler/mesos/MesosLauncherTest.java | 97 ---
.../heron/scheduler/mesos/MesosSchedulerTest.java | 157 ----
.../mesos/framework/LaunchableTaskTest.java | 186 -----
.../mesos/framework/MesosFrameworkTest.java | 334 ---------
.../mesos/framework/TaskResourcesTest.java | 97 ---
.../scheduler/mesos/framework/TaskUtilsTest.java | 43 --
.../heron/scheduler/nomad/NomadSchedulerTest.java | 531 --------------
.../heron/scheduler/slurm/SlurmControllerTest.java | 97 ---
.../heron/scheduler/slurm/SlurmLauncherTest.java | 110 ---
.../heron/scheduler/slurm/SlurmSchedulerTest.java | 159 -----
.../scheduler/yarn/HeronExecutorTaskTest.java | 165 -----
.../scheduler/yarn/HeronMasterDriverTest.java | 491 -------------
.../heron/scheduler/yarn/YarnLauncherTest.java | 134 ----
.../heron/scheduler/yarn/YarnSchedulerTest.java | 52 --
.../scheduler/aurora/AuroraCLIControllerTest.java | 194 +++++
.../heron/scheduler/aurora/AuroraContextTest.java | 43 ++
.../heron/scheduler/aurora/AuroraLauncherTest.java | 73 ++
.../scheduler/aurora/AuroraSchedulerTest.java | 360 ++++++++++
.../kubernetes/KubernetesControllerTest.java | 86 +++
.../kubernetes/KubernetesLauncherTest.java | 76 ++
.../kubernetes/KubernetesSchedulerTest.java | 238 +++++++
.../heron/scheduler/kubernetes/VolumesTests.java | 79 ++
.../heron/scheduler/local/LocalLauncherTest.java | 86 +++
.../heron/scheduler/local/LocalSchedulerTest.java | 331 +++++++++
.../scheduler/marathon/MarathonControllerTest.java | 349 +++++++++
.../scheduler/marathon/MarathonLauncherTest.java | 76 ++
.../scheduler/marathon/MarathonSchedulerTest.java | 163 +++++
.../heron/scheduler/mesos/MesosLauncherTest.java | 97 +++
.../heron/scheduler/mesos/MesosSchedulerTest.java | 157 ++++
.../mesos/framework/LaunchableTaskTest.java | 186 +++++
.../mesos/framework/MesosFrameworkTest.java | 334 +++++++++
.../mesos/framework/TaskResourcesTest.java | 98 +++
.../scheduler/mesos/framework/TaskUtilsTest.java | 43 ++
.../heron/scheduler/nomad/NomadSchedulerTest.java | 531 ++++++++++++++
.../heron/scheduler/slurm/SlurmControllerTest.java | 97 +++
.../heron/scheduler/slurm/SlurmLauncherTest.java | 110 +++
.../heron/scheduler/slurm/SlurmSchedulerTest.java | 159 +++++
.../scheduler/yarn/HeronExecutorTaskTest.java | 165 +++++
.../scheduler/yarn/HeronMasterDriverTest.java | 491 +++++++++++++
.../heron/scheduler/yarn/YarnLauncherTest.java | 134 ++++
.../heron/scheduler/yarn/YarnSchedulerTest.java | 52 ++
.../com/twitter/heron/simulator/Simulator.java | 263 -------
.../simulator/executors/InstanceExecutor.java | 210 ------
.../heron/simulator/executors/MetricsExecutor.java | 135 ----
.../heron/simulator/executors/StreamExecutor.java | 343 ---------
.../heron/simulator/grouping/AllGrouping.java | 31 -
.../heron/simulator/grouping/CustomGrouping.java | 33 -
.../heron/simulator/grouping/FieldsGrouping.java | 71 --
.../twitter/heron/simulator/grouping/Grouping.java | 62 --
.../heron/simulator/grouping/LowestGrouping.java | 39 -
.../heron/simulator/grouping/ShuffleGrouping.java | 53 --
.../heron/simulator/instance/BoltInstance.java | 126 ----
.../heron/simulator/instance/RootTupleInfo.java | 55 --
.../heron/simulator/instance/SpoutInstance.java | 98 ---
.../twitter/heron/simulator/utils/RotatingMap.java | 83 ---
.../heron/simulator/utils/TopologyManager.java | 256 -------
.../twitter/heron/simulator/utils/TupleCache.java | 191 -----
.../twitter/heron/simulator/utils/XORManager.java | 103 ---
.../java/org/apache/heron/simulator/Simulator.java | 263 +++++++
.../simulator/executors/InstanceExecutor.java | 210 ++++++
.../heron/simulator/executors/MetricsExecutor.java | 135 ++++
.../heron/simulator/executors/StreamExecutor.java | 343 +++++++++
.../heron/simulator/grouping/AllGrouping.java | 31 +
.../heron/simulator/grouping/CustomGrouping.java | 33 +
.../heron/simulator/grouping/FieldsGrouping.java | 71 ++
.../apache/heron/simulator/grouping/Grouping.java | 62 ++
.../heron/simulator/grouping/LowestGrouping.java | 39 +
.../heron/simulator/grouping/ShuffleGrouping.java | 53 ++
.../heron/simulator/instance/BoltInstance.java | 126 ++++
.../apache}/heron/simulator/instance/README | 0
.../heron/simulator/instance/RootTupleInfo.java | 55 ++
.../heron/simulator/instance/SpoutInstance.java | 98 +++
.../apache/heron/simulator/utils/RotatingMap.java | 83 +++
.../heron/simulator/utils/TopologyManager.java | 256 +++++++
.../apache/heron/simulator/utils/TupleCache.java | 191 +++++
.../apache/heron/simulator/utils/XORManager.java | 103 +++
heron/simulator/tests/java/BUILD | 22 +-
.../com/twitter/heron/simulator/SimulatorTest.java | 77 --
.../simulator/executors/InstanceExecutorTest.java | 128 ----
.../heron/simulator/grouping/AllGroupingTest.java | 62 --
.../simulator/grouping/CustomGroupingTest.java | 57 --
.../simulator/grouping/FieldsGroupingTest.java | 210 ------
.../simulator/grouping/LowestGroupingTest.java | 56 --
.../simulator/grouping/ShuffleGroupingTest.java | 105 ---
.../heron/simulator/utils/RotatingMapTest.java | 175 -----
.../heron/simulator/utils/TopologyManagerTest.java | 232 ------
.../heron/simulator/utils/TupleCacheTest.java | 193 -----
.../heron/simulator/utils/XORManagerTest.java | 175 -----
.../org/apache/heron/simulator/SimulatorTest.java | 77 ++
.../simulator/executors/InstanceExecutorTest.java | 127 ++++
.../heron/simulator/grouping/AllGroupingTest.java | 62 ++
.../simulator/grouping/CustomGroupingTest.java | 57 ++
.../simulator/grouping/FieldsGroupingTest.java | 210 ++++++
.../simulator/grouping/LowestGroupingTest.java | 56 ++
.../simulator/grouping/ShuffleGroupingTest.java | 105 +++
.../heron/simulator/utils/RotatingMapTest.java | 175 +++++
.../heron/simulator/utils/TopologyManagerTest.java | 232 ++++++
.../heron/simulator/utils/TupleCacheTest.java | 193 +++++
.../heron/simulator/utils/XORManagerTest.java | 175 +++++
heron/spi/src/java/BUILD | 2 +-
.../java/com/twitter/heron/spi/common/Config.java | 360 ----------
.../com/twitter/heron/spi/common/ConfigLoader.java | 95 ---
.../java/com/twitter/heron/spi/common/Context.java | 351 ---------
.../src/java/com/twitter/heron/spi/common/Key.java | 262 -------
.../com/twitter/heron/spi/common/TokenSub.java | 153 ----
.../spi/metricsmgr/metrics/ExceptionInfo.java | 87 ---
.../spi/metricsmgr/metrics/MetricsFilter.java | 79 --
.../heron/spi/metricsmgr/metrics/MetricsInfo.java | 52 --
.../spi/metricsmgr/metrics/MetricsRecord.java | 135 ----
.../heron/spi/metricsmgr/sink/IMetricsSink.java | 58 --
.../heron/spi/metricsmgr/sink/SinkContext.java | 39 -
.../com/twitter/heron/spi/packing/IPacking.java | 56 --
.../com/twitter/heron/spi/packing/IRepacking.java | 57 --
.../com/twitter/heron/spi/packing/InstanceId.java | 72 --
.../heron/spi/packing/PackingException.java | 29 -
.../com/twitter/heron/spi/packing/PackingPlan.java | 322 ---------
.../spi/packing/PackingPlanProtoDeserializer.java | 67 --
.../spi/packing/PackingPlanProtoSerializer.java | 64 --
.../com/twitter/heron/spi/packing/Resource.java | 114 ---
.../com/twitter/heron/spi/scheduler/ILauncher.java | 55 --
.../com/twitter/heron/spi/scheduler/IScalable.java | 43 --
.../twitter/heron/spi/scheduler/IScheduler.java | 101 ---
.../heron/spi/scheduler/LauncherException.java | 30 -
.../heron/spi/scheduler/SchedulerException.java | 30 -
.../heron/spi/statefulstorage/Checkpoint.java | 65 --
.../spi/statefulstorage/IStatefulStorage.java | 52 --
.../statefulstorage/StatefulStorageException.java | 30 -
.../twitter/heron/spi/statemgr/IStateManager.java | 303 --------
.../java/com/twitter/heron/spi/statemgr/Lock.java | 33 -
.../spi/statemgr/SchedulerStateManagerAdaptor.java | 300 --------
.../twitter/heron/spi/statemgr/WatchCallback.java | 39 -
.../com/twitter/heron/spi/uploader/IUploader.java | 65 --
.../heron/spi/uploader/UploaderException.java | 29 -
.../com/twitter/heron/spi/utils/NetworkUtils.java | 533 --------------
.../twitter/heron/spi/utils/PackingTestUtils.java | 119 ----
.../twitter/heron/spi/utils/ReflectionUtils.java | 36 -
.../com/twitter/heron/spi/utils/ShellUtils.java | 332 ---------
.../twitter/heron/spi/utils/TMasterException.java | 31 -
.../com/twitter/heron/spi/utils/TMasterUtils.java | 197 -----
.../com/twitter/heron/spi/utils/UploaderUtils.java | 83 ---
.../java/org/apache/heron/spi/common/Config.java | 360 ++++++++++
.../org/apache/heron/spi/common/ConfigLoader.java | 95 +++
.../java/org/apache/heron/spi/common/Context.java | 351 +++++++++
.../src/java/org/apache/heron/spi/common/Key.java | 262 +++++++
.../java/org/apache/heron/spi/common/TokenSub.java | 153 ++++
.../spi/metricsmgr/metrics/ExceptionInfo.java | 87 +++
.../spi/metricsmgr/metrics/MetricsFilter.java | 79 ++
.../heron/spi/metricsmgr/metrics/MetricsInfo.java | 52 ++
.../spi/metricsmgr/metrics/MetricsRecord.java | 135 ++++
.../heron/spi/metricsmgr/sink/IMetricsSink.java | 58 ++
.../heron/spi/metricsmgr/sink/SinkContext.java | 39 +
.../org/apache/heron/spi/packing/IPacking.java | 56 ++
.../org/apache/heron/spi/packing/IRepacking.java | 57 ++
.../org/apache/heron/spi/packing/InstanceId.java | 72 ++
.../apache/heron/spi/packing/PackingException.java | 29 +
.../org/apache/heron/spi/packing/PackingPlan.java | 322 +++++++++
.../spi/packing/PackingPlanProtoDeserializer.java | 67 ++
.../spi/packing/PackingPlanProtoSerializer.java | 64 ++
.../org/apache/heron/spi/packing/Resource.java | 114 +++
.../org/apache/heron/spi/scheduler/ILauncher.java | 55 ++
.../org/apache/heron/spi/scheduler/IScalable.java | 43 ++
.../org/apache/heron/spi/scheduler/IScheduler.java | 101 +++
.../heron/spi/scheduler/LauncherException.java | 30 +
.../heron/spi/scheduler/SchedulerException.java | 30 +
.../heron/spi/statefulstorage/Checkpoint.java | 65 ++
.../spi/statefulstorage/IStatefulStorage.java | 52 ++
.../statefulstorage/StatefulStorageException.java | 30 +
.../apache/heron/spi/statemgr/IStateManager.java | 303 ++++++++
.../java/org/apache/heron/spi/statemgr/Lock.java | 33 +
.../spi/statemgr/SchedulerStateManagerAdaptor.java | 300 ++++++++
.../apache/heron/spi/statemgr/WatchCallback.java | 39 +
.../org/apache/heron/spi/uploader/IUploader.java | 65 ++
.../heron/spi/uploader/UploaderException.java | 29 +
.../org/apache/heron/spi/utils/NetworkUtils.java | 533 ++++++++++++++
.../apache/heron/spi/utils/PackingTestUtils.java | 119 ++++
.../apache/heron/spi/utils/ReflectionUtils.java | 36 +
.../org/apache/heron/spi/utils/ShellUtils.java | 332 +++++++++
.../apache/heron/spi/utils/TMasterException.java | 31 +
.../org/apache/heron/spi/utils/TMasterUtils.java | 197 +++++
.../org/apache/heron/spi/utils/UploaderUtils.java | 83 +++
heron/spi/tests/java/BUILD | 22 +-
.../twitter/heron/spi/common/ConfigLoaderTest.java | 197 -----
.../com/twitter/heron/spi/common/ConfigTest.java | 125 ----
.../com/twitter/heron/spi/common/ContextTest.java | 64 --
.../com/twitter/heron/spi/common/KeysTest.java | 169 -----
.../com/twitter/heron/spi/common/TokenSubTest.java | 88 ---
.../heron/spi/common/testdata/local/cluster.yaml | 11 -
.../heron/spi/common/testdata/local/healthmgr.yaml | 19 -
.../heron/spi/common/testdata/local/packing.yaml | 2 -
.../heron/spi/common/testdata/local/scheduler.yaml | 5 -
.../heron/spi/common/testdata/local/stateful.yaml | 7 -
.../heron/spi/common/testdata/local/statemgr.yaml | 6 -
.../heron/spi/common/testdata/local/uploader.yaml | 6 -
.../spi/metricsmgr/metrics/ExceptionInfoTest.java | 102 ---
.../spi/metricsmgr/metrics/MetricsInfoTest.java | 64 --
.../spi/metricsmgr/metrics/MetricsRecordTest.java | 107 ---
.../twitter/heron/spi/packing/PackingPlanTest.java | 155 ----
.../twitter/heron/spi/packing/ResourceTest.java | 64 --
.../twitter/heron/spi/utils/NetworkUtilsTest.java | 293 --------
.../twitter/heron/spi/utils/ShellUtilsTest.java | 124 ----
.../twitter/heron/spi/utils/UploaderUtilsTest.java | 103 ---
.../apache/heron/spi/common/ConfigLoaderTest.java | 197 +++++
.../org/apache/heron/spi/common/ConfigTest.java | 125 ++++
.../org/apache/heron/spi/common/ContextTest.java | 64 ++
.../java/org/apache/heron/spi/common/KeysTest.java | 169 +++++
.../org/apache/heron/spi/common/TokenSubTest.java | 88 +++
.../heron/spi/common/testdata/local/cluster.yaml | 11 +
.../heron/spi/common/testdata/local/healthmgr.yaml | 19 +
.../heron/spi/common/testdata/local/packing.yaml | 2 +
.../heron/spi/common/testdata/local/scheduler.yaml | 5 +
.../heron/spi/common/testdata/local/stateful.yaml | 7 +
.../heron/spi/common/testdata/local/statemgr.yaml | 6 +
.../heron/spi/common/testdata/local/uploader.yaml | 6 +
.../spi/metricsmgr/metrics/ExceptionInfoTest.java | 102 +++
.../spi/metricsmgr/metrics/MetricsInfoTest.java | 64 ++
.../spi/metricsmgr/metrics/MetricsRecordTest.java | 107 +++
.../apache/heron/spi/packing/PackingPlanTest.java | 155 ++++
.../org/apache/heron/spi/packing/ResourceTest.java | 64 ++
.../apache/heron/spi/utils/NetworkUtilsTest.java | 293 ++++++++
.../org/apache/heron/spi/utils/ShellUtilsTest.java | 124 ++++
.../apache/heron/spi/utils/UploaderUtilsTest.java | 103 +++
.../heron/statefulstorage/dlog/DlogStorage.java | 242 -------
.../heron/statefulstorage/hdfs/HDFSStorage.java | 190 -----
.../localfs/LocalFileSystemStorage.java | 142 ----
.../heron/statefulstorage/dlog/DlogStorage.java | 241 +++++++
.../heron/statefulstorage/hdfs/HDFSStorage.java | 189 +++++
.../localfs/LocalFileSystemStorage.java | 142 ++++
heron/statefulstorages/tests/java/BUILD | 4 +-
.../StatefulStorageTestContext.java | 58 --
.../statefulstorage/dlog/DlogStorageTest.java | 263 -------
.../statefulstorage/hdfs/HDFSStorageTest.java | 152 ----
.../localfs/LocalFileSystemStorageTest.java | 114 ---
.../StatefulStorageTestContext.java | 58 ++
.../statefulstorage/dlog/DlogStorageTest.java | 263 +++++++
.../statefulstorage/hdfs/HDFSStorageTest.java | 152 ++++
.../localfs/LocalFileSystemStorageTest.java | 114 +++
heron/statemgrs/src/java/BUILD | 4 +-
.../heron/statemgr/FileSystemStateManager.java | 337 ---------
.../twitter/heron/statemgr/NullStateManager.java | 220 ------
.../statemgr/localfs/LocalFileSystemContext.java | 32 -
.../heron/statemgr/localfs/LocalFileSystemKey.java | 32 -
.../localfs/LocalFileSystemStateManager.java | 252 -------
.../heron/statemgr/zookeeper/ZkContext.java | 52 --
.../twitter/heron/statemgr/zookeeper/ZkUtils.java | 84 ---
.../statemgr/zookeeper/ZkWatcherCallback.java | 57 --
.../zookeeper/curator/CuratorStateManager.java | 445 ------------
.../heron/statemgr/FileSystemStateManager.java | 337 +++++++++
.../apache/heron/statemgr/NullStateManager.java | 220 ++++++
.../statemgr/localfs/LocalFileSystemContext.java | 32 +
.../heron/statemgr/localfs/LocalFileSystemKey.java | 32 +
.../localfs/LocalFileSystemStateManager.java | 252 +++++++
.../apache/heron/statemgr/zookeeper/ZkContext.java | 52 ++
.../apache/heron/statemgr/zookeeper/ZkUtils.java | 84 +++
.../statemgr/zookeeper/ZkWatcherCallback.java | 56 ++
.../zookeeper/curator/CuratorStateManager.java | 444 ++++++++++++
heron/statemgrs/src/python/configloader.py | 4 +-
.../localfs/LocalFileSystemStateManagerTest.java | 264 -------
.../heron/statemgr/zookeeper/ZkUtilsTest.java | 109 ---
.../zookeeper/curator/CuratorStateManagerTest.java | 328 ---------
.../localfs/LocalFileSystemStateManagerTest.java | 264 +++++++
.../heron/statemgr/zookeeper/ZkUtilsTest.java | 108 +++
.../zookeeper/curator/CuratorStateManagerTest.java | 328 +++++++++
heron/tools/apiserver/src/java/BUILD | 2 +-
.../com/twitter/heron/apiserver/Constants.java | 39 -
.../com/twitter/heron/apiserver/Resources.java | 46 --
.../java/com/twitter/heron/apiserver/Runtime.java | 345 ---------
.../twitter/heron/apiserver/actions/Action.java | 18 -
.../heron/apiserver/actions/ActionFactory.java | 24 -
.../heron/apiserver/actions/ActionFactoryImpl.java | 40 --
.../heron/apiserver/actions/ActionType.java | 30 -
.../com/twitter/heron/apiserver/actions/Keys.java | 27 -
.../apiserver/actions/SubmitTopologyAction.java | 35 -
.../apiserver/actions/TopologyRuntimeAction.java | 35 -
.../apiserver/resources/ConfigurationResource.java | 57 --
.../heron/apiserver/resources/FileResource.java | 173 -----
.../twitter/heron/apiserver/resources/Forms.java | 58 --
.../heron/apiserver/resources/HeronResource.java | 99 ---
.../resources/NotFoundExceptionHandler.java | 51 --
.../apiserver/resources/TopologyResource.java | 573 ---------------
.../twitter/heron/apiserver/utils/ConfigUtils.java | 169 -----
.../twitter/heron/apiserver/utils/FileHelper.java | 160 -----
.../com/twitter/heron/apiserver/utils/Logging.java | 51 --
.../com/twitter/heron/apiserver/utils/Utils.java | 52 --
.../java/org/apache/heron/apiserver/Constants.java | 39 +
.../java/org/apache/heron/apiserver/Resources.java | 46 ++
.../java/org/apache/heron/apiserver/Runtime.java | 345 +++++++++
.../org/apache/heron/apiserver/actions/Action.java | 18 +
.../heron/apiserver/actions/ActionFactory.java | 24 +
.../heron/apiserver/actions/ActionFactoryImpl.java | 40 ++
.../apache/heron/apiserver/actions/ActionType.java | 30 +
.../org/apache/heron/apiserver/actions/Keys.java | 27 +
.../apiserver/actions/SubmitTopologyAction.java | 35 +
.../apiserver/actions/TopologyRuntimeAction.java | 35 +
.../apiserver/resources/ConfigurationResource.java | 57 ++
.../heron/apiserver/resources/FileResource.java | 173 +++++
.../apache/heron/apiserver/resources/Forms.java | 58 ++
.../heron/apiserver/resources/HeronResource.java | 99 +++
.../resources/NotFoundExceptionHandler.java | 51 ++
.../apiserver/resources/TopologyResource.java | 573 +++++++++++++++
.../apache/heron/apiserver/utils/ConfigUtils.java | 169 +++++
.../apache/heron/apiserver/utils/FileHelper.java | 160 +++++
.../org/apache/heron/apiserver/utils/Logging.java | 51 ++
.../org/apache/heron/apiserver/utils/Utils.java | 52 ++
heron/tools/apiserver/tests/java/BUILD | 4 +-
.../apiserver/resources/TopologyResourceTests.java | 221 ------
.../heron/apiserver/utils/ConfigUtilsTests.java | 187 -----
.../apiserver/resources/TopologyResourceTests.java | 220 ++++++
.../heron/apiserver/utils/ConfigUtilsTests.java | 186 +++++
heron/tools/cli/src/python/cli_helper.py | 2 +-
heron/tools/cli/src/python/result.py | 2 +-
heron/tools/cli/src/python/submit.py | 2 +-
.../cli/tests/python/client_command_unittest.py | 6 +-
heron/tools/tracker/src/python/main.py | 4 +-
.../com/twitter/heron/uploader/NullUploader.java | 43 --
.../com/twitter/heron/uploader/dlog/Copier.java | 23 -
.../com/twitter/heron/uploader/dlog/DLContext.java | 37 -
.../com/twitter/heron/uploader/dlog/DLCopier.java | 36 -
.../twitter/heron/uploader/dlog/DLUploader.java | 213 ------
.../com/twitter/heron/uploader/gcs/GcsContext.java | 31 -
.../twitter/heron/uploader/gcs/GcsController.java | 75 --
.../twitter/heron/uploader/gcs/GcsUploader.java | 222 ------
.../twitter/heron/uploader/hdfs/HdfsContext.java | 35 -
.../heron/uploader/hdfs/HdfsController.java | 48 --
.../twitter/heron/uploader/hdfs/HdfsUploader.java | 115 ---
.../twitter/heron/uploader/http/HttpUploader.java | 118 ---
.../heron/uploader/http/HttpUploaderContext.java | 26 -
.../uploader/localfs/LocalFileSystemContext.java | 27 -
.../heron/uploader/localfs/LocalFileSystemKey.java | 44 --
.../uploader/localfs/LocalFileSystemUploader.java | 158 ----
.../com/twitter/heron/uploader/s3/S3Context.java | 67 --
.../com/twitter/heron/uploader/s3/S3Uploader.java | 247 -------
.../java/com/twitter/heron/uploader/s3/sample.yaml | 32 -
.../com/twitter/heron/uploader/scp/ScpContext.java | 50 --
.../twitter/heron/uploader/scp/ScpController.java | 59 --
.../twitter/heron/uploader/scp/ScpUploader.java | 149 ----
.../com/twitter/heron/uploader/scp/sample.yaml | 18 -
.../org/apache/heron/uploader/NullUploader.java | 43 ++
.../org/apache/heron/uploader/dlog/Copier.java | 23 +
.../org/apache/heron/uploader/dlog/DLContext.java | 37 +
.../org/apache/heron/uploader/dlog/DLCopier.java | 36 +
.../org/apache/heron/uploader/dlog/DLUploader.java | 212 ++++++
.../org/apache/heron/uploader/gcs/GcsContext.java | 31 +
.../apache/heron/uploader/gcs/GcsController.java | 75 ++
.../org/apache/heron/uploader/gcs/GcsUploader.java | 222 ++++++
.../apache/heron/uploader/hdfs/HdfsContext.java | 35 +
.../apache/heron/uploader/hdfs/HdfsController.java | 48 ++
.../apache/heron/uploader/hdfs/HdfsUploader.java | 115 +++
.../apache}/heron/uploader/hdfs/sample.yaml | 0
.../apache/heron/uploader/http/HttpUploader.java | 117 +++
.../heron/uploader/http/HttpUploaderContext.java | 26 +
.../uploader/localfs/LocalFileSystemContext.java | 27 +
.../heron/uploader/localfs/LocalFileSystemKey.java | 44 ++
.../uploader/localfs/LocalFileSystemUploader.java | 158 ++++
.../org/apache/heron/uploader/s3/S3Context.java | 67 ++
.../org/apache/heron/uploader/s3/S3Uploader.java | 244 +++++++
.../java/org/apache/heron/uploader/s3/sample.yaml | 32 +
.../org/apache/heron/uploader/scp/ScpContext.java | 50 ++
.../apache/heron/uploader/scp/ScpController.java | 59 ++
.../org/apache/heron/uploader/scp/ScpUploader.java | 149 ++++
.../java/org/apache/heron/uploader/scp/sample.yaml | 18 +
heron/uploaders/tests/java/BUILD | 6 +-
.../heron/uploader/dlog/DlogUploaderTest.java | 192 -----
.../heron/uploader/gcs/GcsUploaderTests.java | 133 ----
.../heron/uploader/hdfs/HdfsUploaderTest.java | 95 ---
.../heron/uploader/http/HttpUploaderTest.java | 234 ------
.../localfs/LocalFileSystemConfigTest.java | 127 ----
.../localfs/LocalFileSystemConstantsTest.java | 23 -
.../localfs/LocalFileSystemContextTest.java | 62 --
.../localfs/LocalFileSystemUploaderTest.java | 207 ------
.../twitter/heron/uploader/s3/S3UploaderTest.java | 198 -----
.../heron/uploader/scp/ScpUploaderTest.java | 150 ----
.../heron/uploader/dlog/DlogUploaderTest.java | 192 +++++
.../heron/uploader/gcs/GcsUploaderTests.java | 133 ++++
.../heron/uploader/hdfs/HdfsUploaderTest.java | 95 +++
.../heron/uploader/http/HttpUploaderTest.java | 234 ++++++
.../localfs/LocalFileSystemConfigTest.java | 127 ++++
.../localfs/LocalFileSystemConstantsTest.java | 23 +
.../localfs/LocalFileSystemContextTest.java | 62 ++
.../localfs/LocalFileSystemUploaderTest.java | 207 ++++++
.../uploader/localfs/testdata/some-topology.tar | 0
.../apache/heron/uploader/s3/S3UploaderTest.java | 198 +++++
.../apache/heron/uploader/scp/ScpUploaderTest.java | 150 ++++
integration_test/src/java/BUILD | 12 +-
.../common/AbstractTestTopology.java | 138 ----
.../heron/integration_test/common/BasicConfig.java | 38 -
.../heron/integration_test/common/HdfsHelper.java | 46 --
.../common/bolt/CountAggregatorBolt.java | 55 --
.../common/bolt/DoubleTuplesBolt.java | 45 --
.../integration_test/common/bolt/IdentityBolt.java | 50 --
.../common/bolt/IncrementBolt.java | 57 --
.../common/bolt/JSONTweetFilterBolt.java | 100 ---
.../common/bolt/LocalWriteBolt.java | 97 ---
.../common/bolt/MapAggregatorBolt.java | 62 --
.../common/bolt/PartialUniquerBolt.java | 66 --
.../common/bolt/TweetPropertyBolt.java | 93 ---
.../common/bolt/WordCountBolt.java | 68 --
.../integration_test/common/spout/ABSpout.java | 67 --
.../common/spout/HdfsStringSpout.java | 130 ----
.../common/spout/LocalFileSpout.java | 129 ----
.../common/spout/PausedLocalFileSpout.java | 141 ----
.../integration_test/core/AggregatorBolt.java | 97 ---
.../heron/integration_test/core/BaseBatchBolt.java | 21 -
.../heron/integration_test/core/Condition.java | 23 -
.../heron/integration_test/core/Constants.java | 27 -
.../core/EmitUntilConditionTestSpout.java | 166 -----
.../integration_test/core/HttpGetCondition.java | 63 --
.../heron/integration_test/core/HttpUtils.java | 45 --
.../heron/integration_test/core/IBatchBolt.java | 26 -
.../heron/integration_test/core/ITerminalBolt.java | 25 -
.../integration_test/core/IntegrationTestBolt.java | 186 -----
.../core/IntegrationTestSpout.java | 248 -------
.../integration_test/core/LocalAggregatorBolt.java | 111 ---
.../integration_test/core/MultiPhaseTestSpout.java | 59 --
.../core/StatefulIntegrationTestBolt.java | 42 --
.../core/StatefulIntegrationTestSpout.java | 42 --
.../integration_test/core/TestTopologyBuilder.java | 279 --------
.../integration_test/core/TestTopologyContext.java | 178 -----
.../topology/all_grouping/AllGrouping.java | 45 --
.../BasicTopologyOneTask.java | 45 --
.../BoltDoubleEmitTuples.java | 45 --
.../topology/fields_grouping/FieldsGrouping.java | 48 --
.../topology/global_grouping/GlobalGrouping.java | 44 --
.../MultiSpoutsMultiTasks.java | 47 --
.../topology/non_grouping/NonGrouping.java | 45 --
.../one_bolt_multi_tasks/OneBoltMultiTasks.java | 46 --
.../OneSpoutBoltMultiTasks.java | 45 --
.../one_spout_multi_tasks/OneSpoutMultiTasks.java | 45 --
.../one_spout_two_bolts/OneSpoutTwoBolts.java | 47 --
.../topology/serialization/CustomCheckBolt.java | 51 --
.../topology/serialization/CustomObject.java | 68 --
.../topology/serialization/CustomSpout.java | 57 --
.../serialization/SerializationTopology.java | 59 --
.../topology/shuffle_grouping/ShuffleGrouping.java | 45 --
.../topology/windowing/WindowTestBase.java | 260 -------
.../windowing/count/SlidingCountWindowTest1.java | 34 -
.../windowing/count/SlidingCountWindowTest2.java | 34 -
.../windowing/count/SlidingCountWindowTest3.java | 34 -
.../windowing/count/TumblingCountWindowTest1.java | 33 -
.../windowing/count/TumblingCountWindowTest2.java | 33 -
.../windowing/count/TumblingCountWindowTest3.java | 33 -
.../windowing/stateful/StatefulWindowingTest.java | 211 ------
.../windowing/time/SlidingTimeWindowTest1.java | 32 -
.../SlidingWatermarkEventTimeWindowTest1.java | 36 -
.../local_readwrite/LocalReadWriteTopology.java | 58 --
.../common/AbstractTestTopology.java | 137 ++++
.../heron/integration_test/common/BasicConfig.java | 38 +
.../heron/integration_test/common/HdfsHelper.java | 46 ++
.../common/bolt/CountAggregatorBolt.java | 55 ++
.../common/bolt/DoubleTuplesBolt.java | 45 ++
.../integration_test/common/bolt/IdentityBolt.java | 50 ++
.../common/bolt/IncrementBolt.java | 57 ++
.../common/bolt/JSONTweetFilterBolt.java | 100 +++
.../common/bolt/LocalWriteBolt.java | 97 +++
.../common/bolt/MapAggregatorBolt.java | 62 ++
.../common/bolt/PartialUniquerBolt.java | 66 ++
.../common/bolt/TweetPropertyBolt.java | 93 +++
.../common/bolt/WordCountBolt.java | 68 ++
.../integration_test/common/spout/ABSpout.java | 67 ++
.../common/spout/HdfsStringSpout.java | 130 ++++
.../common/spout/LocalFileSpout.java | 129 ++++
.../common/spout/PausedLocalFileSpout.java | 141 ++++
.../integration_test/core/AggregatorBolt.java | 97 +++
.../heron/integration_test/core/BaseBatchBolt.java | 21 +
.../heron/integration_test/core/Condition.java | 23 +
.../heron/integration_test/core/Constants.java | 27 +
.../core/EmitUntilConditionTestSpout.java | 166 +++++
.../integration_test/core/HttpGetCondition.java | 63 ++
.../heron/integration_test/core/HttpUtils.java | 45 ++
.../heron/integration_test/core/IBatchBolt.java | 26 +
.../heron/integration_test/core/ITerminalBolt.java | 25 +
.../integration_test/core/IntegrationTestBolt.java | 186 +++++
.../core/IntegrationTestSpout.java | 248 +++++++
.../integration_test/core/LocalAggregatorBolt.java | 111 +++
.../integration_test/core/MultiPhaseTestSpout.java | 59 ++
.../core/StatefulIntegrationTestBolt.java | 42 ++
.../core/StatefulIntegrationTestSpout.java | 42 ++
.../integration_test/core/TestTopologyBuilder.java | 279 ++++++++
.../integration_test/core/TestTopologyContext.java | 177 +++++
.../topology/all_grouping/AllGrouping.java | 45 ++
.../topology/all_grouping/AllGroupingResults.json | 0
.../BasicTopologyOneTask.java | 45 ++
.../BasicTopologyOneTaskResults.json | 0
.../BoltDoubleEmitTuples.java | 45 ++
.../BoltDoubleEmitTuplesResults.json | 0
.../topology/fields_grouping/FieldsGrouping.java | 48 ++
.../fields_grouping/FieldsGroupingResults.json | 0
.../topology/global_grouping/GlobalGrouping.java | 44 ++
.../global_grouping/GlobalGroupingResults.json | 0
.../MultiSpoutsMultiTasks.java | 47 ++
.../MultiSpoutsMultiTasksResults.json | 0
.../topology/non_grouping/NonGrouping.java | 45 ++
.../topology/non_grouping/NonGroupingResults.json | 0
.../one_bolt_multi_tasks/OneBoltMultiTasks.java | 46 ++
.../OneBoltMultiTasksResults.json | 0
.../OneSpoutBoltMultiTasks.java | 45 ++
.../OneSpoutBoltMultiTasksResults.json | 0
.../one_spout_multi_tasks/OneSpoutMultiTasks.java | 45 ++
.../OneSpoutMultiTasksResults.json | 0
.../one_spout_two_bolts/OneSpoutTwoBolts.java | 47 ++
.../OneSpoutTwoBoltsResults.json | 0
.../topology/serialization/CustomCheckBolt.java | 51 ++
.../topology/serialization/CustomObject.java | 68 ++
.../topology/serialization/CustomSpout.java | 57 ++
.../serialization/SerializationTopology.java | 59 ++
.../SerializationTopologyResults.json | 0
.../topology/shuffle_grouping/ShuffleGrouping.java | 45 ++
.../shuffle_grouping/ShuffleGroupingResults.json | 0
.../topology/windowing/WindowTestBase.java | 260 +++++++
.../windowing/count/SlidingCountWindowTest1.java | 34 +
.../count/SlidingCountWindowTest1Results.json | 0
.../windowing/count/SlidingCountWindowTest2.java | 34 +
.../count/SlidingCountWindowTest2Results.json | 0
.../windowing/count/SlidingCountWindowTest3.java | 34 +
.../count/SlidingCountWindowTest3Results.json | 0
.../windowing/count/TumblingCountWindowTest1.java | 33 +
.../count/TumblingCountWindowTest1Results.json | 0
.../windowing/count/TumblingCountWindowTest2.java | 33 +
.../count/TumblingCountWindowTest2Results.json | 0
.../windowing/count/TumblingCountWindowTest3.java | 33 +
.../count/TumblingCountWindowTest3Results.json | 0
.../windowing/stateful/StatefulWindowingTest.java | 211 ++++++
.../stateful/StatefulWindowingTestResults.json | 0
.../windowing/time/SlidingTimeWindowTest1.java | 32 +
.../time/SlidingTimeWindowTest1Results.json | 0
.../SlidingWatermarkEventTimeWindowTest1.java | 36 +
...lidingWatermarkEventTimeWindowTest1Results.json | 0
.../local_readwrite/LocalReadWriteTopology.java | 58 ++
.../python/local_test_runner/resources/test.conf | 2 +-
.../src/python/test_runner/resources/test.json | 17 +-
integration_test/src/scala/BUILD | 4 +-
.../common/ScalaIntegrationTestBase.scala | 32 -
.../ScalaStreamletWithFilterAndTransform.scala | 71 --
.../common/ScalaIntegrationTestBase.scala | 33 +
.../ScalaStreamletWithFilterAndTransform.scala | 74 ++
...calaStreamletWithFilterAndTransformResults.json | 0
release/maven/heron-no-kryo.template.pom | 2 +-
release/maven/heron-with-kryo.template.pom | 2 +-
release/release-process.md | 10 +-
scripts/packages/BUILD | 4 +-
scripts/packages/heronpy/__apiinit__.py.template | 2 +-
.../packages/heronpy/__streamletinit__.py.template | 2 +-
scripts/packages/heronpy/setup.py.template | 2 +-
scripts/resources/idea/codeStyleSettings.xml | 2 +-
scripts/run_integration_test.sh | 4 +-
scripts/travis/check.sh | 2 +-
.../storm/examples/SlidingWindowTopology.java | 2 +-
.../apache/storm/examples/TaskHookTopology.java | 16 +-
.../src/java/backtype/storm/LocalCluster.java | 2 +-
.../src/java/backtype/storm/StormSubmitter.java | 8 +-
.../backtype/storm/generated/StormTopology.java | 2 +-
.../grouping/CustomStreamGroupingDelegate.java | 4 +-
.../backtype/storm/hooks/ITaskHookDelegate.java | 20 +-
.../backtype/storm/hooks/info/BoltAckInfo.java | 2 +-
.../backtype/storm/hooks/info/BoltExecuteInfo.java | 2 +-
.../backtype/storm/hooks/info/BoltFailInfo.java | 2 +-
.../java/backtype/storm/hooks/info/EmitInfo.java | 2 +-
.../backtype/storm/hooks/info/SpoutAckInfo.java | 2 +-
.../backtype/storm/hooks/info/SpoutFailInfo.java | 2 +-
.../storm/metric/api/AssignableMetric.java | 4 +-
.../backtype/storm/metric/api/CountMetric.java | 4 +-
.../backtype/storm/metric/api/GlobalMetrics.java | 8 +-
.../backtype/storm/metric/api/MeanReducer.java | 2 +-
.../backtype/storm/metric/api/MetricDelegate.java | 2 +-
.../HeronPluggableSerializerDelegate.java | 2 +-
.../storm/spout/SpoutOutputCollectorImpl.java | 4 +-
.../backtype/storm/task/BoltTopologyContext.java | 2 +-
.../storm/task/GeneralTopologyContext.java | 4 +-
.../backtype/storm/task/OutputCollectorImpl.java | 16 +-
.../backtype/storm/task/SpoutTopologyContext.java | 2 +-
.../java/backtype/storm/task/TopologyContext.java | 14 +-
.../backtype/storm/task/WorkerTopologyContext.java | 4 +-
.../backtype/storm/topology/BasicBoltExecutor.java | 4 +-
.../backtype/storm/topology/BoltDeclarerImpl.java | 4 +-
.../backtype/storm/topology/IRichBoltDelegate.java | 14 +-
.../storm/topology/IRichSpoutDelegate.java | 12 +-
.../storm/topology/OutputFieldsGetter.java | 4 +-
.../backtype/storm/topology/SpoutDeclarerImpl.java | 4 +-
.../backtype/storm/topology/TopologyBuilder.java | 10 +-
.../src/java/backtype/storm/tuple/Fields.java | 10 +-
.../src/java/backtype/storm/tuple/TupleImpl.java | 6 +-
.../src/java/backtype/storm/utils/ConfigUtils.java | 32 +-
.../storm/utils/DefaultMaxSpoutPendingTuner.java | 4 +-
.../src/java/backtype/storm/utils/Utils.java | 18 +-
.../src/java/org/apache/storm/LocalCluster.java | 3 +-
.../src/java/org/apache/storm/StormSubmitter.java | 9 +-
.../src/java/org/apache/storm/generated/Bolt.java | 2 +-
.../java/org/apache/storm/generated/SpoutSpec.java | 2 +-
.../org/apache/storm/generated/StormTopology.java | 2 +-
.../grouping/CustomStreamGroupingDelegate.java | 4 +-
.../org/apache/storm/hooks/ITaskHookDelegate.java | 21 +-
.../org/apache/storm/hooks/info/BoltAckInfo.java | 2 +-
.../apache/storm/hooks/info/BoltExecuteInfo.java | 2 +-
.../org/apache/storm/hooks/info/BoltFailInfo.java | 2 +-
.../java/org/apache/storm/hooks/info/EmitInfo.java | 2 +-
.../org/apache/storm/hooks/info/SpoutAckInfo.java | 2 +-
.../org/apache/storm/hooks/info/SpoutFailInfo.java | 2 +-
.../apache/storm/metric/api/AssignableMetric.java | 4 +-
.../org/apache/storm/metric/api/CountMetric.java | 4 +-
.../org/apache/storm/metric/api/GlobalMetrics.java | 8 +-
.../org/apache/storm/metric/api/MeanReducer.java | 2 +-
.../apache/storm/metric/api/MetricDelegate.java | 2 +-
.../storm/metric/internal/CountStatAndMetric.java | 4 +-
.../metric/internal/LatencyStatAndMetric.java | 4 +-
.../HeronPluggableSerializerDelegate.java | 2 +-
.../storm/spout/SpoutOutputCollectorImpl.java | 4 +-
.../org/apache/storm/task/BoltTopologyContext.java | 2 +-
.../apache/storm/task/GeneralTopologyContext.java | 10 +-
.../org/apache/storm/task/OutputCollectorImpl.java | 16 +-
.../apache/storm/task/SpoutTopologyContext.java | 2 +-
.../org/apache/storm/task/TopologyContext.java | 14 +-
.../apache/storm/task/WorkerTopologyContext.java | 4 +-
.../apache/storm/topology/BasicBoltExecutor.java | 5 +-
.../apache/storm/topology/BoltDeclarerImpl.java | 4 +-
.../apache/storm/topology/IRichBoltDelegate.java | 15 +-
.../apache/storm/topology/IRichSpoutDelegate.java | 13 +-
.../storm/topology/IWindowedBoltDelegate.java | 16 +-
.../apache/storm/topology/OutputFieldsGetter.java | 4 +-
.../apache/storm/topology/SpoutDeclarerImpl.java | 4 +-
.../org/apache/storm/topology/TopologyBuilder.java | 13 +-
.../storm/topology/base/BaseWindowedBolt.java | 17 +-
.../src/java/org/apache/storm/tuple/Fields.java | 10 +-
.../src/java/org/apache/storm/tuple/TupleImpl.java | 6 +-
.../java/org/apache/storm/utils/ConfigUtils.java | 35 +-
.../storm/utils/DefaultMaxSpoutPendingTuner.java | 4 +-
.../src/java/org/apache/storm/utils/Utils.java | 18 +-
.../apache/storm/windowing/TupleWindowImpl.java | 8 +-
storm-compatibility/src/java/shade.conf | 6 +-
tools/cpp/BUILD | 4 +-
tools/java/BUILD | 8 +-
tools/java/src/com/twitter/bazel/checkstyle/BUILD | 44 --
.../twitter/bazel/checkstyle/CppCheckstyle.java | 143 ----
.../twitter/bazel/checkstyle/ExtraActionUtils.java | 46 --
.../twitter/bazel/checkstyle/JavaCheckstyle.java | 138 ----
.../twitter/bazel/checkstyle/PythonCheckstyle.java | 140 ----
.../bazel/checkstyle/apache_coding_style.xml | 342 ---------
.../bazel/checkstyle/heron_coding_style.xml | 341 ---------
tools/java/src/org/apache/bazel/checkstyle/BUILD | 44 ++
.../org/apache/bazel/checkstyle/CppCheckstyle.java | 143 ++++
.../apache/bazel/checkstyle/ExtraActionUtils.java | 46 ++
.../apache/bazel/checkstyle/JavaCheckstyle.java | 138 ++++
.../apache/bazel/checkstyle/PythonCheckstyle.java | 140 ++++
.../bazel/checkstyle/apache_coding_style.xml | 342 +++++++++
.../apache}/bazel/checkstyle/apache_header.txt | 0
.../apache/bazel/checkstyle/heron_coding_style.xml | 341 +++++++++
.../apache}/bazel/checkstyle/heron_header.txt | 0
.../apache}/bazel/checkstyle/suppressions.xml | 0
tools/python/BUILD | 4 +-
tools/rules/pex/pex_rules.bzl | 2 +-
website/README.md | 2 +-
website/config.yaml | 6 +-
website/content/docs/concepts/architecture.md | 8 +-
website/content/docs/concepts/streamlet-api.md | 22 +-
website/content/docs/contributors/codebase.md | 8 +-
website/content/docs/contributors/community.md | 4 +-
.../docs/contributors/custom-metrics-sink.md | 32 +-
.../content/docs/contributors/custom-scheduler.md | 12 +-
website/content/docs/contributors/roadmap.md | 2 +-
website/content/docs/contributors/support.md | 4 +-
website/content/docs/developers/compiling/linux.md | 4 +-
website/content/docs/developers/compiling/mac.md | 2 +-
website/content/docs/developers/data-model.md | 20 +-
website/content/docs/developers/java/bolts.md | 6 +-
website/content/docs/developers/java/eco-api.mmark | 36 +-
.../docs/developers/java/effectively-once.md | 48 +-
website/content/docs/developers/java/spouts.md | 8 +-
.../docs/developers/java/streamlet-api.mmark | 20 +-
website/content/docs/developers/java/topologies.md | 22 +-
.../content/docs/developers/packing/ffdpacking.md | 20 +-
website/content/docs/developers/python/bolts.md | 2 +-
website/content/docs/developers/python/spouts.md | 2 +-
website/content/docs/developers/serialization.md | 2 +-
website/content/docs/developers/simulator-mode.md | 2 +-
.../docs/getting-started-troubleshooting.md | 4 +-
website/content/docs/getting-started.md | 8 +-
website/content/docs/migrate-storm-to-heron.md | 6 +-
.../docs/operators/deployment/configuration.md | 8 +-
.../deployment/schedulers/aurora-local-setup.md | 10 +-
.../docs/operators/deployment/schedulers/aurora.md | 8 +-
.../docs/operators/deployment/schedulers/dcos.md | 12 +-
.../deployment/schedulers/kubernetes-helm.md | 8 +-
.../operators/deployment/schedulers/kubernetes.md | 32 +-
.../docs/operators/deployment/schedulers/local.md | 8 +-
.../deployment/schedulers/mesos-local-mac.md | 10 +-
.../docs/operators/deployment/schedulers/mesos.md | 4 +-
.../docs/operators/deployment/schedulers/nomad.md | 12 +-
.../docs/operators/deployment/schedulers/slurm.md | 12 +-
.../operators/deployment/schedulers/standalone.md | 4 +-
.../docs/operators/deployment/schedulers/yarn.md | 18 +-
.../operators/deployment/statemanagers/localfs.md | 4 +-
.../deployment/statemanagers/zookeeper.md | 4 +-
.../docs/operators/deployment/uploaders/hdfs.md | 4 +-
.../docs/operators/deployment/uploaders/http.md | 6 +-
.../docs/operators/deployment/uploaders/localfs.md | 4 +-
.../docs/operators/deployment/uploaders/s3.md | 4 +-
.../docs/operators/deployment/uploaders/scp.md | 4 +-
website/content/docs/operators/heron-cli.md | 2 +-
.../docs/operators/observability/graphite.md | 2 +-
.../docs/operators/observability/prometheus.md | 2 +-
.../content/docs/operators/observability/scribe.md | 2 +-
.../content/snippets/heron-on-kubernetes-config.md | 12 +-
website/data/configs/kubernetes.yaml | 12 +-
website/layouts/404.ace | 2 +-
website/scripts/javadocs.sh | 2 +-
2186 files changed, 117562 insertions(+), 117641 deletions(-)
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 1fcd797..75b7feb 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -1,6 +1,6 @@
## Heron Adopters
-Twitter isn't the only company using Heron. We're sure the following list isn't complete, so please [let us know](https://github.com/twitter/heron) if your company should be included, or if you'd like us to feature a link to a blog post or article about how you're using Heron. Or even better, add the links yourself (please use HTTPS URLs if possible) and [submit a pull request](https://github.com/twitter/heron)!
+Twitter isn't the only company using Heron. We're sure the following list isn't complete, so please [let us know](https://github.com/apache/incubator-heron) if your company should be included, or if you'd like us to feature a link to a blog post or article about how you're using Heron. Or even better, add the links yourself (please use HTTPS URLs if possible) and [submit a pull request](https://github.com/apache/incubator-heron)!
* [Twitter](https://twitter.com/)
* https://blog.twitter.com/2016/open-sourcing-twitter-heron
diff --git a/deploy/docker/README.md b/deploy/docker/README.md
index a261387..7c10373 100644
--- a/deploy/docker/README.md
+++ b/deploy/docker/README.md
@@ -8,7 +8,7 @@ It is recommended that docker gets 4 or more cores and 2 GB or more memory
### Download heron sandbox script
```shell
-$ curl -O https://raw.githubusercontent.com/twitter/heron/master/deploy/docker/sandbox.sh
+$ curl -O https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/docker/sandbox.sh
$ chmod +x sandbox.sh
```
@@ -33,17 +33,17 @@ http://localhost:8889
```shell
$ ./sandbox.sh shell
Starting heron sandbox shell
-root@16092325a696:/heron# heron submit sandbox /heron/examples/heron-api-examples.jar com.twitter.heron.examples.api.ExclamationTopology exclamation
+root@16092325a696:/heron# heron submit sandbox /heron/examples/heron-api-examples.jar org.apache.heron.examples.api.ExclamationTopology exclamation
[2018-02-01 20:24:20 +0000] [INFO]: Using cluster definition in /heron/heron-tools/conf/sandbox
[2018-02-01 20:24:20 +0000] [INFO]: Launching topology: 'exclamation'
[2018-02-01 20:24:21 +0000] [INFO]: Successfully launched topology 'exclamation'
root@16092325a696:/heron# heron deactivate sandbox exclamation
[2018-02-01 20:24:46 +0000] [INFO]: Using cluster definition in /heron/heron-tools/conf/sandbox
-[2018-02-01 20:24:47 +0000] [INFO] com.twitter.heron.spi.utils.TMasterUtils: Topology command DEACTIVATE completed successfully.
+[2018-02-01 20:24:47 +0000] [INFO] org.apache.heron.spi.utils.TMasterUtils: Topology command DEACTIVATE completed successfully.
[2018-02-01 20:24:47 +0000] [INFO]: Successfully deactivate topology: exclamation
root@16092325a696:/heron# heron activate sandbox exclamation
[2018-02-01 20:24:55 +0000] [INFO]: Using cluster definition in /heron/heron-tools/conf/sandbox
-[2018-02-01 20:24:56 +0000] [INFO] com.twitter.heron.spi.utils.TMasterUtils: Topology command ACTIVATE completed successfully.
+[2018-02-01 20:24:56 +0000] [INFO] org.apache.heron.spi.utils.TMasterUtils: Topology command ACTIVATE completed successfully.
[2018-02-01 20:24:56 +0000] [INFO]: Successfully activate topology: exclamation
root@16092325a696:/heron# heron kill sandbox exclamation
[2018-02-01 20:25:08 +0000] [INFO]: Using cluster definition in /heron/heron-tools/conf/sandbox
diff --git a/deploy/docker/sandbox.sh b/deploy/docker/sandbox.sh
index c3910f0..33aaf52 100755
--- a/deploy/docker/sandbox.sh
+++ b/deploy/docker/sandbox.sh
@@ -118,7 +118,7 @@ case $1 in
echo " "
echo " Then you can ${bold}submit${normal} a topology via the shell:"
- echo " heron submit sandbox /heron/examples/heron-api-examples.jar com.twitter.heron.examples.api.ExclamationTopology exclamation"
+ echo " heron submit sandbox /heron/examples/heron-api-examples.jar org.apache.heron.examples.api.ExclamationTopology exclamation"
echo " "
echo " You can ${bold}deactivate${normal} the topology via the shell as well:"
diff --git a/deploy/kubernetes/general/README.md b/deploy/kubernetes/general/README.md
index 2132ee5..f6c0969 100644
--- a/deploy/kubernetes/general/README.md
+++ b/deploy/kubernetes/general/README.md
@@ -3,7 +3,7 @@
### Requirements:
* Kubernetes cluster with 3 or more nodes
* [kubectl](https://kubernetes.io/docs/tasks/kubectl/install/)
-* [heron client](https://twitter.github.io/heron/docs/getting-started/)
+* [heron client](https://apache.github.io/incubator-heron/docs/getting-started/)
@@ -12,7 +12,7 @@
1. Start zookeeper:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/general/zookeeper.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/general/zookeeper.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
@@ -24,7 +24,7 @@ zk-0 1/1 Running 0 1m
2. Start bookkeeper:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/general/bookkeeper.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/general/bookkeeper.yaml
```
This deploys bookkeeper in a `DaemonSet` and requires the ability of exposing `hostPort` for pods communication.
@@ -32,17 +32,17 @@ In some environments like K8S on DC/OS, `hostPort` is not well supported. You ca
a `StatefulSet` with `Persistent Volumes` as below. Please see [Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) for more details.
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/general/bookkeeper.statefulset.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/general/bookkeeper.statefulset.yaml
```
3. Start heron tools:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/general/tools.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/general/tools.yaml
```
4. Start heron apiserver:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/general/apiserver.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/general/apiserver.yaml
```
### Deploy via heron apiserver
@@ -73,13 +73,13 @@ $ curl http://localhost:8001/api/v1/proxy/namespaces/default/services/heron-apis
```shell
$ heron config kubernetes \
set service_url http://localhost:8001/api/v1/proxy/namespaces/default/services/heron-apiserver:9000 \
-com.twitter.heron.examples.api.AckingTopology acking
+org.apache.heron.examples.api.AckingTopology acking
```
4. Submit an example topology:
```shell
$ heron submit kubernetes ~/.heron/examples/heron-api-examples.jar \
-com.twitter.heron.examples.api.AckingTopology acking
+org.apache.heron.examples.api.AckingTopology acking
```
5. View heron ui:
diff --git a/deploy/kubernetes/general/apiserver.yaml b/deploy/kubernetes/general/apiserver.yaml
index 083e3e2..31985a8 100644
--- a/deploy/kubernetes/general/apiserver.yaml
+++ b/deploy/kubernetes/general/apiserver.yaml
@@ -72,7 +72,7 @@ spec:
-D heron.statemgr.connection.string=zookeeper:2181
-D heron.kubernetes.scheduler.uri=http://localhost:8001
-D heron.executor.docker.image=heron/heron:latest
- -D heron.class.uploader=com.twitter.heron.uploader.dlog.DLUploader
+ -D heron.class.uploader=org.apache.heron.uploader.dlog.DLUploader
-D heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/distributedlog
- name: kubectl-proxy
image: heron/kubectl:latest
diff --git a/deploy/kubernetes/gke/gcs-apiserver.yaml b/deploy/kubernetes/gke/gcs-apiserver.yaml
index b552b14..a820f64 100644
--- a/deploy/kubernetes/gke/gcs-apiserver.yaml
+++ b/deploy/kubernetes/gke/gcs-apiserver.yaml
@@ -76,7 +76,7 @@ spec:
-D heron.statemgr.connection.string=zookeeper:2181
-D heron.kubernetes.scheduler.uri=http://localhost:8001
-D heron.executor.docker.image=heron/heron:latest
- -D heron.class.uploader=com.twitter.heron.uploader.gcs.GcsUploader
+ -D heron.class.uploader=org.apache.heron.uploader.gcs.GcsUploader
-D heron.uploader.gcs.bucket=$GCS_BUCKET
volumeMounts:
- name: google-cloud-key
diff --git a/deploy/kubernetes/helm/Chart.yaml.template b/deploy/kubernetes/helm/Chart.yaml.template
index 59e8000..7821c9c 100644
--- a/deploy/kubernetes/helm/Chart.yaml.template
+++ b/deploy/kubernetes/helm/Chart.yaml.template
@@ -3,10 +3,10 @@ description: Heron is a fast distributed streaming engine for processing large d
name: heron
version: VERSION
appVersion: VERSION
-icon: https://twitter.github.io/heron/img/HeronTextLogo-small.png
+icon: https://apache.github.io/incubator-heron/img/HeronTextLogo-small.png
home: http://heron.io
sources:
- - https://github.com/twitter/heron.git
+ - https://github.com/apache/incubator-heron.git
maintainers:
- name: Karthik Ramasamy
email: kramasamy@gmail.com
diff --git a/deploy/kubernetes/helm/templates/NOTES.txt b/deploy/kubernetes/helm/templates/NOTES.txt
index 23f9cc1..9f89435 100644
--- a/deploy/kubernetes/helm/templates/NOTES.txt
+++ b/deploy/kubernetes/helm/templates/NOTES.txt
@@ -13,7 +13,7 @@ You can check the status of Heron by doing the following:
heron config {{ .Release.Name }} set service_url http://localhost:8001/api/v1/proxy/namespaces/{{ .Release.Namespace }}/services/{{ .Release.Name }}-apiserver:9000
5. Submit an example topology
- heron submit {{ .Release.Name }} ~/.heron/examples/heron-api-examples.jar com.twitter.heron.examples.api.AckingTopology acking
+ heron submit {{ .Release.Name }} ~/.heron/examples/heron-api-examples.jar org.apache.heron.examples.api.AckingTopology acking
6. Visit the heron ui and see if your example topology is running
open http://localhost:8001/api/v1/proxy/namespaces/{{ .Release.Namespace }}/services/{{ .Release.Name }}-ui:8889
diff --git a/deploy/kubernetes/helm/templates/tools.yaml b/deploy/kubernetes/helm/templates/tools.yaml
index f128911..51907db 100644
--- a/deploy/kubernetes/helm/templates/tools.yaml
+++ b/deploy/kubernetes/helm/templates/tools.yaml
@@ -110,7 +110,7 @@ spec:
-D heron.kubernetes.scheduler.uri=http://localhost:8001
-D heron.kubernetes.scheduler.namespace={{ .Release.Namespace }}
-D heron.executor.docker.image={{ .Values.image }}
- -D heron.class.uploader=com.twitter.heron.uploader.dlog.DLUploader
+ -D heron.class.uploader=org.apache.heron.uploader.dlog.DLUploader
-D heron.uploader.dlog.topologies.num.replicas={{ $jobReplicas }}
-D heron.uploader.dlog.topologies.namespace.uri=distributedlog://{{ .Release.Name }}-zookeeper:2181/distributedlog
envFrom:
diff --git a/deploy/kubernetes/minikube/README.md b/deploy/kubernetes/minikube/README.md
index 31410f6..07be086 100644
--- a/deploy/kubernetes/minikube/README.md
+++ b/deploy/kubernetes/minikube/README.md
@@ -4,7 +4,7 @@
### Requirements:
* [minikube](https://kubernetes.io/docs/getting-started-guides/minikube/#installation)
* [kubectl](https://kubernetes.io/docs/tasks/kubectl/install/)
-* [heron client](https://twitter.github.io/heron/docs/getting-started/)
+* [heron client](https://apache.github.io/incubator-heron/docs/getting-started/)
### Start minkube
@@ -19,7 +19,7 @@ $ minikube start --memory=7168 --cpus=5 --disk-size=20g
1. Start zookeeper:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/minikube/zookeeper.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/minikube/zookeeper.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
@@ -31,17 +31,17 @@ zk-0 1/1 Running 0 1m
2. Start bookkeeper:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/minikube/bookkeeper.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/minikube/bookkeeper.yaml
```
3. Start heron tools:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/minikube/tools.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/minikube/tools.yaml
```
4. Start heron apiserver:
```shell
-$ kubectl create -f https://raw.githubusercontent.com/twitter/heron/master/deploy/kubernetes/minikube/apiserver.yaml
+$ kubectl create -f https://raw.githubusercontent.com/apache/incubator-heron/master/deploy/kubernetes/minikube/apiserver.yaml
```
### Deploy via heron apiserver
@@ -77,7 +77,7 @@ set service_url http://localhost:8001/api/v1/proxy/namespaces/default/services/h
4. Submit an example topology:
```shell
$ heron submit kubernetes ~/.heron/examples/heron-api-examples.jar \
-com.twitter.heron.examples.api.AckingTopology acking
+org.apache.heron.examples.api.AckingTopology acking
```
5. View heron ui:
diff --git a/deploy/kubernetes/minikube/apiserver.yaml b/deploy/kubernetes/minikube/apiserver.yaml
index e3efd69..89ae21a 100644
--- a/deploy/kubernetes/minikube/apiserver.yaml
+++ b/deploy/kubernetes/minikube/apiserver.yaml
@@ -58,7 +58,7 @@ spec:
-D heron.statemgr.connection.string=zookeeper:2181
-D heron.kubernetes.scheduler.uri=http://localhost:8001
-D heron.executor.docker.image=heron/heron:latest
- -D heron.class.uploader=com.twitter.heron.uploader.dlog.DLUploader
+ -D heron.class.uploader=org.apache.heron.uploader.dlog.DLUploader
-D heron.uploader.dlog.topologies.num.replicas=1
-D heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/distributedlog
- name: kubectl-proxy
diff --git a/docker/Readme.md b/docker/Readme.md
index 84f5a8c..2bdee95 100644
--- a/docker/Readme.md
+++ b/docker/Readme.md
@@ -24,7 +24,7 @@
### To submit/activate/kill a topology:
```
#To submit a topology:
- docker exec heron_executor_1 heron submit local /usr/local/heron/examples/heron-examples.jar com.twitter.heron.examples.ExclamationTopology ExclamationTopology --deploy-deactivated
+ docker exec heron_executor_1 heron submit local /usr/local/heron/examples/heron-examples.jar org.apache.heron.examples.ExclamationTopology ExclamationTopology --deploy-deactivated
#To activate a topology:
docker exec -it heron_executor_1 heron activate local ExclamationTopology
#To kill a topology:
diff --git a/eco-heron-examples/src/java/BUILD b/eco-heron-examples/src/java/BUILD
index 1051d32..5887941 100644
--- a/eco-heron-examples/src/java/BUILD
+++ b/eco-heron-examples/src/java/BUILD
@@ -7,7 +7,7 @@ filegroup(
java_binary(
name='eco-examples-unshaded',
- srcs = glob(["com/twitter/heron/examples/eco/**/*.java"]),
+ srcs = glob(["org/apache/heron/examples/eco/**/*.java"]),
deps = [
"//heron/api/src/java:api-java-low-level",
"//heron/api/src/java:api-java",
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java
deleted file mode 100644
index bd60a49..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BasicOutputCollector;
-import com.twitter.heron.api.bolt.IBasicBolt;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Tuple;
-
-import static com.twitter.heron.api.utils.Utils.tuple;
-
-@SuppressWarnings({"serial", "rawtypes", "unchecked"})
-public class EvenAndOddBolt implements IBasicBolt {
-
-
- @Override
- public void prepare(Map stormConf, TopologyContext context) {
-
- }
-
- protected int getTupleValue(Tuple t, int idx) {
- return (int) t.getValues().get(idx);
- }
-
- @Override
- public void execute(Tuple input, BasicOutputCollector collector) {
- int number = getTupleValue(input, 0);
-
- if (number % 2 == 0) {
- System.out.println("Emitting to evens stream: " + number);
- collector.emit("evens", tuple(input.getValues().get(0)));
-
- } else {
- System.out.println("emitting to odds stream: " + number);
- collector.emit("odds", tuple(input.getValues().get(0)));
- }
-
- collector.emit(tuple(input.getValues().get(0)));
-
-
-
- }
-
- @Override
- public void cleanup() {
-
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declareStream("evens", new Fields("evens"));
- declarer.declareStream("odds", new Fields("odds"));
- declarer.declare(new Fields("number"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- return null;
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java
deleted file mode 100644
index d7be2c6..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-
-import java.util.logging.Logger;
-
-import com.twitter.heron.api.bolt.BaseBasicBolt;
-import com.twitter.heron.api.bolt.BasicOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.tuple.Tuple;
-
-/**
- * Simple bolt that does nothing other than LOG.info() every tuple received.
- *
- */
-@SuppressWarnings("serial")
-public class LogInfoBolt extends BaseBasicBolt {
- private static final Logger LOG = Logger.getLogger(LogInfoBolt.class.getName());
-
- @Override
- public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
- LOG.info("{ }" + tuple);
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/RandomString.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/RandomString.java
deleted file mode 100644
index 6ece43c..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/RandomString.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Random;
-
-public class RandomString {
- private char[] symbols;
-
- private Random random = new Random();
-
- private char[] buf;
-
- public RandomString(int length) {
- // Construct the symbol set
- StringBuilder tmp = new StringBuilder();
- for (char ch = '0'; ch <= '9'; ++ch) {
- tmp.append(ch);
- }
-
- for (char ch = 'a'; ch <= 'z'; ++ch) {
- tmp.append(ch);
- }
-
- symbols = tmp.toString().toCharArray();
- if (length < 1) {
- throw new IllegalArgumentException("length < 1: " + length);
- }
-
- buf = new char[length];
- }
-
- public String nextString() {
- for (int idx = 0; idx < buf.length; ++idx) {
- buf[idx] = symbols[random.nextInt(symbols.length)];
- }
-
- return new String(buf);
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulConsumerBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulConsumerBolt.java
deleted file mode 100644
index bd5cbfe..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulConsumerBolt.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BaseRichBolt;
-import com.twitter.heron.api.bolt.OutputCollector;
-import com.twitter.heron.api.state.State;
-import com.twitter.heron.api.topology.IStatefulComponent;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Tuple;
-
-
-public class StatefulConsumerBolt extends BaseRichBolt
- implements IStatefulComponent<Integer, Integer> {
- private static final long serialVersionUID = -5470591933906954522L;
-
- private OutputCollector collector;
- private State<Integer, Integer> myState;
-
- @Override
- public void initState(State<Integer, Integer> state) {
- this.myState = state;
- }
-
- @Override
- public void preSave(String checkpointId) {
- // Nothing really since we operate out of the system supplied state
- }
-
- @SuppressWarnings("rawtypes")
- public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
- collector = outputCollector;
- }
-
- @Override
- public void execute(Tuple tuple) {
- int key = tuple.getInteger(0);
- System.out.println("looking in state for: " + key);
- if (myState.get(key) == null) {
- System.out.println("did not find " + key + " in state: ");
- myState.put(key, 1);
- } else {
- System.out.println("found in state: " + key);
- Integer val = myState.get(key);
- myState.put(key, ++val);
- }
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulNumberSpout.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulNumberSpout.java
deleted file mode 100644
index c3fb3db..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulNumberSpout.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-import java.util.Random;
-import java.util.logging.Logger;
-
-import com.twitter.heron.api.spout.BaseRichSpout;
-import com.twitter.heron.api.spout.SpoutOutputCollector;
-import com.twitter.heron.api.state.State;
-import com.twitter.heron.api.topology.IStatefulComponent;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-import com.twitter.heron.api.utils.Utils;
-
-@SuppressWarnings("HiddenField")
-public class StatefulNumberSpout extends BaseRichSpout
- implements IStatefulComponent<String, Long> {
- private static final Logger LOG = Logger.getLogger(StatefulNumberSpout.class.getName());
- private static final long serialVersionUID = 5454291010750852782L;
- private SpoutOutputCollector collector;
- private Random rand;
- private long msgId;
- private State<String, Long> state;
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("value", "ts", "msgid"));
- }
-
- @Override
- public void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector
- collector) {
- this.collector = collector;
- this.rand = new Random();
- }
-
- @Override
- public void nextTuple() {
- Utils.sleep(1000);
- long val = msgId;
- long randomNumber = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
- System.out.println("Emitting: " + val);
- collector.emit(new Values(val,
- randomNumber, msgId), msgId);
- msgId++;
- }
-
- @Override
- public void ack(Object msgId) {
- LOG.fine("Got ACK for msgId : " + msgId);
- }
-
- @Override
- public void fail(Object msgId) {
- LOG.fine("Got FAIL for msgId : " + msgId);
- }
-
- @Override
- public void initState(State<String, Long> state) {
- this.state = state;
- this.msgId = this.state.getOrDefault("msgId", 0L);
- }
-
- @Override
- public void preSave(String checkpointId) {
- this.state.put("msgId", msgId);
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulRandomIntSpout.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulRandomIntSpout.java
deleted file mode 100644
index e128840..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulRandomIntSpout.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-import java.util.concurrent.ThreadLocalRandom;
-
-import com.twitter.heron.api.spout.BaseRichSpout;
-import com.twitter.heron.api.spout.SpoutOutputCollector;
-import com.twitter.heron.api.state.State;
-import com.twitter.heron.api.topology.IStatefulComponent;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-
-import backtype.storm.utils.Utils;
-
-public class StatefulRandomIntSpout extends BaseRichSpout
- implements IStatefulComponent<String, Integer> {
- private SpoutOutputCollector spoutOutputCollector;
- private State<String, Integer> count;
-
- public StatefulRandomIntSpout() {
- }
-
- // Generates a random integer between 1 and 100
- private int randomInt() {
- return ThreadLocalRandom.current().nextInt(1, 101);
- }
-
- // These two methods are required to implement the IStatefulComponent interface
- @Override
- public void preSave(String checkpointId) {
- System.out.println(String.format("Saving spout state at checkpoint %s", checkpointId));
- }
-
- @Override
- public void initState(State<String, Integer> state) {
- count = state;
- }
-
- // These three methods are required to extend the BaseRichSpout abstract class
- @Override
- public void open(Map<String, Object> map, TopologyContext ctx, SpoutOutputCollector collector) {
- spoutOutputCollector = collector;
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("random-int"));
- }
-
- @Override
- public void nextTuple() {
- Utils.sleep(2000);
- int randomInt = randomInt();
- System.out.println("Emitting Value: " + randomInt);
- spoutOutputCollector.emit(new Values(randomInt));
- }
-}
-
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulWindowSumBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulWindowSumBolt.java
deleted file mode 100644
index 8f721e4..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/StatefulWindowSumBolt.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BaseStatefulWindowedBolt;
-import com.twitter.heron.api.bolt.OutputCollector;
-import com.twitter.heron.api.state.State;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Tuple;
-import com.twitter.heron.api.tuple.Values;
-import com.twitter.heron.api.windowing.TupleWindow;
-
-@SuppressWarnings("HiddenField")
-public class StatefulWindowSumBolt extends BaseStatefulWindowedBolt<String, Long> {
- private static final long serialVersionUID = -539382497249834244L;
- private State<String, Long> state;
- private long sum;
-
- private OutputCollector collector;
-
- @Override
- public void prepare(Map<String, Object> topoConf, TopologyContext context,
- OutputCollector collector) {
- this.collector = collector;
- }
-
- @Override
- public void initState(State<String, Long> state) {
- this.state = state;
- sum = state.getOrDefault("sum", 0L);
- }
-
- @Override
- public void execute(TupleWindow inputWindow) {
- for (Tuple tuple : inputWindow.get()) {
- System.out.println("Adding to sum: " + tuple.getLongByField("value"));
- sum += tuple.getLongByField("value");
- System.out.println("Sum is now: " + sum);
- }
- collector.emit(new Values(sum));
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("sum"));
- }
-
- @Override
- public void preSave(String checkpointId) {
- state.put("sum", sum);
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java
deleted file mode 100644
index fe19768..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-import java.util.Random;
-import java.util.logging.Logger;
-
-import com.twitter.heron.api.spout.BaseRichSpout;
-import com.twitter.heron.api.spout.SpoutOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-import com.twitter.heron.api.utils.Utils;
-
-@SuppressWarnings({"serial", "rawtypes", "HiddenField"})
-public class TestFibonacciSpout extends BaseRichSpout {
- private static final Logger LOG = Logger.getLogger(TestFibonacciSpout.class.getName());
- private TestPropertyHolder holder;
- private SpoutOutputCollector collector;
-
- public TestFibonacciSpout(TestPropertyHolder holder) {
- this.holder = holder;
- }
-
- @Override
- public void open(Map<String, Object> conf, TopologyContext context,
- SpoutOutputCollector collector) {
- this.collector = collector;
- }
-
- @Override
- public void nextTuple() {
- Utils.sleep(100);
- final int[] words = new int[] {0, 1, 2, 3, 5, 8, 13, 21, 34};
- final Random rand = new Random();
- final int number = words[rand.nextInt(words.length)];
- final String property = holder.getProperty();
- final int numberProperty = holder.getNumberProperty();
- final String publicProperty = holder.publicProperty;
- LOG.info("Constructor Args: " + property);
- LOG.info("Property set by setter: " + numberProperty);
- LOG.info("Property set by public field: " + publicProperty);
- LOG.info("Emitting: number " + number);
- collector.emit(new Values(number));
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("number"));
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java
deleted file mode 100644
index 4f23f4d..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BasicOutputCollector;
-import com.twitter.heron.api.bolt.IBasicBolt;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Tuple;
-
-import static com.twitter.heron.api.utils.Utils.tuple;
-
-@SuppressWarnings({"serial", "rawtypes", "unchecked", "HiddenField"})
-public class TestIBasicPrintBolt implements IBasicBolt {
-
- public String someProperty = "set ";
-
- public TestUnits testUnits;
-
- @Override
- public void prepare(Map stormConf, TopologyContext context) {
-
- }
-
- public void sampleConfigurationMethod(String someProperty, TestUnits testUnits) {
- this.someProperty += someProperty;
- this.testUnits = testUnits;
- }
-
- @Override
- public void execute(Tuple input, BasicOutputCollector collector) {
- System.out.println("The configuration method has set \"someProperty\" to : "
- + this.someProperty);
- System.out.println("The configuration method has set TestUnits to " + testUnits);
- System.out.println("Emitting : " + input);
- collector.emit(tuple(input.getValues().get(0)));
-
- }
-
- @Override
- public void cleanup() {
-
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("ibasic-print"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- return null;
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java
deleted file mode 100644
index ba02368..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BaseBasicBolt;
-import com.twitter.heron.api.bolt.BasicOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Tuple;
-
-import static com.twitter.heron.api.utils.Utils.tuple;
-@SuppressWarnings({"serial", "rawtypes"})
-public class TestNameCounter extends BaseBasicBolt {
-
- private Map<String, Integer> counts;
-
- @Override
- public void prepare(Map map, TopologyContext topologyContext) {
- counts = new HashMap<>();
- }
-
-
- protected String getTupleValue(Tuple t, int idx) {
- return (String) t.getValues().get(idx);
- }
-
- public void execute(Tuple input, BasicOutputCollector collector) {
- String word = getTupleValue(input, 0);
- int count = 0;
- if (counts.containsKey(word)) {
- count = counts.get(word);
- }
- count++;
- counts.put(word, count);
- collector.emit(tuple(word, count));
- }
-
- public void cleanup() {
-
- }
-
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("name", "count"));
- }
-
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java
deleted file mode 100644
index 355d9b1..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.api.spout.BaseRichSpout;
-import com.twitter.heron.api.spout.SpoutOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-import com.twitter.heron.api.utils.Utils;
-
-@SuppressWarnings({"serial", "HiddenField"})
-public class TestNameSpout extends BaseRichSpout {
- private boolean isdistributed;
- private SpoutOutputCollector collector;
-
- public TestNameSpout() {
- this(true);
- }
-
- public TestNameSpout(boolean isDistributed) {
- isdistributed = isDistributed;
- }
-
- public void open(Map<String, Object> conf, TopologyContext context,
- SpoutOutputCollector collector) {
- this.collector = collector;
- }
-
- public void close() {
-
- }
-
- public void nextTuple() {
- Utils.sleep(100);
- final String[] words = new String[] {"marge", "homer", "bart", "simpson", "lisa"};
- final Random rand = new Random();
- final String word = words[rand.nextInt(words.length)];
- collector.emit(new Values(word));
- }
-
- public void ack(Object msgId) {
-
- }
-
- public void fail(Object msgId) {
-
- }
-
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("name"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- if (!isdistributed) {
- Map<String, Object> ret = new HashMap<String, Object>();
- ret.put(Config.TOPOLOGY_STMGRS, 1);
- return ret;
- } else {
- return null;
- }
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java
deleted file mode 100644
index b48cf31..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import com.twitter.heron.api.bolt.BaseBasicBolt;
-import com.twitter.heron.api.bolt.BasicOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.tuple.Tuple;
-
-@SuppressWarnings("serial")
-public class TestPrintBolt extends BaseBasicBolt {
-
- @Override
- public void execute(Tuple tuple, BasicOutputCollector collector) {
- System.out.println(tuple);
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer ofd) {
- }
-
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java
deleted file mode 100644
index 2020fe4..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.io.Serializable;
-
-@SuppressWarnings("serial")
-public class TestPropertyHolder implements Serializable {
-
- private String property;
-
- private int numberProperty;
-
- public String publicProperty;
-
-
- public TestPropertyHolder(String property) {
- this.property = property;
- }
-
- public String getProperty() {
- return property;
- }
-
- public void setProperty(String property) {
- this.property = property;
- }
-
- public int getNumberProperty() {
- return numberProperty;
- }
-
- public void setNumberProperty(int numberProperty) {
- this.numberProperty = numberProperty;
- }
-
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java
deleted file mode 100644
index f1d469b..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-/**
- * Sample unit of measure enum
- */
-public enum TestUnits {
- MB("MB"),
- GB("GB"),
- B("B");
-
- private String value;
-
- TestUnits(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java
deleted file mode 100644
index 34d5c76..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.BaseWindowedBolt;
-import com.twitter.heron.api.bolt.OutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-import com.twitter.heron.api.windowing.TupleWindow;
-
-@SuppressWarnings({"serial", "HiddenField"})
-public class TestWindowBolt extends BaseWindowedBolt {
- private OutputCollector collector;
-
-
- @Override
- public void prepare(Map<String, Object> topoConf, TopologyContext context,
- OutputCollector collector) {
- this.collector = collector;
- }
-
- @Override
- public void execute(TupleWindow inputWindow) {
- collector.emit(new Values(inputWindow.get().size()));
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("count"));
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/WordSpout.java b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/WordSpout.java
deleted file mode 100644
index 3f3b6f1..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/WordSpout.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-import java.util.Random;
-
-import com.twitter.heron.api.spout.BaseRichSpout;
-import com.twitter.heron.api.spout.SpoutOutputCollector;
-import com.twitter.heron.api.topology.OutputFieldsDeclarer;
-import com.twitter.heron.api.topology.TopologyContext;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.tuple.Values;
-
-@SuppressWarnings("HiddenField")
-public class WordSpout extends BaseRichSpout {
- private static final long serialVersionUID = 4322775001819135036L;
-
- private static final int ARRAY_LENGTH = 128 * 1024;
- private static final int WORD_LENGTH = 20;
-
- private final String[] words = new String[ARRAY_LENGTH];
-
- private final Random rnd = new Random(31);
-
- private SpoutOutputCollector collector;
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
- outputFieldsDeclarer.declare(new Fields("word"));
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- public void open(Map map, TopologyContext topologyContext,
- SpoutOutputCollector spoutOutputCollector) {
- System.out.println("open spout");
- RandomString randomString = new RandomString(WORD_LENGTH);
-
- for (int i = 0; i < ARRAY_LENGTH; i++) {
- words[i] = randomString.nextString();
- }
-
- collector = spoutOutputCollector;
- }
-
- @Override
- public void nextTuple() {
- System.out.println("next tuple");
- int nextInt = rnd.nextInt(ARRAY_LENGTH);
- collector.emit(new Values(words[nextInt]));
- }
-}
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-windowing.yaml b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-windowing.yaml
deleted file mode 100644
index 9c9d5cf..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-windowing.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
-name: "stateful-windowing"
-type: "heron"
-
-config:
- topology.workers: 1
- topology.reliability.mode: "EFFECTIVELY_ONCE"
-
-components:
-
- - id: "windowLength"
- className: "com.twitter.heron.api.bolt.BaseWindowedBolt$Count"
- constructorArgs:
- - 5
-
- - id: "slidingInterval"
- className: "com.twitter.heron.api.bolt.BaseWindowedBolt$Count"
- constructorArgs:
- - 3
-
-spouts:
- - id: "integer-spout"
- className: "com.twitter.heron.examples.eco.StatefulNumberSpout"
- parallelism: 1
-
-bolts:
- - id: "stateful-window-sum-bolt"
- className: "com.twitter.heron.examples.eco.StatefulWindowSumBolt"
- configMethods:
- - name: "withWindow"
- args: [ref: "windowLength", ref: "slidingInterval"]
- parallelism: 1
-
-
-streams:
- - from: "integer-spout"
- to: "stateful-window-sum-bolt"
- grouping:
- type: SHUFFLE
\ No newline at end of file
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-word-count.yaml b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-word-count.yaml
deleted file mode 100644
index e5838af..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron-stateful-word-count.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
-name: "stateful-word-count"
-type: "heron"
-
-config:
- topology.workers: 1
- topology.reliability.mode: "EFFECTIVELY_ONCE"
-
-
-spouts:
- - id: "int-spout"
- className: "com.twitter.heron.examples.eco.StatefulRandomIntSpout"
- parallelism: 1
-
-bolts:
- - id: "stateful-consumer-bolt"
- className: "com.twitter.heron.examples.eco.StatefulConsumerBolt"
- parallelism: 1
-
-
-streams:
- - from: "int-spout"
- to: "stateful-consumer-bolt"
- grouping:
- type: SHUFFLE
\ No newline at end of file
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_fibonacci.yaml b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_fibonacci.yaml
deleted file mode 100644
index 7a9f9a2..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_fibonacci.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-name: "heron-fibonacci-topology"
-type: "heron"
-
-config:
- topology.workers: 1
-
-components:
- - id: "property-holder"
- className: "com.twitter.heron.examples.eco.TestPropertyHolder"
- constructorArgs:
- - "some argument"
- properties:
- - name: "numberProperty"
- value: 11
- - name: "publicProperty"
- value: "This is public property"
-
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestFibonacciSpout"
- constructorArgs:
- - ref: "property-holder"
- parallelism: 1
-
-bolts:
- - id: "even-and-odd-bolt"
- className: "com.twitter.heron.examples.eco.EvenAndOddBolt"
- parallelism: 1
-
- - id: "ibasic-print-bolt"
- className: "com.twitter.heron.examples.eco.TestIBasicPrintBolt"
- parallelism: 1
- configMethods:
- - name: "sampleConfigurationMethod"
- args:
- - "${ecoPropertyOne}"
- - MB
-
- - id: "sys-out-bolt"
- className: "com.twitter.heron.examples.eco.TestPrintBolt"
- parallelism: 1
-
-streams:
- - from: "spout-1"
- to: "even-and-odd-bolt"
- grouping:
- type: SHUFFLE
-
- - from: "even-and-odd-bolt"
- to: "ibasic-print-bolt"
- grouping:
- type: SHUFFLE
- streamId: "odds"
-
- - from: "even-and-odd-bolt"
- to: "sys-out-bolt"
- grouping:
- type: SHUFFLE
- streamId: "evens"
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_windowing.yaml b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_windowing.yaml
deleted file mode 100644
index 49adf3c..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_windowing.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-name: "heron-sliding-window-topology"
-type: "heron"
-
-components:
- - id: "windowLength"
- className: "com.twitter.heron.api.bolt.BaseWindowedBolt$Count"
- constructorArgs:
- - 5
- - id: "slidingInterval"
- className: "com.twitter.heron.api.bolt.BaseWindowedBolt$Count"
- constructorArgs:
- - 3
-
-config:
- topology.workers: 1
-
-# spout definitions
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestNameSpout"
- parallelism: 1
-
-# bolt definitions
-bolts:
- - id: "bolt-1"
- className: "com.twitter.heron.examples.eco.TestWindowBolt"
- configMethods:
- - name: "withWindow"
- args: [ref: "windowLength", ref: "slidingInterval"]
- parallelism: 1
- - id: "bolt-2"
- className: "com.twitter.heron.examples.eco.TestPrintBolt"
- parallelism: 1
-
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
-
- - from: "spout-1"
- to: "bolt-1"
- grouping:
- type: FIELDS
- args: ["word"]
-
- - from: "bolt-1"
- to: "bolt-2"
- grouping:
- type: SHUFFLE
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_wordcount.yaml b/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_wordcount.yaml
deleted file mode 100644
index a195699..0000000
--- a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/heron_wordcount.yaml
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-# topology definition
-# name to be used when submitting
-name: "heron-simple-wordcount-topology"
-type: "heron"
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
- topology.workers: 2
- topology.component.resourcemap:
-
- - id: "spout-1"
- ram: 256MB # The minimum value for a component's specified ram is 256MB
- cpu: 0.5
- disk: 4GB
-
- - id: "bolt-1"
- ram: 256MB # The minimum value for a component's specified ram is 256MB
- cpu: 0.5
- disk: 2GB
-
- topology.component.jvmoptions:
-
- - id: "spout-1"
- options: ["-XX:NewSize=300m", "-Xms2g"]
-
-# spout definitions
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestNameSpout"
- parallelism: 1
-
-# bolt definitions
-bolts:
- - id: "bolt-1"
- className: "com.twitter.heron.examples.eco.TestNameCounter"
- parallelism: 1
-
- - id: "bolt-2"
- className: "com.twitter.heron.examples.eco.LogInfoBolt"
- parallelism: 1
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
- - from: "spout-1"
- to: "bolt-1"
- grouping:
- type: FIELDS
- args: ["word"]
-
- - from: "bolt-1"
- to: "bolt-2"
- grouping:
- type: SHUFFLE
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java
new file mode 100644
index 0000000..61918ce
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java
@@ -0,0 +1,76 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BasicOutputCollector;
+import org.apache.heron.api.bolt.IBasicBolt;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Tuple;
+
+import static org.apache.heron.api.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes", "unchecked"})
+public class EvenAndOddBolt implements IBasicBolt {
+
+
+ @Override
+ public void prepare(Map stormConf, TopologyContext context) {
+
+ }
+
+ protected int getTupleValue(Tuple t, int idx) {
+ return (int) t.getValues().get(idx);
+ }
+
+ @Override
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ int number = getTupleValue(input, 0);
+
+ if (number % 2 == 0) {
+ System.out.println("Emitting to evens stream: " + number);
+ collector.emit("evens", tuple(input.getValues().get(0)));
+
+ } else {
+ System.out.println("emitting to odds stream: " + number);
+ collector.emit("odds", tuple(input.getValues().get(0)));
+ }
+
+ collector.emit(tuple(input.getValues().get(0)));
+
+
+
+ }
+
+ @Override
+ public void cleanup() {
+
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declareStream("evens", new Fields("evens"));
+ declarer.declareStream("odds", new Fields("odds"));
+ declarer.declare(new Fields("number"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ return null;
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java
new file mode 100644
index 0000000..dba8f11
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java
@@ -0,0 +1,41 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+
+import java.util.logging.Logger;
+
+import org.apache.heron.api.bolt.BaseBasicBolt;
+import org.apache.heron.api.bolt.BasicOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.tuple.Tuple;
+
+/**
+ * Simple bolt that does nothing other than LOG.info() every tuple received.
+ *
+ */
+@SuppressWarnings("serial")
+public class LogInfoBolt extends BaseBasicBolt {
+ private static final Logger LOG = Logger.getLogger(LogInfoBolt.class.getName());
+
+ @Override
+ public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
+ LOG.info("{ }" + tuple);
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
+
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/RandomString.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/RandomString.java
new file mode 100644
index 0000000..2d794d6
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/RandomString.java
@@ -0,0 +1,51 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Random;
+
+public class RandomString {
+ private char[] symbols;
+
+ private Random random = new Random();
+
+ private char[] buf;
+
+ public RandomString(int length) {
+ // Construct the symbol set
+ StringBuilder tmp = new StringBuilder();
+ for (char ch = '0'; ch <= '9'; ++ch) {
+ tmp.append(ch);
+ }
+
+ for (char ch = 'a'; ch <= 'z'; ++ch) {
+ tmp.append(ch);
+ }
+
+ symbols = tmp.toString().toCharArray();
+ if (length < 1) {
+ throw new IllegalArgumentException("length < 1: " + length);
+ }
+
+ buf = new char[length];
+ }
+
+ public String nextString() {
+ for (int idx = 0; idx < buf.length; ++idx) {
+ buf[idx] = symbols[random.nextInt(symbols.length)];
+ }
+
+ return new String(buf);
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulConsumerBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulConsumerBolt.java
new file mode 100644
index 0000000..5831a53
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulConsumerBolt.java
@@ -0,0 +1,66 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BaseRichBolt;
+import org.apache.heron.api.bolt.OutputCollector;
+import org.apache.heron.api.state.State;
+import org.apache.heron.api.topology.IStatefulComponent;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Tuple;
+
+
+public class StatefulConsumerBolt extends BaseRichBolt
+ implements IStatefulComponent<Integer, Integer> {
+ private static final long serialVersionUID = -5470591933906954522L;
+
+ private OutputCollector collector;
+ private State<Integer, Integer> myState;
+
+ @Override
+ public void initState(State<Integer, Integer> state) {
+ this.myState = state;
+ }
+
+ @Override
+ public void preSave(String checkpointId) {
+ // Nothing really since we operate out of the system supplied state
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
+ collector = outputCollector;
+ }
+
+ @Override
+ public void execute(Tuple tuple) {
+ int key = tuple.getInteger(0);
+ System.out.println("looking in state for: " + key);
+ if (myState.get(key) == null) {
+ System.out.println("did not find " + key + " in state: ");
+ myState.put(key, 1);
+ } else {
+ System.out.println("found in state: " + key);
+ Integer val = myState.get(key);
+ myState.put(key, ++val);
+ }
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulNumberSpout.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulNumberSpout.java
new file mode 100644
index 0000000..aae0053
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulNumberSpout.java
@@ -0,0 +1,83 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.logging.Logger;
+
+import org.apache.heron.api.spout.BaseRichSpout;
+import org.apache.heron.api.spout.SpoutOutputCollector;
+import org.apache.heron.api.state.State;
+import org.apache.heron.api.topology.IStatefulComponent;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+import org.apache.heron.api.utils.Utils;
+
+@SuppressWarnings("HiddenField")
+public class StatefulNumberSpout extends BaseRichSpout
+ implements IStatefulComponent<String, Long> {
+ private static final Logger LOG = Logger.getLogger(StatefulNumberSpout.class.getName());
+ private static final long serialVersionUID = 5454291010750852782L;
+ private SpoutOutputCollector collector;
+ private Random rand;
+ private long msgId;
+ private State<String, Long> state;
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("value", "ts", "msgid"));
+ }
+
+ @Override
+ public void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector
+ collector) {
+ this.collector = collector;
+ this.rand = new Random();
+ }
+
+ @Override
+ public void nextTuple() {
+ Utils.sleep(1000);
+ long val = msgId;
+ long randomNumber = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
+ System.out.println("Emitting: " + val);
+ collector.emit(new Values(val,
+ randomNumber, msgId), msgId);
+ msgId++;
+ }
+
+ @Override
+ public void ack(Object msgId) {
+ LOG.fine("Got ACK for msgId : " + msgId);
+ }
+
+ @Override
+ public void fail(Object msgId) {
+ LOG.fine("Got FAIL for msgId : " + msgId);
+ }
+
+ @Override
+ public void initState(State<String, Long> state) {
+ this.state = state;
+ this.msgId = this.state.getOrDefault("msgId", 0L);
+ }
+
+ @Override
+ public void preSave(String checkpointId) {
+ this.state.put("msgId", msgId);
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulRandomIntSpout.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulRandomIntSpout.java
new file mode 100644
index 0000000..5c8bfcf
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulRandomIntSpout.java
@@ -0,0 +1,73 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+
+import org.apache.heron.api.spout.BaseRichSpout;
+import org.apache.heron.api.spout.SpoutOutputCollector;
+import org.apache.heron.api.state.State;
+import org.apache.heron.api.topology.IStatefulComponent;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+
+import backtype.storm.utils.Utils;
+
+public class StatefulRandomIntSpout extends BaseRichSpout
+ implements IStatefulComponent<String, Integer> {
+ private SpoutOutputCollector spoutOutputCollector;
+ private State<String, Integer> count;
+
+ public StatefulRandomIntSpout() {
+ }
+
+ // Generates a random integer between 1 and 100
+ private int randomInt() {
+ return ThreadLocalRandom.current().nextInt(1, 101);
+ }
+
+ // These two methods are required to implement the IStatefulComponent interface
+ @Override
+ public void preSave(String checkpointId) {
+ System.out.println(String.format("Saving spout state at checkpoint %s", checkpointId));
+ }
+
+ @Override
+ public void initState(State<String, Integer> state) {
+ count = state;
+ }
+
+ // These three methods are required to extend the BaseRichSpout abstract class
+ @Override
+ public void open(Map<String, Object> map, TopologyContext ctx, SpoutOutputCollector collector) {
+ spoutOutputCollector = collector;
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("random-int"));
+ }
+
+ @Override
+ public void nextTuple() {
+ Utils.sleep(2000);
+ int randomInt = randomInt();
+ System.out.println("Emitting Value: " + randomInt);
+ spoutOutputCollector.emit(new Values(randomInt));
+ }
+}
+
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulWindowSumBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulWindowSumBolt.java
new file mode 100644
index 0000000..7d9b31f
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/StatefulWindowSumBolt.java
@@ -0,0 +1,67 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BaseStatefulWindowedBolt;
+import org.apache.heron.api.bolt.OutputCollector;
+import org.apache.heron.api.state.State;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Tuple;
+import org.apache.heron.api.tuple.Values;
+import org.apache.heron.api.windowing.TupleWindow;
+
+@SuppressWarnings("HiddenField")
+public class StatefulWindowSumBolt extends BaseStatefulWindowedBolt<String, Long> {
+ private static final long serialVersionUID = -539382497249834244L;
+ private State<String, Long> state;
+ private long sum;
+
+ private OutputCollector collector;
+
+ @Override
+ public void prepare(Map<String, Object> topoConf, TopologyContext context,
+ OutputCollector collector) {
+ this.collector = collector;
+ }
+
+ @Override
+ public void initState(State<String, Long> state) {
+ this.state = state;
+ sum = state.getOrDefault("sum", 0L);
+ }
+
+ @Override
+ public void execute(TupleWindow inputWindow) {
+ for (Tuple tuple : inputWindow.get()) {
+ System.out.println("Adding to sum: " + tuple.getLongByField("value"));
+ sum += tuple.getLongByField("value");
+ System.out.println("Sum is now: " + sum);
+ }
+ collector.emit(new Values(sum));
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("sum"));
+ }
+
+ @Override
+ public void preSave(String checkpointId) {
+ state.put("sum", sum);
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java
new file mode 100644
index 0000000..4bfd9c6
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java
@@ -0,0 +1,64 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.logging.Logger;
+
+import org.apache.heron.api.spout.BaseRichSpout;
+import org.apache.heron.api.spout.SpoutOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+import org.apache.heron.api.utils.Utils;
+
+@SuppressWarnings({"serial", "rawtypes", "HiddenField"})
+public class TestFibonacciSpout extends BaseRichSpout {
+ private static final Logger LOG = Logger.getLogger(TestFibonacciSpout.class.getName());
+ private TestPropertyHolder holder;
+ private SpoutOutputCollector collector;
+
+ public TestFibonacciSpout(TestPropertyHolder holder) {
+ this.holder = holder;
+ }
+
+ @Override
+ public void open(Map<String, Object> conf, TopologyContext context,
+ SpoutOutputCollector collector) {
+ this.collector = collector;
+ }
+
+ @Override
+ public void nextTuple() {
+ Utils.sleep(100);
+ final int[] words = new int[] {0, 1, 2, 3, 5, 8, 13, 21, 34};
+ final Random rand = new Random();
+ final int number = words[rand.nextInt(words.length)];
+ final String property = holder.getProperty();
+ final int numberProperty = holder.getNumberProperty();
+ final String publicProperty = holder.publicProperty;
+ LOG.info("Constructor Args: " + property);
+ LOG.info("Property set by setter: " + numberProperty);
+ LOG.info("Property set by public field: " + publicProperty);
+ LOG.info("Emitting: number " + number);
+ collector.emit(new Values(number));
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("number"));
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java
new file mode 100644
index 0000000..05ad33f
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java
@@ -0,0 +1,68 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BasicOutputCollector;
+import org.apache.heron.api.bolt.IBasicBolt;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Tuple;
+
+import static org.apache.heron.api.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes", "unchecked", "HiddenField"})
+public class TestIBasicPrintBolt implements IBasicBolt {
+
+ public String someProperty = "set ";
+
+ public TestUnits testUnits;
+
+ @Override
+ public void prepare(Map stormConf, TopologyContext context) {
+
+ }
+
+ public void sampleConfigurationMethod(String someProperty, TestUnits testUnits) {
+ this.someProperty += someProperty;
+ this.testUnits = testUnits;
+ }
+
+ @Override
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ System.out.println("The configuration method has set \"someProperty\" to : "
+ + this.someProperty);
+ System.out.println("The configuration method has set TestUnits to " + testUnits);
+ System.out.println("Emitting : " + input);
+ collector.emit(tuple(input.getValues().get(0)));
+
+ }
+
+ @Override
+ public void cleanup() {
+
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("ibasic-print"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ return null;
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java
new file mode 100644
index 0000000..583f0a5
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java
@@ -0,0 +1,62 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BaseBasicBolt;
+import org.apache.heron.api.bolt.BasicOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Tuple;
+
+import static org.apache.heron.api.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes"})
+public class TestNameCounter extends BaseBasicBolt {
+
+ private Map<String, Integer> counts;
+
+ @Override
+ public void prepare(Map map, TopologyContext topologyContext) {
+ counts = new HashMap<>();
+ }
+
+
+ protected String getTupleValue(Tuple t, int idx) {
+ return (String) t.getValues().get(idx);
+ }
+
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ String word = getTupleValue(input, 0);
+ int count = 0;
+ if (counts.containsKey(word)) {
+ count = counts.get(word);
+ }
+ count++;
+ counts.put(word, count);
+ collector.emit(tuple(word, count));
+ }
+
+ public void cleanup() {
+
+ }
+
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("name", "count"));
+ }
+
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java
new file mode 100644
index 0000000..f31fabc
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java
@@ -0,0 +1,81 @@
+// Copyright 2017 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.heron.api.Config;
+import org.apache.heron.api.spout.BaseRichSpout;
+import org.apache.heron.api.spout.SpoutOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+import org.apache.heron.api.utils.Utils;
+
+@SuppressWarnings({"serial", "HiddenField"})
+public class TestNameSpout extends BaseRichSpout {
+ private boolean isdistributed;
+ private SpoutOutputCollector collector;
+
+ public TestNameSpout() {
+ this(true);
+ }
+
+ public TestNameSpout(boolean isDistributed) {
+ isdistributed = isDistributed;
+ }
+
+ public void open(Map<String, Object> conf, TopologyContext context,
+ SpoutOutputCollector collector) {
+ this.collector = collector;
+ }
+
+ public void close() {
+
+ }
+
+ public void nextTuple() {
+ Utils.sleep(100);
+ final String[] words = new String[] {"marge", "homer", "bart", "simpson", "lisa"};
+ final Random rand = new Random();
+ final String word = words[rand.nextInt(words.length)];
+ collector.emit(new Values(word));
+ }
+
+ public void ack(Object msgId) {
+
+ }
+
+ public void fail(Object msgId) {
+
+ }
+
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("name"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ if (!isdistributed) {
+ Map<String, Object> ret = new HashMap<String, Object>();
+ ret.put(Config.TOPOLOGY_STMGRS, 1);
+ return ret;
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java
new file mode 100644
index 0000000..35bd499
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java
@@ -0,0 +1,33 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import org.apache.heron.api.bolt.BaseBasicBolt;
+import org.apache.heron.api.bolt.BasicOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.tuple.Tuple;
+
+@SuppressWarnings("serial")
+public class TestPrintBolt extends BaseBasicBolt {
+
+ @Override
+ public void execute(Tuple tuple, BasicOutputCollector collector) {
+ System.out.println(tuple);
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer ofd) {
+ }
+
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java
new file mode 100644
index 0000000..ff92a38
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java
@@ -0,0 +1,48 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class TestPropertyHolder implements Serializable {
+
+ private String property;
+
+ private int numberProperty;
+
+ public String publicProperty;
+
+
+ public TestPropertyHolder(String property) {
+ this.property = property;
+ }
+
+ public String getProperty() {
+ return property;
+ }
+
+ public void setProperty(String property) {
+ this.property = property;
+ }
+
+ public int getNumberProperty() {
+ return numberProperty;
+ }
+
+ public void setNumberProperty(int numberProperty) {
+ this.numberProperty = numberProperty;
+ }
+
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestUnits.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestUnits.java
new file mode 100644
index 0000000..4df8b42
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestUnits.java
@@ -0,0 +1,33 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+/**
+ * Sample unit of measure enum
+ */
+public enum TestUnits {
+ MB("MB"),
+ GB("GB"),
+ B("B");
+
+ private String value;
+
+ TestUnits(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java
new file mode 100644
index 0000000..5a45e20
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java
@@ -0,0 +1,46 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.heron.api.bolt.BaseWindowedBolt;
+import org.apache.heron.api.bolt.OutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+import org.apache.heron.api.windowing.TupleWindow;
+
+@SuppressWarnings({"serial", "HiddenField"})
+public class TestWindowBolt extends BaseWindowedBolt {
+ private OutputCollector collector;
+
+
+ @Override
+ public void prepare(Map<String, Object> topoConf, TopologyContext context,
+ OutputCollector collector) {
+ this.collector = collector;
+ }
+
+ @Override
+ public void execute(TupleWindow inputWindow) {
+ collector.emit(new Values(inputWindow.get().size()));
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("count"));
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/WordSpout.java b/eco-heron-examples/src/java/org/apache/heron/examples/eco/WordSpout.java
new file mode 100644
index 0000000..8ab4d31
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/WordSpout.java
@@ -0,0 +1,64 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.heron.api.spout.BaseRichSpout;
+import org.apache.heron.api.spout.SpoutOutputCollector;
+import org.apache.heron.api.topology.OutputFieldsDeclarer;
+import org.apache.heron.api.topology.TopologyContext;
+import org.apache.heron.api.tuple.Fields;
+import org.apache.heron.api.tuple.Values;
+
+@SuppressWarnings("HiddenField")
+public class WordSpout extends BaseRichSpout {
+ private static final long serialVersionUID = 4322775001819135036L;
+
+ private static final int ARRAY_LENGTH = 128 * 1024;
+ private static final int WORD_LENGTH = 20;
+
+ private final String[] words = new String[ARRAY_LENGTH];
+
+ private final Random rnd = new Random(31);
+
+ private SpoutOutputCollector collector;
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
+ outputFieldsDeclarer.declare(new Fields("word"));
+ }
+
+ @Override
+ @SuppressWarnings("rawtypes")
+ public void open(Map map, TopologyContext topologyContext,
+ SpoutOutputCollector spoutOutputCollector) {
+ System.out.println("open spout");
+ RandomString randomString = new RandomString(WORD_LENGTH);
+
+ for (int i = 0; i < ARRAY_LENGTH; i++) {
+ words[i] = randomString.nextString();
+ }
+
+ collector = spoutOutputCollector;
+ }
+
+ @Override
+ public void nextTuple() {
+ System.out.println("next tuple");
+ int nextInt = rnd.nextInt(ARRAY_LENGTH);
+ collector.emit(new Values(words[nextInt]));
+ }
+}
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-windowing.yaml b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-windowing.yaml
new file mode 100644
index 0000000..d691950
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-windowing.yaml
@@ -0,0 +1,52 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+name: "stateful-windowing"
+type: "heron"
+
+config:
+ topology.workers: 1
+ topology.reliability.mode: "EFFECTIVELY_ONCE"
+
+components:
+
+ - id: "windowLength"
+ className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 5
+
+ - id: "slidingInterval"
+ className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 3
+
+spouts:
+ - id: "integer-spout"
+ className: "org.apache.heron.examples.eco.StatefulNumberSpout"
+ parallelism: 1
+
+bolts:
+ - id: "stateful-window-sum-bolt"
+ className: "org.apache.heron.examples.eco.StatefulWindowSumBolt"
+ configMethods:
+ - name: "withWindow"
+ args: [ref: "windowLength", ref: "slidingInterval"]
+ parallelism: 1
+
+
+streams:
+ - from: "integer-spout"
+ to: "stateful-window-sum-bolt"
+ grouping:
+ type: SHUFFLE
\ No newline at end of file
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-word-count.yaml b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-word-count.yaml
new file mode 100644
index 0000000..ebc39bb
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron-stateful-word-count.yaml
@@ -0,0 +1,38 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+name: "stateful-word-count"
+type: "heron"
+
+config:
+ topology.workers: 1
+ topology.reliability.mode: "EFFECTIVELY_ONCE"
+
+
+spouts:
+ - id: "int-spout"
+ className: "org.apache.heron.examples.eco.StatefulRandomIntSpout"
+ parallelism: 1
+
+bolts:
+ - id: "stateful-consumer-bolt"
+ className: "org.apache.heron.examples.eco.StatefulConsumerBolt"
+ parallelism: 1
+
+
+streams:
+ - from: "int-spout"
+ to: "stateful-consumer-bolt"
+ grouping:
+ type: SHUFFLE
\ No newline at end of file
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_fibonacci.yaml b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_fibonacci.yaml
new file mode 100644
index 0000000..93dbd2f
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_fibonacci.yaml
@@ -0,0 +1,75 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+name: "heron-fibonacci-topology"
+type: "heron"
+
+config:
+ topology.workers: 1
+
+components:
+ - id: "property-holder"
+ className: "org.apache.heron.examples.eco.TestPropertyHolder"
+ constructorArgs:
+ - "some argument"
+ properties:
+ - name: "numberProperty"
+ value: 11
+ - name: "publicProperty"
+ value: "This is public property"
+
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestFibonacciSpout"
+ constructorArgs:
+ - ref: "property-holder"
+ parallelism: 1
+
+bolts:
+ - id: "even-and-odd-bolt"
+ className: "org.apache.heron.examples.eco.EvenAndOddBolt"
+ parallelism: 1
+
+ - id: "ibasic-print-bolt"
+ className: "org.apache.heron.examples.eco.TestIBasicPrintBolt"
+ parallelism: 1
+ configMethods:
+ - name: "sampleConfigurationMethod"
+ args:
+ - "${ecoPropertyOne}"
+ - MB
+
+ - id: "sys-out-bolt"
+ className: "org.apache.heron.examples.eco.TestPrintBolt"
+ parallelism: 1
+
+streams:
+ - from: "spout-1"
+ to: "even-and-odd-bolt"
+ grouping:
+ type: SHUFFLE
+
+ - from: "even-and-odd-bolt"
+ to: "ibasic-print-bolt"
+ grouping:
+ type: SHUFFLE
+ streamId: "odds"
+
+ - from: "even-and-odd-bolt"
+ to: "sys-out-bolt"
+ grouping:
+ type: SHUFFLE
+ streamId: "evens"
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_windowing.yaml b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_windowing.yaml
new file mode 100644
index 0000000..ec36d8b
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_windowing.yaml
@@ -0,0 +1,66 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+name: "heron-sliding-window-topology"
+type: "heron"
+
+components:
+ - id: "windowLength"
+ className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 5
+ - id: "slidingInterval"
+ className: "org.apache.heron.api.bolt.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 3
+
+config:
+ topology.workers: 1
+
+# spout definitions
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestNameSpout"
+ parallelism: 1
+
+# bolt definitions
+bolts:
+ - id: "bolt-1"
+ className: "org.apache.heron.examples.eco.TestWindowBolt"
+ configMethods:
+ - name: "withWindow"
+ args: [ref: "windowLength", ref: "slidingInterval"]
+ parallelism: 1
+ - id: "bolt-2"
+ className: "org.apache.heron.examples.eco.TestPrintBolt"
+ parallelism: 1
+
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+
+ - from: "spout-1"
+ to: "bolt-1"
+ grouping:
+ type: FIELDS
+ args: ["word"]
+
+ - from: "bolt-1"
+ to: "bolt-2"
+ grouping:
+ type: SHUFFLE
diff --git a/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_wordcount.yaml b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_wordcount.yaml
new file mode 100644
index 0000000..dbd3f7b
--- /dev/null
+++ b/eco-heron-examples/src/java/org/apache/heron/examples/eco/heron_wordcount.yaml
@@ -0,0 +1,73 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+# topology definition
+# name to be used when submitting
+name: "heron-simple-wordcount-topology"
+type: "heron"
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+ topology.workers: 2
+ topology.component.resourcemap:
+
+ - id: "spout-1"
+ ram: 256MB # The minimum value for a component's specified ram is 256MB
+ cpu: 0.5
+ disk: 4GB
+
+ - id: "bolt-1"
+ ram: 256MB # The minimum value for a component's specified ram is 256MB
+ cpu: 0.5
+ disk: 2GB
+
+ topology.component.jvmoptions:
+
+ - id: "spout-1"
+ options: ["-XX:NewSize=300m", "-Xms2g"]
+
+# spout definitions
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestNameSpout"
+ parallelism: 1
+
+# bolt definitions
+bolts:
+ - id: "bolt-1"
+ className: "org.apache.heron.examples.eco.TestNameCounter"
+ parallelism: 1
+
+ - id: "bolt-2"
+ className: "org.apache.heron.examples.eco.LogInfoBolt"
+ parallelism: 1
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+ - from: "spout-1"
+ to: "bolt-1"
+ grouping:
+ type: FIELDS
+ args: ["word"]
+
+ - from: "bolt-1"
+ to: "bolt-2"
+ grouping:
+ type: SHUFFLE
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/sample.properties b/eco-heron-examples/src/java/org/apache/heron/examples/eco/sample.properties
similarity index 100%
rename from eco-storm-examples/src/java/com/twitter/heron/examples/eco/sample.properties
rename to eco-heron-examples/src/java/org/apache/heron/examples/eco/sample.properties
diff --git a/eco-storm-examples/src/java/BUILD b/eco-storm-examples/src/java/BUILD
index 6ef748d..3036344 100644
--- a/eco-storm-examples/src/java/BUILD
+++ b/eco-storm-examples/src/java/BUILD
@@ -7,7 +7,7 @@ filegroup(
java_binary(
name='storm-eco-examples-unshaded',
- srcs = glob(["com/twitter/heron/examples/eco/**/*.java"]),
+ srcs = glob(["org/apache/heron/examples/eco/**/*.java"]),
deps = [
"//heron/api/src/java:api-java-low-level",
"//heron/api/src/java:api-java",
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java
deleted file mode 100644
index 65487f2..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/EvenAndOddBolt.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-
-import java.util.Map;
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.IBasicBolt;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-
-import static org.apache.storm.utils.Utils.tuple;
-
-@SuppressWarnings({"serial", "rawtypes", "unchecked"})
-public class EvenAndOddBolt implements IBasicBolt {
-
-
- @Override
- public void prepare(Map stormConf, TopologyContext context) {
-
- }
-
- protected int getTupleValue(Tuple t, int idx) {
- return (int) t.getValues().get(idx);
- }
-
- @Override
- public void execute(Tuple input, BasicOutputCollector collector) {
- int number = getTupleValue(input, 0);
-
- if (number % 2 == 0) {
- System.out.println("Emitting to evens stream: " + number);
- collector.emit("evens", tuple(input.getValues().get(0)));
-
- } else {
- System.out.println("emitting to odds stream: " + number);
- collector.emit("odds", tuple(input.getValues().get(0)));
- }
-
- collector.emit(tuple(input.getValues().get(0)));
-
-
-
- }
-
- @Override
- public void cleanup() {
-
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declareStream("evens", new Fields("evens"));
- declarer.declareStream("odds", new Fields("odds"));
- declarer.declare(new Fields("number"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- return null;
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java
deleted file mode 100644
index 3271178..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/LogInfoBolt.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-
-import java.util.logging.Logger;
-
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Tuple;
-
-/**
- * Simple bolt that does nothing other than LOG.info() every tuple received.
- *
- */
-@SuppressWarnings("serial")
-public class LogInfoBolt extends BaseBasicBolt {
- private static final Logger LOG = Logger.getLogger(LogInfoBolt.class.getName());
-
- @Override
- public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
- LOG.info("{ }" + tuple);
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
-
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java
deleted file mode 100644
index f3f11e4..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestFibonacciSpout.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-import java.util.Random;
-import java.util.logging.Logger;
-
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.utils.Utils;
-
-@SuppressWarnings({"serial", "rawtypes", "HiddenField"})
-public class TestFibonacciSpout extends BaseRichSpout {
- private static final Logger LOG = Logger.getLogger(TestFibonacciSpout.class.getName());
- private TestPropertyHolder holder;
- private SpoutOutputCollector collector;
-
- public TestFibonacciSpout(TestPropertyHolder holder) {
- this.holder = holder;
- }
-
- @Override
- public void open(Map<String, Object> conf, TopologyContext context,
- SpoutOutputCollector collector) {
- this.collector = collector;
- }
-
- @Override
- public void nextTuple() {
- Utils.sleep(100);
- final int[] words = new int[] {0, 1, 2, 3, 5, 8, 13, 21, 34};
- final Random rand = new Random();
- final int number = words[rand.nextInt(words.length)];
- final String property = holder.getProperty();
- final int numberProperty = holder.getNumberProperty();
- final String publicProperty = holder.publicProperty;
- LOG.info("Constructor Args: " + property);
- LOG.info("Property set by setter: " + numberProperty);
- LOG.info("Property set by public field: " + publicProperty);
- LOG.info("Emitting: number " + number);
- collector.emit(new Values(number));
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("number"));
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java
deleted file mode 100644
index 8d5d4c9..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestIBasicPrintBolt.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.IBasicBolt;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-
-import static org.apache.storm.utils.Utils.tuple;
-
-@SuppressWarnings({"serial", "rawtypes", "unchecked", "HiddenField"})
-public class TestIBasicPrintBolt implements IBasicBolt {
-
- public String someProperty = "set ";
-
- public TestUnits testUnits;
-
- @Override
- public void prepare(Map stormConf, TopologyContext context) {
-
- }
-
- public void sampleConfigurationMethod(String someProperty, TestUnits testUnits) {
- this.someProperty += someProperty;
- this.testUnits = testUnits;
- }
-
- @Override
- public void execute(Tuple input, BasicOutputCollector collector) {
- System.out.println("The configuration method has set \"someProperty\" to : "
- + this.someProperty);
- System.out.println("The configuration method has set TestUnits to " + testUnits);
- System.out.println("Emitting : " + input);
- collector.emit(tuple(input.getValues().get(0)));
-
- }
-
- @Override
- public void cleanup() {
-
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("ibasic-print"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- return null;
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java
deleted file mode 100644
index 00b5f64..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameCounter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Tuple;
-
-import static com.twitter.heron.api.utils.Utils.tuple;
-@SuppressWarnings({"serial", "rawtypes"})
-public class TestNameCounter extends BaseBasicBolt {
-
- private Map<String, Integer> counts;
-
- @Override
- public void prepare(Map map, TopologyContext topologyContext) {
- counts = new HashMap<>();
- }
-
-
- protected String getTupleValue(Tuple t, int idx) {
- return (String) t.getValues().get(idx);
- }
-
- public void execute(Tuple input, BasicOutputCollector collector) {
- String word = getTupleValue(input, 0);
- int count = 0;
- if (counts.containsKey(word)) {
- count = counts.get(word);
- }
- count++;
- counts.put(word, count);
- collector.emit(tuple(word, count));
- }
-
- public void cleanup() {
-
- }
-
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("name", "count"));
- }
-
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java
deleted file mode 100644
index 4e7e8a5..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestNameSpout.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.storm.Config;
-import org.apache.storm.spout.SpoutOutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseRichSpout;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.utils.Utils;
-
-@SuppressWarnings({"serial", "HiddenField"})
-public class TestNameSpout extends BaseRichSpout {
- private boolean isdistributed;
- private SpoutOutputCollector collector;
-
- public TestNameSpout() {
- this(true);
- }
-
- public TestNameSpout(boolean isDistributed) {
- isdistributed = isDistributed;
- }
-
- public void open(Map<String, Object> conf, TopologyContext context,
- SpoutOutputCollector collector) {
- this.collector = collector;
- }
-
- public void close() {
-
- }
-
- public void nextTuple() {
- Utils.sleep(100);
- final String[] words = new String[] {"marge", "homer", "bart", "simpson", "lisa"};
- final Random rand = new Random();
- final String word = words[rand.nextInt(words.length)];
- collector.emit(new Values(word));
- }
-
- public void ack(Object msgId) {
-
- }
-
- public void fail(Object msgId) {
-
- }
-
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("name"));
- }
-
- @Override
- public Map<String, Object> getComponentConfiguration() {
- if (!isdistributed) {
- Map<String, Object> ret = new HashMap<String, Object>();
- ret.put(Config.TOPOLOGY_WORKERS, 1);
- return ret;
- } else {
- return null;
- }
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java
deleted file mode 100644
index f9cb1d6..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPrintBolt.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import org.apache.storm.topology.BasicOutputCollector;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseBasicBolt;
-import org.apache.storm.tuple.Tuple;
-
-@SuppressWarnings("serial")
-public class TestPrintBolt extends BaseBasicBolt {
-
- @Override
- public void execute(Tuple tuple, BasicOutputCollector collector) {
- System.out.println(tuple);
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer ofd) {
- }
-
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java
deleted file mode 100644
index 2020fe4..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestPropertyHolder.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.io.Serializable;
-
-@SuppressWarnings("serial")
-public class TestPropertyHolder implements Serializable {
-
- private String property;
-
- private int numberProperty;
-
- public String publicProperty;
-
-
- public TestPropertyHolder(String property) {
- this.property = property;
- }
-
- public String getProperty() {
- return property;
- }
-
- public void setProperty(String property) {
- this.property = property;
- }
-
- public int getNumberProperty() {
- return numberProperty;
- }
-
- public void setNumberProperty(int numberProperty) {
- this.numberProperty = numberProperty;
- }
-
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java
deleted file mode 100644
index f1d469b..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestUnits.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-/**
- * Sample unit of measure enum
- */
-public enum TestUnits {
- MB("MB"),
- GB("GB"),
- B("B");
-
- private String value;
-
- TestUnits(String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java
deleted file mode 100644
index ef6046c..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/TestWindowBolt.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.examples.eco;
-
-import java.util.Map;
-
-import org.apache.storm.task.OutputCollector;
-import org.apache.storm.task.TopologyContext;
-import org.apache.storm.topology.OutputFieldsDeclarer;
-import org.apache.storm.topology.base.BaseWindowedBolt;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.tuple.Values;
-import org.apache.storm.windowing.TupleWindow;
-
-@SuppressWarnings({"serial", "HiddenField"})
-public class TestWindowBolt extends BaseWindowedBolt {
- private OutputCollector collector;
-
-
- @Override
- public void prepare(Map<String, Object> topoConf, TopologyContext context,
- OutputCollector collector) {
- this.collector = collector;
- }
-
- @Override
- public void execute(TupleWindow inputWindow) {
- collector.emit(new Values(inputWindow.get().size()));
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("count"));
- }
-}
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/fibonacci.yaml b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/fibonacci.yaml
deleted file mode 100644
index 7ebb2d7..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/fibonacci.yaml
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-name: "fibonacci-topology"
-
-config:
- topology.workers: 1
-
-components:
- - id: "property-holder"
- className: "com.twitter.heron.examples.eco.TestPropertyHolder"
- constructorArgs:
- - "some argument"
- properties:
- - name: "numberProperty"
- value: 11
- - name: "publicProperty"
- value: "This is public property"
-
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestFibonacciSpout"
- constructorArgs:
- - ref: "property-holder"
- parallelism: 1
-
-bolts:
- - id: "even-and-odd-bolt"
- className: "com.twitter.heron.examples.eco.EvenAndOddBolt"
- parallelism: 1
-
- - id: "ibasic-print-bolt"
- className: "com.twitter.heron.examples.eco.TestIBasicPrintBolt"
- parallelism: 1
- configMethods:
- - name: "sampleConfigurationMethod"
- args:
- - "${ecoPropertyOne}"
- - MB
-
- - id: "sys-out-bolt"
- className: "com.twitter.heron.examples.eco.TestPrintBolt"
- parallelism: 1
-
-streams:
- - from: "spout-1"
- to: "even-and-odd-bolt"
- grouping:
- type: SHUFFLE
-
- - from: "even-and-odd-bolt"
- to: "ibasic-print-bolt"
- grouping:
- type: SHUFFLE
- streamId: "odds"
-
- - from: "even-and-odd-bolt"
- to: "sys-out-bolt"
- grouping:
- type: SHUFFLE
- streamId: "evens"
\ No newline at end of file
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_windowing.yaml b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_windowing.yaml
deleted file mode 100644
index 777bfb6..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_windowing.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-name: "sliding-window-topology"
-
-components:
- - id: "windowLength"
- className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
- constructorArgs:
- - 5
- - id: "slidingInterval"
- className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
- constructorArgs:
- - 3
-
-config:
- topology.workers: 1
-
-# spout definitions
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestNameSpout"
- parallelism: 1
-
-# bolt definitions
-bolts:
- - id: "bolt-1"
- className: "com.twitter.heron.examples.eco.TestWindowBolt"
- configMethods:
- - name: "withWindow"
- args: [ref: "windowLength", ref: "slidingInterval"]
- parallelism: 1
- - id: "bolt-2"
- className: "com.twitter.heron.examples.eco.TestPrintBolt"
- parallelism: 1
-
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
-
- - from: "spout-1"
- to: "bolt-1"
- grouping:
- type: FIELDS
- args: ["word"]
-
- - from: "bolt-1"
- to: "bolt-2"
- grouping:
- type: SHUFFLE
\ No newline at end of file
diff --git a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_wordcount.yaml b/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_wordcount.yaml
deleted file mode 100644
index 6d18b73..0000000
--- a/eco-storm-examples/src/java/com/twitter/heron/examples/eco/simple_wordcount.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2017 Twitter. All rights reserved.
-#
-# 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.
-
----
-
-# topology definition
-# name to be used when submitting
-name: "simple-wordcount-topology"
-
-# topology configuration
-# this will be passed to the submitter as a map of config options
-#
-config:
- topology.workers: 2
- topology.component.resourcemap:
-
- - id: "spout-1"
- ram: 256MB # The minimum value for a component's specified ram is 256MB
- cpu: 0.5
- disk: 4GB
-
- - id: "bolt-1"
- ram: 256MB # The minimum value for a component's specified ram is 256MB
- cpu: 0.5
- disk: 2GB
-
- topology.component.jvmoptions:
-
- - id: "spout-1"
- options: ["-XX:NewSize=300m", "-Xms2g"]
-
-# spout definitions
-spouts:
- - id: "spout-1"
- className: "com.twitter.heron.examples.eco.TestNameSpout"
- parallelism: 1
-
-# bolt definitions
-bolts:
- - id: "bolt-1"
- className: "com.twitter.heron.examples.eco.TestNameCounter"
- parallelism: 1
-
- - id: "bolt-2"
- className: "com.twitter.heron.examples.eco.LogInfoBolt"
- parallelism: 1
-
-#stream definitions
-# stream definitions define connections between spouts and bolts.
-# note that such connections can be cyclical
-streams:
- - from: "spout-1"
- to: "bolt-1"
- grouping:
- type: FIELDS
- args: ["word"]
-
- - from: "bolt-1"
- to: "bolt-2"
- grouping:
- type: SHUFFLE
\ No newline at end of file
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java
new file mode 100644
index 0000000..ed6bd07
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/EvenAndOddBolt.java
@@ -0,0 +1,76 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+
+import java.util.Map;
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.IBasicBolt;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+
+import static org.apache.storm.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes", "unchecked"})
+public class EvenAndOddBolt implements IBasicBolt {
+
+
+ @Override
+ public void prepare(Map stormConf, TopologyContext context) {
+
+ }
+
+ protected int getTupleValue(Tuple t, int idx) {
+ return (int) t.getValues().get(idx);
+ }
+
+ @Override
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ int number = getTupleValue(input, 0);
+
+ if (number % 2 == 0) {
+ System.out.println("Emitting to evens stream: " + number);
+ collector.emit("evens", tuple(input.getValues().get(0)));
+
+ } else {
+ System.out.println("emitting to odds stream: " + number);
+ collector.emit("odds", tuple(input.getValues().get(0)));
+ }
+
+ collector.emit(tuple(input.getValues().get(0)));
+
+
+
+ }
+
+ @Override
+ public void cleanup() {
+
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declareStream("evens", new Fields("evens"));
+ declarer.declareStream("odds", new Fields("odds"));
+ declarer.declare(new Fields("number"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ return null;
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java
new file mode 100644
index 0000000..e506f8c
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/LogInfoBolt.java
@@ -0,0 +1,41 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+
+import java.util.logging.Logger;
+
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Tuple;
+
+/**
+ * Simple bolt that does nothing other than LOG.info() every tuple received.
+ *
+ */
+@SuppressWarnings("serial")
+public class LogInfoBolt extends BaseBasicBolt {
+ private static final Logger LOG = Logger.getLogger(LogInfoBolt.class.getName());
+
+ @Override
+ public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {
+ LOG.info("{ }" + tuple);
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
+
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java
new file mode 100644
index 0000000..6c5376b
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestFibonacciSpout.java
@@ -0,0 +1,64 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.logging.Logger;
+
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.utils.Utils;
+
+@SuppressWarnings({"serial", "rawtypes", "HiddenField"})
+public class TestFibonacciSpout extends BaseRichSpout {
+ private static final Logger LOG = Logger.getLogger(TestFibonacciSpout.class.getName());
+ private TestPropertyHolder holder;
+ private SpoutOutputCollector collector;
+
+ public TestFibonacciSpout(TestPropertyHolder holder) {
+ this.holder = holder;
+ }
+
+ @Override
+ public void open(Map<String, Object> conf, TopologyContext context,
+ SpoutOutputCollector collector) {
+ this.collector = collector;
+ }
+
+ @Override
+ public void nextTuple() {
+ Utils.sleep(100);
+ final int[] words = new int[] {0, 1, 2, 3, 5, 8, 13, 21, 34};
+ final Random rand = new Random();
+ final int number = words[rand.nextInt(words.length)];
+ final String property = holder.getProperty();
+ final int numberProperty = holder.getNumberProperty();
+ final String publicProperty = holder.publicProperty;
+ LOG.info("Constructor Args: " + property);
+ LOG.info("Property set by setter: " + numberProperty);
+ LOG.info("Property set by public field: " + publicProperty);
+ LOG.info("Emitting: number " + number);
+ collector.emit(new Values(number));
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("number"));
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java
new file mode 100644
index 0000000..0914677
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestIBasicPrintBolt.java
@@ -0,0 +1,68 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.IBasicBolt;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+
+import static org.apache.storm.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes", "unchecked", "HiddenField"})
+public class TestIBasicPrintBolt implements IBasicBolt {
+
+ public String someProperty = "set ";
+
+ public TestUnits testUnits;
+
+ @Override
+ public void prepare(Map stormConf, TopologyContext context) {
+
+ }
+
+ public void sampleConfigurationMethod(String someProperty, TestUnits testUnits) {
+ this.someProperty += someProperty;
+ this.testUnits = testUnits;
+ }
+
+ @Override
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ System.out.println("The configuration method has set \"someProperty\" to : "
+ + this.someProperty);
+ System.out.println("The configuration method has set TestUnits to " + testUnits);
+ System.out.println("Emitting : " + input);
+ collector.emit(tuple(input.getValues().get(0)));
+
+ }
+
+ @Override
+ public void cleanup() {
+
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("ibasic-print"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ return null;
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java
new file mode 100644
index 0000000..cde5bfd
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameCounter.java
@@ -0,0 +1,62 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Tuple;
+
+import static org.apache.heron.api.utils.Utils.tuple;
+
+@SuppressWarnings({"serial", "rawtypes"})
+public class TestNameCounter extends BaseBasicBolt {
+
+ private Map<String, Integer> counts;
+
+ @Override
+ public void prepare(Map map, TopologyContext topologyContext) {
+ counts = new HashMap<>();
+ }
+
+
+ protected String getTupleValue(Tuple t, int idx) {
+ return (String) t.getValues().get(idx);
+ }
+
+ public void execute(Tuple input, BasicOutputCollector collector) {
+ String word = getTupleValue(input, 0);
+ int count = 0;
+ if (counts.containsKey(word)) {
+ count = counts.get(word);
+ }
+ count++;
+ counts.put(word, count);
+ collector.emit(tuple(word, count));
+ }
+
+ public void cleanup() {
+
+ }
+
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("name", "count"));
+ }
+
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java
new file mode 100644
index 0000000..101051e
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestNameSpout.java
@@ -0,0 +1,81 @@
+// Copyright 2017 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.storm.Config;
+import org.apache.storm.spout.SpoutOutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseRichSpout;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.utils.Utils;
+
+@SuppressWarnings({"serial", "HiddenField"})
+public class TestNameSpout extends BaseRichSpout {
+ private boolean isdistributed;
+ private SpoutOutputCollector collector;
+
+ public TestNameSpout() {
+ this(true);
+ }
+
+ public TestNameSpout(boolean isDistributed) {
+ isdistributed = isDistributed;
+ }
+
+ public void open(Map<String, Object> conf, TopologyContext context,
+ SpoutOutputCollector collector) {
+ this.collector = collector;
+ }
+
+ public void close() {
+
+ }
+
+ public void nextTuple() {
+ Utils.sleep(100);
+ final String[] words = new String[] {"marge", "homer", "bart", "simpson", "lisa"};
+ final Random rand = new Random();
+ final String word = words[rand.nextInt(words.length)];
+ collector.emit(new Values(word));
+ }
+
+ public void ack(Object msgId) {
+
+ }
+
+ public void fail(Object msgId) {
+
+ }
+
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("name"));
+ }
+
+ @Override
+ public Map<String, Object> getComponentConfiguration() {
+ if (!isdistributed) {
+ Map<String, Object> ret = new HashMap<String, Object>();
+ ret.put(Config.TOPOLOGY_WORKERS, 1);
+ return ret;
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java
new file mode 100644
index 0000000..ef31403
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPrintBolt.java
@@ -0,0 +1,33 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import org.apache.storm.topology.BasicOutputCollector;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseBasicBolt;
+import org.apache.storm.tuple.Tuple;
+
+@SuppressWarnings("serial")
+public class TestPrintBolt extends BaseBasicBolt {
+
+ @Override
+ public void execute(Tuple tuple, BasicOutputCollector collector) {
+ System.out.println(tuple);
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer ofd) {
+ }
+
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java
new file mode 100644
index 0000000..ff92a38
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestPropertyHolder.java
@@ -0,0 +1,48 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class TestPropertyHolder implements Serializable {
+
+ private String property;
+
+ private int numberProperty;
+
+ public String publicProperty;
+
+
+ public TestPropertyHolder(String property) {
+ this.property = property;
+ }
+
+ public String getProperty() {
+ return property;
+ }
+
+ public void setProperty(String property) {
+ this.property = property;
+ }
+
+ public int getNumberProperty() {
+ return numberProperty;
+ }
+
+ public void setNumberProperty(int numberProperty) {
+ this.numberProperty = numberProperty;
+ }
+
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestUnits.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestUnits.java
new file mode 100644
index 0000000..4df8b42
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestUnits.java
@@ -0,0 +1,33 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+/**
+ * Sample unit of measure enum
+ */
+public enum TestUnits {
+ MB("MB"),
+ GB("GB"),
+ B("B");
+
+ private String value;
+
+ TestUnits(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java
new file mode 100644
index 0000000..99facd1
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/TestWindowBolt.java
@@ -0,0 +1,46 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.examples.eco;
+
+import java.util.Map;
+
+import org.apache.storm.task.OutputCollector;
+import org.apache.storm.task.TopologyContext;
+import org.apache.storm.topology.OutputFieldsDeclarer;
+import org.apache.storm.topology.base.BaseWindowedBolt;
+import org.apache.storm.tuple.Fields;
+import org.apache.storm.tuple.Values;
+import org.apache.storm.windowing.TupleWindow;
+
+@SuppressWarnings({"serial", "HiddenField"})
+public class TestWindowBolt extends BaseWindowedBolt {
+ private OutputCollector collector;
+
+
+ @Override
+ public void prepare(Map<String, Object> topoConf, TopologyContext context,
+ OutputCollector collector) {
+ this.collector = collector;
+ }
+
+ @Override
+ public void execute(TupleWindow inputWindow) {
+ collector.emit(new Values(inputWindow.get().size()));
+ }
+
+ @Override
+ public void declareOutputFields(OutputFieldsDeclarer declarer) {
+ declarer.declare(new Fields("count"));
+ }
+}
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/fibonacci.yaml b/eco-storm-examples/src/java/org/apache/heron/examples/eco/fibonacci.yaml
new file mode 100644
index 0000000..b1080ac
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/fibonacci.yaml
@@ -0,0 +1,74 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+name: "fibonacci-topology"
+
+config:
+ topology.workers: 1
+
+components:
+ - id: "property-holder"
+ className: "org.apache.heron.examples.eco.TestPropertyHolder"
+ constructorArgs:
+ - "some argument"
+ properties:
+ - name: "numberProperty"
+ value: 11
+ - name: "publicProperty"
+ value: "This is public property"
+
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestFibonacciSpout"
+ constructorArgs:
+ - ref: "property-holder"
+ parallelism: 1
+
+bolts:
+ - id: "even-and-odd-bolt"
+ className: "org.apache.heron.examples.eco.EvenAndOddBolt"
+ parallelism: 1
+
+ - id: "ibasic-print-bolt"
+ className: "org.apache.heron.examples.eco.TestIBasicPrintBolt"
+ parallelism: 1
+ configMethods:
+ - name: "sampleConfigurationMethod"
+ args:
+ - "${ecoPropertyOne}"
+ - MB
+
+ - id: "sys-out-bolt"
+ className: "org.apache.heron.examples.eco.TestPrintBolt"
+ parallelism: 1
+
+streams:
+ - from: "spout-1"
+ to: "even-and-odd-bolt"
+ grouping:
+ type: SHUFFLE
+
+ - from: "even-and-odd-bolt"
+ to: "ibasic-print-bolt"
+ grouping:
+ type: SHUFFLE
+ streamId: "odds"
+
+ - from: "even-and-odd-bolt"
+ to: "sys-out-bolt"
+ grouping:
+ type: SHUFFLE
+ streamId: "evens"
\ No newline at end of file
diff --git a/eco-heron-examples/src/java/com/twitter/heron/examples/eco/sample.properties b/eco-storm-examples/src/java/org/apache/heron/examples/eco/sample.properties
similarity index 100%
rename from eco-heron-examples/src/java/com/twitter/heron/examples/eco/sample.properties
rename to eco-storm-examples/src/java/org/apache/heron/examples/eco/sample.properties
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_windowing.yaml b/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_windowing.yaml
new file mode 100644
index 0000000..0493d0a
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_windowing.yaml
@@ -0,0 +1,65 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+name: "sliding-window-topology"
+
+components:
+ - id: "windowLength"
+ className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 5
+ - id: "slidingInterval"
+ className: "org.apache.storm.topology.base.BaseWindowedBolt$Count"
+ constructorArgs:
+ - 3
+
+config:
+ topology.workers: 1
+
+# spout definitions
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestNameSpout"
+ parallelism: 1
+
+# bolt definitions
+bolts:
+ - id: "bolt-1"
+ className: "org.apache.heron.examples.eco.TestWindowBolt"
+ configMethods:
+ - name: "withWindow"
+ args: [ref: "windowLength", ref: "slidingInterval"]
+ parallelism: 1
+ - id: "bolt-2"
+ className: "org.apache.heron.examples.eco.TestPrintBolt"
+ parallelism: 1
+
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+
+ - from: "spout-1"
+ to: "bolt-1"
+ grouping:
+ type: FIELDS
+ args: ["word"]
+
+ - from: "bolt-1"
+ to: "bolt-2"
+ grouping:
+ type: SHUFFLE
\ No newline at end of file
diff --git a/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_wordcount.yaml b/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_wordcount.yaml
new file mode 100644
index 0000000..ec0ec72
--- /dev/null
+++ b/eco-storm-examples/src/java/org/apache/heron/examples/eco/simple_wordcount.yaml
@@ -0,0 +1,72 @@
+# Copyright 2017 Twitter. All rights reserved.
+#
+# 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.
+
+---
+
+# topology definition
+# name to be used when submitting
+name: "simple-wordcount-topology"
+
+# topology configuration
+# this will be passed to the submitter as a map of config options
+#
+config:
+ topology.workers: 2
+ topology.component.resourcemap:
+
+ - id: "spout-1"
+ ram: 256MB # The minimum value for a component's specified ram is 256MB
+ cpu: 0.5
+ disk: 4GB
+
+ - id: "bolt-1"
+ ram: 256MB # The minimum value for a component's specified ram is 256MB
+ cpu: 0.5
+ disk: 2GB
+
+ topology.component.jvmoptions:
+
+ - id: "spout-1"
+ options: ["-XX:NewSize=300m", "-Xms2g"]
+
+# spout definitions
+spouts:
+ - id: "spout-1"
+ className: "org.apache.heron.examples.eco.TestNameSpout"
+ parallelism: 1
+
+# bolt definitions
+bolts:
+ - id: "bolt-1"
+ className: "org.apache.heron.examples.eco.TestNameCounter"
+ parallelism: 1
+
+ - id: "bolt-2"
+ className: "org.apache.heron.examples.eco.LogInfoBolt"
+ parallelism: 1
+
+#stream definitions
+# stream definitions define connections between spouts and bolts.
+# note that such connections can be cyclical
+streams:
+ - from: "spout-1"
+ to: "bolt-1"
+ grouping:
+ type: FIELDS
+ args: ["word"]
+
+ - from: "bolt-1"
+ to: "bolt-2"
+ grouping:
+ type: SHUFFLE
\ No newline at end of file
diff --git a/eco/src/java/BUILD b/eco/src/java/BUILD
index 158fe1a..71d70bf 100644
--- a/eco/src/java/BUILD
+++ b/eco/src/java/BUILD
@@ -13,25 +13,25 @@ eco_deps = [
java_library(
name = "eco-defs-java",
- srcs = glob(["com/twitter/heron/eco/definition/*.java"]),
+ srcs = glob(["org/apache/heron/eco/definition/*.java"]),
deps = eco_deps,
)
java_library(
name = "eco-parser-java",
- srcs = glob(["com/twitter/heron/eco/parser/*.java"]),
+ srcs = glob(["org/apache/heron/eco/parser/*.java"]),
deps = eco_deps + [":eco-defs-java"],
)
java_library(
name = "eco-builder-java",
- srcs = glob(["com/twitter/heron/eco/builder/*.java"]),
+ srcs = glob(["org/apache/heron/eco/builder/*.java"]),
deps = eco_deps + [":eco-defs-java"],
)
java_library(
name = "eco-storm-builder-java",
- srcs = glob(["com/twitter/heron/eco/builder/storm/*.java"]),
+ srcs = glob(["org/apache/heron/eco/builder/storm/*.java"]),
deps = eco_deps + [
":eco-builder-java",
":eco-defs-java",
@@ -40,7 +40,7 @@ java_library(
java_library(
name = "eco-heron-builder-java",
- srcs = glob(["com/twitter/heron/eco/builder/heron/*.java"]),
+ srcs = glob(["org/apache/heron/eco/builder/heron/*.java"]),
deps = eco_deps + [
":eco-builder-java",
":eco-defs-java",
@@ -49,13 +49,13 @@ java_library(
java_library(
name = "eco-submit-java",
- srcs = glob(["com/twitter/heron/eco/submit/*.java"]),
+ srcs = glob(["org/apache/heron/eco/submit/*.java"]),
deps = eco_deps,
)
java_library(
name = "eco-java",
- srcs = glob(["com/twitter/heron/eco/*.java"]),
+ srcs = glob(["org/apache/heron/eco/*.java"]),
deps = eco_deps + [
":eco-defs-java",
":eco-parser-java",
diff --git a/eco/src/java/com/twitter/heron/eco/Eco.java b/eco/src/java/com/twitter/heron/eco/Eco.java
deleted file mode 100644
index 77b4dd8..0000000
--- a/eco/src/java/com/twitter/heron/eco/Eco.java
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.eco.builder.BoltBuilder;
-import com.twitter.heron.eco.builder.BuilderUtility;
-import com.twitter.heron.eco.builder.ComponentBuilder;
-import com.twitter.heron.eco.builder.ConfigBuilder;
-import com.twitter.heron.eco.builder.ObjectBuilder;
-import com.twitter.heron.eco.definition.BoltDefinition;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.SpoutDefinition;
-import com.twitter.heron.eco.definition.StreamDefinition;
-import com.twitter.heron.eco.parser.EcoParser;
-import com.twitter.heron.eco.submit.EcoSubmitter;
-
-
-public class Eco {
-
- private static final Logger LOG = Logger.getLogger(Eco.class.getName());
- private static final String PROPS = "props";
- private static final String ENV_PROPS = "env-props";
- private static final String ECO_CONFIG_FILE = "eco-config-file";
-
- private EcoParser ecoParser;
- private EcoSubmitter ecoSubmitter;
-
- public Eco(EcoParser ecoParser, EcoSubmitter ecoSubmitter) {
- this.ecoParser = ecoParser;
- this.ecoSubmitter = ecoSubmitter;
- }
-
- /**
- * Submit an ECO topology
- *
- * @param fileInputStream The input stream associated with ECO topology definition file
- * @param propertiesFile The optional key-value property file for optional property substitution.
- * @param envFilter The optional flag to tell ECO to perform environment variable substitution
- * @throws Exception
- */
- public void submit(FileInputStream fileInputStream,
- FileInputStream propertiesFile, boolean envFilter)
- throws Exception {
- EcoTopologyDefinition topologyDefinition = ecoParser
- .parseFromInputStream(fileInputStream, propertiesFile, envFilter);
-
- String topologyName = topologyDefinition.getName();
- String topologyType = topologyDefinition.getType();
-
- if ("storm".equals(topologyType)) {
- System.out.println("topology type is Storm");
- com.twitter.heron.eco.builder.storm.EcoBuilder ecoBuilder =
- new com.twitter.heron.eco.builder.storm.EcoBuilder(
- new com.twitter.heron.eco.builder.storm.SpoutBuilder(),
- new BoltBuilder(),
- new com.twitter.heron.eco.builder.storm.StreamBuilder(),
- new ComponentBuilder(),
- new ConfigBuilder());
-
- Config topologyConfig = ecoBuilder
- .buildConfig(topologyDefinition);
-
- EcoExecutionContext executionContext
- = new EcoExecutionContext(topologyDefinition, topologyConfig);
-
- printTopologyInfo(executionContext);
-
- ObjectBuilder objectBuilder = new ObjectBuilder();
- objectBuilder.setBuilderUtility(new BuilderUtility());
-
- org.apache.storm.topology.TopologyBuilder builder = ecoBuilder
- .buildTopologyBuilder(executionContext, objectBuilder);
- ecoSubmitter.submitStormTopology(topologyName, topologyConfig, builder.createTopology());
- } else if ("heron".equals(topologyType)) {
- System.out.println("topology type is Heron");
- com.twitter.heron.eco.builder.heron.EcoBuilder ecoBuilder =
- new com.twitter.heron.eco.builder.heron.EcoBuilder(
- new com.twitter.heron.eco.builder.heron.SpoutBuilder(),
- new BoltBuilder(),
- new com.twitter.heron.eco.builder.heron.StreamBuilder(),
- new ComponentBuilder(),
- new ConfigBuilder());
-
- Config topologyConfig = ecoBuilder
- .buildConfig(topologyDefinition);
-
- EcoExecutionContext executionContext
- = new EcoExecutionContext(topologyDefinition, topologyConfig);
-
- printTopologyInfo(executionContext);
-
- ObjectBuilder objectBuilder = new ObjectBuilder();
- objectBuilder.setBuilderUtility(new BuilderUtility());
-
- com.twitter.heron.api.topology.TopologyBuilder builder = ecoBuilder
- .buildTopologyBuilder(executionContext, objectBuilder);
- ecoSubmitter.submitHeronTopology(topologyName, topologyConfig, builder.createTopology());
- } else {
- LOG.log(Level.SEVERE,
- String.format("Unknown topology type \'%s\' for topology %s, not submitted",
- topologyType, topologyName));
- }
- }
-
- public static void main(String[] args) throws Exception {
- Options options = constructOptions();
-
- CommandLineParser parser = new DefaultParser();
-
- CommandLine cmd;
- try {
- cmd = parser.parse(options, args);
- } catch (ParseException e) {
- throw new RuntimeException("Error parsing command line options: ", e);
- }
-
-
- FileInputStream fin = new FileInputStream(new File(cmd.getOptionValue(ECO_CONFIG_FILE)));
-
- String propsFile = cmd.getOptionValue(PROPS);
- FileInputStream propsInputStream = null;
-
- if (propsFile != null) {
- propsInputStream = new FileInputStream(new File(propsFile));
- }
-
-
- Boolean filterFromEnv = cmd.hasOption(ENV_PROPS);
-
- Eco eco = new Eco(new EcoParser(), new EcoSubmitter());
-
- eco.submit(fin, propsInputStream, filterFromEnv);
- }
-
- private static Options constructOptions() {
- Options options = new Options();
- Option ecoConfig = Option.builder("eco")
- .desc("Yaml config file for specifying topology definitions")
- .longOpt(ECO_CONFIG_FILE)
- .hasArgs()
- .argName(ECO_CONFIG_FILE)
- .required()
- .build();
-
-
- Option filterOption = Option.builder(PROPS)
- .desc("properties file for property substitution")
- .longOpt(PROPS)
- .hasArgs()
- .required(false)
- .argName(PROPS)
- .build();
-
- Option envSubOption = Option.builder("envFilter")
- .desc("Perform environment variable substitution.")
- .longOpt(ENV_PROPS)
- .numberOfArgs(0)
- .required(false)
- .build();
-
- options.addOption(filterOption);
- options.addOption(ecoConfig);
- options.addOption(envSubOption);
-
- return options;
- }
-
- // construct command line help options
- //TODO: (joshfischer) integrate with existing system somehow
- private static Options constructHelpOptions() {
- Options options = new Options();
- Option help = Option.builder("h")
- .desc("List all options and their description")
- .longOpt("help")
- .build();
-
- options.addOption(help);
- return options;
- }
-
- static void printTopologyInfo(EcoExecutionContext ctx) {
- EcoTopologyDefinition t = ctx.getTopologyDefinition();
-
- LOG.info("---------- TOPOLOGY DETAILS ----------");
-
- LOG.info(String.format("Topology Name: %s", t.getName()));
- LOG.info("--------------- SPOUTS ---------------");
- for (SpoutDefinition s : t.getSpouts()) {
- LOG.info(String.format("%s [%d] (%s)", s.getId(), s.getParallelism(), s.getClassName()));
- }
- LOG.info("---------------- BOLTS ---------------");
- for (BoltDefinition b : t.getBolts()) {
- LOG.info(String.format("%s [%d] (%s)", b.getId(), b.getParallelism(), b.getClassName()));
- }
-
- LOG.info("--------------- STREAMS ---------------");
- for (StreamDefinition sd : t.getStreams()) {
- LOG.info(String.format("%s --%s--> %s",
- sd.getFrom(),
- sd.getGrouping().getType(),
- sd.getTo()));
- }
- LOG.info("--------------------------------------");
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/BoltBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/BoltBuilder.java
deleted file mode 100644
index 5259db5..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/BoltBuilder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder;
-
-import java.lang.reflect.InvocationTargetException;
-
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-
-public class BoltBuilder {
-
- public void buildBolts(EcoExecutionContext executionContext,
- ObjectBuilder objectBuilder)
- throws IllegalAccessException, InstantiationException, ClassNotFoundException,
- NoSuchFieldException, InvocationTargetException {
- EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
-
- for (ObjectDefinition def: topologyDefinition.getBolts()) {
- Object obj = objectBuilder.buildObject(def, executionContext);
- executionContext.addBolt(def.getId(), obj);
- }
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/BuilderUtility.java b/eco/src/java/com/twitter/heron/eco/builder/BuilderUtility.java
deleted file mode 100644
index 3366cb5..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/BuilderUtility.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.twitter.heron.eco.definition.BeanListReference;
-import com.twitter.heron.eco.definition.BeanReference;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-import com.twitter.heron.eco.definition.PropertyDefinition;
-
-public class BuilderUtility {
-
- private static final Logger LOG = LoggerFactory.getLogger(BuilderUtility.class);
-
- @SuppressWarnings("rawtypes")
- protected List<Object> resolveReferences(List<Object> args, EcoExecutionContext context) {
- LOG.debug("Checking arguments for references.");
- List<Object> cArgs = new ArrayList<>();
-
- // resolve references
- for (Object arg : args) {
- if (arg instanceof BeanReference) {
- LOG.debug("BeanReference: " + ((BeanReference) arg).getId());
- cArgs.add(context.getComponent(((BeanReference) arg).getId()));
- } else if (arg instanceof BeanListReference) {
- List<Object> components = new ArrayList<>();
- BeanListReference ref = (BeanListReference) arg;
- for (String id : ref.getIds()) {
- components.add(context.getComponent(id));
- }
-
- LOG.debug("BeanListReference resolved as {}" + components);
- cArgs.add(components);
- } else {
- LOG.debug("Unknown:" + arg.toString());
- cArgs.add(arg);
- }
- }
- return cArgs;
- }
-
- @SuppressWarnings("rawtypes")
- protected void applyProperties(ObjectDefinition bean, Object instance,
- EcoExecutionContext context) throws
- IllegalAccessException, InvocationTargetException, NoSuchFieldException {
- List<PropertyDefinition> props = bean.getProperties();
- Class clazz = instance.getClass();
- if (props != null) {
- for (PropertyDefinition prop : props) {
- Object value = prop.isReference() ? context.getComponent(prop.getRef()) : prop.getValue();
- Method setter = findSetter(clazz, prop.getName());
- if (setter != null) {
- LOG.debug("found setter, attempting with: " + instance.getClass() + " " + value);
- // invoke setter
- setter.invoke(instance, new Object[]{value});
- } else {
- // look for a public instance variable
- LOG.debug("no setter found. Looking for a public instance variable...");
- Field field = findPublicField(clazz, prop.getName());
- if (field != null) {
- field.set(instance, value);
- }
- }
- }
- }
- }
-
- @SuppressWarnings("rawtypes")
- protected Field findPublicField(Class clazz, String property)
- throws NoSuchFieldException {
- Field field = clazz.getField(property);
- return field;
- }
-
- @SuppressWarnings("rawtypes")
- private Method findSetter(Class clazz, String property) {
- String setterName = toSetterName(property);
- Method retval = null;
- Method[] methods = clazz.getMethods();
- for (Method method : methods) {
- if (setterName.equals(method.getName())) {
- LOG.debug("Found setter method: " + method.getName());
- retval = method;
- }
- }
- return retval;
- }
-
- protected String toSetterName(String name) {
- return "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
- }
-
- protected Class<?> classForName(String className) throws ClassNotFoundException {
- return Class.forName(className);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/ComponentBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/ComponentBuilder.java
deleted file mode 100644
index 3e7be34..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/ComponentBuilder.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-
-import com.twitter.heron.eco.definition.BeanDefinition;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-
-public class ComponentBuilder {
- public void buildComponents(EcoExecutionContext context, ObjectBuilder objectBuilder)
- throws ClassNotFoundException,
- IllegalAccessException, InstantiationException,
- NoSuchFieldException, InvocationTargetException {
- List<BeanDefinition> componentDefinitions = context.getTopologyDefinition().getComponents();
-
- if (componentDefinitions != null) {
- for (BeanDefinition bean : componentDefinitions) {
- Object obj = objectBuilder.buildObject(bean, context);
- context.addComponent(bean.getId(), obj);
- }
- }
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/ConfigBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/ConfigBuilder.java
deleted file mode 100644
index 787ecb0..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/ConfigBuilder.java
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder;
-
-import java.util.List;
-import java.util.Map;
-
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.common.basics.ByteAmount;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-
-@SuppressWarnings("unchecked")
-public class ConfigBuilder {
-
- public static final String COMPONENT_RESOURCE_MAP = "topology.component.resourcemap";
- public static final String COMPONENT_JVM_OPTIONS = "topology.component.jvmoptions";
- private static final String ID = "id";
- private static final String RAM = "ram";
- private static final String CPU = "cpu";
- private static final String DISK = "disk";
- private static final String OPTIONS = "options";
- private static final String EQUALS = "=";
- private static final String WHITESPACE = " ";
- private static final String COMMA = ",";
- private static final String LEFT_BRACE = "{";
- private static final String RIGHT_BRACE = "}";
- private static final String LEFT_BRACKET = "[";
- private static final String RIGHT_BRACKET = "]";
- private static final String MB = "MB";
- private static final String GB = "GB";
- private static final String B = "B";
- private static final Integer MINIMUM_BYTES = 256000000;
- private static final Integer MINIMUM_MB = 256;
-
- /**
- * Build the config for a ECO topology definition
- *
- * @param topologyDefinition - ECO topology definition
- */
- public Config buildConfig(EcoTopologyDefinition topologyDefinition)
- throws IllegalArgumentException {
-
- Map<String, Object> configMap = topologyDefinition.getConfig();
- Config config = new Config();
- for (Map.Entry<String, Object> entry: configMap.entrySet()) {
-
- if (entry.getKey().equals(COMPONENT_RESOURCE_MAP)) {
-
- setComponentLevelResource(config, entry);
-
- } else if (entry.getKey().equals(COMPONENT_JVM_OPTIONS)) {
-
- List<Object> objects = (List<Object>) entry.getValue();
- for (Object obj : objects) {
- String objString = obj.toString();
- objString = objString.replace(LEFT_BRACE, WHITESPACE);
- objString = objString.replace(RIGHT_BRACE, WHITESPACE);
-
- int idIndex = objString.indexOf(ID);
- int optionsIndex = objString.indexOf(OPTIONS);
-
- String id = getIdValue(objString, idIndex);
-
- String jvmOptions;
- if (optionsIndex != -1) {
-
- int equalsIndex = objString.indexOf(EQUALS, optionsIndex);
- jvmOptions = objString.substring(equalsIndex + 1, objString.length());
-
- jvmOptions = jvmOptions.replace(LEFT_BRACKET, "")
- .replace(RIGHT_BRACKET, "");
-
- } else {
- throw new IllegalArgumentException(
- "You must specify the JVM options for your component");
- }
-
- config.setComponentJvmOptions(id, jvmOptions);
- }
-
- } else {
- config.put(entry.getKey(), entry.getValue());
- }
-
- }
- return config;
- }
-
-
- private void setComponentLevelResource(Config config, Map.Entry<String, Object> entry) {
- List<Object> objects = (List<Object>) entry.getValue();
- for (Object obj: objects) {
-
- String objString = obj.toString();
-
- objString = objString.replace(COMMA, WHITESPACE);
- objString = objString.replace(LEFT_BRACE, WHITESPACE);
- objString = objString.replace(RIGHT_BRACE, WHITESPACE);
-
- int idIndex = objString.indexOf(ID);
- int ramIndex = objString.indexOf(RAM);
- int cpuIndex = objString.indexOf(CPU);
- int diskIndex = objString.indexOf(DISK);
-
- String ramWithUom = "";
- String id = getIdValue(objString, idIndex);
- //todo (josh fischer) diskWithUom and cpu are still to be implemented for use with k8s
- String diskWithUom = "";
- String cpu = "";
-
- if (ramIndex != -1) {
- ramWithUom = assignValue(objString, ramIndex);
- }
-
- if (cpuIndex != -1) {
- cpu = assignValue(objString, cpuIndex);
- }
-
- if (diskIndex != -1) {
- diskWithUom = assignValue(objString, diskIndex);
- }
-
- ByteAmount byteAmount = null;
-
- if (ramWithUom.contains(MB)) {
- // its megaBytes
- int mbIndex = verifyStartingIndexOfUom(ramWithUom, MB);
- long megaBytes = extractRawValue(ramWithUom, mbIndex);
- if (megaBytes < MINIMUM_MB) {
- throw new IllegalArgumentException(
- "The minimum Ram resource allocation for a component must be at least 256MB");
- }
- byteAmount = ByteAmount.fromMegabytes(megaBytes);
-
- } else if (ramWithUom.contains(GB)) {
- // its gigaBytes
- // we don't validate here as NumberFormatException is thrown converting decimals to longs
- int gbIndex = verifyStartingIndexOfUom(ramWithUom, GB);
- byteAmount = ByteAmount.fromGigabytes(extractRawValue(ramWithUom, gbIndex));
-
- } else if (ramWithUom.contains(B)) {
- // its bytes
- int bIndex = verifyStartingIndexOfUom(ramWithUom, B);
- long bytes = extractRawValue(ramWithUom, bIndex);
- if (bytes < MINIMUM_BYTES) {
- throw new IllegalArgumentException(
- "The minimum Ram resource allocation for a component must be at least 256000000B");
- }
- byteAmount = ByteAmount.fromBytes(bytes);
-
- } else {
- // There is no format throw an exception
- throw new
- IllegalArgumentException(
- " Please specify 'B', 'MB', 'GB' when declaring Ram Resources");
- }
- config.setComponentRam(id, byteAmount);
- }
- }
-
- private String getIdValue(String objString, int idIndex) {
- String id = "";
- if (idIndex != -1) {
- id = assignValue(objString, idIndex);
- } else {
- throw new IllegalArgumentException("Must specify ID of component to allocate resources");
- }
- return id;
- }
-
- private int verifyStartingIndexOfUom(String ramWithUom, String uom) {
- int bIndex = ramWithUom.indexOf(uom);
- String ramUom = ramWithUom.substring(bIndex, ramWithUom.length());
- if (!ramUom.equalsIgnoreCase(uom)) {
- throw new IllegalArgumentException(
- "Unit of Measure must be at the appended at the end of the value.");
- }
- return bIndex;
- }
-
- private long extractRawValue(String ramWithUom, int index) {
- return Long.valueOf(ramWithUom.substring(0, index));
- }
-
- private String assignValue(String objString, int index) {
- int equalsIndex = objString.indexOf(EQUALS, index);
- int spaceIndex = objString.indexOf(" ", index);
- return objString.substring(equalsIndex + 1, spaceIndex);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/ObjectBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/ObjectBuilder.java
deleted file mode 100644
index 5f2f441..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/ObjectBuilder.java
+++ /dev/null
@@ -1,311 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.twitter.heron.eco.definition.ConfigurationMethodDefinition;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-
-public class ObjectBuilder {
- private static final Logger LOG = LoggerFactory.getLogger(ObjectBuilder.class);
-
- private BuilderUtility builderUtility;
-
- public void setBuilderUtility(BuilderUtility builderUtility) {
- this.builderUtility = builderUtility;
- }
-
- @SuppressWarnings("rawtypes")
- public Object buildObject(ObjectDefinition def, EcoExecutionContext context)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException,
- InvocationTargetException, NoSuchFieldException {
- Class clazz = builderUtility.classForName(def.getClassName());
-
- Object obj;
- if (def.hasConstructorArgs()) {
- LOG.debug("Found constructor arguments in definition ");
- List<Object> cArgs = def.getConstructorArgs();
-
- if (def.hasReferences()) {
- LOG.debug("The definition has references");
- cArgs = builderUtility.resolveReferences(cArgs, context);
- } else {
- LOG.debug("The definition does not have references");
- }
- LOG.debug("finding compatible constructor for : " + clazz.getName());
- Constructor con = findCompatibleConstructor(cArgs, clazz);
- if (con != null) {
- LOG.debug("Found something seemingly compatible, attempting invocation...");
- obj = con.newInstance(getArgsWithListCoercian(cArgs, con.getParameterTypes()));
- } else {
- String msg = String
- .format("Couldn't find a suitable constructor for class '%s' with arguments '%s'.",
- clazz.getName(),
- cArgs);
- throw new IllegalArgumentException(msg);
- }
- } else {
- obj = clazz.newInstance();
- }
- builderUtility.applyProperties(def, obj, context);
- invokeConfigMethods(def, obj, context);
- return obj;
- }
-
- @SuppressWarnings("rawtypes")
- protected Constructor findCompatibleConstructor(List<Object> args, Class target) {
- Constructor retval = null;
- int eligibleCount = 0;
-
- LOG.debug("Target class: " + target.getName() + ", constructor args: " + args);
- Constructor[] cons = target.getDeclaredConstructors();
-
- for (Constructor con : cons) {
- Class[] paramClasses = con.getParameterTypes();
-
- if (paramClasses.length == args.size()) {
- LOG.debug("found constructor with same number of args..");
- boolean invokable = canInvokeWithArgs(args, con.getParameterTypes());
- if (invokable) {
- retval = con;
- eligibleCount++;
- }
- LOG.debug("** invokable --> {}" + invokable);
- } else {
- LOG.debug("Skipping constructor with wrong number of arguments.");
- }
- }
- if (eligibleCount > 1) {
- LOG.error("Found multiple invokable constructors for class: "
- + target + ", given arguments " + args + ". Using the last one found.");
- }
- return retval;
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- protected boolean canInvokeWithArgs(List<Object> args, Class[] parameterTypes) {
- if (parameterTypes.length != args.size()) {
- LOG.warn("parameter types were the wrong size");
- return false;
- }
-
- for (int i = 0; i < args.size(); i++) {
- Object obj = args.get(i);
- if (obj == null) {
- throw new IllegalArgumentException("argument shouldn't be null - index: " + i);
- }
- Class paramType = parameterTypes[i];
- Class objectType = obj.getClass();
- LOG.debug("Comparing parameter class " + paramType + " to object class "
- + objectType + "to see if assignment is possible.");
- if (paramType.equals(objectType)) {
- LOG.debug("Yes, they are the same class.");
- } else if (paramType.isAssignableFrom(objectType)) {
- LOG.debug("Yes, assignment is possible.");
- } else if (isPrimitiveBoolean(paramType) && Boolean.class.isAssignableFrom(objectType)) {
- LOG.debug("Yes, assignment is possible.");
- } else if (isPrimitiveNumber(paramType) && Number.class.isAssignableFrom(objectType)) {
- LOG.debug("Yes, assignment is possible.");
- } else if (paramType.isEnum() && objectType.equals(String.class)) {
- LOG.debug("Yes, will convert a String to enum");
- } else if (paramType.isArray() && List.class.isAssignableFrom(objectType)) {
- LOG.debug("Assignment is possible if we convert a List to an array.");
- LOG.debug("Array Type: " + paramType.getComponentType() + ", List type: "
- + ((List) obj).get(0).getClass());
- } else {
- LOG.debug("returning false");
- return false;
- }
- }
- return true;
- }
-
- @SuppressWarnings("rawtypes")
- protected boolean isPrimitiveNumber(Class clazz) {
- return clazz.isPrimitive() && !clazz.equals(boolean.class);
- }
-
- @SuppressWarnings("rawtypes")
- protected boolean isPrimitiveBoolean(Class clazz) {
- return clazz.isPrimitive() && clazz.equals(boolean.class);
- }
-
- @SuppressWarnings("rawtypes")
- public void invokeConfigMethods(ObjectDefinition bean,
- Object instance, EcoExecutionContext context)
- throws InvocationTargetException, IllegalAccessException {
-
- List<ConfigurationMethodDefinition> methodDefs = bean.getConfigMethods();
- if (methodDefs == null || methodDefs.size() == 0) {
- return;
- }
- Class clazz = instance.getClass();
- for (ConfigurationMethodDefinition methodDef : methodDefs) {
- List<Object> args = methodDef.getArgs();
- if (args == null) {
- args = new ArrayList<Object>();
- }
- if (methodDef.hasReferences()) {
- args = builderUtility.resolveReferences(args, context);
- }
- String methodName = methodDef.getName();
- LOG.debug("method name: " + methodName);
- Method method = findCompatibleMethod(args, clazz, methodName);
- if (method != null) {
- Object[] methodArgs = getArgsWithListCoercian(args, method.getParameterTypes());
- method.invoke(instance, methodArgs);
- } else {
- String msg = String
- .format("Unable to find configuration method '%s' in class '%s' with arguments %s.",
- new Object[]{methodName, clazz.getName(), args});
- throw new IllegalArgumentException(msg);
- }
- }
- }
-
- @SuppressWarnings("rawtypes")
- private Method findCompatibleMethod(List<Object> args, Class target, String methodName) {
- Method retval = null;
- int eligibleCount = 0;
- LOG.debug("Target class: " + target.getName() + ", methodName: "
- + methodName + ", args: " + args);
- Method[] methods = target.getMethods();
- LOG.debug("methods count: " + methods.length);
- for (Method method : methods) {
- Class[] paramClasses = method.getParameterTypes();
- if (paramClasses.length == args.size() && method.getName().equals(methodName)) {
- LOG.debug("found constructor with same number of args..");
- boolean invokable = false;
- if (args.size() == 0) {
- // it's a method with zero args
- invokable = true;
- } else {
- invokable = canInvokeWithArgs(args, method.getParameterTypes());
- }
- if (invokable) {
- retval = method;
- eligibleCount++;
- }
- LOG.debug("** invokable --> " + invokable);
- } else {
- LOG.debug("Skipping method with wrong number of arguments.");
- }
- }
- if (eligibleCount > 1) {
- LOG.warn("Found multiple invokable methods for class, method, given arguments {} "
- + new Object[]{target, methodName, args});
- }
- return retval;
- }
-
-
-
- /**
- * Given a java.util.List of contructor/method arguments, and a list of parameter types,
- * attempt to convert the
- * list to an java.lang.Object array that can be used to invoke the constructor.
- * If an argument needs
- * to be coerced from a List to an Array, do so.
- */
- @SuppressWarnings({"unchecked", "rawtypes"})
- private Object[] getArgsWithListCoercian(List<Object> args, Class[] parameterTypes) {
-// Class[] parameterTypes = constructor.getParameterTypes();
- if (parameterTypes.length != args.size()) {
- throw new IllegalArgumentException("Contructor parameter count does not "
- + "egual argument size.");
- }
- Object[] constructorParams = new Object[args.size()];
-
- // loop through the arguments, if we hit a list that has to be convered to an array,
- // perform the conversion
- for (int i = 0; i < args.size(); i++) {
- Object obj = args.get(i);
- Class paramType = parameterTypes[i];
- Class objectType = obj.getClass();
- LOG.debug("Comparing parameter class " + paramType.getName() + " to object class "
- + objectType.getName() + " to see if assignment is possible.");
- if (paramType.equals(objectType)) {
- LOG.debug("They are the same class.");
- constructorParams[i] = args.get(i);
- continue;
- }
- if (paramType.isAssignableFrom(objectType)) {
- LOG.debug("Assignment is possible.");
- constructorParams[i] = args.get(i);
- continue;
- }
- if (isPrimitiveBoolean(paramType) && Boolean.class.isAssignableFrom(objectType)) {
- LOG.debug("Its a primitive boolean.");
- Boolean bool = (Boolean) args.get(i);
- constructorParams[i] = bool.booleanValue();
- continue;
- }
- if (isPrimitiveNumber(paramType) && Number.class.isAssignableFrom(objectType)) {
- LOG.debug("Its a primitive number.");
- Number num = (Number) args.get(i);
- if (paramType == Float.TYPE) {
- constructorParams[i] = num.floatValue();
- } else if (paramType == Double.TYPE) {
- constructorParams[i] = num.doubleValue();
- } else if (paramType == Long.TYPE) {
- constructorParams[i] = num.longValue();
- } else if (paramType == Integer.TYPE) {
- constructorParams[i] = num.intValue();
- } else if (paramType == Short.TYPE) {
- constructorParams[i] = num.shortValue();
- } else if (paramType == Byte.TYPE) {
- constructorParams[i] = num.byteValue();
- } else {
- constructorParams[i] = args.get(i);
- }
- continue;
- }
-
- // enum conversion
- if (paramType.isEnum() && objectType.equals(String.class)) {
- LOG.debug("Yes, will convert a String to enum");
- constructorParams[i] = Enum.valueOf(paramType, (String) args.get(i));
- continue;
- }
-
- // List to array conversion
- if (paramType.isArray() && List.class.isAssignableFrom(objectType)) {
- LOG.debug("Conversion appears possible...");
- List list = (List) obj;
- LOG.debug("Array Type: {}, List type: {}" + paramType.getComponentType()
- + list.get(0).getClass());
-
- // create an array of the right type
- Object newArrayObj = Array.newInstance(paramType.getComponentType(), list.size());
- for (int j = 0; j < list.size(); j++) {
- Array.set(newArrayObj, j, list.get(j));
-
- }
- constructorParams[i] = newArrayObj;
- LOG.debug("After conversion: {}" + constructorParams[i]);
- }
- }
- return constructorParams;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/heron/EcoBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/heron/EcoBuilder.java
deleted file mode 100644
index e21cde9..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/heron/EcoBuilder.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.heron;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Logger;
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.api.topology.TopologyBuilder;
-
-import com.twitter.heron.eco.builder.BoltBuilder;
-import com.twitter.heron.eco.builder.ComponentBuilder;
-import com.twitter.heron.eco.builder.ConfigBuilder;
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-
-
-public class EcoBuilder {
-
- private SpoutBuilder spoutBuilder;
-
- private BoltBuilder boltBuilder;
-
- private StreamBuilder streamBuilder;
-
- private ComponentBuilder componentBuilder;
-
- private ConfigBuilder configBuilder;
-
- private static final Logger LOG = Logger.getLogger(EcoBuilder.class.getName());
-
- public EcoBuilder(SpoutBuilder spoutBuilder, BoltBuilder boltBuilder,
- StreamBuilder streamBuilder, ComponentBuilder componentBuilder,
- ConfigBuilder configBuilder) {
- this.spoutBuilder = spoutBuilder;
- this.boltBuilder = boltBuilder;
- this.streamBuilder = streamBuilder;
- this.componentBuilder = componentBuilder;
- this.configBuilder = configBuilder;
- }
-
- public TopologyBuilder buildTopologyBuilder(EcoExecutionContext executionContext,
- ObjectBuilder objectBuilder)
- throws InstantiationException, IllegalAccessException,
- ClassNotFoundException,
- NoSuchFieldException, InvocationTargetException {
-
- TopologyBuilder builder = new TopologyBuilder();
- LOG.info("Building components");
- componentBuilder.buildComponents(executionContext, objectBuilder);
- LOG.info("Building spouts");
- spoutBuilder.buildSpouts(executionContext, builder, objectBuilder);
- LOG.info("Building bolts");
- boltBuilder.buildBolts(executionContext, objectBuilder);
- LOG.info("Building streams");
- streamBuilder.buildStreams(executionContext, builder, objectBuilder);
-
- return builder;
- }
-
- public Config buildConfig(EcoTopologyDefinition topologyDefinition) throws Exception {
- LOG.info("Building topology config");
- return this.configBuilder.buildConfig(topologyDefinition);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/heron/SpoutBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/heron/SpoutBuilder.java
deleted file mode 100644
index 2289a56..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/heron/SpoutBuilder.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.heron;
-
-import java.lang.reflect.InvocationTargetException;
-
-import com.twitter.heron.api.spout.IRichSpout;
-import com.twitter.heron.api.topology.TopologyBuilder;
-
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-
-
-public class SpoutBuilder {
-
- protected void buildSpouts(EcoExecutionContext executionContext,
- TopologyBuilder builder,
- ObjectBuilder objectBuilder)
- throws ClassNotFoundException, InstantiationException, IllegalAccessException,
- NoSuchFieldException, InvocationTargetException {
- EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
-
- for (ObjectDefinition def: topologyDefinition.getSpouts()) {
- Object obj = objectBuilder.buildObject(def, executionContext);
- builder.setSpout(def.getId(), (IRichSpout) obj, def.getParallelism());
- executionContext.addSpout(def.getId(), obj);
- }
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/heron/StreamBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/heron/StreamBuilder.java
deleted file mode 100644
index f488523..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/heron/StreamBuilder.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.heron;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.twitter.heron.api.bolt.IBasicBolt;
-import com.twitter.heron.api.bolt.IRichBolt;
-import com.twitter.heron.api.bolt.IWindowedBolt;
-import com.twitter.heron.api.grouping.CustomStreamGrouping;
-import com.twitter.heron.api.topology.BoltDeclarer;
-import com.twitter.heron.api.topology.TopologyBuilder;
-import com.twitter.heron.api.tuple.Fields;
-import com.twitter.heron.api.utils.Utils;
-
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.ComponentStream;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.GroupingDefinition;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-import com.twitter.heron.eco.definition.StreamDefinition;
-
-public class StreamBuilder {
-
- protected void buildStreams(EcoExecutionContext executionContext, TopologyBuilder builder,
- ObjectBuilder objectBuilder)
- throws IllegalAccessException, InstantiationException, ClassNotFoundException,
- NoSuchFieldException, InvocationTargetException {
- EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
- Map<String, ComponentStream> componentStreams = new HashMap<>();
-
- HashMap<String, BoltDeclarer> declarers = new HashMap<>();
- for (StreamDefinition stream : topologyDefinition.getStreams()) {
- Object boltObj = executionContext.getBolt(stream.getTo());
- BoltDeclarer declarer = declarers.get(stream.getTo());
- if (boltObj instanceof IRichBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(stream.getTo(),
- (IRichBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else if (boltObj instanceof IBasicBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(
- stream.getTo(),
- (IBasicBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else if (boltObj instanceof IWindowedBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(
- stream.getTo(),
- (IWindowedBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else {
- throw new IllegalArgumentException("Class does not appear to be a bolt: "
- + boltObj.getClass().getName());
- }
-
- GroupingDefinition grouping = stream.getGrouping();
- // if the streamId is defined, use it for the grouping,
- // otherwise assume default stream
- String streamId = grouping.getStreamId() == null
- ? Utils.DEFAULT_STREAM_ID : grouping.getStreamId();
-
-
- switch (grouping.getType()) {
- case SHUFFLE:
- declarer.shuffleGrouping(stream.getFrom(), streamId);
- break;
- case FIELDS:
- List<String> groupingArgs = grouping.getArgs();
- if (groupingArgs == null) {
- throw new IllegalArgumentException("You must supply arguments for Fields grouping");
- }
- declarer.fieldsGrouping(stream.getFrom(), streamId, new Fields(groupingArgs));
- break;
- case ALL:
- declarer.allGrouping(stream.getFrom(), streamId);
- break;
- case GLOBAL:
- declarer.globalGrouping(stream.getFrom(), streamId);
- break;
- case NONE:
- declarer.noneGrouping(stream.getFrom(), streamId);
- break;
- case CUSTOM:
- declarer.customGrouping(stream.getFrom(), streamId,
- buildCustomStreamGrouping(stream.getGrouping().getCustomClass(),
- executionContext,
- objectBuilder));
- break;
- default:
- throw new UnsupportedOperationException("unsupported grouping type: " + grouping);
- }
- }
- executionContext.setStreams(componentStreams);
- }
-
- private CustomStreamGrouping buildCustomStreamGrouping(ObjectDefinition objectDefinition,
- EcoExecutionContext executionContext,
- ObjectBuilder objectBuilder)
- throws ClassNotFoundException,
- IllegalAccessException, InstantiationException, NoSuchFieldException,
- InvocationTargetException {
- Object grouping = objectBuilder.buildObject(objectDefinition, executionContext);
- return (CustomStreamGrouping) grouping;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/storm/EcoBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/storm/EcoBuilder.java
deleted file mode 100644
index 4900e73..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/storm/EcoBuilder.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.storm;
-
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Logger;
-
-import org.apache.storm.topology.TopologyBuilder;
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.eco.builder.BoltBuilder;
-import com.twitter.heron.eco.builder.ComponentBuilder;
-import com.twitter.heron.eco.builder.ConfigBuilder;
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-
-
-public class EcoBuilder {
-
- private SpoutBuilder spoutBuilder;
-
- private BoltBuilder boltBuilder;
-
- private StreamBuilder streamBuilder;
-
- private ComponentBuilder componentBuilder;
-
- private ConfigBuilder configBuilder;
-
- private static final Logger LOG = Logger.getLogger(EcoBuilder.class.getName());
-
- public EcoBuilder(SpoutBuilder spoutBuilder, BoltBuilder boltBuilder,
- StreamBuilder streamBuilder, ComponentBuilder componentBuilder,
- ConfigBuilder configBuilder) {
- this.spoutBuilder = spoutBuilder;
- this.boltBuilder = boltBuilder;
- this.streamBuilder = streamBuilder;
- this.componentBuilder = componentBuilder;
- this.configBuilder = configBuilder;
- }
-
- public TopologyBuilder buildTopologyBuilder(EcoExecutionContext executionContext,
- ObjectBuilder objectBuilder)
- throws InstantiationException, IllegalAccessException,
- ClassNotFoundException,
- NoSuchFieldException, InvocationTargetException {
-
- TopologyBuilder builder = new TopologyBuilder();
- LOG.info("Building components");
- componentBuilder.buildComponents(executionContext, objectBuilder);
- LOG.info("Building spouts");
- spoutBuilder.buildSpouts(executionContext, builder, objectBuilder);
- LOG.info("Building bolts");
- boltBuilder.buildBolts(executionContext, objectBuilder);
- LOG.info("Building streams");
- streamBuilder.buildStreams(executionContext, builder, objectBuilder);
-
- return builder;
- }
-
- public Config buildConfig(EcoTopologyDefinition topologyDefinition) throws Exception {
- LOG.info("Building topology config");
- return this.configBuilder.buildConfig(topologyDefinition);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/storm/SpoutBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/storm/SpoutBuilder.java
deleted file mode 100644
index 775d30d..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/storm/SpoutBuilder.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.storm;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.storm.topology.IRichSpout;
-import org.apache.storm.topology.TopologyBuilder;
-
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-
-
-public class SpoutBuilder {
-
- protected void buildSpouts(EcoExecutionContext executionContext,
- TopologyBuilder builder,
- ObjectBuilder objectBuilder)
- throws ClassNotFoundException, InstantiationException, IllegalAccessException,
- NoSuchFieldException, InvocationTargetException {
- EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
-
- for (ObjectDefinition def: topologyDefinition.getSpouts()) {
- Object obj = objectBuilder.buildObject(def, executionContext);
- builder.setSpout(def.getId(), (IRichSpout) obj, def.getParallelism());
- executionContext.addSpout(def.getId(), obj);
- }
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/builder/storm/StreamBuilder.java b/eco/src/java/com/twitter/heron/eco/builder/storm/StreamBuilder.java
deleted file mode 100644
index 6777890..0000000
--- a/eco/src/java/com/twitter/heron/eco/builder/storm/StreamBuilder.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.builder.storm;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.storm.grouping.CustomStreamGrouping;
-import org.apache.storm.topology.BoltDeclarer;
-import org.apache.storm.topology.IBasicBolt;
-import org.apache.storm.topology.IRichBolt;
-import org.apache.storm.topology.IWindowedBolt;
-import org.apache.storm.topology.TopologyBuilder;
-import org.apache.storm.tuple.Fields;
-import org.apache.storm.utils.Utils;
-
-import com.twitter.heron.eco.builder.ObjectBuilder;
-
-import com.twitter.heron.eco.definition.ComponentStream;
-import com.twitter.heron.eco.definition.EcoExecutionContext;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.GroupingDefinition;
-import com.twitter.heron.eco.definition.ObjectDefinition;
-import com.twitter.heron.eco.definition.StreamDefinition;
-
-public class StreamBuilder {
-
- protected void buildStreams(EcoExecutionContext executionContext, TopologyBuilder builder,
- ObjectBuilder objectBuilder)
- throws IllegalAccessException, InstantiationException, ClassNotFoundException,
- NoSuchFieldException, InvocationTargetException {
- EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
- Map<String, ComponentStream> componentStreams = new HashMap<>();
-
- HashMap<String, BoltDeclarer> declarers = new HashMap<>();
- for (StreamDefinition stream : topologyDefinition.getStreams()) {
- Object boltObj = executionContext.getBolt(stream.getTo());
- BoltDeclarer declarer = declarers.get(stream.getTo());
- if (boltObj instanceof IRichBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(stream.getTo(),
- (IRichBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else if (boltObj instanceof IBasicBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(
- stream.getTo(),
- (IBasicBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else if (boltObj instanceof IWindowedBolt) {
- if (declarer == null) {
- declarer = builder.setBolt(
- stream.getTo(),
- (IWindowedBolt) boltObj,
- topologyDefinition.parallelismForBolt(stream.getTo()));
- declarers.put(stream.getTo(), declarer);
- }
- } else {
- throw new IllegalArgumentException("Class does not appear to be a bolt: "
- + boltObj.getClass().getName());
- }
-
- GroupingDefinition grouping = stream.getGrouping();
- // if the streamId is defined, use it for the grouping,
- // otherwise assume default stream
- String streamId = grouping.getStreamId() == null
- ? Utils.DEFAULT_STREAM_ID : grouping.getStreamId();
-
-
- switch (grouping.getType()) {
- case SHUFFLE:
- declarer.shuffleGrouping(stream.getFrom(), streamId);
- break;
- case FIELDS:
- List<String> groupingArgs = grouping.getArgs();
- if (groupingArgs == null) {
- throw new IllegalArgumentException("You must supply arguments for Fields grouping");
- }
- declarer.fieldsGrouping(stream.getFrom(), streamId, new Fields(groupingArgs));
- break;
- case ALL:
- declarer.allGrouping(stream.getFrom(), streamId);
- break;
- case GLOBAL:
- declarer.globalGrouping(stream.getFrom(), streamId);
- break;
- case NONE:
- declarer.noneGrouping(stream.getFrom(), streamId);
- break;
- case CUSTOM:
- declarer.customGrouping(stream.getFrom(), streamId,
- buildCustomStreamGrouping(stream.getGrouping().getCustomClass(),
- executionContext,
- objectBuilder));
- break;
- default:
- throw new UnsupportedOperationException("unsupported grouping type: " + grouping);
- }
- }
- executionContext.setStreams(componentStreams);
- }
-
- private CustomStreamGrouping buildCustomStreamGrouping(ObjectDefinition objectDefinition,
- EcoExecutionContext executionContext,
- ObjectBuilder objectBuilder)
- throws ClassNotFoundException,
- IllegalAccessException, InstantiationException, NoSuchFieldException,
- InvocationTargetException {
- Object grouping = objectBuilder.buildObject(objectDefinition, executionContext);
- return (CustomStreamGrouping) grouping;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/BeanDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/BeanDefinition.java
deleted file mode 100644
index 806ae14..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/BeanDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class BeanDefinition extends ObjectDefinition {
-
- private String id;
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/BeanListReference.java b/eco/src/java/com/twitter/heron/eco/definition/BeanListReference.java
deleted file mode 100644
index ff70fde..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/BeanListReference.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-import java.util.List;
-
-public class BeanListReference {
- public List<String> ids;
-
- public BeanListReference() { }
-
- public BeanListReference(List<String> ids) {
- this.ids = ids;
- }
-
- public List<String> getIds() {
- return ids;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/BeanReference.java b/eco/src/java/com/twitter/heron/eco/definition/BeanReference.java
deleted file mode 100644
index 2314c82..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/BeanReference.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class BeanReference {
- private String id;
-
- public BeanReference(String id) {
- this.id = id;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/BoltDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/BoltDefinition.java
deleted file mode 100644
index 203623d..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/BoltDefinition.java
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class BoltDefinition extends ObjectDefinition {
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/ComponentStream.java b/eco/src/java/com/twitter/heron/eco/definition/ComponentStream.java
deleted file mode 100644
index 5b747fd..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/ComponentStream.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class ComponentStream {
-
- private String id;
-
- private String toComponent;
-
- private String fromComponent;
-
- private String streamName;
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public Object getToComponent() {
- return toComponent;
- }
-
- public void setToComponent(String toComponent) {
- this.toComponent = toComponent;
- }
-
- public String getFromComponent() {
- return fromComponent;
- }
-
- public void setFromComponent(String fromComponent) {
- this.fromComponent = fromComponent;
- }
-
- public String getStreamName() {
- return streamName;
- }
-
- public void setStreamName(String streamName) {
- this.streamName = streamName;
- }
-
- @Override
- public String toString() {
- return "ComponentStream{"
- + "toComponent='" + toComponent + '\''
- + ", fromComponent='" + fromComponent
- + '\''
- + ", streamName='" + streamName + '\''
- + '}';
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/ConfigurationMethodDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/ConfigurationMethodDefinition.java
deleted file mode 100644
index d63918b..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/ConfigurationMethodDefinition.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ConfigurationMethodDefinition {
- private String name;
- private List<Object> args;
- private boolean hasReferences = false;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public List<Object> getArgs() {
- return args;
- }
-
- @SuppressWarnings({"rawtypes", "unchecked"})
- public void setArgs(List<Object> args) {
-
- List<Object> newVal = new ArrayList<Object>();
- for (Object obj : args) {
- if (obj instanceof LinkedHashMap) {
- Map map = (Map) obj;
- if (map.containsKey("ref") && map.size() == 1) {
- newVal.add(new BeanReference((String) map.get("ref")));
- this.hasReferences = true;
- } else if (map.containsKey("reflist") && map.size() == 1) {
- newVal.add(new BeanListReference((List<String>) map.get("reflist")));
- this.hasReferences = true;
- } else {
- newVal.add(obj);
- }
- } else {
- newVal.add(obj);
- }
- }
- this.args = newVal;
- }
-
- public boolean hasReferences() {
- return this.hasReferences;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/EcoExecutionContext.java b/eco/src/java/com/twitter/heron/eco/definition/EcoExecutionContext.java
deleted file mode 100644
index 01d0dbb..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/EcoExecutionContext.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.twitter.heron.api.Config;
-
-
-public class EcoExecutionContext {
-
- private EcoTopologyDefinition topologyDefinition;
-
- private Config config;
-
- private Map<String, Object> spouts = new HashMap<>();
-
- private Map<String, Object> bolts = new HashMap<>();
-
- private Map<String, ComponentStream> streams = new HashMap<>();
-
- private Map<String, Object> components = new HashMap<>();
-
- public EcoExecutionContext(EcoTopologyDefinition topologyDefinition, Config config) {
- this.topologyDefinition = topologyDefinition;
- this.config = config;
- }
-
- public EcoTopologyDefinition getTopologyDefinition() {
- return topologyDefinition;
- }
-
- public void setTopologyDefinition(EcoTopologyDefinition topologyDefinition) {
- this.topologyDefinition = topologyDefinition;
- }
-
- public Config getConfig() {
- return config;
- }
-
- public void setConfig(Config config) {
- this.config = config;
- }
-
- public Map<String, Object> getSpouts() {
- return spouts;
- }
-
- public void setSpouts(Map<String, Object> spouts) {
- this.spouts = spouts;
- }
-
- public Map<String, Object> getBolts() {
- return bolts;
- }
-
- public Object getBolt(String id) {
- return this.bolts.get(id);
- }
-
- public void setBolts(Map<String, Object> bolts) {
- this.bolts = bolts;
- }
-
- public void addBolt(String key, Object value) {
- this.bolts.put(key, value);
- }
-
- public Object getChild(String id) {
- return this.bolts.get(id);
- }
-
- public Map<String, ComponentStream> getStreams() {
- return streams;
- }
-
- public void setStreams(Map<String, ComponentStream> streams) {
- this.streams = streams;
- }
-
- public Map<String, Object> getComponents() {
- return components;
- }
-
- public void addComponent(String key, Object value) {
- this.components.put(key, value);
- }
-
- public Object getComponent(String id) {
- return this.components.get(id);
- }
-
- public void setComponents(Map<String, Object> components) {
- this.components = components;
- }
-
- public void addSpout(String key, Object value) {
- this.spouts.put(key, value);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/EcoTopologyDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/EcoTopologyDefinition.java
deleted file mode 100644
index 132bb0d..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/EcoTopologyDefinition.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class EcoTopologyDefinition {
-
- private String name;
- private String type;
- private Map<String, Object> config = new HashMap<>();
- private Map<String, SpoutDefinition> spouts = new LinkedHashMap<>();
- private Map<String, BoltDefinition> bolts = new LinkedHashMap<>();
- private List<StreamDefinition> streams = new ArrayList<>();
- private Map<String, BeanDefinition> components = new LinkedHashMap<>();
-
- public List<SpoutDefinition> getSpouts() {
- return new ArrayList<>(this.spouts.values());
- }
-
- public SpoutDefinition getSpout(String id) {
- return this.spouts.get(id);
- }
-
- public void setSpouts(List<SpoutDefinition> sources) {
- this.spouts = new LinkedHashMap<>();
- for (SpoutDefinition source: sources) {
- this.spouts.put(source.getId(), source);
- }
- }
-
- public List<BoltDefinition> getBolts() {
- return new ArrayList<>(this.bolts.values());
- }
-
- public BoltDefinition getBolt(String id) {
- return this.bolts.get(id);
- }
-
- public void setBolts(List<BoltDefinition> children) {
- this.bolts = new LinkedHashMap<>();
- for (BoltDefinition child: children) {
- this.bolts.put(child.getId(), child);
- }
- }
-
- public List<BeanDefinition> getComponents() {
- return new ArrayList<>(this.components.values());
- }
-
- public Object getComponent(String id) {
- return this.components.get(id);
- }
-
- public void setComponents(List<BeanDefinition> components) {
- for (BeanDefinition bean: components) {
- this.components.put(bean.getId(), bean);
- }
- }
-
- public void addComponent(String key, BeanDefinition value) {
- this.components.put(key, value);
- }
-
- public List<StreamDefinition> getStreams() {
- return streams;
- }
-
- public void setStreams(List<StreamDefinition> streams) {
- this.streams = streams;
- }
-
-
- public Map<String, Object> getConfig() {
- return config;
- }
-
- public void setConfig(Map<String, Object> config) {
- this.config = config;
- }
-
- public String getName() {
- return name;
- }
-
- public String getType() {
- if (type == null || "storm".equals(type)) {
- return "storm";
- }
-
- if ("heron".equals(type)) {
- return "heron";
- }
-
- return null;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Number parallelismForBolt(String to) {
- return this.bolts.get(to).getParallelism();
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/GroupingDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/GroupingDefinition.java
deleted file mode 100644
index 1eeb817..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/GroupingDefinition.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-import java.util.List;
-
-public class GroupingDefinition {
-
- public enum Type {
- ALL,
- CUSTOM,
- SHUFFLE,
- FIELDS,
- GLOBAL,
- NONE
- }
-
- private Type type;
- private String streamId;
- private List<String> args;
- private ObjectDefinition customClass;
-
- public Type getType() {
- return type;
- }
-
- public void setType(Type type) {
- this.type = type;
- }
-
- public String getStreamId() {
- return streamId;
- }
-
- public void setStreamId(String streamId) {
- this.streamId = streamId;
- }
-
- public List<String> getArgs() {
- return args;
- }
-
- public void setArgs(List<String> args) {
- this.args = args;
- }
-
- public ObjectDefinition getCustomClass() {
- return customClass;
- }
-
- public void setCustomClass(ObjectDefinition customClass) {
- this.customClass = customClass;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/ObjectDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/ObjectDefinition.java
deleted file mode 100644
index dd4a8f1..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/ObjectDefinition.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ObjectDefinition {
-
- private String id;
- private String className;
- private int parallelism = 1;
- private List<Object> constructorArgs;
- private List<PropertyDefinition> properties;
- private List<ConfigurationMethodDefinition> configMethods;
- private boolean hasReferences;
-
- public List<PropertyDefinition> getProperties() {
- return properties;
- }
-
- public boolean hasConstructorArgs() {
- return this.constructorArgs != null && this.constructorArgs.size() > 0;
- }
-
- public void setProperties(List<PropertyDefinition> properties) {
- this.properties = properties;
- }
-
- public boolean hasReferences() {
- return this.hasReferences;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getClassName() {
- return className;
- }
-
- public void setClassName(String className) {
- this.className = className;
- }
-
- public int getParallelism() {
- return parallelism;
- }
-
- public void setParallelism(int parallelism) {
- this.parallelism = parallelism;
- }
-
- public List<Object> getConstructorArgs() {
- return constructorArgs;
- }
-
- @SuppressWarnings({"rawtypes", "unchecked"})
- public void setConstructorArgs(List<Object> constructorArgs) {
-
- List<Object> newVal = new ArrayList<Object>();
- for (Object obj : constructorArgs) {
- if (obj instanceof LinkedHashMap) {
- Map map = (Map) obj;
- if (map.containsKey("ref") && map.size() == 1) {
- newVal.add(new BeanReference((String) map.get("ref")));
- this.hasReferences = true;
- } else if (map.containsKey("reflist") && map.size() == 1) {
- newVal.add(new BeanListReference((List<String>) map.get("reflist")));
- this.hasReferences = true;
- } else {
- newVal.add(obj);
- }
- } else {
- newVal.add(obj);
- }
- }
- this.constructorArgs = newVal;
- }
-
- public List<ConfigurationMethodDefinition> getConfigMethods() {
- return configMethods;
- }
-
- public void setConfigMethods(List<ConfigurationMethodDefinition> configMethods) {
- this.configMethods = configMethods;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/PropertyDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/PropertyDefinition.java
deleted file mode 100644
index e1cc902..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/PropertyDefinition.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class PropertyDefinition {
-
- private String name;
- private Object value;
- private String ref;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Object getValue() {
- return value;
- }
-
- public void setValue(Object value) {
- if (this.ref != null) {
- throw new IllegalStateException("A property can only have a value OR a reference, not both.");
- }
- this.value = value;
- }
-
- public String getRef() {
- return ref;
- }
-
- public void setRef(String ref) {
- if (this.value != null) {
- throw new IllegalStateException("A property can only have a value OR a reference, not both.");
- }
- this.ref = ref;
- }
-
- public boolean isReference() {
- return this.ref != null;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/SpoutDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/SpoutDefinition.java
deleted file mode 100644
index cb4f0a1..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/SpoutDefinition.java
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class SpoutDefinition extends ObjectDefinition {
-}
diff --git a/eco/src/java/com/twitter/heron/eco/definition/StreamDefinition.java b/eco/src/java/com/twitter/heron/eco/definition/StreamDefinition.java
deleted file mode 100644
index 03081c3..0000000
--- a/eco/src/java/com/twitter/heron/eco/definition/StreamDefinition.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.definition;
-
-public class StreamDefinition {
-
- private String id;
- private String name;
- private String to;
- private String from;
- private GroupingDefinition grouping;
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getTo() {
- return to;
- }
-
- public void setTo(String to) {
- this.to = to;
- }
-
- public String getFrom() {
- return from;
- }
-
- public void setFrom(String from) {
- this.from = from;
- }
-
- public GroupingDefinition getGrouping() {
- return grouping;
- }
-
- public void setGrouping(GroupingDefinition groupingDefinition) {
- this.grouping = groupingDefinition;
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/parser/EcoParser.java b/eco/src/java/com/twitter/heron/eco/parser/EcoParser.java
deleted file mode 100644
index 94f1bc2..0000000
--- a/eco/src/java/com/twitter/heron/eco/parser/EcoParser.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2017 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.parser;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-import java.util.logging.Logger;
-
-import org.yaml.snakeyaml.TypeDescription;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-
-import com.twitter.heron.eco.definition.BoltDefinition;
-import com.twitter.heron.eco.definition.EcoTopologyDefinition;
-import com.twitter.heron.eco.definition.SpoutDefinition;
-
-public class EcoParser {
-
- private static final Logger LOG = Logger.getLogger(EcoParser.class.getName());
-
- public EcoTopologyDefinition parseFromInputStream(InputStream inputStream,
- InputStream propsFile, boolean envFilter)
- throws Exception {
-
- Yaml yaml = topologyYaml();
-
- if (inputStream == null) {
- throw new Exception("Unable to load eco input stream");
- }
- return loadTopologyFromYaml(yaml, inputStream, propsFile, envFilter);
- }
-
- private EcoTopologyDefinition loadTopologyFromYaml(Yaml yaml, InputStream inputStream,
- InputStream propsIn,
- boolean envFilter) throws IOException {
- LOG.info("Parsing eco config file");
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- int b;
- while ((b = inputStream.read()) != -1) {
- bos.write(b);
- }
-
- String yamlDefinitionStr = bos.toString();
- // properties file substitution
- if (propsIn != null) {
- LOG.info("Performing property substitution.");
- Properties props = new Properties();
- props.load(propsIn);
- for (Object key : props.keySet()) {
- yamlDefinitionStr =
- yamlDefinitionStr.replace("${" + key + "}", props.getProperty((String) key));
- }
- } else {
- LOG.info("Not performing property substitution.");
- }
-
- // environment variable substitution
- if (envFilter) {
- LOG.info("Performing environment variable substitution.");
- Map<String, String> envs = System.getenv();
- for (String key : envs.keySet()) {
- yamlDefinitionStr = yamlDefinitionStr.replace("${ENV-" + key + "}", envs.get(key));
- }
- } else {
- LOG.info("Not performing environment variable substitution.");
- }
- return (EcoTopologyDefinition) yaml.load(yamlDefinitionStr);
- }
- private static Yaml topologyYaml() {
- Constructor topologyConstructor = new Constructor(EcoTopologyDefinition.class);
-
- TypeDescription topologyDescription = new TypeDescription(EcoTopologyDefinition.class);
-
- topologyDescription.putListPropertyType("spouts", SpoutDefinition.class);
- topologyDescription.putListPropertyType("bolts", BoltDefinition.class);
- topologyConstructor.addTypeDescription(topologyDescription);
-
- return new Yaml(topologyConstructor);
- }
-}
diff --git a/eco/src/java/com/twitter/heron/eco/submit/EcoSubmitter.java b/eco/src/java/com/twitter/heron/eco/submit/EcoSubmitter.java
deleted file mode 100644
index 8383bc4..0000000
--- a/eco/src/java/com/twitter/heron/eco/submit/EcoSubmitter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2018 Twitter. All rights reserved.
-//
-// 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 com.twitter.heron.eco.submit;
-
-
-import org.apache.storm.StormSubmitter;
-import org.apache.storm.generated.StormTopology;
-
-import com.twitter.heron.api.Config;
-import com.twitter.heron.api.HeronSubmitter;
-import com.twitter.heron.api.HeronTopology;
-
-public class EcoSubmitter {
-
- public void submitStormTopology(String topologyName,
- Config topologyConfig, StormTopology topology)
- throws org.apache.storm.generated.AlreadyAliveException,
- org.apache.storm.generated.InvalidTopologyException {
- StormSubmitter.submitTopology(topologyName, topologyConfig, topology);
- }
-
- public void submitHeronTopology(String topologyName,
- Config topologyConfig, HeronTopology topology)
- throws com.twitter.heron.api.exception.AlreadyAliveException,
- com.twitter.heron.api.exception.InvalidTopologyException {
- HeronSubmitter.submitTopology(topologyName, topologyConfig, topology);
- }
-}
diff --git a/eco/src/java/org/apache/heron/eco/Eco.java b/eco/src/java/org/apache/heron/eco/Eco.java
new file mode 100644
index 0000000..ca1ea14
--- /dev/null
+++ b/eco/src/java/org/apache/heron/eco/Eco.java
@@ -0,0 +1,228 @@
+// Copyright 2017 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.eco;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.heron.api.Config;
+import org.apache.heron.eco.builder.BoltBuilder;
+import org.apache.heron.eco.builder.BuilderUtility;
+import org.apache.heron.eco.builder.ComponentBuilder;
+import org.apache.heron.eco.builder.ConfigBuilder;
+import org.apache.heron.eco.builder.ObjectBuilder;
+import org.apache.heron.eco.definition.BoltDefinition;
+import org.apache.heron.eco.definition.EcoExecutionContext;
+import org.apache.heron.eco.definition.EcoTopologyDefinition;
+import org.apache.heron.eco.definition.SpoutDefinition;
+import org.apache.heron.eco.definition.StreamDefinition;
+import org.apache.heron.eco.parser.EcoParser;
+import org.apache.heron.eco.submit.EcoSubmitter;
+
+public class Eco {
+
+ private static final Logger LOG = Logger.getLogger(Eco.class.getName());
+ private static final String PROPS = "props";
+ private static final String ENV_PROPS = "env-props";
+ private static final String ECO_CONFIG_FILE = "eco-config-file";
+
+ private EcoParser ecoParser;
+ private EcoSubmitter ecoSubmitter;
+
+ public Eco(EcoParser ecoParser, EcoSubmitter ecoSubmitter) {
+ this.ecoParser = ecoParser;
+ this.ecoSubmitter = ecoSubmitter;
+ }
+
+ /**
+ * Submit an ECO topology
+ *
+ * @param fileInputStream The input stream associated with ECO topology definition file
+ * @param propertiesFile The optional key-value property file for optional property substitution.
+ * @param envFilter The optional flag to tell ECO to perform environment variable substitution
+ * @throws Exception
+ */
+ public void submit(FileInputStream fileInputStream,
+ FileInputStream propertiesFile, boolean envFilter)
+ throws Exception {
+ EcoTopologyDefinition topologyDefinition = ecoParser
+ .parseFromInputStream(fileInputStream, propertiesFile, envFilter);
+
+ String topologyName = topologyDefinition.getName();
+ String topologyType = topologyDefinition.getType();
+
+ if ("storm".equals(topologyType)) {
+ System.out.println("topology type is Storm");
+ org.apache.heron.eco.builder.storm.EcoBuilder ecoBuilder =
+ new org.apache.heron.eco.builder.storm.EcoBuilder(
+ new org.apache.heron.eco.builder.storm.SpoutBuilder(),
+ new BoltBuilder(),
+ new org.apache.heron.eco.builder.storm.StreamBuilder(),
+ new ComponentBuilder(),
+ new ConfigBuilder());
+
+ Config topologyConfig = ecoBuilder
+ .buildConfig(topologyDefinition);
+
+ EcoExecutionContext executionContext
+ = new EcoExecutionContext(topologyDefinition, topologyConfig);
+
+ printTopologyInfo(executionContext);
+
+ ObjectBuilder objectBuilder = new ObjectBuilder();
+ objectBuilder.setBuilderUtility(new BuilderUtility());
+
+ org.apache.storm.topology.TopologyBuilder builder = ecoBuilder
+ .buildTopologyBuilder(executionContext, objectBuilder);
+ ecoSubmitter.submitStormTopology(topologyName, topologyConfig, builder.createTopology());
+ } else if ("heron".equals(topologyType)) {
+ System.out.println("topology type is Heron");
+ org.apache.heron.eco.builder.heron.EcoBuilder ecoBuilder =
+ new org.apache.heron.eco.builder.heron.EcoBuilder(
+ new org.apache.heron.eco.builder.heron.SpoutBuilder(),
+ new BoltBuilder(),
+ new org.apache.heron.eco.builder.heron.StreamBuilder(),
+ new ComponentBuilder(),
+ new ConfigBuilder());
+
+ Config topologyConfig = ecoBuilder
+ .buildConfig(topologyDefinition);
+
+ EcoExecutionContext executionContext
+ = new EcoExecutionContext(topologyDefinition, topologyConfig);
+
+ printTopologyInfo(executionContext);
+
+ ObjectBuilder objectBuilder = new ObjectBuilder();
+ objectBuilder.setBuilderUtility(new BuilderUtility());
+
+ org.apache.heron.api.topology.TopologyBuilder builder = ecoBuilder
+ .buildTopologyBuilder(executionContext, objectBuilder);
+ ecoSubmitter.submitHeronTopology(topologyName, topologyConfig, builder.createTopology());
+ } else {
+ LOG.log(Level.SEVERE,
+ String.format("Unknown topology type \'%s\' for topology %s, not submitted",
+ topologyType, topologyName));
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ Options options = constructOptions();
+
+ CommandLineParser parser = new DefaultParser();
+
+ CommandLine cmd;
+ try {
+ cmd = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Error parsing command line options: ", e);
+ }
+
+
+ FileInputStream fin = new FileInputStream(new File(cmd.getOptionValue(ECO_CONFIG_FILE)));
+
+ String propsFile = cmd.getOptionValue(PROPS);
+ FileInputStream propsInputStream = null;
+
+ if (propsFile != null) {
+ propsInputStream = new FileInputStream(new File(propsFile));
+ }
+
+
+ Boolean filterFromEnv = cmd.hasOption(ENV_PROPS);
+
+ Eco eco = new Eco(new EcoParser(), new EcoSubmitter());
+
+ eco.submit(fin, propsInputStream, filterFromEnv);
+ }
+
+ private static Options constructOptions() {
+ Options options = new Options();
+ Option ecoConfig = Option.builder("eco")
+ .desc("Yaml config file for specifying topology definitions")
+ .longOpt(ECO_CONFIG_FILE)
+ .hasArgs()
+ .argName(ECO_CONFIG_FILE)
+ .required()
+ .build();
+
+
+ Option filterOption = Option.builder(PROPS)
+ .desc("properties file for property substitution")
+ .longOpt(PROPS)
+ .hasArgs()
+ .required(false)
+ .argName(PROPS)
+ .build();
+
+ Option envSubOption = Option.builder("envFilter")
+ .desc("Perform environment variable substitution.")
+ .longOpt(ENV_PROPS)
+ .numberOfArgs(0)
+ .required(false)
+ .build();
+
+ options.addOption(filterOption);
+ options.addOption(ecoConfig);
+ options.addOption(envSubOption);
+
+ return options;
+ }
+
+ // construct command line help options
+ //TODO: (joshfischer) integrate with existing system somehow
+ private static Options constructHelpOptions() {
+ Options options = new Options();
+ Option help = Option.builder("h")
+ .desc("List all options and their description")
+ .longOpt("help")
+ .build();
+
+ options.addOption(help);
+ return options;
+ }
+
+ static void printTopologyInfo(EcoExecutionContext ctx) {
+ EcoTopologyDefinition t = ctx.getTopologyDefinition();
+
+ LOG.info("---------- TOPOLOGY DETAILS ----------");
+
+ LOG.info(String.format("Topology Name: %s", t.getName()));
+ LOG.info("--------------- SPOUTS ---------------");
+ for (SpoutDefinition s : t.getSpouts()) {
+ LOG.info(String.format("%s [%d] (%s)", s.getId(), s.getParallelism(), s.getClassName()));
+ }
+ LOG.info("---------------- BOLTS ---------------");
+ for (BoltDefinition b : t.getBolts()) {
+ LOG.info(String.format("%s [%d] (%s)", b.getId(), b.getParallelism(), b.getClassName()));
+ }
+
+ LOG.info("--------------- STREAMS ---------------");
+ for (StreamDefinition sd : t.getStreams()) {
+ LOG.info(String.format("%s --%s--> %s",
+ sd.getFrom(),
+ sd.getGrouping().getType(),
+ sd.getTo()));
+ }
+ LOG.info("--------------------------------------");
+ }
+}
diff --git a/eco/src/java/org/apache/heron/eco/builder/BoltBuilder.java b/eco/src/java/org/apache/heron/eco/builder/BoltBuilder.java
new file mode 100644
index 0000000..b5f1ffd
--- /dev/null
+++ b/eco/src/java/org/apache/heron/eco/builder/BoltBuilder.java
@@ -0,0 +1,35 @@
+// Copyright 2017 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.eco.builder;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.heron.eco.definition.EcoExecutionContext;
+import org.apache.heron.eco.definition.EcoTopologyDefinition;
+import org.apache.heron.eco.definition.ObjectDefinition;
+
+public class BoltBuilder {
+
+ public void buildBolts(EcoExecutionContext executionContext,
+ ObjectBuilder objectBuilder)
+ throws IllegalAccessException, InstantiationException, ClassNotFoundException,
+ NoSuchFieldException, InvocationTargetException {
+ EcoTopologyDefinition topologyDefinition = executionContext.getTopologyDefinition();
+
+ for (ObjectDefinition def: topologyDefinition.getBolts()) {
+ Object obj = objectBuilder.buildObject(def, executionContext);
+ executionContext.addBolt(def.getId(), obj);
+ }
+ }
+}
diff --git a/eco/src/java/org/apache/heron/eco/builder/BuilderUtility.java b/eco/src/java/org/apache/heron/eco/builder/BuilderUtility.java
new file mode 100644
index 0000000..7a217cf
--- /dev/null
+++ b/eco/src/java/org/apache/heron/eco/builder/BuilderUtility.java
@@ -0,0 +1,116 @@
+// Copyright 2018 Twitter. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.heron.eco.builder;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.heron.eco.definition.BeanListReference;
+import org.apache.heron.eco.definition.BeanReference;
+import org.apache.heron.eco.definition.EcoExecutionContext;
+import org.apache.heron.eco.definition.ObjectDefinition;
+import org.apache.heron.eco.definition.PropertyDefinition;
+
+public class BuilderUtility {
+
+ private static final Logger LOG = LoggerFactory.getLogger(BuilderUtility.class);
+
+ @SuppressWarnings("rawtypes")
+ protected List<Object> resolveReferences(List<Object> args, EcoExecutionContext context) {
+ LOG.debug("Checking arguments for references.");
+ List<Object> cArgs = new ArrayList<>();
+
+ // resolve references
+ for (Object arg : args) {
+ if (arg instanceof BeanReference) {
+ LOG.debug("BeanReference: " + ((BeanReference) arg).getId());
+ cArgs.add(context.getComponent(((BeanReference) arg).getId()));
+ } else if (arg instanceof BeanListReference) {
+ List<Object> components = new ArrayList<>();
+ BeanListReference ref = (BeanListReference) arg;
+ for (String id : ref.getIds()) {
+ components.add(context.getComponent(id));
+ }
+
+ LOG.debug("BeanListReference resolved as {}" + components);
+ cArgs.add(components);
+ } else {
+ LOG.debug("Unknown:" + arg.toString());
+ cArgs.add(arg);
+ }
+ }
+ return cArgs;
+ }
+
+ @SuppressWarnings("rawtypes")
+ protected void applyProperties(ObjectDefinition bean, Object instance,
+ EcoExecutionContext context) throws
+ IllegalAccessException, InvocationTargetException, NoSuchFieldException {
+ List<PropertyDefinition> props = bean.getProperties();
+ Class clazz = instance.getClass();
+ if (props != null) {
+ for (PropertyDefinition prop : props) {
+ Object value = prop.isReference() ? context.getComponent(prop.getRef()) : prop.getValue();
+ Method setter = findSetter(clazz, prop.getName());
+ if (setter != null) {
+ LOG.debug("found setter, attempting with: " + instance.getClass() + " " + value);
+ // invoke setter
+ setter.invoke(instance, new Object[]{value});
+ } else {
+ // look for a public instance variable
+ LOG.debug("no setter found. Looking for a public instance variable...");
+ Field field = findPublicField(clazz, prop.getName());
+ if (field != null) {
+ field.set(instance, value);
+ }
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ protected Field findPublicField(Class clazz, String property)
+ throws NoSuchFieldException {
+ Field field = clazz.getField(property);
+ return field;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private Method findSetter(Class clazz, String property) {
+ String setterName = toSetterName(property);
+ Method retval = null;
+ Method[] methods = clazz.getMethods();
+ for (Method method : methods) {
+ if (setterName.equals(method.getName())) {
+ LOG.debug("Found setter method: " + method.getName());
+ retval = method;
+ }
+ }
+ return retval;
+ }
+
+ protected String toSetterName(String name) {
+ return "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
+ }
+
+ protected Class<?> classForName(String className) throws ClassNotFoundException {
+ return Class.forName(className);
+ }
+}
diff --git a/eco/src/java/org/apache/heron/eco/builder/ComponentBuilder.java b/eco/src/java/org/apache/heron/eco/builder/ComponentBuilder.java
new file mode 100644
index 0000000..46a05f7
--- /dev/null
+++ b/eco/src/java/org/apache/heron/eco/builder/ComponentBuilder.java
@@ -0,0 +1,36 @@
+// Copyright 2017 Twitter. All rights reserved.
+//
+// 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
... 244814 lines suppressed ...
--
To stop receiving notification emails like this one, please contact
nlu90@apache.org.