Author: dongjoon
Date: Wed Dec 30 21:09:32 2015
New Revision: 1722413
URL: http://svn.apache.org/viewvc?rev=1722413&view=rev
Log:
Fix typos
Modified:
reef/site/dependency-convergence.html
reef/site/dependency-info.html
reef/site/dependency-management.html
reef/site/distribution-management.html
reef/site/downloads.html
reef/site/faq.html
reef/site/glossary.html
reef/site/index.html
reef/site/introduction.html
reef/site/issue-tracking.html
reef/site/license.html
reef/site/mail-lists.html
reef/site/mailing-list.html
reef/site/plugin-management.html
reef/site/plugins.html
reef/site/privacy-policy.html
reef/site/project-info.html
reef/site/project-summary.html
reef/site/source-repository.html
reef/site/talks.html
reef/site/tang.html
reef/site/team.html
reef/site/wake.html
Modified: reef/site/dependency-convergence.html
URL:
http://svn.apache.org/viewvc/reef/site/dependency-convergence.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/dependency-convergence.html (original)
+++ reef/site/dependency-convergence.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Dependency Convergence</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/dependency-info.html
URL:
http://svn.apache.org/viewvc/reef/site/dependency-info.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/dependency-info.html (original)
+++ reef/site/dependency-info.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Dependency Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/dependency-management.html
URL:
http://svn.apache.org/viewvc/reef/site/dependency-management.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/dependency-management.html (original)
+++ reef/site/dependency-management.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Dependency Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/distribution-management.html
URL:
http://svn.apache.org/viewvc/reef/site/distribution-management.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/distribution-management.html (original)
+++ reef/site/distribution-management.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Distribution Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/downloads.html
URL:
http://svn.apache.org/viewvc/reef/site/downloads.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/downloads.html (original)
+++ reef/site/downloads.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Downloads</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/faq.html
URL:
http://svn.apache.org/viewvc/reef/site/faq.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/faq.html (original)
+++ reef/site/faq.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - FAQ</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/glossary.html
URL:
http://svn.apache.org/viewvc/reef/site/glossary.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/glossary.html (original)
+++ reef/site/glossary.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Glossary</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -456,21 +456,21 @@ under the License. --><h1>Glossary</h1>
<div class="section">
<div class="section">
<h3><a name="context"></a>Context<a name="Context"></a></h3>
-<p>Contexts are a way to structure the state and Configuration of an
Evaluator. A Context exists on one and only one individual Evaluator. Each
Evaluator has at least one Context, which we refer to as the <i>root</i>
Context. This root context is special, as it is <i>required</i> on all
Evaluators and because closing it is synonymous to releasing the Evaluator. In
many simple REEF programs, this is the only Context used and it is therefore
convenient to think of it as synonymous to “the Evaluator”: The
Driver can submit Tasks to it, is notifified when they are done and can close
the root context when it wants to dispose of the Evaluator. </p>
-<p>Contexts are formed by calls to <tt>submitContext()</tt> to the event types
that allow this (<tt>AllocatedEvaluator</tt> and <tt>ActiveContext</tt>)
Contexts are the main way for an Evaluator to be exposed and accessed. For
instance, Tasks are submitted to an <tt>ActiveContext</tt> which represents the
top Context on the Evaluator.</p>
-<p>Beyond this, a Driver can submit a Context to the root, or in fact any,
Context, as long as the resulting structure is that of a stack: The root
Context forms the bottom of the stack, the top-most Context is called
<i>active</i>, hence the <tt>ActiveContext</tt> event. The two can be one and
the same, and often are: The root Context is the subject of the first
<tt>ActiveContext</tt> event on an Evaluator.</p>
-<p>Nomenclature: When Context B is submitted to an already existing Context A,
we say that Context A is the parent Context of Context B. Also, Context B is
the child of Context A.</p>
+<p>Contexts are a way to structure the state and Configuration of an
Evaluator. A Context exists on one and only one individual Evaluator. Each
Evaluator has at least one Context, which we refer to as the <i>root</i>
Context. This root context is special, as it is <i>required</i> on all
Evaluators and because closing it is synonymous to releasing the Evaluator. In
many simple REEF programs, this is the only Context used and it is therefore
convenient to think of it as synonymous to “the Evaluator”: The
Driver can submit Tasks to it, is notified when they are done and can close the
root context when it wants to dispose of the Evaluator.</p>
+<p>Contexts are formed by calls to <tt>submitContext()</tt> to the event types
that allow this (<tt>AllocatedEvaluator</tt> and <tt>ActiveContext</tt>).
Contexts are the main way for an Evaluator to be exposed and accessed. For
instance, Tasks are submitted to an <tt>ActiveContext</tt> which represents the
top Context on the Evaluator.</p>
+<p>Beyond this, a Driver can submit a Context to the root, or in fact any,
Context, as long as the resulting structure is that of a stack: the root
Context forms the bottom of the stack, the top-most Context is called
<i>active</i>, hence the <tt>ActiveContext</tt> event. The two can be one and
the same, and often are: the root Context is the subject of the first
<tt>ActiveContext</tt> event on an Evaluator.</p>
+<p>Nomenclature: when Context B is submitted to an already existing Context A,
we say that Context A is the parent Context of Context B. Also, Context B is
the child of Context A.</p>
<p>It is only the <tt>ActiveContext</tt> that allows the submission of Tasks
or child Contexts. Hence, one can think of the whole Evaluator structure as
that of a stack: the root Context at the bottom, layers of Contexts in the
middle and either the current <tt>ActiveContext</tt> or the current Task at the
top.</p>
<div class="section">
<h4>Objects and Configuration: What’s in a Context?<a
name="Objects_and_Configuration:_Whats_in_a_Context"></a></h4>
<p>It is convenient to think of a Context as a <tt>Configuration</tt> that
gets merged with the <tt>Configuration</tt> supplied for Tasks and child
Contexts. While not entirely true (see below), this view allows us to show just
<i>why</i> Contexts are a convenient construct.</p>
-<p>It is often the case that subsequent tasks that get executed on an
Evaluator want access to the same Configuration variables and / or the same
objects. Consider a simple <tt>LinkedList</tt> bound to a named parameter. If
that linked list is part of the subsequent Task <tt>Configurations</tt>
submited, each Task will get its very <i>own</i> <tt>LinkedList</tt>. If the
named parameter is bound in the Context <tt>Configuration</tt>, all Tasks
subsequently submitted to the Context will get the very <i>same</i>
<tt>LinkedList</tt> instance.</p></div>
+<p>It is often the case that subsequent tasks that get executed on an
Evaluator want access to the same Configuration variables and / or the same
objects. Consider a simple <tt>LinkedList</tt> bound to a named parameter. If
that linked list is part of the subsequent Task <tt>Configurations</tt>
submitted, each Task will get its very <i>own</i> <tt>LinkedList</tt>. If the
named parameter is bound in the Context <tt>Configuration</tt>, all Tasks
subsequently submitted to the Context will get the very <i>same</i>
<tt>LinkedList</tt> instance.</p></div>
<div class="section">
<h4>Contexts are (Tang) Injectors<a
name="Contexts_are_Tang_Injectors"></a></h4>
-<p>This mechanism is implemented by using Tang’s <tt>Injector</tt>s. On
the Evaluator, a Task is launched by first <i>forking</i> the Context’s
<tt>Injector</tt> with the Task<tt>Configuration</tt> and then requesting an
instance of the <tt>Task</tt> interface from that forked <tt>Injector</tt>. By
this mechanism and the fact that objects are singletons with respect to an
<tt>Injector</tt> in Tang, object sharing can be implemented. All objects
already instantiated on the Context <tt>Injector</tt> will also be referenced
by the Task<tt>Injector</tt>. Hence, the <tt>LinkedList</tt> in the example
above would be shared amongst subsequent Task <tt>Injectors</tt> in the
construction of the <tt>Task</tt> instance.</p></div></div>
+<p>This mechanism is implemented by using Tang’s <tt>Injector</tt>s. On
the Evaluator, a Task is launched by first <i>forking</i> the Context’s
<tt>Injector</tt> with the Task <tt>Configuration</tt> and then requesting an
instance of the <tt>Task</tt> interface from that forked <tt>Injector</tt>. By
this mechanism and the fact that objects are singletons with respect to an
<tt>Injector</tt> in Tang, object sharing can be implemented. All objects
already instantiated on the Context <tt>Injector</tt> will also be referenced
by the Task <tt>Injector</tt>. Hence, the <tt>LinkedList</tt> in the example
above would be shared amongst subsequent Task <tt>Injectors</tt> in the
construction of the <tt>Task</tt> instance.</p></div></div>
<div class="section">
<h3><a name="driver"></a>Driver<a name="Driver"></a></h3>
-<p>REEF imposes a centralized control flow design on applications: All events
are routed to the master node, called the Driver. REEF also prescribes
event-driven programming for the Driver. In that sense, the application
provided Driver is a collection of event handlers for the various events
exposed in <tt>DriverConfiguration</tt>. While most of these deal with
occurrences during the computation (Evaluator allocation, Task launch,
…), several stand out as life-cycle events of the Driver, and therefore
the application:</p>
+<p>REEF imposes a centralized control flow design on applications: all events
are routed to the master node, called the Driver. REEF also prescribes
event-driven programming for the Driver. In that sense, the
application-provided Driver is a collection of event handlers for the various
events exposed in <tt>DriverConfiguration</tt>. While most of these deal with
occurrences during the computation (Evaluator allocation, Task launch,
…), several stand out as life-cycle events of the Driver, and therefore
the application:</p>
<div class="section">
<h4>ON_START<a name="ON_START"></a></h4>
<p>This event is triggered by REEF when the Driver is ready to start
executing. At this point communication with the Resource Manager has been
established, all event handlers have been instantiated and the event graph in
the Driver was deemed to be complete enough to start. In a typical application,
this is when the Driver requests the first set of Evaluators.</p></div>
@@ -491,14 +491,14 @@ under the License. --><h1>Glossary</h1>
<h3><a name="evaluator"></a>Evaluator<a name="Evaluator"></a></h3>
<div class="section">
<h4>Evaluators and Tasks<a name="Evaluators_and_Tasks"></a></h4>
-<p>The Evaluator is the runtime environment for Tasks. On one Evaluator, there
is either no or one Task executing at any given point in time. Different or
multiple executions of the same Tasks can be executed in sequence on an
Evaluator. The Evaluator and Task lifecycle are decoupled: Whenever a Task
finishes, the Driver receives the CompletedTask event, which contains a
reference to the Evaluator the Task executed on. It is then up to the Driver to
decide whether to return the Evaluator to the resource manager or to make other
use of it, e.g. by submitting another task.</p></div>
+<p>The Evaluator is the runtime environment for Tasks. On one Evaluator, there
is either no or one Task executing at any given point in time. Different or
multiple executions of the same Tasks can be executed in sequence on an
Evaluator. The Evaluator and Task lifecycle are decoupled: whenever a Task
finishes, the Driver receives the CompletedTask event, which contains a
reference to the Evaluator the Task executed on. It is then up to the Driver to
decide whether to return the Evaluator to the resource manager or to make other
use of it, e.g. by submitting another task.</p></div>
<div class="section">
<h4>Evaluators and Contexts<a name="Evaluators_and_Contexts"></a></h4>
<p>Contexts are REEF’s form of state management inside of the
Evaluator. See the <a href="#context">Context</a> section for more
information.</p></div>
<div class="section">
<h4>Evaluators and the Resource Manager<a
name="Evaluators_and_the_Resource_Manager"></a></h4>
<p>On typical resource managers, an Evaluator is a process executing inside a
container. Depending on the resource manager, that process may or may not be
guarded by a resource or security isolation layer.</p>
-<p>This also means that the Evaluator, not the Task, is the unit of resource
consumption: while an Evaluator is occupying a Container, that Container is
“used” from the perspective of the Resource Manager.That is true
even if the Evaluator is idle from the perspective of the Driver, i.e. when no
Task is running on it.</p></div></div>
+<p>This also means that the Evaluator, not the Task, is the unit of resource
consumption: while an Evaluator is occupying a Container, that Container is
“used” from the perspective of the Resource Manager. That is true
even if the Evaluator is idle from the perspective of the Driver, i.e. when no
Task is running on it.</p></div></div>
<div class="section">
<h3><a name="task"></a>Task<a name="Task"></a></h3>
<div class="section">
@@ -507,18 +507,18 @@ under the License. --><h1>Glossary</h1>
<div class="source"><pre class="prettyprint">public byte[] call(byte[] input);
</pre></div>
-<p>From REEF’s perspective, a Task is therefore a single threaded
method call. It starts when entering the call method. It is a
<tt>RunningTask</tt> while it hasn’t returned from it and is a
<tt>CompletedTask</tt> when it has. Should there be an Exception thrown by
<tt>call()</tt>, we call it a <tt>FailedTask</tt>.</p>
+<p>From REEF’s perspective, a Task is therefore a single-threaded
method call. It starts when entering the call method. It is a
<tt>RunningTask</tt> while it hasn’t returned from it and is a
<tt>CompletedTask</tt> when it has. Should there be an Exception thrown by
<tt>call()</tt>, we call it a <tt>FailedTask</tt>.</p>
<p>Task identity is established by a user-defined string set in
<tt>TaskConfiguration.IDENTIFIER</tt>. All subsequent task-related events in
the Driver will carry that ID. Note that REEF doesn’t take any
particular precautions to ensure unique Task identifiers. It is up to the
application to do so. While technically feasible to assign the same identifier
to multiple Tasks, this isn’t advised as it makes error handling,
debugging and logging unnecessarily hard.</p></div>
<div class="section">
<h4>Inputs and outputs of a Task<a
name="Inputs_and_outputs_of_a_Task"></a></h4>
<p>The return value of the <tt>call</tt> method will be made available to the
Driver as part of the <tt>CompletedTask</tt> event. Note that it isn’t
advised to return large values in this fashion, but merely small control flow
or status information. Sending large data on this channel creates the risk of
overloading the Driver at scale. The networking APIs provided by REEF IO are
much better suited for data transmissions than this channel.</p>
-<p>The parameter given to the call method is also to be used in a similar
fashion: The Driver passes its value as part of the Task submission. It is
meant e.g. to convey a restart point for the task. Note that the same
functionality can now be better provided by Tang and a constructor
parameter.</p></div>
+<p>The parameter given to the call method is also to be used in a similar
fashion: the Driver passes its value as part of the Task submission. It is
meant e.g. to convey a restart point for the task. Note that the same
functionality can now be better provided by Tang and a constructor
parameter.</p></div>
<div class="section">
<h4>Communicating between a Task and a Driver<a
name="Communicating_between_a_Task_and_a_Driver"></a></h4>
<p>REEF provides some facilities to communicate between a Driver and a Task.
These mostly stem from allowing application code to “free-ride”
on REEF’s control flow channels such as the heartbeat between the
Evaluator and the Task.</p>
<div class="section">
<h5>Sending a message from the Driver to a Task<a
name="Sending_a_message_from_the_Driver_to_a_Task"></a></h5>
-<p>REEF maintains a heartbeat between any Evaluator and the Driver. There are
two ways by which a heartbeat can be triggered.</p>
+<p>REEF maintains a heartbeat between any Evaluator and the Driver. There are
two ways by which a heartbeat can be triggered:</p>
<ul>
@@ -531,7 +531,7 @@ under the License. --><h1>Glossary</h1>
<p>Whenever the Evaluator performs a heartbeat, it will ask the Task whether
it has any message to share with the Driver by inquiring the class registered
in <tt>TaskConfiguration.ON_SEND_MESSAGE</tt>. It is wise for that message to
be small, as we otherwise run the risk of overwhelming the Driver with
heartbeat traffic at scale.</p></div></div>
<div class="section">
<h4>Multithreaded Tasks<a name="Multithreaded_Tasks"></a></h4>
-<p>Just because REEF views a Task as a method call doesn’t restrict the
Task to be single threaded. A Task is free to spawn threads in the course of
its execution. However, a Task that does so needs to take care of a few
considerations:</p>
+<p>Just because REEF views a Task as a method call doesn’t restrict the
Task to be single-threaded. A Task is free to spawn threads in the course of
its execution. However, a Task that does so needs to take care of a few
considerations:</p>
<ul>
@@ -539,7 +539,7 @@ under the License. --><h1>Glossary</h1>
<p>All Threads spawned need to exit before the <tt>Task.call()</tt> method
returns. Otherwise, you run the risk of resource leakage.</p></li>
<li>
-<p>Exceptions on spawned Threads need to be caught and re-thrown by the
<tt>Thread.call()</tt> method. Before that, all spawned threads need to be shut
down, just like during a normal exit of <tt>Task.call()</tt>. If an exception
from an another thread isn’t caught, REEF’s JVM level exception
handler will catch it and declare a FailedEvaluator. This is inefficient, but
not technically wrong: The Driver will then have to allocate another Evaluator
and try again.</p></li>
+<p>Exceptions on spawned Threads need to be caught and re-thrown by the
<tt>Thread.call()</tt> method. Before that, all spawned threads need to be shut
down, just like during a normal exit of <tt>Task.call()</tt>. If an exception
from an another thread isn’t caught, REEF’s JVM level exception
handler will catch it and declare a FailedEvaluator. This is inefficient, but
not technically wrong: the Driver will then have to allocate another Evaluator
and try again.</p></li>
</ul></div></div></div>
</div>
</div>
Modified: reef/site/index.html
URL:
http://svn.apache.org/viewvc/reef/site/index.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/index.html (original)
+++ reef/site/index.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Apache REEF™</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/introduction.html
URL:
http://svn.apache.org/viewvc/reef/site/introduction.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/introduction.html (original)
+++ reef/site/introduction.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Introduction to REEF</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -444,7 +444,7 @@ specific language governing permissions
under the License. --><h1>Introduction to REEF</h1>
<p>It is instructive to first remind us of how MapReduce works: Hadoop
Map-Reduce schedules compute tasks on containers for executing map and reduce
functions on record data. The basic structure of a Map-Reduce job is as
follows. For each input block, schedule a map task that passes each internal
record to a user-defined map function and materializes the output in key-sorted
order. Further, assign a user-defined number of reduce tasks to non-overlapping
portions of the key-space from the map output, then shuffle it across the
network to where the respective reduce task is scheduled. For each reduce task,
perform a global key-based sort on the shuffled data, group it by key and call
the reduce function on each record group; storing the output in a durable
fashion (i.e., HDFS).</p>
<p>From the perspective of the scheduler, a number of issues arise that must
be appropriately handled in order to scale-out to massive datasets. First, each
map task should be scheduled close to where the input block resides; ideally on
the same machine or rack. Second, failures can occur at the task level at any
step; requiring backup tasks to be scheduled or the job being aborted. Third,
performance bottlenecks can cause an imbalance in the task-level progress. The
scheduler must react to these stragglers by scheduling clones and incorporating
the logical task that crosses the finish line first.</p>
-<p>Anyone of these issues can limit the scale-out degree of a Map-Reduce job.
In what follows, we perscribe a scheduler framework that provides task
life-cycle management mechanisms. Using this framework, we developed a complete
version of the Map-Reduce runtime that addresses the above issues. Our
framework is designed around three components.</p>
+<p>Anyone of these issues can limit the scale-out degree of a Map-Reduce job.
In what follows, we prescribe a scheduler framework that provides task
life-cycle management mechanisms. Using this framework, we developed a complete
version of the Map-Reduce runtime that addresses the above issues. Our
framework is designed around three components.</p>
<ol style="list-style-type: decimal">
@@ -471,11 +471,11 @@ under the License. --><h1>Introduction t
<p><i>States of <tt>Evaluator</tt>, <tt>Contexts</tt>, and
<tt>Tasks</tt></i></p>
<p><br /></br></p>
-<p>The Figure above describes the state transitions for (a) <tt>Evaluator</tt>
and <tt>Context</tt> and (b) <tt>Task</tt> components. Each state transition is
associated with an object reference that is surfaced to the <tt>Driver</tt> in
an Rx-style interface. For instance, when the YARN-RM notifies the REEF-AM of
an allocated container, the <tt>Driver</tt> is given an
<tt>AllocatedEvaluator</tt> object; containing methods for adding
configurations (i.e., for data services, see below) and file resources, and
submit methods that bootstraps the <tt>Evaluator</tt> runtime on the YARN-NM.
When an <tt>Evaluator</tt> bootstrap successfully completes, the
<tt>Driver</tt> is given an <tt>ActiveContext</tt> object, which can be used to
launch <tt>Tasks</tt> or to initiate a close, which triggers a shutdown event
at the <tt>Evaluator</tt> runtime and a subsequent container release at the
YARN-RM. If at any point a failure occurs, the <tt>Driver</tt> is passed a
<tt>FailedEvaluator</tt> object
; containing an exception trace when possible.</p>
-<p>Recall that the <tt>Driver</tt> launches a <tt>Task</tt> on a submit method
call from the <tt>ActiveContext</tt> reference. This state transition is
denoted in the Figure above by the edge labeled submit; spanning the two state
machines. The REEF-AM passes a <tt>RunningTask</tt> object to the
<tt>Driver</tt> after receiving confirmation of a successful <tt>Task</tt>
start or resume. The <tt>Driver</tt> may use the <tt>RunningTask</tt> reference
to close or suspend the execution; triggering a <tt>CompletedTask</tt> or
<tt>SuspendedTask</tt> object reference to the <tt>Driver</tt>. The
<tt>SuspendedTask</tt> object contains a memento used to resume the execution
on some (possibly alternative) <tt>ActiveContext</tt>. Exceptions during the
<tt>Task</tt> execution are surfaced to the <tt>Driver</tt> in the form of a
<tt>FailedTask</tt>, which contains the actual exception object.</p></div>
+<p>The Figure above describes the state transitions for (a) <tt>Evaluator</tt>
and <tt>Context</tt> and (b) <tt>Task</tt> components. Each state transition is
associated with an object reference that is surfaced to the <tt>Driver</tt> in
an Rx-style interface. For instance, when the YARN-RM notifies the REEF-AM of
an allocated container, the <tt>Driver</tt> is given an
<tt>AllocatedEvaluator</tt> object; containing methods for adding
configurations (i.e., for data services, see below) and file resources, and
submit methods that bootstraps the <tt>Evaluator</tt> runtime on the YARN-NM.
When an <tt>Evaluator</tt> bootstrap successfully completes, the
<tt>Driver</tt> is given an <tt>ActiveContext</tt> object, which can be used to
launch <tt>Tasks</tt> or to initiate a close, which triggers a shutdown event
at the <tt>Evaluator</tt> runtime and a subsequent container release at the
YARN-RM. If at any point a failure occurs, the <tt>Driver</tt> is passed a
<tt>FailedEvaluator</tt> object
, containing an exception trace when possible.</p>
+<p>Recall that the <tt>Driver</tt> launches a <tt>Task</tt> on a submit method
call from the <tt>ActiveContext</tt> reference. This state transition is
denoted in the Figure above by the edge labeled submit, spanning the two state
machines. The REEF-AM passes a <tt>RunningTask</tt> object to the
<tt>Driver</tt> after receiving confirmation of a successful <tt>Task</tt>
start or resume. The <tt>Driver</tt> may use the <tt>RunningTask</tt> reference
to close or suspend the execution, triggering a <tt>CompletedTask</tt> or
<tt>SuspendedTask</tt> object reference to the <tt>Driver</tt>. The
<tt>SuspendedTask</tt> object contains a memento used to resume the execution
on some (possibly alternative) <tt>ActiveContext</tt>. Exceptions during the
<tt>Task</tt> execution are surfaced to the <tt>Driver</tt> in the form of a
<tt>FailedTask</tt>, which contains the actual exception object.</p></div>
<div class="section">
<h3>Task Component<a name="Task_Component"></a></h3>
-<p>A <tt>Task</tt> encapsulates the task work of a job. The client interface
contains a single synchronous call method that takes an optional memento
argument and returns a byte array, which will be packaged with the
<tt>CompletedTask</tt> object surfaced to the <tt>Driver</tt>. An exception may
be thrown at any point during the call method; returning control back to the
<tt>Evaluator</tt>, which packages the exception and sends it to the
<tt>Driver</tt> where it is surfaced as a <tt>FailedTask</tt>. The
<tt>Evaluator</tt> periodically performs a heartbeat with the REEF-AM to convey
its status information. A <tt>Task</tt> can optionally implement a method
interface that, when called, returns a (bounded) byte array, which the
<tt>Evaluator</tt> includes in its heartbeat to the REEF-AM and surfaced to the
<tt>Driver</tt>.</p></div></div>
+<p>A <tt>Task</tt> encapsulates the task work of a job. The client interface
contains a single synchronous call method that takes an optional memento
argument and returns a byte array, which will be packaged with the
<tt>CompletedTask</tt> object surfaced to the <tt>Driver</tt>. An exception may
be thrown at any point during the call method, returning control back to the
<tt>Evaluator</tt>, which packages the exception and sends it to the
<tt>Driver</tt> where it is surfaced as a <tt>FailedTask</tt>. The
<tt>Evaluator</tt> periodically performs a heartbeat with the REEF-AM to convey
its status information. A <tt>Task</tt> can optionally implement a method
interface that, when called, returns a (bounded) byte array, which the
<tt>Evaluator</tt> includes in its heartbeat to the REEF-AM and surfaced to the
<tt>Driver</tt>.</p></div></div>
</div>
</div>
</div>
Modified: reef/site/issue-tracking.html
URL:
http://svn.apache.org/viewvc/reef/site/issue-tracking.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/issue-tracking.html (original)
+++ reef/site/issue-tracking.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Issue Tracking</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/license.html
URL:
http://svn.apache.org/viewvc/reef/site/license.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/license.html (original)
+++ reef/site/license.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project License</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/mail-lists.html
URL:
http://svn.apache.org/viewvc/reef/site/mail-lists.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/mail-lists.html (original)
+++ reef/site/mail-lists.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Mailing Lists</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -440,10 +440,10 @@
<th>Archive</th></tr>
<tr class="b">
<td>Dev Mailing List</td>
-<td><a class="externalLink"
href="mailto:[email protected]">Subscribe</a></td>
-<td><a class="externalLink"
href="mailto:[email protected]">Unsubscribe</a></td>
-<td><a class="externalLink"
href="mailto:[email protected]">Post</a></td>
-<td><a class="externalLink"
href="http://mail-archives.apache.org/mod_mbox/incubator-reef-dev/">mail-archives.apache.org</a></td></tr></table></div>
+<td><a class="externalLink"
href="mailto:[email protected]">Subscribe</a></td>
+<td><a class="externalLink"
href="mailto:[email protected]">Unsubscribe</a></td>
+<td><a class="externalLink" href="mailto:[email protected]">Post</a></td>
+<td><a class="externalLink"
href="http://mail-archives.apache.org/mod_mbox/reef-dev/">mail-archives.apache.org</a></td></tr></table></div>
</div>
</div>
</div>
Modified: reef/site/mailing-list.html
URL:
http://svn.apache.org/viewvc/reef/site/mailing-list.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/mailing-list.html (original)
+++ reef/site/mailing-list.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Mailing List</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -449,7 +449,7 @@ under the License. --><h1>Mailing List</
<li><a href="#commits">Commits</a></li>
</ul>
-<p><b>Note:</b> These email addresses are automated. Just writing
“Subscribe” or “Unsusbscribe” in both the subject
line and the body will suffice and a confirmation email with further
instructions will be sent as a reply to your email after some delay.</p>
+<p><b>Note:</b> These email addresses are automated. Just writing
“Subscribe” or “Unsubscribe” in both the subject
line and the body will suffice and a confirmation email with further
instructions will be sent as a reply to your email after some delay.</p>
<div class="section">
<div class="section">
<h3><a name="reef-dev"></a>REEF Dev Mailing List<a
name="REEF_Dev_Mailing_List"></a></h3>
@@ -459,7 +459,7 @@ under the License. --><h1>Mailing List</
<li><a class="externalLink"
href="mailto:[email protected]">Subscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
-<li><a class="externalLink"
href="mailto:[email protected]">Unsusbscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
+<li><a class="externalLink"
href="mailto:[email protected]">Unsubscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
<li><a class="externalLink"
href="http://mail-archives.apache.org/mod_mbox/reef-dev/">Archive</a></li>
</ul></div>
@@ -471,7 +471,7 @@ under the License. --><h1>Mailing List</
<li><a class="externalLink"
href="mailto:[email protected]">Subscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
-<li><a class="externalLink"
href="mailto:[email protected]">Unsusbscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
+<li><a class="externalLink"
href="mailto:[email protected]">Unsubscribe</a> (<a
class="externalLink"
href="mailto:[email protected]">[email protected]</a>)</li>
<li><a class="externalLink"
href="http://mail-archives.apache.org/mod_mbox/reef-commits/">Archive</a></li>
</ul></div></div>
Modified: reef/site/plugin-management.html
URL:
http://svn.apache.org/viewvc/reef/site/plugin-management.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/plugin-management.html (original)
+++ reef/site/plugin-management.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Plugin Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/plugins.html
URL:
http://svn.apache.org/viewvc/reef/site/plugins.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/plugins.html (original)
+++ reef/site/plugins.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Build Plugins</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/privacy-policy.html
URL:
http://svn.apache.org/viewvc/reef/site/privacy-policy.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/privacy-policy.html (original)
+++ reef/site/privacy-policy.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Privacy Policy</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/project-info.html
URL:
http://svn.apache.org/viewvc/reef/site/project-info.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/project-info.html (original)
+++ reef/site/project-info.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/project-summary.html
URL:
http://svn.apache.org/viewvc/reef/site/project-summary.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/project-summary.html (original)
+++ reef/site/project-summary.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Project Summary</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -444,7 +444,7 @@
<td>Retainable Evaluator Execution Framework</td></tr>
<tr class="b">
<td>Homepage</td>
-<td><a class="externalLink"
href="http://reef.incubator.apache.org/website">http://reef.incubator.apache.org/website</a></td></tr></table></div>
+<td><a class="externalLink"
href="http://reef.apache.org/website">http://reef.apache.org/website</a></td></tr></table></div>
<div class="section">
<h3>Project Organization<a name="Project_Organization"></a></h3><a
name="Project_Organization"></a>
<table border="0" class="table table-striped">
Modified: reef/site/source-repository.html
URL:
http://svn.apache.org/viewvc/reef/site/source-repository.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/source-repository.html (original)
+++ reef/site/source-repository.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Source Repository</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -434,15 +434,15 @@
<div class="section">
<h2>Web Browser Access<a name="Web_Browser_Access"></a></h2><a
name="Web_Browser_Access"></a>
<p>The following is a link to a browsable version of the source repository:</p>
-<div class="source"><pre class="prettyprint"><a
href="scm:git:[email protected]:apache/incubator-reef/website">scm:git:[email protected]:apache/incubator-reef/website</a></pre></div></div>
+<div class="source"><pre class="prettyprint"><a
href="scm:git:[email protected]:apache/reef/website">scm:git:[email protected]:apache/reef/website</a></pre></div></div>
<div class="section">
<h2>Anonymous Access<a name="Anonymous_Access"></a></h2><a
name="Anonymous_Access"></a>
<p>The source can be checked out anonymously from Git with this command (See
<a class="externalLink"
href="http://git-scm.com/docs/git-clone">http://git-scm.com/docs/git-clone</a>):</p>
-<div class="source"><pre class="prettyprint">$ git clone
[email protected]:apache/incubator-reef/website</pre></div></div>
+<div class="source"><pre class="prettyprint">$ git clone
[email protected]:apache/reef/website</pre></div></div>
<div class="section">
<h2>Developer Access<a name="Developer_Access"></a></h2><a
name="Developer_Access"></a>
<p>Only project developers can access the Git tree via this method (See <a
class="externalLink"
href="http://git-scm.com/docs/git-clone">http://git-scm.com/docs/git-clone</a>).</p>
-<div class="source"><pre class="prettyprint">$ git clone
https://git-wip-us.apache.org/repos/asf/incubator-reef/website</pre></div></div>
+<div class="source"><pre class="prettyprint">$ git clone
https://git-wip-us.apache.org/repos/asf/reef/website</pre></div></div>
<div class="section">
<h2>Access from Behind a Firewall<a
name="Access_from_Behind_a_Firewall"></a></h2><a
name="Access_from_Behind_a_Firewall"></a>
<p>Refer to the documentation of the SCM used for more information about
access behind a firewall.</p></div>
Modified: reef/site/talks.html
URL:
http://svn.apache.org/viewvc/reef/site/talks.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/talks.html (original)
+++ reef/site/talks.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Talks</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
Modified: reef/site/tang.html
URL:
http://svn.apache.org/viewvc/reef/site/tang.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/tang.html (original)
+++ reef/site/tang.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Tang</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />
@@ -442,8 +442,8 @@ software distributed under the License i
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License. --><h1>Tang</h1>
-<p>Tang is a configuration managment and checking framework that emphasizes
explicit documentation and automatic checkability of configurations and
applications instead of ad-hoc, application-specific configuration and
bootstrapping logic. It supports distributed, multi-language applications, but
gracefully handles simpler use cases as well.</p>
-<p>Tang makes use of dependency injection to automatically instantiate
applications. Dependency injectors can be thought of as “make for
objects” – given a request for some type of object, and
information that explains how dependencies between objects should be resolved,
dependency injectors automatically instantiate the requested object and all of
the objects it dependes upon. Tang makes use of a few simple wire formats to
support remote and even cross-language dependency injection.</p>
+<p>Tang is a configuration management and checking framework that emphasizes
explicit documentation and automatic checkability of configurations and
applications instead of ad-hoc, application-specific configuration and
bootstrapping logic. It supports distributed, multi-language applications, but
gracefully handles simpler use cases as well.</p>
+<p>Tang makes use of dependency injection to automatically instantiate
applications. Dependency injectors can be thought of as “make for
objects” – given a request for some type of object, and
information that explains how dependencies between objects should be resolved,
dependency injectors automatically instantiate the requested object and all of
the objects it depends upon. Tang makes use of a few simple wire formats to
support remote and even cross-language dependency injection.</p>
<div class="section">
<h2>Outline<a name="Outline"></a></h2>
@@ -486,24 +486,24 @@ under the License. --><h1>Tang</h1>
<p>Distributed systems suffer from problems that arise due to complex
compositions of software modules and configuration errors. These problems
compound over time: best-practice object oriented design dictates that code be
factored into independent reusable modules, and today’s distributed
applications are increasingly expected to run atop multiple runtime
environments. This leads application developers to push complexity into
configuration settings, to the point where misconfiguration is now a primary
cause of unavailability in fault tolerant systems.</p>
<p>Tang is our attempt to address these problems. It consists of a dependency
injection framework and a set of configuration and debugging tools that
automatically and transparently bootstrap applications. We have focused on
providing a narrow set of primitives that support the full range of design
patterns that arise in distributed system development, and that encourage
application developers to build their systems in a maintainable and debuggable
way.</p>
<p>Tang leverages existing language type systems, allowing unmodified IDEs
such as Eclipse or NetBeans to surface configuration information in tooltips,
provide auto-complete of configuration parameters, and to detect a wide range
of configuration problems as you edit your code. Since such functionality is
surfaced in the tools you are already familiar with, there is no need to
install (or learn) additional development software to get started with Tang.
Furthermore, we provide a set of sophisticated build time and runtime tools
that detect a wide range of common architectural problems and configuration
errors.</p>
-<p>This documentation consists of tutorials that present prefered Tang design
patterns. By structuring your application according to the patterns we suggest
throughout the tutorials, you will allow our static analysis framework, Tint
(“Tang Lint”), to detect problematic design patterns and
high-level configuration problems as part of your build. These patterns provide
the cornerstone for a number of more advanced features, such as interacting
with legacy configuration systems, designing for cross-language applications,
and multi-tenancy issues, such as secure injections of untrusted application
code. To the best of our knowledge, implementing such tools and addressing
these real-world implementation constraints would be difficult, or even
impossible, atop competing frameworks.</p>
+<p>This documentation consists of tutorials that present preferred Tang design
patterns. By structuring your application according to the patterns we suggest
throughout the tutorials, you will allow our static analysis framework, Tint
(“Tang Lint”), to detect problematic design patterns and
high-level configuration problems as part of your build. These patterns provide
the cornerstone for a number of more advanced features, such as interacting
with legacy configuration systems, designing for cross-language applications,
and multi-tenancy issues, such as secure injections of untrusted application
code. To the best of our knowledge, implementing such tools and addressing
these real-world implementation constraints would be difficult, or even
impossible, atop competing frameworks.</p>
<h1><a name="design-principles"></a>Design principles</h1>
<p>Tang encourages application developers to specify default implementations
and constructor parameters in terms of code annotations and configuration
modules. This avoids the need for a number of subtle (and often confusing)
dependency injection software patterns, though it does lead to a different
approach to dependency injection than other frameworks encourage.</p>
<p>In the process of building complicated systems built atop Tang, we found
that, as the length of configurations that are passed around at runtime
increased, it rapidly became impossible to debug or maintain our higher-level
applications. In an attempt to address this problem, traditional dependency
injection systems actually compound this issue. They encourage the developers
of each application-level component to implement hand-written
“Modules” that are executed at runtime. Hand-written modules
introspect on the current runtime configuration, augment and modify it, and
then return a new configuration that takes the new application component into
account.</p>
-<p>In other systems, developers interact with modules by invoking ad-hoc
builder methods, and passing configurations (in the correct order) from module
to module. Modules frequently delgate to each other, either via inheritance or
wrappers. This makes it difficult for developers and end-users to figure out
which value of a given parameter will be used, or even to figure out why it was
(or was not) set.</p>
+<p>In other systems, developers interact with modules by invoking ad-hoc
builder methods, and passing configurations (in the correct order) from module
to module. Modules frequently delegate to each other, either via inheritance or
wrappers. This makes it difficult for developers and end-users to figure out
which value of a given parameter will be used, or even to figure out why it was
(or was not) set.</p>
<p>Tang provides an alternative called <tt>ConfigurationModule</tt>s:</p>
<ul>
-<li><tt>Configurations</tt> and <tt>ConfigurationModules</tt> are “just
data,” and can be read and written in human readable formats.</li>
+<li><tt>Configurations</tt> and <tt>ConfigurationModules</tt> are “just
data”, and can be read and written in human readable formats.</li>
<li>Interfaces and configuration parameters are encouraged to specify
defaults, significantly shortening the configurations generated at runtime, and
making it easy to see what was “strange” about a given run of the
application.</li>
<li>Tang’s static analysis and documentation tools sanity check
<tt>ConfigurationModule</tt>s, and document their behavior and any extra
parameters they export.</li>
-<li>Configuration options can be set at most once. This avoids (or at least
detects) situations in which users and application-level code inadvertantly
“fight” over the setting of a particular option.</li>
+<li>Configuration options can be set at most once. This avoids (or at least
detects) situations in which users and application-level code inadvertently
“fight” over the setting of a particular option.</li>
</ul>
-<p>The last property comes from Tang’s use of <i>monotonic</i> set
oriented primitives. This allows us to leverage recent theoretical results in
commtative data types; particularly CRDTs, and the CALM theorem. Concretely:</p>
+<p>The last property comes from Tang’s use of <i>monotonic</i> set
oriented primitives. This allows us to leverage recent theoretical results in
commutative data types, particularly CRDTs, and the CALM theorem.
Concretely:</p>
<ul>
@@ -511,10 +511,10 @@ under the License. --><h1>Tang</h1>
<li>Tang can detect configuration and injection problems much earlier than is
possible with other approaches. Also, upon detecting a conflict, Tang lists the
configuration sources that contributed to the problem.</li>
</ul>
-<p>Finally, Tang is divided into a set of “core” primtives, and
higher-level configuration “formats”. Tang’s core focuses
on dependency injection and static checking of configurations. The formats
provide higher-level configuration languages primitives, such as distributed,
cross-language injection, configuration files, and
<tt>ConfigurationModule</tt>. Each Tang format imports and/or exports standard
Tang <tt>Configuration</tt> objects, which can then be composed with other
configuration data at runtime.</p>
+<p>Finally, Tang is divided into a set of “core” primitives, and
higher-level configuration “formats”. Tang’s core focuses
on dependency injection and static checking of configurations. The formats
provide higher-level configuration languages primitives, such as distributed,
cross-language injection, configuration files, and
<tt>ConfigurationModule</tt>. Each Tang format imports and/or exports standard
Tang <tt>Configuration</tt> objects, which can then be composed with other
configuration data at runtime.</p>
<p>Improvements to these formats are planned, such as command-line tab
completion, and improved APIs for extremely complex applications that are built
by composing multiple Tang configurations to inject arbitrary object graphs.
Furthermore, Tang formats include documentation facilities, and automatic
command line and configuration file parsing. From an end-user perspective, this
takes a lot of the guesswork out of configuration file formats.</p>
<p>Although Tang surfaces a text-based interface for end-users of the
applications built atop it, all configuration options and their types are
specified in terms of Java classes and annotations. As with the core Tang
primitives, this allows the Java compiler to statically check Tang formats for
problems such as inconsistent usage of configuration parameters, naming
conflicts and so on. This eliminates broad classes of runtime errors. These
checks can be run independently of the application’s runtime
environment, and can find problems both in the Java-level implementation of the
system, and with user-provided configuration files. The tools that perform
these checks are designed to run as a post-processing step of projects built
atop Tang. Like the Java compiler checks, this prevents such errors from making
it to production environments. It also prevents such errors from being exposed
to application logic or end-users, greatly simplifying applications built atop
Tang.</p>
-<p>Taken together, these properties greatly simplify dependency injection in
distributed environments. We expect Tang to be used in environments that are
dominated by “plugin”-style APIs with many alternative
implementations. Tang cleanly separates concerns over configuration management,
dependency injection and object implementations, which hides most of the
complexity of dependency injection from plugin implementers. It also prevents
plugin implementations from inadvertently conflicting with each other or their
runtime environements. Such clean semantics are crucial in distributed,
heterogeneous environments.</p>
+<p>Taken together, these properties greatly simplify dependency injection in
distributed environments. We expect Tang to be used in environments that are
dominated by “plugin”-style APIs with many alternative
implementations. Tang cleanly separates concerns over configuration management,
dependency injection and object implementations, which hides most of the
complexity of dependency injection from plugin implementers. It also prevents
plugin implementations from inadvertently conflicting with each other or their
runtime environments. Such clean semantics are crucial in distributed,
heterogeneous environments.</p>
<h1><a name="tutorial-getting-started"></a>Tutorial: Getting started</h1>
<p>This tutorial is geared toward people that would like to quickly get
started with Tang, or that are modifying an existing Tang application.</p></div>
<div class="section">
@@ -609,7 +609,7 @@ public class Timer {
<h2><a name="configuration-modules"></a>Configuration modules<a
name="Configuration_modules"></a></h2>
<p>Configuration modules allow applications to perform most configuration
generation and verification tasks at build time. This allows Tang to
automatically generate rich configuration-related documentation, to detect
problematic design patterns, and to report errors before the application even
begins to run.</p>
<p>In the example below, we extend the Timer API to include a second
implementation that simply outputs the amount of time a real timer would have
slept to stderr. In a real unit testing example, it would likely interact with
a scheduler based on logical time. Of course, in isolation, having the ability
to specify configuration parameters is not particularly useful; this example
also adds a <tt>main()</tt> method that invokes Tang, and instantiates an
object.</p>
-<p>The process of instantiting an object with Tang is called <i>injection</i>.
As with configurations, Tang’s injection process is designed to catch as
many potential runtime errors as possible before application code begins to
run. This simplifies debugging and eliminates many types of runtime error
handling code, since many configurations can be caught before running (or
examining) application-specific initialization code. </p>
+<p>The process of instantiating an object with Tang is called
<i>injection</i>. As with configurations, Tang’s injection process is
designed to catch as many potential runtime errors as possible before
application code begins to run. This simplifies debugging and eliminates many
types of runtime error handling code, since many configurations can be caught
before running (or examining) application-specific initialization code. </p>
<div class="source"><pre class="prettyprint">package
org.apache.reef.tang.examples.timer;
@@ -700,7 +700,7 @@ public class TimerMock implements Timer
<li>The <tt>TimerMock</tt> class includes a dummy implementation of Timer,
along with a <tt>ConfigurationModule</tt> final static field called
<tt>CONF</tt>.</li>
-<li>The main method uses <tt>CONF</tt> to generate a configuration. Rather
than set <tt>Timer.Sleep</tt> directly, it sets <tt>MOCK_SLEEP_TIME</tt>. In a
more complicated example, this would allow <tt>CONF</tt> to route the sleep
time to testing infrastructure, or other classes that are specific to the
testing environment or implemenation of <tt>TimerMock</tt>.</li>
+<li>The main method uses <tt>CONF</tt> to generate a configuration. Rather
than set <tt>Timer.Sleep</tt> directly, it sets <tt>MOCK_SLEEP_TIME</tt>. In a
more complicated example, this would allow <tt>CONF</tt> to route the sleep
time to testing infrastructure, or other classes that are specific to the
testing environment or implementation of <tt>TimerMock</tt>.</li>
</ul>
<p><tt>ConfigurationModule</tt>s serve a number of purposes:</p>
@@ -739,7 +739,7 @@ Named parameter org.apache.reef.tang.imp
Field org.apache.reef.tang.formats.MyMissingBindConfigurationModule.BAD_CONF:
Found declared options that were not used in binds: { FOO_NESS }
</pre></div></div>
<div class="section">
-<h2><a name="injnecting-objects-with-getInstance"></a>Injecting objects with
getInstance()<a name="Injecting_objects_with_getInstance"></a></h2>
+<h2><a name="injecting-objects-with-getinstance"></a>Injecting objects with
getInstance()<a name="Injecting_objects_with_getInstance"></a></h2>
<p>Above, we explain how to register constructors with Tang, and how to
configure Tang to inject the desired objects at runtime. This section explains
how Tang actually instantiates objects, and how the primitives it provides can
be combined to support sophisticated application architectures.</p>
<p>In order to instantiate objects with Tang, one must invoke
Tang.Factory.getTang().newInjector(Configuration…). This returns a new
“empty” injector that will honor the configuration options that
were set in the provided configurations, and that will have access to a merged
version of the classpath they refer to.</p>
<p>In a given Tang injector, all classes are treated as singletons: at most
one instance of each class may exist. Furthermore, Tang Configuration objects
are designed to be built up from trees of related (but non-conflicting)
configuration files, command line parameters, and so on. At first, this may
seem to be overly restrictive, since it prevents applications from creating
multiple instances of the same class (or even two classes that require
different values of the same named parameter).</p>
@@ -776,13 +776,13 @@ B(InjectionFuture<A> a) {...}
</pre></div>
<p>In order to inject an instance of <tt>A</tt>, Tang first injects an
instance of <tt>B</tt> by passing it an <tt>InjectionFuture<A></tt>. Tang
then invoke’s <tt>A</tt>’s constructor, passing in the instance
of <tt>B</tt>. Once the constructor returns, the new instance of <tt>A</tt> is
passed into <tt>B</tt>’s <tt>InjectionFuture<A></tt>. At this
point, it becomes safe for <tt>B</tt> to invoke <tt>get()</tt>, which
establishes the circular reference.</p>
<p>Therefore, along with <tt>forkInjector()</tt> and <tt>bindVolatile()</tt>,
this allows Tang to inject arbitrary graphs of objects. This pattern avoids
non-final fields (once set, all fields of all objects are constant), and it
also avoids boiler plate error handling code that checks to see if
<tt>B</tt>’s instance of <tt>A</tt> has been set.</p>
-<p>When <tt>get()</tt> is called after the application-level call to
<tt>getInstance()</tt> returns, it is guranteed to return a non-null reference
to an injected instance of the object. However, if <tt>get()</tt> is called
<i>before</i> the constructor it was passed to returns, then it is guaranteed
to throw an exception. In between these two points in time,
<tt>get()</tt>’s behavior is undefined, but, for the sake of
race-detection and forward compatibility it makes a best-effort attempt to
throw an exception.</p>
+<p>When <tt>get()</tt> is called after the application-level call to
<tt>getInstance()</tt> returns, it is guaranteed to return a non-null reference
to an injected instance of the object. However, if <tt>get()</tt> is called
<i>before</i> the constructor it was passed to returns, then it is guaranteed
to throw an exception. In between these two points in time,
<tt>get()</tt>’s behavior is undefined, but, for the sake of
race-detection and forward compatibility it makes a best-effort attempt to
throw an exception.</p>
<p>Following Tang’s singleton semantics, the instance returned by
<tt>get()</tt> will be the same instance the injector would pass into other
constructors or return from <tt>getInstance()</tt>.</p>
<h1><a name="alternative-configuration-sources"></a>Alternative configuration
sources</h1>
<p>Tang provides a number of so-called <i>formats</i> that interface with
external configuration data. <tt>ConfigurationModule</tt> is one such example
(see above). These formats transform configuration data to and from
Tang’s raw configuration API. The raw API provides an implementation of
ConfigurationBuilder, which implements most of Tang’s configuration
checks. It also provides a <tt>JavaConfigurationBuilder</tt> interface provides
convenience methods that take Java Classes, and leverage Java’s generic
type system to push a range of static type checks to Java compilation
time.</p></div></div>
<div class="section">
<h2><a name="raw-configuration-api"></a>Raw configuration API<a
name="Raw_configuration_API"></a></h2>
-<p>Tang also provides a lower level configurtion API for applications that
need more dynamic control over their configurations:</p>
+<p>Tang also provides a lower level configuration API for applications that
need more dynamic control over their configurations:</p>
<div class="source"><pre class="prettyprint">...
import org.apache.reef.tang.Tang;
@@ -817,9 +817,9 @@ import org.apache.reef.tang.exceptions.I
<ul>
-<li>We use <tt>ConfigurationBuilder</tt> objects to tell Tang about the class
hierarchy that it will be using to inject objects and (in later examples) to
register the contents of configuration files, override default configuration
values, and to set default implementations of classes.
<tt>ConfigurationBuilder</tt> and <tt>ConfigurationModuleBuider</tt> export
similar API’s. The difference is that <tt>ConfigurationBuilder</tt>
produces <tt>Configuration</tt> objects directly, and is designed to be used at
runtime. <tt>ConfigurationModuleBuilder</tt> is desgined to produce data
structures that will be generated and analyzed during the build, and at class
load time.</li>
+<li>We use <tt>ConfigurationBuilder</tt> objects to tell Tang about the class
hierarchy that it will be using to inject objects and (in later examples) to
register the contents of configuration files, override default configuration
values, and to set default implementations of classes.
<tt>ConfigurationBuilder</tt> and <tt>ConfigurationModuleBuilder</tt> export
similar API’s. The difference is that <tt>ConfigurationBuilder</tt>
produces <tt>Configuration</tt> objects directly, and is designed to be used at
runtime. <tt>ConfigurationModuleBuilder</tt> is designed to produce data
structures that will be generated and analyzed during the build, and at class
load time.</li>
-<li><tt>bindNamedParameter()</tt> overrides the default value of Timer.Sleep,
setting it to 5. Tang inteprets the 5 as a string, but allows instances of
Number to be passed in as syntactic sugar.</li>
+<li><tt>bindNamedParameter()</tt> overrides the default value of Timer.Sleep,
setting it to 5. Tang interprets the 5 as a string, but allows instances of
Number to be passed in as syntactic sugar.</li>
<li>We call <tt>.build()</tt> on the <tt>ConfigurationBuilder</tt>, creating
an immutable <tt>Configuration</tt> object. At this point, Tang ensures that
all of the classes it has encountered so far are consistent with each other,
and that they are suitable for injection. When Tang encounters conflicting
classes or configuration files, it throws a <tt>BindException</tt> to indicate
that the problem is due to configuration issues. Note that
<tt>ConfigurationBuilder</tt> and <tt>Configuration</tt> do not determine
whether or not a particular injection will succeed; that is the business of the
<i>Injector</i>.</li>
@@ -832,7 +832,7 @@ import org.apache.reef.tang.exceptions.I
<p>Tang configuration information can be divided into two categories. The
first type, <i>parameters</i>, pass values such as strings and integers into
constructors. Users of Tang encode configuration parameters as strings,
allowing them to be stored in configuration files, and passed in on the command
line.</p>
<p>The second type of configuration option, <i>implementation bindings</i>,
are used to tell Tang which implementation should be used when an instance of
an interface is requested. Like configuration parameters, implementation
bindings are expressible as strings: Tang configuration files simply contain
the raw (without the generic parameters) name of the Java Classes to be bound
together.</p>
<p>New parameters are created and passed into constructors as in the examples
above, by creating implementations of <tt>Name<T></tt>, and adding
<tt>@NamedParameter</tt>, <tt>@Parameter</tt> and <tt>@Inject</tt> annotations
as necessary. Specifying implementations for interfaces is a bit more involved,
as a number of subtle use cases arise.</p>
-<p>However, all configuration settings in Tang can be unambiguously
represented as a <tt>key=value</tt> pair that can be interpreted either asan
<tt>interface=implementation</tt> pair or a
<tt>configuration_parameter=value</tt> pair. This maps well to Java-style
properties files. For example:</p>
+<p>However, all configuration settings in Tang can be unambiguously
represented as a <tt>key=value</tt> pair that can be interpreted either as an
<tt>interface=implementation</tt> pair or a
<tt>configuration_parameter=value</tt> pair. This maps well to Java-style
properties files. For example:</p>
<div class="source"><pre
class="prettyprint">com.examples.Interface=com.examples.Implementation
</pre></div>
@@ -842,7 +842,7 @@ import org.apache.reef.tang.exceptions.I
<h2><a name="looking-under-the-hood"></a>Looking under the hood<a
name="Looking_under_the_hood"></a></h2>
<div class="section">
<h3><a name="injectionPlan"></a>InjectionPlan<a name="InjectionPlan"></a></h3>
-<p>InjectionPlan objects explain what Tang would do to instantiate a new
object, but don’t actually instantiate anything. Add the following lines
to the Timer example;</p>
+<p>InjectionPlan objects explain what Tang would do to instantiate a new
object, but don’t actually instantiate anything. Add the following lines
to the Timer example:</p>
<div class="source"><pre class="prettyprint">import
org.apache.reef.tang.implementation.InjectionPlan;
import org.apache.reef.tang.implementation.InjectorImpl;
Modified: reef/site/team.html
URL:
http://svn.apache.org/viewvc/reef/site/team.html?rev=1722413&r1=1722412&r2=1722413&view=diff
==============================================================================
--- reef/site/team.html (original)
+++ reef/site/team.html Wed Dec 30 21:09:32 2015
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<!--
- | Generated by Apache Maven Doxia at 2015-12-04
+ | Generated by Apache Maven Doxia at 2015-12-30
| Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20151204" />
+ <meta name="Date-Revision-yyyymmdd" content="20151230" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache REEF - Team</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4.min.css" />