You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by ka...@apache.org on 2018/06/09 13:42:43 UTC

[35/51] [partial] storm-site git commit: Update latest 1.x-branch version to 1.2.2

http://git-wip-us.apache.org/repos/asf/storm-site/blob/6e122a12/content/releases/1.2.1/State-checkpointing.html
----------------------------------------------------------------------
diff --git a/content/releases/1.2.1/State-checkpointing.html b/content/releases/1.2.1/State-checkpointing.html
deleted file mode 100644
index 106029f..0000000
--- a/content/releases/1.2.1/State-checkpointing.html
+++ /dev/null
@@ -1,497 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
-    <link rel="icon" href="/favicon.ico" type="image/x-icon">
-
-    <title>Storm State Management</title>
-
-    <!-- Bootstrap core CSS -->
-    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
-    <!-- Bootstrap theme -->
-    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
-
-    <!-- Custom styles for this template -->
-    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
-    <link href="/css/style.css" rel="stylesheet">
-    <link href="/assets/css/owl.theme.css" rel="stylesheet">
-    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
-    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
-    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
-    <script type="text/javascript" src="/assets/js/storm.js"></script>
-    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
-    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
-    
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-    <!--[if lt IE 9]>
-      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
-      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-
-
-  <body>
-    <header>
-  <div class="container-fluid">
-     <div class="row">
-          <div class="col-md-5">
-            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
-          </div>
-          <div class="col-md-5">
-            
-              <h1>Version: 1.2.1</h1>
-            
-          </div>
-          <div class="col-md-2">
-            <a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
-          </div>
-        </div>
-    </div>
-</header>
-<!--Header End-->
-<!--Navigation Begin-->
-<div class="navbar" role="banner">
-  <div class="container-fluid">
-      <div class="navbar-header">
-          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-            </button>
-        </div>
-        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
-          <ul class="nav navbar-nav">
-              <li><a href="/index.html" id="home">Home</a></li>
-                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
-                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                      
-                        
-                          <li><a href="/releases/2.0.0-SNAPSHOT/index.html">2.0.0-SNAPSHOT</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.2.1/index.html">1.2.1</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.1.2/index.html">1.1.2</a></li>
-                        
-                      
-                        
-                      
-                        
-                          <li><a href="/releases/1.0.6/index.html">1.0.6</a></li>
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                    </ul>
-                </li>
-                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
-                        <li><a href="/contribute/People.html">People</a></li>
-                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
-                    </ul>
-                </li>
-                <li><a href="/2018/06/04/storm122-released.html" id="news">News</a></li>
-            </ul>
-        </nav>
-    </div>
-</div>
-
-
-
-    <div class="container-fluid">
-    <h1 class="page-title">Storm State Management</h1>
-          <div class="row">
-           	<div class="col-md-12">
-	             <!-- Documentation -->
-
-<p class="post-meta"></p>
-
-<div class="documentation-content"><h1 id="state-support-in-core-storm">State support in core storm</h1>
-
-<p>Storm core has abstractions for bolts to save and retrieve the state of its operations. There is a default in-memory
-based state implementation and also a Redis backed implementation that provides state persistence.</p>
-
-<h2 id="state-management">State management</h2>
-
-<p>Bolts that requires its state to be managed and persisted by the framework should implement the <code>IStatefulBolt</code> interface or
-extend the <code>BaseStatefulBolt</code> and implement <code>void initState(T state)</code> method. The <code>initState</code> method is invoked by the framework
-during the bolt initialization with the previously saved state of the bolt. This is invoked after prepare but before the bolt starts
-processing any tuples.</p>
-
-<p>Currently the only kind of <code>State</code> implementation that is supported is <code>KeyValueState</code> which provides key-value mapping.</p>
-
-<p>For example a word count bolt could use the key value state abstraction for the word counts as follows.</p>
-
-<ol>
-<li>Extend the BaseStatefulBolt and type parameterize it with KeyValueState which would store the mapping of word to count.</li>
-<li>The bolt gets initialized with its previously saved state in the init method. This will contain the word counts
-last committed by the framework during the previous run.</li>
-<li><p>In the execute method, update the word count.</p>
-
-<p>public class WordCountBolt extends BaseStatefulBolt<KeyValueState<String, Long>&gt; {
-private KeyValueState<String, Long> wordCounts;
-private OutputCollector collector;
-...
-    @Override
-    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-      this.collector = collector;
-    }
-    @Override
-    public void initState(KeyValueState<String, Long> state) {
-      wordCounts = state;
-    }
-    @Override
-    public void execute(Tuple tuple) {
-      String word = tuple.getString(0);
-      Integer count = wordCounts.get(word, 0);
-      count++;
-      wordCounts.put(word, count);
-      collector.emit(tuple, new Values(word, count));
-      collector.ack(tuple);
-    }
-...
-}</p></li>
-<li><p>The framework periodically checkpoints the state of the bolt (default every second). The frequency
-can be changed by setting the storm config <code>topology.state.checkpoint.interval.ms</code></p></li>
-<li><p>For state persistence, use a state provider that supports persistence by setting the <code>topology.state.provider</code> in the
-storm config. E.g. for using Redis based key-value state implementation set <code>topology.state.provider: org.apache.storm.redis.state.RedisKeyValueStateProvider</code>
-in storm.yaml. The provider implementation jar should be in the class path, which in this case means adding <code>storm-redis</code> 
-to dependency of your topology, or adding <code>--artifacts &quot;org.apache.storm:storm-sql-redis:&lt;storm-version&gt;&quot;</code> when submitting your topology with <code>storm jar</code>.</p></li>
-<li><p>The state provider properties can be overridden by setting <code>topology.state.provider.config</code>. For Redis state this is a
-json config with the following properties.</p></li>
-</ol>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-  "keyClass": "Optional fully qualified class name of the Key type.",
-  "valueClass": "Optional fully qualified class name of the Value type.",
-  "keySerializerClass": "Optional Key serializer implementation class.",
-  "valueSerializerClass": "Optional Value Serializer implementation class.",
-  "jedisPoolConfig": {
-    "host": "localhost",
-    "port": 6379,
-    "timeout": 2000,
-    "database": 0,
-    "password": "xyz"
-    }
-}
-</code></pre></div>
-<p>For Redis Cluster state this is a json config with the following properties.</p>
-<div class="highlight"><pre><code class="language-" data-lang=""> {
-   "keyClass": "Optional fully qualified class name of the Key type.",
-   "valueClass": "Optional fully qualified class name of the Value type.",
-   "keySerializerClass": "Optional Key serializer implementation class.",
-   "valueSerializerClass": "Optional Value Serializer implementation class.",
-   "jedisClusterConfig": {
-     "nodes": ["localhost:7379", "localhost:7380", "localhost:7381"],
-     "timeout": 2000,
-     "maxRedirections": 5
-   }
- }
-</code></pre></div>
-<p>NOTE: If you used Redis state with Storm version 1.1.0 or earlier, you would need to also migrate your state since the representation of state has changed<br>
-from Base64-encoded string to binary to reduce huge overhead. Storm provides a migration tool to help, which is placed on <code>storm-redis-example</code> module.</p>
-
-<p>Please download the source from download page or clone the project, and type below command:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">mvn clean install -DskipTests
-cd examples/storm-redis-examples
-&lt;storm-installation-dir&gt;/bin/storm jar target/storm-redis-examples-*.jar org.apache.storm.redis.tools.Base64ToBinaryStateMigrationUtil [options]
-</code></pre></div>
-<p>Supported options are listed here:</p>
-<div class="highlight"><pre><code class="language-" data-lang=""> -d,--dbnum &lt;arg&gt;       Redis DB number (default: 0)
- -h,--host &lt;arg&gt;        Redis hostname (default: localhost)
- -n,--namespace &lt;arg&gt;   REQUIRED the list of namespace to migrate.
- -p,--port &lt;arg&gt;        Redis port (default: 6379)
-    --password &lt;arg&gt;    Redis password (default: no password)
-</code></pre></div>
-<p>You can provide multiple <code>namespace</code> options to migrate multiple namespaces at once. 
-(e.g.: <code>--namespace total-7 --namespace partialsum-3</code>)
-Other options are not mandatory.
-Please note that you need to also migrate the key starting with &quot;$checkpointspout-&quot; since it&#39;s internal namespace of state. </p>
-
-<h2 id="checkpoint-mechanism">Checkpoint mechanism</h2>
-
-<p>Checkpoint is triggered by an internal checkpoint spout at the specified <code>topology.state.checkpoint.interval.ms</code>. If there is
-at-least one <code>IStatefulBolt</code> in the topology, the checkpoint spout is automatically added by the topology builder . For stateful topologies,
-the topology builder wraps the <code>IStatefulBolt</code> in a <code>StatefulBoltExecutor</code> which handles the state commits on receiving the checkpoint tuples.
-The non stateful bolts are wrapped in a <code>CheckpointTupleForwarder</code> which just forwards the checkpoint tuples so that the checkpoint tuples
-can flow through the topology DAG. The checkpoint tuples flow through a separate internal stream namely <code>$checkpoint</code>. The topology builder
-wires the checkpoint stream across the whole topology with the checkpoint spout at the root.</p>
-<div class="highlight"><pre><code class="language-" data-lang="">              default                         default               default
-[spout1]   ---------------&gt; [statefulbolt1] ----------&gt; [bolt1] --------------&gt; [statefulbolt2]
-                          |                 ----------&gt;         --------------&gt;
-                          |                   ($chpt)               ($chpt)
-                          |
-[$checkpointspout] _______| ($chpt)
-</code></pre></div>
-<p>At checkpoint intervals the checkpoint tuples are emitted by the checkpoint spout. On receiving a checkpoint tuple, the state of the bolt
-is saved and then the checkpoint tuple is forwarded to the next component. Each bolt waits for the checkpoint to arrive on all its input
-streams before it saves its state so that the state represents a consistent state across the topology. Once the checkpoint spout receives
-ACK from all the bolts, the state commit is complete and the transaction is recorded as committed by the checkpoint spout.</p>
-
-<p>The state checkpointing does not currently checkpoint the state of the spout. Yet, once the state of all bolts are checkpointed, and once the checkpoint tuples are acked, the tuples emitted by the spout are also acked. 
-It also implies that <code>topology.state.checkpoint.interval.ms</code> is lower than <code>topology.message.timeout.secs</code>. </p>
-
-<p>The state commit works like a three phase commit protocol with a prepare and commit phase so that the state across the topology is saved
-in a consistent and atomic manner.</p>
-
-<h3 id="recovery">Recovery</h3>
-
-<p>The recovery phase is triggered when the topology is started for the first time. If the previous transaction was not successfully
-prepared, a <code>rollback</code> message is sent across the topology so that if a bolt has some prepared transactions it can be discarded.
-If the previous transaction was prepared successfully but not committed, a <code>commit</code> message is sent across the topology so that
-the prepared transactions can be committed. After these steps are complete, the bolts are initialized with the state.</p>
-
-<p>The recovery is also triggered if one of the bolts fails to acknowledge the checkpoint message or say a worker crashed in
-the middle. Thus when the worker is restarted by the supervisor, the checkpoint mechanism makes sure that the bolt gets
-initialized with its previous state and the checkpointing continues from the point where it left off.</p>
-
-<h3 id="guarantee">Guarantee</h3>
-
-<p>Storm relies on the acking mechanism to replay tuples in case of failures. It is possible that the state is committed
-but the worker crashes before acking the tuples. In this case the tuples are replayed causing duplicate state updates.
-Also currently the StatefulBoltExecutor continues to process the tuples from a stream after it has received a checkpoint
-tuple on one stream while waiting for checkpoint to arrive on other input streams for saving the state. This can also cause
-duplicate state updates during recovery.</p>
-
-<p>The state abstraction does not eliminate duplicate evaluations and currently provides only at-least once guarantee.</p>
-
-<p>In order to provide the at-least once guarantee, all bolts in a stateful topology are expected to anchor the tuples 
-while emitting and ack the input tuples once its processed. For non-stateful bolts, the anchoring/acking can be automatically 
-managed by extending the <code>BaseBasicBolt</code>. Stateful bolts are expected to anchor tuples while emitting and ack the tuple 
-after processing like in the <code>WordCountBolt</code> example in the State management section above.</p>
-
-<h3 id="istateful-bolt-hooks">IStateful bolt hooks</h3>
-
-<p>IStateful bolt interface provides hook methods where in the stateful bolts could implement some custom actions.</p>
-<div class="highlight"><pre><code class="language-java" data-lang="java">    <span class="cm">/**
-     * This is a hook for the component to perform some actions just before the
-     * framework commits its state.
-     */</span>
-    <span class="kt">void</span> <span class="nf">preCommit</span><span class="o">(</span><span class="kt">long</span> <span class="n">txid</span><span class="o">);</span>
-
-    <span class="cm">/**
-     * This is a hook for the component to perform some actions just before the
-     * framework prepares its state.
-     */</span>
-    <span class="kt">void</span> <span class="nf">prePrepare</span><span class="o">(</span><span class="kt">long</span> <span class="n">txid</span><span class="o">);</span>
-
-    <span class="cm">/**
-     * This is a hook for the component to perform some actions just before the
-     * framework rolls back the prepared state.
-     */</span>
-    <span class="kt">void</span> <span class="nf">preRollback</span><span class="o">();</span>
-</code></pre></div>
-<p>This is optional and stateful bolts are not expected to provide any implementation. This is provided so that other
-system level components can be built on top of the stateful abstractions where we might want to take some actions before the
-stateful bolt&#39;s state is prepared, committed or rolled back.</p>
-
-<h2 id="providing-custom-state-implementations">Providing custom state implementations</h2>
-
-<p>Currently the only kind of <code>State</code> implementation supported is <code>KeyValueState</code> which provides key-value mapping.</p>
-
-<p>Custom state implementations should provide implementations for the methods defined in the <code>org.apache.storm.State</code> interface.
-These are the <code>void prepareCommit(long txid)</code>, <code>void commit(long txid)</code>, <code>rollback()</code> methods. <code>commit()</code> method is optional
-and is useful if the bolt manages the state on its own. This is currently used only by the internal system bolts,
-for e.g. the CheckpointSpout to save its state.</p>
-
-<p><code>KeyValueState</code> implementation should also implement the methods defined in the <code>org.apache.storm.state.KeyValueState</code> interface.</p>
-
-<h3 id="state-provider">State provider</h3>
-
-<p>The framework instantiates the state via the corresponding <code>StateProvider</code> implementation. A custom state should also provide
-a <code>StateProvider</code> implementation which can load and return the state based on the namespace. Each state belongs to a unique namespace.
-The namespace is typically unique per task so that each task can have its own state. The StateProvider and the corresponding
-State implementation should be available in the class path of Storm (by placing them in the extlib directory).</p>
-
-<h3 id="supported-state-backends">Supported State Backends</h3>
-
-<h4 id="redis">Redis</h4>
-
-<ul>
-<li>State provider class name (<code>topology.state.provider</code>)</li>
-</ul>
-
-<p><code>org.apache.storm.redis.state.RedisKeyValueStateProvider</code></p>
-
-<ul>
-<li>Provider config (<code>topology.state.provider.config</code>)</li>
-</ul>
-<div class="highlight"><pre><code class="language-" data-lang=""> {
-   "keyClass": "Optional fully qualified class name of the Key type.",
-   "valueClass": "Optional fully qualified class name of the Value type.",
-   "keySerializerClass": "Optional Key serializer implementation class.",
-   "valueSerializerClass": "Optional Value Serializer implementation class.",
-   "jedisPoolConfig": {
-     "host": "localhost",
-     "port": 6379,
-     "timeout": 2000,
-     "database": 0,
-     "password": "xyz"
-   }
- }
-</code></pre></div>
-<ul>
-<li>Artifacts to add (<code>--artifacts</code>)</li>
-</ul>
-
-<p><code>org.apache.storm:storm-redis:&lt;storm-version&gt;</code></p>
-
-<h4 id="hbase">HBase</h4>
-
-<p>In order to make state scalable, HBaseKeyValueState stores state KV to a row. This introduces <code>non-atomic</code> commit phase and guarantee 
-eventual consistency on HBase side. It doesn&#39;t matter in point of state&#39;s view because HBaseKeyValueState can still provide not-yet-committed value.
-Even if worker crashes at commit phase, after restart it will read pending-commit states (stored atomically) from HBase and states will be stored eventually. </p>
-
-<p>NOTE: HBase state provider uses pre-created table and column family, so users need to create and provide one to the provider config.</p>
-
-<p>You can simply create table via <code>create &#39;state&#39;, &#39;cf&#39;</code> in <code>hbase shell</code> but in production you may want to give some more properties.</p>
-
-<ul>
-<li>State provider class name (<code>topology.state.provider</code>)</li>
-</ul>
-
-<p><code>org.apache.storm.hbase.state.HBaseKeyValueStateProvider</code></p>
-
-<ul>
-<li>Provider config (<code>topology.state.provider.config</code>)</li>
-</ul>
-<div class="highlight"><pre><code class="language-" data-lang=""> {
-   "keyClass": "Optional fully qualified class name of the Key type.",
-   "valueClass": "Optional fully qualified class name of the Value type.",
-   "keySerializerClass": "Optional Key serializer implementation class.",
-   "valueSerializerClass": "Optional Value Serializer implementation class.",
-   "hbaseConfigKey": "config key to load hbase configuration from storm root configuration. (similar to storm-hbase)",
-   "tableName": "Pre-created table name for state.",
-   "columnFamily": "Pre-created column family for state."
- }
-</code></pre></div>
-<p>If you want to initialize HBase state provider from codebase, please see below example:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">Config conf = new Config();
-    Map&lt;String, Object&gt; hbConf = new HashMap&lt;String, Object&gt;();
-    hbConf.put("hbase.rootdir", "file:///tmp/hbase");
-    conf.put("hbase.conf", hbConf);
-    conf.put("topology.state.provider",  "org.apache.storm.hbase.state.HBaseKeyValueStateProvider");
-    conf.put("topology.state.provider.config", "{" +
-            "   \"hbaseConfigKey\": \"hbase.conf\"," +
-            "   \"tableName\": \"state\"," +
-            "   \"columnFamily\": \"cf\"" +
-            " }");
-</code></pre></div>
-<ul>
-<li>Artifacts to add (<code>--artifacts</code>)</li>
-</ul>
-
-<p><code>org.apache.storm:storm-hbase:&lt;storm-version&gt;</code></p>
-</div>
-
-
-	          </div>
-	       </div>
-	  </div>
-<footer>
-    <div class="container-fluid">
-        <div class="row">
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Meetups</h5>
-                    <ul class="latest-news">
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
-                        
-                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>About Storm</h5>
-                    <p>Storm integrates with any queueing system and any database system. Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Storm with database systems is easy.</p>
-               </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>First Look</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
-                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
-                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
-                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Storm project</a></li>
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Documentation</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/index.html">Index</a></li>
-                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
-                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
-                    </ul>
-                </div>
-            </div>
-        </div>
-        <hr/>
-        <div class="row">   
-            <div class="col-md-12">
-                <p align="center">Copyright © 2015 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
-                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
-                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
-            </div>
-        </div>
-    </div>
-</footer>
-<!--Footer End-->
-<!-- Scroll to top -->
-<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 
-
-</body>
-
-</html>
-

http://git-wip-us.apache.org/repos/asf/storm-site/blob/6e122a12/content/releases/1.2.1/Storm-Scheduler.html
----------------------------------------------------------------------
diff --git a/content/releases/1.2.1/Storm-Scheduler.html b/content/releases/1.2.1/Storm-Scheduler.html
deleted file mode 100644
index e769460..0000000
--- a/content/releases/1.2.1/Storm-Scheduler.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
-    <link rel="icon" href="/favicon.ico" type="image/x-icon">
-
-    <title>Scheduler</title>
-
-    <!-- Bootstrap core CSS -->
-    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
-    <!-- Bootstrap theme -->
-    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
-
-    <!-- Custom styles for this template -->
-    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
-    <link href="/css/style.css" rel="stylesheet">
-    <link href="/assets/css/owl.theme.css" rel="stylesheet">
-    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
-    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
-    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
-    <script type="text/javascript" src="/assets/js/storm.js"></script>
-    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
-    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
-    
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-    <!--[if lt IE 9]>
-      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
-      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-
-
-  <body>
-    <header>
-  <div class="container-fluid">
-     <div class="row">
-          <div class="col-md-5">
-            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
-          </div>
-          <div class="col-md-5">
-            
-              <h1>Version: 1.2.1</h1>
-            
-          </div>
-          <div class="col-md-2">
-            <a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
-          </div>
-        </div>
-    </div>
-</header>
-<!--Header End-->
-<!--Navigation Begin-->
-<div class="navbar" role="banner">
-  <div class="container-fluid">
-      <div class="navbar-header">
-          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-            </button>
-        </div>
-        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
-          <ul class="nav navbar-nav">
-              <li><a href="/index.html" id="home">Home</a></li>
-                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
-                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                      
-                        
-                          <li><a href="/releases/2.0.0-SNAPSHOT/index.html">2.0.0-SNAPSHOT</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.2.1/index.html">1.2.1</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.1.2/index.html">1.1.2</a></li>
-                        
-                      
-                        
-                      
-                        
-                          <li><a href="/releases/1.0.6/index.html">1.0.6</a></li>
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                    </ul>
-                </li>
-                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
-                        <li><a href="/contribute/People.html">People</a></li>
-                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
-                    </ul>
-                </li>
-                <li><a href="/2018/06/04/storm122-released.html" id="news">News</a></li>
-            </ul>
-        </nav>
-    </div>
-</div>
-
-
-
-    <div class="container-fluid">
-    <h1 class="page-title">Scheduler</h1>
-          <div class="row">
-           	<div class="col-md-12">
-	             <!-- Documentation -->
-
-<p class="post-meta"></p>
-
-<div class="documentation-content"><p>Storm now has 4 kinds of built-in schedulers: <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/scheduler/DefaultScheduler.clj">DefaultScheduler</a>, <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/scheduler/IsolationScheduler.clj">IsolationScheduler</a>, <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/jvm/org/apache/storm/scheduler/multitenant/MultitenantScheduler.java">MultitenantScheduler</a>, <a href="Resource_Aware_Scheduler_overview.html">ResourceAwareScheduler</a>. </p>
-
-<h2 id="pluggable-scheduler">Pluggable scheduler</h2>
-
-<p>You can implement your own scheduler to replace the default scheduler to assign executors to workers. You configure the class to use  the &quot;storm.scheduler&quot; config in your storm.yaml, and your scheduler must implement the  <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/jvm/org/apache/storm/scheduler/IScheduler.java">IScheduler</a> interface.</p>
-
-<h2 id="isolation-scheduler">Isolation Scheduler</h2>
-
-<p>The isolation scheduler makes it easy and safe to share a cluster among many topologies. The isolation scheduler lets you specify which topologies should be &quot;isolated&quot;, meaning that they run on a dedicated set of machines within the cluster where no other topologies will be running. These isolated topologies are given priority on the cluster, so resources will be allocated to isolated topologies if there&#39;s competition with non-isolated topologies, and resources will be taken away from non-isolated topologies if necessary to get resources for an isolated topology. Once all isolated topologies are allocated, the remaining machines on the cluster are shared among all non-isolated topologies.</p>
-
-<p>You can configure the isolation scheduler in the Nimbus configuration by setting &quot;storm.scheduler&quot; to &quot;org.apache.storm.scheduler.IsolationScheduler&quot;. Then, use the &quot;isolation.scheduler.machines&quot; config to specify how many machines each topology should get. This configuration is a map from topology name to the number of isolated machines allocated to this topology. For example:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">isolation.scheduler.machines: 
-    "my-topology": 8
-    "tiny-topology": 1
-    "some-other-topology": 3
-</code></pre></div>
-<p>Any topologies submitted to the cluster not listed there will not be isolated. Note that there is no way for a user of Storm to affect their isolation settings – this is only allowed by the administrator of the cluster (this is very much intentional).</p>
-
-<p>The isolation scheduler solves the multi-tenancy problem – avoiding resource contention between topologies – by providing full isolation between topologies. The intention is that &quot;productionized&quot; topologies should be listed in the isolation config, and test or in-development topologies should not. The remaining machines on the cluster serve the dual role of failover for isolated topologies and for running the non-isolated topologies.</p>
-</div>
-
-
-	          </div>
-	       </div>
-	  </div>
-<footer>
-    <div class="container-fluid">
-        <div class="row">
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Meetups</h5>
-                    <ul class="latest-news">
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
-                        
-                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>About Storm</h5>
-                    <p>Storm integrates with any queueing system and any database system. Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Storm with database systems is easy.</p>
-               </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>First Look</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
-                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
-                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
-                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Storm project</a></li>
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Documentation</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/index.html">Index</a></li>
-                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
-                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
-                    </ul>
-                </div>
-            </div>
-        </div>
-        <hr/>
-        <div class="row">   
-            <div class="col-md-12">
-                <p align="center">Copyright © 2015 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
-                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
-                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
-            </div>
-        </div>
-    </div>
-</footer>
-<!--Footer End-->
-<!-- Scroll to top -->
-<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 
-
-</body>
-
-</html>
-

http://git-wip-us.apache.org/repos/asf/storm-site/blob/6e122a12/content/releases/1.2.1/Storm-multi-language-protocol-(versions-0.7.0-and-below).html
----------------------------------------------------------------------
diff --git a/content/releases/1.2.1/Storm-multi-language-protocol-(versions-0.7.0-and-below).html b/content/releases/1.2.1/Storm-multi-language-protocol-(versions-0.7.0-and-below).html
deleted file mode 100644
index 5819a32..0000000
--- a/content/releases/1.2.1/Storm-multi-language-protocol-(versions-0.7.0-and-below).html
+++ /dev/null
@@ -1,331 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
-    <link rel="icon" href="/favicon.ico" type="image/x-icon">
-
-    <title>Apache Storm</title>
-
-    <!-- Bootstrap core CSS -->
-    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
-    <!-- Bootstrap theme -->
-    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
-
-    <!-- Custom styles for this template -->
-    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
-    <link href="/css/style.css" rel="stylesheet">
-    <link href="/assets/css/owl.theme.css" rel="stylesheet">
-    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
-    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
-    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
-    <script type="text/javascript" src="/assets/js/storm.js"></script>
-    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
-    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
-    
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-    <!--[if lt IE 9]>
-      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
-      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-
-
-  <body>
-    <header>
-  <div class="container-fluid">
-     <div class="row">
-          <div class="col-md-5">
-            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
-          </div>
-          <div class="col-md-5">
-            
-              <h1>Version: 1.2.1</h1>
-            
-          </div>
-          <div class="col-md-2">
-            <a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
-          </div>
-        </div>
-    </div>
-</header>
-<!--Header End-->
-<!--Navigation Begin-->
-<div class="navbar" role="banner">
-  <div class="container-fluid">
-      <div class="navbar-header">
-          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-            </button>
-        </div>
-        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
-          <ul class="nav navbar-nav">
-              <li><a href="/index.html" id="home">Home</a></li>
-                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
-                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                      
-                        
-                          <li><a href="/releases/2.0.0-SNAPSHOT/index.html">2.0.0-SNAPSHOT</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.2.1/index.html">1.2.1</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.1.2/index.html">1.1.2</a></li>
-                        
-                      
-                        
-                      
-                        
-                          <li><a href="/releases/1.0.6/index.html">1.0.6</a></li>
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                    </ul>
-                </li>
-                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
-                        <li><a href="/contribute/People.html">People</a></li>
-                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
-                    </ul>
-                </li>
-                <li><a href="/2018/06/04/storm122-released.html" id="news">News</a></li>
-            </ul>
-        </nav>
-    </div>
-</div>
-
-
-
-    <div class="container-fluid">
-    <h1 class="page-title"></h1>
-          <div class="row">
-           	<div class="col-md-12">
-	             <!-- Documentation -->
-
-<p class="post-meta"></p>
-
-<div class="documentation-content"><p>This page explains the multilang protocol for versions 0.7.0 and below. The protocol changed in version 0.7.1.</p>
-
-<h1 id="storm-multi-language-protocol">Storm Multi-Language Protocol</h1>
-
-<h2 id="the-shellbolt">The ShellBolt</h2>
-
-<p>Support for multiple languages is implemented via the ShellBolt class.  This
-class implements the IBolt interfaces and implements the protocol for
-executing a script or program via the shell using Java&#39;s ProcessBuilder class.</p>
-
-<h2 id="output-fields">Output fields</h2>
-
-<p>Output fields are part of the Thrift definition of the topology. This means that when you multilang in Java, you need to create a bolt that extends ShellBolt, implements IRichBolt, and declared the fields in <code>declareOutputFields</code>. 
-You can learn more about this on <a href="Concepts.html">Concepts</a></p>
-
-<h2 id="protocol-preamble">Protocol Preamble</h2>
-
-<p>A simple protocol is implemented via the STDIN and STDOUT of the executed
-script or program. A mix of simple strings and JSON encoded data are exchanged
-with the process making support possible for pretty much any language.</p>
-
-<h1 id="packaging-your-stuff">Packaging Your Stuff</h1>
-
-<p>To run a ShellBolt on a cluster, the scripts that are shelled out to must be
-in the <code>resources/</code> directory within the jar submitted to the master.</p>
-
-<p>However, During development or testing on a local machine, the resources
-directory just needs to be on the classpath.</p>
-
-<h2 id="the-protocol">The Protocol</h2>
-
-<p>Notes:
-* Both ends of this protocol use a line-reading mechanism, so be sure to
-trim off newlines from the input and to append them to your output.
-* All JSON inputs and outputs are terminated by a single line contained &quot;end&quot;.
-* The bullet points below are written from the perspective of the script writer&#39;s
-STDIN and STDOUT.</p>
-
-<ul>
-<li>Your script will be executed by the Bolt.</li>
-<li>STDIN: A string representing a path. This is a PID directory.
-Your script should create an empty file named with it&#39;s pid in this directory. e.g.
-the PID is 1234, so an empty file named 1234 is created in the directory. This
-file lets the supervisor know the PID so it can shutdown the process later on.</li>
-<li>STDOUT: Your PID. This is not JSON encoded, just a string. ShellBolt will log the PID to its log.</li>
-<li>STDIN: (JSON) The Storm configuration.  Various settings and properties.</li>
-<li>STDIN: (JSON) The Topology context</li>
-<li>The rest happens in a while(true) loop</li>
-<li>STDIN: A tuple! This is a JSON encoded structure like this:</li>
-</ul>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-    // The tuple's id
-    "id": -6955786537413359385,
-    // The id of the component that created this tuple
-    "comp": 1,
-    // The id of the stream this tuple was emitted to
-    "stream": 1,
-    // The id of the task that created this tuple
-    "task": 9,
-    // All the values in this tuple
-    "tuple": ["snow white and the seven dwarfs", "field2", 3]
-}
-</code></pre></div>
-<ul>
-<li>STDOUT: The results of your bolt, JSON encoded. This can be a sequence of acks, fails, emits, and/or logs. Emits look like:</li>
-</ul>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-    "command": "emit",
-    // The ids of the tuples this output tuples should be anchored to
-    "anchors": [1231231, -234234234],
-    // The id of the stream this tuple was emitted to. Leave this empty to emit to default stream.
-    "stream": 1,
-    // If doing an emit direct, indicate the task to sent the tuple to
-    "task": 9,
-    // All the values in this tuple
-    "tuple": ["field1", 2, 3]
-}
-</code></pre></div>
-<p>An ack looks like:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-    "command": "ack",
-    // the id of the tuple to ack
-    "id": 123123
-}
-</code></pre></div>
-<p>A fail looks like:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-    "command": "fail",
-    // the id of the tuple to fail
-    "id": 123123
-}
-</code></pre></div>
-<p>A &quot;log&quot; will log a message in the worker log. It looks like:</p>
-<div class="highlight"><pre><code class="language-" data-lang="">{
-    "command": "log",
-    // the message to log
-    "msg": "hello world!"
-
-}
-</code></pre></div>
-<ul>
-<li>STDOUT: emit &quot;sync&quot; as a single line by itself when the bolt has finished emitting/acking/failing and is ready for the next input</li>
-</ul>
-
-<h3 id="sync">sync</h3>
-
-<p>Note: This command is not JSON encoded, it is sent as a simple string.</p>
-
-<p>This lets the parent bolt know that the script has finished processing and is ready for another tuple.</p>
-</div>
-
-
-	          </div>
-	       </div>
-	  </div>
-<footer>
-    <div class="container-fluid">
-        <div class="row">
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Meetups</h5>
-                    <ul class="latest-news">
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
-                        
-                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>About Storm</h5>
-                    <p>Storm integrates with any queueing system and any database system. Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Storm with database systems is easy.</p>
-               </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>First Look</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
-                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
-                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
-                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Storm project</a></li>
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Documentation</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/index.html">Index</a></li>
-                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
-                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
-                    </ul>
-                </div>
-            </div>
-        </div>
-        <hr/>
-        <div class="row">   
-            <div class="col-md-12">
-                <p align="center">Copyright © 2015 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
-                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
-                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
-            </div>
-        </div>
-    </div>
-</footer>
-<!--Footer End-->
-<!-- Scroll to top -->
-<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 
-
-</body>
-
-</html>
-

http://git-wip-us.apache.org/repos/asf/storm-site/blob/6e122a12/content/releases/1.2.1/Structure-of-the-codebase.html
----------------------------------------------------------------------
diff --git a/content/releases/1.2.1/Structure-of-the-codebase.html b/content/releases/1.2.1/Structure-of-the-codebase.html
deleted file mode 100644
index dab7ab1..0000000
--- a/content/releases/1.2.1/Structure-of-the-codebase.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!DOCTYPE html>
-<html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
-    <link rel="icon" href="/favicon.ico" type="image/x-icon">
-
-    <title>Structure of the Codebase</title>
-
-    <!-- Bootstrap core CSS -->
-    <link href="/assets/css/bootstrap.min.css" rel="stylesheet">
-    <!-- Bootstrap theme -->
-    <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet">
-
-    <!-- Custom styles for this template -->
-    <link rel="stylesheet" href="http://fortawesome.github.io/Font-Awesome/assets/font-awesome/css/font-awesome.css">
-    <link href="/css/style.css" rel="stylesheet">
-    <link href="/assets/css/owl.theme.css" rel="stylesheet">
-    <link href="/assets/css/owl.carousel.css" rel="stylesheet">
-    <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
-    <script type="text/javascript" src="/assets/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="/assets/js/owl.carousel.min.js"></script>
-    <script type="text/javascript" src="/assets/js/storm.js"></script>
-    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
-    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
-    
-    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-    <!--[if lt IE 9]>
-      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
-      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-
-
-  <body>
-    <header>
-  <div class="container-fluid">
-     <div class="row">
-          <div class="col-md-5">
-            <a href="/index.html"><img src="/images/logo.png" class="logo" /></a>
-          </div>
-          <div class="col-md-5">
-            
-              <h1>Version: 1.2.1</h1>
-            
-          </div>
-          <div class="col-md-2">
-            <a href="/downloads.html" class="btn-std btn-block btn-download">Download</a>
-          </div>
-        </div>
-    </div>
-</header>
-<!--Header End-->
-<!--Navigation Begin-->
-<div class="navbar" role="banner">
-  <div class="container-fluid">
-      <div class="navbar-header">
-          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-            </button>
-        </div>
-        <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
-          <ul class="nav navbar-nav">
-              <li><a href="/index.html" id="home">Home</a></li>
-                <li><a href="/getting-help.html" id="getting-help">Getting Help</a></li>
-                <li><a href="/about/integrates.html" id="project-info">Project Information</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="documentation">Documentation <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                      
-                        
-                          <li><a href="/releases/2.0.0-SNAPSHOT/index.html">2.0.0-SNAPSHOT</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.2.1/index.html">1.2.1</a></li>
-                        
-                      
-                        
-                          <li><a href="/releases/1.1.2/index.html">1.1.2</a></li>
-                        
-                      
-                        
-                      
-                        
-                          <li><a href="/releases/1.0.6/index.html">1.0.6</a></li>
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                        
-                      
-                    </ul>
-                </li>
-                <li><a href="/talksAndVideos.html">Talks and Slideshows</a></li>
-                <li class="dropdown">
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="contribute">Community <b class="caret"></b></a>
-                    <ul class="dropdown-menu">
-                        <li><a href="/contribute/Contributing-to-Storm.html">Contributing</a></li>
-                        <li><a href="/contribute/People.html">People</a></li>
-                        <li><a href="/contribute/BYLAWS.html">ByLaws</a></li>
-                    </ul>
-                </li>
-                <li><a href="/2018/06/04/storm122-released.html" id="news">News</a></li>
-            </ul>
-        </nav>
-    </div>
-</div>
-
-
-
-    <div class="container-fluid">
-    <h1 class="page-title">Structure of the Codebase</h1>
-          <div class="row">
-           	<div class="col-md-12">
-	             <!-- Documentation -->
-
-<p class="post-meta"></p>
-
-<div class="documentation-content"><p>There are three distinct layers to Storm&#39;s codebase.</p>
-
-<p>First, Storm was designed from the very beginning to be compatible with multiple languages. Nimbus is a Thrift service and topologies are defined as Thrift structures. The usage of Thrift allows Storm to be used from any language.</p>
-
-<p>Second, all of Storm&#39;s interfaces are specified as Java interfaces. So even though there&#39;s a lot of Clojure in Storm&#39;s implementation, all usage must go through the Java API. This means that every feature of Storm is always available via Java.</p>
-
-<p>Third, Storm&#39;s implementation is largely in Clojure. Line-wise, Storm is about half Java code, half Clojure code. But Clojure is much more expressive, so in reality the great majority of the implementation logic is in Clojure. </p>
-
-<p>The following sections explain each of these layers in more detail.</p>
-
-<h3 id="storm-thrift">storm.thrift</h3>
-
-<p>The first place to look to understand the structure of Storm&#39;s codebase is the <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/storm.thrift">storm.thrift</a> file.</p>
-
-<p>Storm uses <a href="https://github.com/nathanmarz/thrift/tree/storm">this fork</a> of Thrift (branch &#39;storm&#39;) to produce the generated code. This &quot;fork&quot; is actually Thrift 7 with all the Java packages renamed to be <code>org.apache.thrift7</code>. Otherwise, it&#39;s identical to Thrift 7. This fork was done because of the lack of backwards compatibility in Thrift and the need for many people to use other versions of Thrift in their Storm topologies.</p>
-
-<p>Every spout or bolt in a topology is given a user-specified identifier called the &quot;component id&quot;. The component id is used to specify subscriptions from a bolt to the output streams of other spouts or bolts. A <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/storm.thrift#L91">StormTopology</a> structure contains a map from component id to component for each type of component (spouts and bolts).</p>
-
-<p>Spouts and bolts have the same Thrift definition, so let&#39;s just take a look at the <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/storm.thrift#L102">Thrift definition for bolts</a>. It contains a <code>ComponentObject</code> struct and a <code>ComponentCommon</code> struct.</p>
-
-<p>The <code>ComponentObject</code> defines the implementation for the bolt. It can be one of three types:</p>
-
-<ol>
-<li>A serialized java object (that implements <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/jvm/org/apache/storm/task/IBolt.java">IBolt</a>)</li>
-<li>A <code>ShellComponent</code> object that indicates the implementation is in another language. Specifying a bolt this way will cause Storm to instantiate a <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/jvm/org/apache/storm/task/ShellBolt.java">ShellBolt</a> object to handle the communication between the JVM-based worker process and the non-JVM-based implementation of the component.</li>
-<li>A <code>JavaObject</code> structure which tells Storm the classname and constructor arguments to use to instantiate that bolt. This is useful if you want to define a topology in a non-JVM language. This way, you can make use of JVM-based spouts and bolts without having to create and serialize a Java object yourself.</li>
-</ol>
-
-<p><code>ComponentCommon</code> defines everything else for this component. This includes:</p>
-
-<ol>
-<li>What streams this component emits and the metadata for each stream (whether it&#39;s a direct stream, the fields declaration)</li>
-<li>What streams this component consumes (specified as a map from component_id:stream_id to the stream grouping to use)</li>
-<li>The parallelism for this component</li>
-<li>The component-specific <a href="Configuration.html">configuration</a> for this component</li>
-</ol>
-
-<p>Note that the structure spouts also have a <code>ComponentCommon</code> field, and so spouts can also have declarations to consume other input streams. Yet the Storm Java API does not provide a way for spouts to consume other streams, and if you put any input declarations there for a spout you would get an error when you tried to submit the topology. The reason that spouts have an input declarations field is not for users to use, but for Storm itself to use. Storm adds implicit streams and bolts to the topology to set up the <a href="Acking-framework-implementation.html">acking framework</a>, and two of these implicit streams are from the acker bolt to each spout in the topology. The acker sends &quot;ack&quot; or &quot;fail&quot; messages along these streams whenever a tuple tree is detected to be completed or failed. The code that transforms the user&#39;s topology into the runtime topology is located <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/ap
 ache/storm/daemon/common.clj#L279">here</a>.</p>
-
-<h3 id="java-interfaces">Java interfaces</h3>
-
-<p>The interfaces for Storm are generally specified as Java interfaces. The main interfaces are:</p>
-
-<ol>
-<li><a href="javadocs/org/apache/storm/topology/IRichBolt.html">IRichBolt</a></li>
-<li><a href="javadocs/org/apache/storm/topology/IRichSpout.html">IRichSpout</a></li>
-<li><a href="javadocs/org/apache/storm/topology/TopologyBuilder.html">TopologyBuilder</a></li>
-</ol>
-
-<p>The strategy for the majority of the interfaces is to:</p>
-
-<ol>
-<li>Specify the interface using a Java interface</li>
-<li>Provide a base class that provides default implementations when appropriate</li>
-</ol>
-
-<p>You can see this strategy at work with the <a href="javadocs/org/apache/storm/topology/base/BaseRichSpout.html">BaseRichSpout</a> class.</p>
-
-<p>Spouts and bolts are serialized into the Thrift definition of the topology as described above. </p>
-
-<p>One subtle aspect of the interfaces is the difference between <code>IBolt</code> and <code>ISpout</code> vs. <code>IRichBolt</code> and <code>IRichSpout</code>. The main difference between them is the addition of the <code>declareOutputFields</code> method in the &quot;Rich&quot; versions of the interfaces. The reason for the split is that the output fields declaration for each output stream needs to be part of the Thrift struct (so it can be specified from any language), but as a user you want to be able to declare the streams as part of your class. What <code>TopologyBuilder</code> does when constructing the Thrift representation is call <code>declareOutputFields</code> to get the declaration and convert it into the Thrift structure. The conversion happens <a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/jvm/org/apache/storm/topology/TopologyBuilder.java#L205">at this portion</a> of the <code>TopologyBuilder</code> code.</p>
-
-<h3 id="implementation">Implementation</h3>
-
-<p>Specifying all the functionality via Java interfaces ensures that every feature of Storm is available via Java. Moreso, the focus on Java interfaces ensures that the user experience from Java-land is pleasant as well.</p>
-
-<p>The implementation of Storm, on the other hand, is primarily in Clojure. While the codebase is about 50% Java and 50% Clojure in terms of LOC, most of the implementation logic is in Clojure. There are two notable exceptions to this, and that is the <a href="https://github.com/apache/storm/wiki/Distributed-RPC">DRPC</a> and <a href="https://github.com/apache/storm/wiki/Transactional-topologies">transactional topologies</a> implementations. These are implemented purely in Java. This was done to serve as an illustration for how to implement a higher level abstraction on Storm. The DRPC and transactional topologies implementations are in the <a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/coordination">org.apache.storm.coordination</a>, <a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/drpc">org.apache.storm.drpc</a>, and <a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/stor
 m/transactional">org.apache.storm.transactional</a> packages.</p>
-
-<p>Here&#39;s a summary of the purpose of the main Java packages and Clojure namespace:</p>
-
-<h4 id="java-packages">Java packages</h4>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/coordination">org.apache.storm.coordination</a>: Implements the pieces required to coordinate batch-processing on top of Storm, which both DRPC and transactional topologies use. <code>CoordinatedBolt</code> is the most important class here.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/drpc">org.apache.storm.drpc</a>: Implementation of the DRPC higher level abstraction</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/generated">org.apache.storm.generated</a>: The generated Thrift code for Storm (generated using <a href="https://github.com/nathanmarz/thrift">this fork</a> of Thrift, which simply renames the packages to org.apache.thrift7 to avoid conflicts with other Thrift versions)</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/grouping">org.apache.storm.grouping</a>: Contains interface for making custom stream groupings</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/hooks">org.apache.storm.hooks</a>: Interfaces for hooking into various events in Storm, such as when tasks emit tuples, when tuples are acked, etc. User guide for hooks is <a href="https://github.com/apache/storm/wiki/Hooks">here</a>.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/serialization">org.apache.storm.serialization</a>: Implementation of how Storm serializes/deserializes tuples. Built on top of <a href="http://code.google.com/p/kryo/">Kryo</a>.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/spout">org.apache.storm.spout</a>: Definition of spout and associated interfaces (like the <code>SpoutOutputCollector</code>). Also contains <code>ShellSpout</code> which implements the protocol for defining spouts in non-JVM languages.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/task">org.apache.storm.task</a>: Definition of bolt and associated interfaces (like <code>OutputCollector</code>). Also contains <code>ShellBolt</code> which implements the protocol for defining bolts in non-JVM languages. Finally, <code>TopologyContext</code> is defined here as well, which is provided to spouts and bolts so they can get data about the topology and its execution at runtime.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/testing">org.apache.storm.testing</a>: Contains a variety of test bolts and utilities used in Storm&#39;s unit tests.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/topology">org.apache.storm.topology</a>: Java layer over the underlying Thrift structure to provide a clean, pure-Java API to Storm (users don&#39;t have to know about Thrift). <code>TopologyBuilder</code> is here as well as the helpful base classes for the different spouts and bolts. The slightly-higher level <code>IBasicBolt</code> interface is here, which is a simpler way to write certain kinds of bolts.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/transactional">org.apache.storm.transactional</a>: Implementation of transactional topologies.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/tuple">org.apache.storm.tuple</a>: Implementation of Storm&#39;s tuple data model.</p>
-
-<p><a href="http://github.com/apache/storm/tree/v1.2.1/storm-core/src/jvm/org/apache/storm/tuple">org.apache.storm.utils</a>: Data structures and miscellaneous utilities used throughout the codebase.</p>
-
-<h4 id="clojure-namespaces">Clojure namespaces</h4>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/bootstrap.clj">org.apache.storm.bootstrap</a>: Contains a helpful macro to import all the classes and namespaces that are used throughout the codebase.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/clojure.clj">org.apache.storm.clojure</a>: Implementation of the Clojure DSL for Storm.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/cluster.clj">org.apache.storm.cluster</a>: All Zookeeper logic used in Storm daemons is encapsulated in this file. This code manages how cluster state (like what tasks are running where, what spout/bolt each task runs as) is mapped to the Zookeeper &quot;filesystem&quot; API.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/command">org.apache.storm.command.*</a>: These namespaces implement various commands for the <code>storm</code> command line client. These implementations are very short.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/config.clj">org.apache.storm.config</a>: Implementation of config reading/parsing code for Clojure. Also has utility functions for determining what local path nimbus/supervisor/daemons should be using for various things. e.g. the <code>master-inbox</code> function will return the local path that Nimbus should use when jars are uploaded to it.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/acker.clj">org.apache.storm.daemon.acker</a>: Implementation of the &quot;acker&quot; bolt, which is a key part of how Storm guarantees data processing.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/common.clj">org.apache.storm.daemon.common</a>: Implementation of common functions used in Storm daemons, like getting the id for a topology based on the name, mapping a user&#39;s topology into the one that actually executes (with implicit acking streams and acker bolt added - see <code>system-topology!</code> function), and definitions for the various heartbeat and other structures persisted by Storm.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/drpc.clj">org.apache.storm.daemon.drpc</a>: Implementation of the DRPC server for use with DRPC topologies.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/nimbus.clj">org.apache.storm.daemon.nimbus</a>: Implementation of Nimbus.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/supervisor.clj">org.apache.storm.daemon.supervisor</a>: Implementation of Supervisor.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/task.clj">org.apache.storm.daemon.task</a>: Implementation of an individual task for a spout or bolt. Handles message routing, serialization, stats collection for the UI, as well as the spout-specific and bolt-specific execution implementations.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/daemon/worker.clj">org.apache.storm.daemon.worker</a>: Implementation of a worker process (which will contain many tasks within). Implements message transferring and task launching.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/event.clj">org.apache.storm.event</a>: Implements a simple asynchronous function executor. Used in various places in Nimbus and Supervisor to make functions execute in serial to avoid any race conditions.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/log.clj">org.apache.storm.log</a>: Defines the functions used to log messages to log4j.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/messaging">org.apache.storm.messaging.*</a>: Defines a higher level interface to implementing point to point messaging. In local mode Storm uses in-memory Java queues to do this; on a cluster, it uses ZeroMQ. The generic interface is defined in protocol.clj.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/stats.clj">org.apache.storm.stats</a>: Implementation of stats rollup routines used when sending stats to ZK for use by the UI. Does things like windowed and rolling aggregations at multiple granularities.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/testing.clj">org.apache.storm.testing</a>: Implementation of facilities used to test Storm topologies. Includes time simulation, <code>complete-topology</code> for running a fixed set of tuples through a topology and capturing the output, tracker topologies for having fine grained control over detecting when a cluster is &quot;idle&quot;, and other utilities.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/thrift.clj">org.apache.storm.thrift</a>: Clojure wrappers around the generated Thrift API to make working with Thrift structures more pleasant.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/timer.clj">org.apache.storm.timer</a>: Implementation of a background timer to execute functions in the future or on a recurring interval. Storm couldn&#39;t use the <a href="http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html">Timer</a> class because it needed integration with time simulation in order to be able to unit test Nimbus and the Supervisor.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/ui">org.apache.storm.ui.*</a>: Implementation of Storm UI. Completely independent from rest of code base and uses the Nimbus Thrift API to get data.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/util.clj">org.apache.storm.util</a>: Contains generic utility functions used throughout the code base.</p>
-
-<p><a href="http://github.com/apache/storm/blob/v1.2.1/storm-core/src/clj/org/apache/storm/zookeeper.clj">org.apache.storm.zookeeper</a>: Clojure wrapper around the Zookeeper API and implements some &quot;high-level&quot; stuff like &quot;mkdirs&quot; and &quot;delete-recursive&quot;.</p>
-</div>
-
-
-	          </div>
-	       </div>
-	  </div>
-<footer>
-    <div class="container-fluid">
-        <div class="row">
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Meetups</h5>
-                    <ul class="latest-news">
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Apache-Kafka/">Apache Storm & Apache Kafka</a> <span class="small">(Sunnyvale, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Apache Storm & Kafka Users</a> <span class="small">(Seattle, WA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/New-York-City-Storm-User-Group/">NYC Storm User Group</a> <span class="small">(New York, NY)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Bay-Area-Stream-Processing">Bay Area Stream Processing</a> <span class="small">(Emeryville, CA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/Boston-Storm-Users/">Boston Realtime Data</a> <span class="small">(Boston, MA)</span></li>
-                        
-                        <li><a href="http://www.meetup.com/storm-london">London Storm User Group</a> <span class="small">(London, UK)</span></li>
-                        
-                        <!-- <li><a href="http://www.meetup.com/Apache-Storm-Kafka-Users/">Seatle, WA</a> <span class="small">(27 Jun 2015)</span></li> -->
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>About Storm</h5>
-                    <p>Storm integrates with any queueing system and any database system. Storm's spout abstraction makes it easy to integrate a new queuing system. Likewise, integrating Storm with database systems is easy.</p>
-               </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>First Look</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/Rationale.html">Rationale</a></li>
-                        <li><a href="/releases/current/Tutorial.html">Tutorial</a></li>
-                        <li><a href="/releases/current/Setting-up-development-environment.html">Setting up development environment</a></li>
-                        <li><a href="/releases/current/Creating-a-new-Storm-project.html">Creating a new Storm project</a></li>
-                    </ul>
-                </div>
-            </div>
-            <div class="col-md-3">
-                <div class="footer-widget">
-                    <h5>Documentation</h5>
-                    <ul class="footer-list">
-                        <li><a href="/releases/current/index.html">Index</a></li>
-                        <li><a href="/releases/current/javadocs/index.html">Javadoc</a></li>
-                        <li><a href="/releases/current/FAQ.html">FAQ</a></li>
-                    </ul>
-                </div>
-            </div>
-        </div>
-        <hr/>
-        <div class="row">   
-            <div class="col-md-12">
-                <p align="center">Copyright © 2015 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. 
-                    <br>Apache Storm, Apache, the Apache feather logo, and the Apache Storm project logos are trademarks of The Apache Software Foundation. 
-                    <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
-            </div>
-        </div>
-    </div>
-</footer>
-<!--Footer End-->
-<!-- Scroll to top -->
-<span class="totop"><a href="#"><i class="fa fa-angle-up"></i></a></span> 
-
-</body>
-
-</html>
-