You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by dl...@apache.org on 2015/07/01 20:55:33 UTC

svn commit: r1688707 [1/7] - in /mesos/site: publish/ publish/documentation/ publish/documentation/allocation-module/ publish/documentation/app-framework-development-guide/ publish/documentation/clang-format/ publish/documentation/configuration/ publis...

Author: dlester
Date: Wed Jul  1 18:55:31 2015
New Revision: 1688707

URL: http://svn.apache.org/r1688707
Log:
Updates Mesos documentation.

Added:
    mesos/site/publish/documentation/latest/mesos-documentation-guide/
    mesos/site/publish/documentation/latest/mesos-documentation-guide/index.html
    mesos/site/publish/documentation/latest/mesos-markdown-style-guide/
    mesos/site/publish/documentation/latest/mesos-markdown-style-guide/index.html
    mesos/site/publish/documentation/latest/mesos-ssl/
    mesos/site/publish/documentation/latest/mesos-ssl/index.html
    mesos/site/publish/documentation/latest/monitoring/
    mesos/site/publish/documentation/latest/monitoring/index.html
    mesos/site/publish/documentation/latest/reservation/
    mesos/site/publish/documentation/latest/reservation/index.html
    mesos/site/publish/documentation/mesos-documentation-guide/
    mesos/site/publish/documentation/mesos-documentation-guide/index.html
    mesos/site/publish/documentation/mesos-markdown-style-guide/
    mesos/site/publish/documentation/mesos-markdown-style-guide/index.html
    mesos/site/publish/documentation/mesos-ssl/
    mesos/site/publish/documentation/mesos-ssl/index.html
    mesos/site/publish/documentation/monitoring/
    mesos/site/publish/documentation/monitoring/index.html
    mesos/site/publish/documentation/reservation/
    mesos/site/publish/documentation/reservation/index.html
    mesos/site/source/documentation/latest/mesos-documentation-guide.md
    mesos/site/source/documentation/latest/mesos-markdown-style-guide.md
    mesos/site/source/documentation/latest/mesos-ssl.md
    mesos/site/source/documentation/latest/monitoring.md
    mesos/site/source/documentation/latest/reservation.md
Modified:
    mesos/site/publish/documentation/allocation-module/index.html
    mesos/site/publish/documentation/app-framework-development-guide/index.html
    mesos/site/publish/documentation/clang-format/index.html
    mesos/site/publish/documentation/configuration/index.html
    mesos/site/publish/documentation/docker-containerizer/index.html
    mesos/site/publish/documentation/getting-started/index.html
    mesos/site/publish/documentation/index.html
    mesos/site/publish/documentation/latest/allocation-module/index.html
    mesos/site/publish/documentation/latest/app-framework-development-guide/index.html
    mesos/site/publish/documentation/latest/clang-format/index.html
    mesos/site/publish/documentation/latest/configuration/index.html
    mesos/site/publish/documentation/latest/docker-containerizer/index.html
    mesos/site/publish/documentation/latest/getting-started/index.html
    mesos/site/publish/documentation/latest/index.html
    mesos/site/publish/documentation/latest/mesos-c++-style-guide/index.html
    mesos/site/publish/documentation/latest/mesos-doxygen-style-guide/index.html
    mesos/site/publish/documentation/latest/mesos-testing-patterns/index.html
    mesos/site/publish/documentation/latest/modules/index.html
    mesos/site/publish/documentation/latest/network-monitoring/index.html
    mesos/site/publish/documentation/latest/reconciliation/index.html
    mesos/site/publish/documentation/latest/release-guide/index.html
    mesos/site/publish/documentation/latest/upgrades/index.html
    mesos/site/publish/documentation/mesos-c++-style-guide/index.html
    mesos/site/publish/documentation/mesos-doxygen-style-guide/index.html
    mesos/site/publish/documentation/mesos-testing-patterns/index.html
    mesos/site/publish/documentation/modules/index.html
    mesos/site/publish/documentation/network-monitoring/index.html
    mesos/site/publish/documentation/reconciliation/index.html
    mesos/site/publish/documentation/release-guide/index.html
    mesos/site/publish/documentation/upgrades/index.html
    mesos/site/publish/gettingstarted/index.html
    mesos/site/publish/sitemap.xml
    mesos/site/source/documentation/latest.html.md
    mesos/site/source/documentation/latest/allocation-module.md
    mesos/site/source/documentation/latest/app-framework-development-guide.md
    mesos/site/source/documentation/latest/clang-format.md
    mesos/site/source/documentation/latest/committers.md
    mesos/site/source/documentation/latest/configuration.md
    mesos/site/source/documentation/latest/docker-containerizer.md
    mesos/site/source/documentation/latest/getting-started.md
    mesos/site/source/documentation/latest/mesos-c++-style-guide.md
    mesos/site/source/documentation/latest/mesos-doxygen-style-guide.md
    mesos/site/source/documentation/latest/mesos-testing-patterns.md
    mesos/site/source/documentation/latest/modules.md
    mesos/site/source/documentation/latest/network-monitoring.md
    mesos/site/source/documentation/latest/reconciliation.md
    mesos/site/source/documentation/latest/release-guide.md
    mesos/site/source/documentation/latest/upgrades.md

Modified: mesos/site/publish/documentation/allocation-module/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/allocation-module/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/allocation-module/index.html (original)
+++ mesos/site/publish/documentation/allocation-module/index.html Wed Jul  1 18:55:31 2015
@@ -115,7 +115,7 @@
 
 <p>An allocator module is a factory function and a module description, as defined in <code>mesos/module/allocator.hpp</code>. Assuming the allocation logic is implemented by the <code>ExternalAllocator</code> class declared in <code>external_allocator.hpp</code>, the following snippet describes the implementation of an allocator module named <code>ExternalAllocatorModule</code>:</p>
 
-<pre><code>#include &lt;mesos/master/allocator.hpp&gt;
+<pre><code class="{.cpp}">#include &lt;mesos/master/allocator.hpp&gt;
 #include &lt;mesos/module/allocator.hpp&gt;
 #include &lt;stout/try.hpp&gt;
 

Modified: mesos/site/publish/documentation/app-framework-development-guide/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/app-framework-development-guide/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/app-framework-development-guide/index.html (original)
+++ mesos/site/publish/documentation/app-framework-development-guide/index.html Wed Jul  1 18:55:31 2015
@@ -85,126 +85,126 @@
 
 <p>In this document we refer to Mesos applications as &ldquo;frameworks&rdquo;.</p>
 
-<p>See one of the example framework schedulers in <code>MESOS_HOME/src/examples/</code> to get an idea of what a Mesos framework scheduler and executor in the language of your choice looks like.</p>
+<p>See one of the example framework schedulers in <code>MESOS_HOME/src/examples/</code> to get an idea of what a Mesos framework scheduler and executor in the language of your choice looks like. <a href="https://github.com/mesosphere/RENDLER">RENDLER</a> provides example framework implementations in C++, Go, Haskell, Java, Python and Scala.</p>
 
 <h2>Create your Framework Scheduler</h2>
 
-<p>You can write a framework scheduler in C, C++, Java/Scala, or Python. Your framework scheduler should inherit from the <code>Scheduler</code> class (see API below). Your scheduler should create a SchedulerDriver (which will mediate communication between your scheduler and the Mesos master) and then call <code>SchedulerDriver.run()</code></p>
+<p>You can write a framework scheduler in C, C++, Java/Scala, or Python. Your framework scheduler should inherit from the <code>Scheduler</code> class (see API below). Your scheduler should create a SchedulerDriver (which will mediate communication between your scheduler and the Mesos master) and then call <code>SchedulerDriver.run()</code>.</p>
 
 <h3>Scheduler API</h3>
 
-<p>Declared in <code>MESOS_HOME/include/mesos/scheduler.hpp</code></p>
-
-<pre><code>  /**
-   * Empty virtual destructor (necessary to instantiate subclasses).
-   */
-  virtual ~Scheduler() {}
-
-  /**
-   * Invoked when the scheduler successfully registers with a Mesos
-   * master. A unique ID (generated by the master) used for
-   * distinguishing this framework from others and MasterInfo
-   * with the ip and port of the current master are provided as arguments.
-   */
-  virtual void registered(SchedulerDriver* driver,
-                          const FrameworkID&amp; frameworkId,
-                          const MasterInfo&amp; masterInfo) = 0;
-
-  /**
-   * Invoked when the scheduler re-registers with a newly elected Mesos master.
-   * This is only called when the scheduler has previously been registered.
-   * MasterInfo containing the updated information about the elected master
-   * is provided as an argument.
-   */
-  virtual void reregistered(SchedulerDriver* driver,
-                            const MasterInfo&amp; masterInfo) = 0;
-
-  /**
-   * Invoked when the scheduler becomes "disconnected" from the master
-   * (e.g., the master fails and another is taking over).
-   */
-  virtual void disconnected(SchedulerDriver* driver) = 0;
-
-  /**
-   * Invoked when resources have been offered to this framework. A
-   * single offer will only contain resources from a single slave.
-   * Resources associated with an offer will not be re-offered to
-   * _this_ framework until either (a) this framework has rejected
-   * those resources (see SchedulerDriver::launchTasks) or (b) those
-   * resources have been rescinded (see Scheduler::offerRescinded).
-   * Note that resources may be concurrently offered to more than one
-   * framework at a time (depending on the allocator being used). In
-   * that case, the first framework to launch tasks using those
-   * resources will be able to use them while the other frameworks
-   * will have those resources rescinded (or if a framework has
-   * already launched tasks with those resources then those tasks will
-   * fail with a TASK_LOST status and a message saying as much).
-   */
-  virtual void resourceOffers(SchedulerDriver* driver,
-                              const std::vector&lt;Offer&gt;&amp; offers) = 0;
-
-  /**
-   * Invoked when an offer is no longer valid (e.g., the slave was
-   * lost or another framework used resources in the offer). If for
-   * whatever reason an offer is never rescinded (e.g., dropped
-   * message, failing over framework, etc.), a framwork that attempts
-   * to launch tasks using an invalid offer will receive TASK_LOST
-   * status updats for those tasks (see Scheduler::resourceOffers).
-   */
-  virtual void offerRescinded(SchedulerDriver* driver,
-                              const OfferID&amp; offerId) = 0;
-
-  /**
-   * Invoked when the status of a task has changed (e.g., a slave is
-   * lost and so the task is lost, a task finishes and an executor
-   * sends a status update saying so, etc). If implicit
-   * acknowledgements are being used, then returning from this
-   * callback _acknowledges_ receipt of this status update! If for
-   * whatever reason the scheduler aborts during this callback (or
-   * the process exits) another status update will be delivered (note,
-   * however, that this is currently not true if the slave sending the
-   * status update is lost/fails during that time). If explicit
-   * acknowledgements are in use, the scheduler must acknowledge this
-   * status on the driver.
-   */
-  virtual void statusUpdate(SchedulerDriver* driver,
-                            const TaskStatus&amp; status) = 0;
-
-  /**
-   * Invoked when an executor sends a message. These messages are best
-   * effort; do not expect a framework message to be retransmitted in
-   * any reliable fashion.
-   */
-  virtual void frameworkMessage(SchedulerDriver* driver,
-                                const ExecutorID&amp; executorId,
-                                const SlaveID&amp; slaveId,
-                                const std::string&amp; data) = 0;
-
-  /**
-   * Invoked when a slave has been determined unreachable (e.g.,
-   * machine failure, network partition). Most frameworks will need to
-   * reschedule any tasks launched on this slave on a new slave.
-   */
-  virtual void slaveLost(SchedulerDriver* driver,
-                         const SlaveID&amp; slaveId) = 0;
-
-  /**
-   * Invoked when an executor has exited/terminated. Note that any
-   * tasks running will have TASK_LOST status updates automagically
-   * generated.
-   */
-  virtual void executorLost(SchedulerDriver* driver,
-                            const ExecutorID&amp; executorId,
-                            const SlaveID&amp; slaveId,
-                            int status) = 0;
-
-  /**
-   * Invoked when there is an unrecoverable error in the scheduler or
-   * scheduler driver. The driver will be aborted BEFORE invoking this
-   * callback.
-   */
-  virtual void error(SchedulerDriver* driver, const std::string&amp; message) = 0;
-</code></pre>
+<p>Declared in <code>MESOS_HOME/include/mesos/scheduler.hpp</code>
+<del>~~{.cpp}
+/<em>
+ * Empty virtual destructor (necessary to instantiate subclasses).
+ </em>/
+virtual </del>Scheduler() {}</p>
+
+<p>/<em>
+ * Invoked when the scheduler successfully registers with a Mesos
+ * master. A unique ID (generated by the master) used for
+ * distinguishing this framework from others and MasterInfo
+ * with the ip and port of the current master are provided as arguments.
+ </em>/
+virtual void registered(SchedulerDriver* driver,
+                        const FrameworkID&amp; frameworkId,
+                        const MasterInfo&amp; masterInfo) = 0;</p>
+
+<p>/<em>
+ * Invoked when the scheduler re-registers with a newly elected Mesos master.
+ * This is only called when the scheduler has previously been registered.
+ * MasterInfo containing the updated information about the elected master
+ * is provided as an argument.
+ </em>/
+virtual void reregistered(SchedulerDriver* driver,
+                          const MasterInfo&amp; masterInfo) = 0;</p>
+
+<p>/<em>
+ * Invoked when the scheduler becomes &ldquo;disconnected&rdquo; from the master
+ * (e.g., the master fails and another is taking over).
+ </em>/
+virtual void disconnected(SchedulerDriver* driver) = 0;</p>
+
+<p>/<em>
+ * Invoked when resources have been offered to this framework. A
+ * single offer will only contain resources from a single slave.
+ * Resources associated with an offer will not be re-offered to
+ * <em>this</em> framework until either (a) this framework has rejected
+ * those resources (see SchedulerDriver::launchTasks) or (b) those
+ * resources have been rescinded (see Scheduler::offerRescinded).
+ * Note that resources may be concurrently offered to more than one
+ * framework at a time (depending on the allocator being used). In
+ * that case, the first framework to launch tasks using those
+ * resources will be able to use them while the other frameworks
+ * will have those resources rescinded (or if a framework has
+ * already launched tasks with those resources then those tasks will
+ * fail with a TASK_LOST status and a message saying as much).
+ </em>/
+virtual void resourceOffers(SchedulerDriver* driver,
+                            const std::vector<Offer>&amp; offers) = 0;</p>
+
+<p>/<em>
+ * Invoked when an offer is no longer valid (e.g., the slave was
+ * lost or another framework used resources in the offer). If for
+ * whatever reason an offer is never rescinded (e.g., dropped
+ * message, failing over framework, etc.), a framwork that attempts
+ * to launch tasks using an invalid offer will receive TASK_LOST
+ * status updats for those tasks (see Scheduler::resourceOffers).
+ </em>/
+virtual void offerRescinded(SchedulerDriver* driver,
+                            const OfferID&amp; offerId) = 0;</p>
+
+<p>/<em>
+ * Invoked when the status of a task has changed (e.g., a slave is
+ * lost and so the task is lost, a task finishes and an executor
+ * sends a status update saying so, etc). If implicit
+ * acknowledgements are being used, then returning from this
+ * callback <em>acknowledges</em> receipt of this status update! If for
+ * whatever reason the scheduler aborts during this callback (or
+ * the process exits) another status update will be delivered (note,
+ * however, that this is currently not true if the slave sending the
+ * status update is lost/fails during that time). If explicit
+ * acknowledgements are in use, the scheduler must acknowledge this
+ * status on the driver.
+ </em>/
+virtual void statusUpdate(SchedulerDriver* driver,
+                          const TaskStatus&amp; status) = 0;</p>
+
+<p>/<em>
+ * Invoked when an executor sends a message. These messages are best
+ * effort; do not expect a framework message to be retransmitted in
+ * any reliable fashion.
+ </em>/
+virtual void frameworkMessage(SchedulerDriver* driver,
+                              const ExecutorID&amp; executorId,
+                              const SlaveID&amp; slaveId,
+                              const std::string&amp; data) = 0;</p>
+
+<p>/<em>
+ * Invoked when a slave has been determined unreachable (e.g.,
+ * machine failure, network partition). Most frameworks will need to
+ * reschedule any tasks launched on this slave on a new slave.
+ </em>/
+virtual void slaveLost(SchedulerDriver* driver,
+                       const SlaveID&amp; slaveId) = 0;</p>
+
+<p>/<em>
+ * Invoked when an executor has exited/terminated. Note that any
+ * tasks running will have TASK_LOST status updates automagically
+ * generated.
+ </em>/
+virtual void executorLost(SchedulerDriver* driver,
+                          const ExecutorID&amp; executorId,
+                          const SlaveID&amp; slaveId,
+                          int status) = 0;</p>
+
+<p>/<em>
+ * Invoked when there is an unrecoverable error in the scheduler or
+ * scheduler driver. The driver will be aborted BEFORE invoking this
+ * callback.
+ </em>/
+virtual void error(SchedulerDriver* driver, const std::string&amp; message) = 0;
+~~~</p>
 
 <h2>Create your Framework Executor</h2>
 
@@ -214,71 +214,71 @@
 
 <p>Declared in <code>MESOS_HOME/include/mesos/executor.hpp</code></p>
 
-<pre><code>  /**
-   * Invoked once the executor driver has been able to successfully
-   * connect with Mesos. In particular, a scheduler can pass some
-   * data to it's executors through the FrameworkInfo.ExecutorInfo's
-   * data field.
-   */
-  virtual void registered(ExecutorDriver* driver,
-                          const ExecutorInfo&amp; executorInfo,
-                          const FrameworkInfo&amp; frameworkInfo,
+<pre><code class="{.cpp}">/*
+ * Invoked once the executor driver has been able to successfully
+ * connect with Mesos. In particular, a scheduler can pass some
+ * data to it's executors through the FrameworkInfo.ExecutorInfo's
+ * data field.
+ */
+virtual void registered(ExecutorDriver* driver,
+                        const ExecutorInfo&amp; executorInfo,
+                        const FrameworkInfo&amp; frameworkInfo,
+                        const SlaveInfo&amp; slaveInfo) = 0;
+
+/*
+ * Invoked when the executor re-registers with a restarted slave.
+ */
+virtual void reregistered(ExecutorDriver* driver,
                           const SlaveInfo&amp; slaveInfo) = 0;
 
-  /**
-   * Invoked when the executor re-registers with a restarted slave.
-   */
-  virtual void reregistered(ExecutorDriver* driver,
-                            const SlaveInfo&amp; slaveInfo) = 0;
-
-  /**
-   * Invoked when the executor becomes "disconnected" from the slave
-   * (e.g., the slave is being restarted due to an upgrade).
-   */
-  virtual void disconnected(ExecutorDriver* driver) = 0;
-
-  /**
-   * Invoked when a task has been launched on this executor (initiated
-   * via Scheduler::launchTasks). Note that this task can be realized
-   * with a thread, a process, or some simple computation, however, no
-   * other callbacks will be invoked on this executor until this
-   * callback has returned.
-   */
-  virtual void launchTask(ExecutorDriver* driver,
-                          const TaskInfo&amp; task) = 0;
-
-  /**
-   * Invoked when a task running within this executor has been killed
-   * (via SchedulerDriver::killTask). Note that no status update will
-   * be sent on behalf of the executor, the executor is responsible
-   * for creating a new TaskStatus (i.e., with TASK_KILLED) and
-   * invoking ExecutorDriver::sendStatusUpdate.
-   */
-  virtual void killTask(ExecutorDriver* driver, const TaskID&amp; taskId) = 0;
-
-  /**
-   * Invoked when a framework message has arrived for this
-   * executor. These messages are best effort; do not expect a
-   * framework message to be retransmitted in any reliable fashion.
-   */
-    virtual void frameworkMessage(ExecutorDriver* driver,
-                                  const std::string&amp; data) = 0;
-
-  /**
-   * Invoked when the executor should terminate all of it's currently
-   * running tasks. Note that after a Mesos has determined that an
-   * executor has terminated any tasks that the executor did not send
-   * terminal status updates for (e.g., TASK_KILLED, TASK_FINISHED,
-   * TASK_FAILED, etc) a TASK_LOST status update will be created.
-   */
-  virtual void shutdown(ExecutorDriver* driver) = 0;
-
-  /**
-   * Invoked when a fatal error has occurred with the executor and/or
-   * executor driver. The driver will be aborted BEFORE invoking this
-   * callback.
-   */
-  virtual void error(ExecutorDriver* driver, const std::string&amp; message) = 0;
+/*
+ * Invoked when the executor becomes "disconnected" from the slave
+ * (e.g., the slave is being restarted due to an upgrade).
+ */
+virtual void disconnected(ExecutorDriver* driver) = 0;
+
+/*
+ * Invoked when a task has been launched on this executor (initiated
+ * via Scheduler::launchTasks). Note that this task can be realized
+ * with a thread, a process, or some simple computation, however, no
+ * other callbacks will be invoked on this executor until this
+ * callback has returned.
+ */
+virtual void launchTask(ExecutorDriver* driver,
+                        const TaskInfo&amp; task) = 0;
+
+/*
+ * Invoked when a task running within this executor has been killed
+ * (via SchedulerDriver::killTask). Note that no status update will
+ * be sent on behalf of the executor, the executor is responsible
+ * for creating a new TaskStatus (i.e., with TASK_KILLED) and
+ * invoking ExecutorDriver::sendStatusUpdate.
+ */
+virtual void killTask(ExecutorDriver* driver, const TaskID&amp; taskId) = 0;
+
+/*
+ * Invoked when a framework message has arrived for this
+ * executor. These messages are best effort; do not expect a
+ * framework message to be retransmitted in any reliable fashion.
+ */
+virtual void frameworkMessage(ExecutorDriver* driver,
+                              const std::string&amp; data) = 0;
+
+/*
+ * Invoked when the executor should terminate all of it's currently
+ * running tasks. Note that after a Mesos has determined that an
+ * executor has terminated any tasks that the executor did not send
+ * terminal status updates for (e.g., TASK_KILLED, TASK_FINISHED,
+ * TASK_FAILED, etc) a TASK_LOST status update will be created.
+ */
+virtual void shutdown(ExecutorDriver* driver) = 0;
+
+/*
+ * Invoked when a fatal error has occurred with the executor and/or
+ * executor driver. The driver will be aborted BEFORE invoking this
+ * callback.
+ */
+virtual void error(ExecutorDriver* driver, const std::string&amp; message) = 0;
 </code></pre>
 
 <h2>Install your Framework</h2>

Modified: mesos/site/publish/documentation/clang-format/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/clang-format/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/clang-format/index.html (original)
+++ mesos/site/publish/documentation/clang-format/index.html Wed Jul  1 18:55:31 2015
@@ -93,7 +93,7 @@
 
 <h4>Ubuntu 14.04</h4>
 
-<pre><code class="bash"># Ensure apt-get is up to date.
+<pre><code># Ensure apt-get is up to date.
 sudo apt-get update
 
 # Install clang-format-3.5
@@ -102,7 +102,7 @@ sudo apt-get install clang-format-3.5
 
 <h4>OS X Yosemite</h4>
 
-<pre><code class="bash"># Install clang-3.5. The binaries are suffixed with '-3.5', e.g. 'clang++-3.5'.
+<pre><code># Install clang-3.5. The binaries are suffixed with '-3.5', e.g. 'clang++-3.5'.
 $ brew install llvm35 --with-clang
 
 # Download and install the clang-format scripts.

Modified: mesos/site/publish/documentation/configuration/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/configuration/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/configuration/index.html (original)
+++ mesos/site/publish/documentation/configuration/index.html Wed Jul  1 18:55:31 2015
@@ -448,6 +448,17 @@ file:///path/to/file (where file contain
   </tr>
   <tr>
     <td>
+      --max_slave_ping_timeouts=VALUE
+    </td>
+    <td>
+      The number of times a slave can fail to respond to a
+      ping from the master. Slaves that incur more than
+      `max_slave_ping_timeouts` timeouts will be removed.
+      (default: 5)
+    </td>
+  </tr>
+  <tr>
+    <td>
       --modules=VALUE
     </td>
     <td>
@@ -561,18 +572,6 @@ file:///path/to/file (where file contain
   </tr>
   <tr>
     <td>
-      --slave_removal_rate_limit=VALUE
-    </td>
-    <td>
-      The maximum rate (e.g., 1/10mins, 2/3hrs, etc) at which slaves will
-      be removed from the master when they fail health checks. By default
-      slaves will be removed as soon as they fail the health checks.
-      <p/>
-      The value is of the form 'Number of slaves'/'Duration'
-    </td>
-  </tr>
-  <tr>
-    <td>
       --registry=VALUE
     </td>
     <td>
@@ -633,6 +632,29 @@ file:///path/to/file (where file contain
     </td>
   </tr>
   <tr>
+    <td>
+      --slave_ping_timeout=VALUE
+    </td>
+    <td>
+      The timeout within which each slave is expected to respond to a
+      ping from the master. Slaves that do not respond within
+      `max_slave_ping_timeouts` ping retries will be removed.
+      (default: 15secs)
+    </td>
+  </tr>
+  <tr>
+    <td>
+      --slave_removal_rate_limit=VALUE
+    </td>
+    <td>
+      The maximum rate (e.g., 1/10mins, 2/3hrs, etc) at which slaves will
+      be removed from the master when they fail health checks. By default
+      slaves will be removed as soon as they fail the health checks.
+      <p/>
+      The value is of the form 'Number of slaves'/'Duration'
+    </td>
+  </tr>
+  <tr>
     <td>
       --slave_reregister_timeout=VALUE
     </td>

Modified: mesos/site/publish/documentation/docker-containerizer/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/docker-containerizer/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/docker-containerizer/index.html (original)
+++ mesos/site/publish/documentation/docker-containerizer/index.html Wed Jul  1 18:55:31 2015
@@ -137,7 +137,7 @@ set the HOME environment variable pointi
 
 <h2>CommandInfo to run Docker images</h2>
 
-<p>A docker image currently supports having a entrypoint and/or a default command.</p>
+<p>A docker image currently supports having an entrypoint and/or a default command.</p>
 
 <p>To run a docker image with the default command (ie: docker run image), the CommandInfo&rsquo;s value must not be set. If the value is set then it will override the default command.</p>
 

Modified: mesos/site/publish/documentation/getting-started/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/getting-started/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/getting-started/index.html (original)
+++ mesos/site/publish/documentation/getting-started/index.html Wed Jul  1 18:55:31 2015
@@ -180,34 +180,31 @@
 
 <h3>CentOS 7.1</h3>
 
-<ul>
-<li><p>Following are the instructions for stock CentOS 7.1. If you are using a different OS, please install the packages accordingly.</p>
+<p>Following are the instructions for stock CentOS 7.1. If you are using a different OS, please install the packages accordingly.</p>
 
-<pre><code>  # Install a few utility tools
-  $ sudo yum install -y tar wget
+<pre><code>    # Install a few utility tools
+    $ sudo yum install -y tar wget
 
-  # Fetch the Apache Maven repo file.
-  $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
+    # Fetch the Apache Maven repo file.
+    $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
 
-  # 'Mesos &gt; 0.21.0' requires 'subversion &gt; 1.8' devel package, which is
-  # not available in the default repositories.
-  # Add the WANdisco SVN repo file: '/etc/yum.repos.d/wandisco-svn.repo' with content:
-
-    [WANdiscoSVN]
-    name=WANdisco SVN Repo 1.9
-    enabled=1
-    baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
-    gpgcheck=1
-    gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
-
-  # Install essential development tools.
-  $ sudo yum groupinstall -y "Development Tools"
-
-  # Install other Mesos dependencies.
-  $ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
-</code></pre></li>
-</ul>
+    # 'Mesos &gt; 0.21.0' requires 'subversion &gt; 1.8' devel package, which is
+    # not available in the default repositories.
+    # Add the WANdisco SVN repo file: '/etc/yum.repos.d/wandisco-svn.repo' with content:
+
+      [WANdiscoSVN]
+      name=WANdisco SVN Repo 1.9
+      enabled=1
+      baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
+      gpgcheck=1
+      gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
 
+    # Install essential development tools.
+    $ sudo yum groupinstall -y "Development Tools"
+
+    # Install other Mesos dependencies.
+    $ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
+</code></pre>
 
 <h2>Building Mesos</h2>
 
@@ -224,7 +221,7 @@
     $ make
 </code></pre>
 
-<p>In order to speed up the build and reduce verbosity of the logs, you can append <code>-j=&lt;number of cores&gt; V=0</code> to <code>make</code>.</p>
+<p>In order to speed up the build and reduce verbosity of the logs, you can append <code>-j &lt;number of cores&gt; V=0</code> to <code>make</code>.</p>
 
 <pre><code>    # Run test suite.
     $ make check

Modified: mesos/site/publish/documentation/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/index.html (original)
+++ mesos/site/publish/documentation/index.html Wed Jul  1 18:55:31 2015
@@ -103,6 +103,7 @@
 <li><a href="/documentation/latest/logging-and-debugging/">Logging and Debugging</a> for viewing Mesos and framework logs.</li>
 <li><a href="/documentation/latest/high-availability/">High Availability</a> for running multiple masters simultaneously.</li>
 <li><a href="/documentation/latest/operational-guide/">Operational Guide</a></li>
+<li><a href="/documentation/latest/monitoring/">Monitoring</a></li>
 <li><a href="/documentation/latest/network-monitoring/">Network Monitoring</a></li>
 <li><a href="/documentation/latest/slave-recovery/">Slave Recovery</a> for doing seamless upgrades.</li>
 <li><a href="/documentation/latest/tools/">Tools</a> for setting up and running a Mesos cluster.</li>
@@ -145,8 +146,14 @@
 <li><a href="/documentation/latest/committing/">Committing</a> guidelines for committing changes.</li>
 <li><a href="/documentation/latest/committers/">Committers and Maintainers</a> a listing of project committers and component maintainers; useful when seeking feedback.</li>
 <li><a href="/api/latest/c++/">Doxygen</a> documents the internal Mesos APIs.</li>
+<li><a href="/documentation/latest/mesos-documentation-guide/">Documentation Guide</a>
+
+<ul>
 <li><a href="/documentation/latest/mesos-c++-style-guide/">C++ Style Guide</a></li>
 <li><a href="/documentation/latest/mesos-doxygen-style-guide/">Doxygen Style Guide</a></li>
+<li><a href="/documentation/latest/mesos-markdown-style-guide/">Markdown Style Guide</a></li>
+</ul>
+</li>
 <li><a href="/documentation/latest/mesos-roadmap/">Development Roadmap</a></li>
 <li><a href="/documentation/latest/release-guide/">Release Guide</a></li>
 </ul>

Modified: mesos/site/publish/documentation/latest/allocation-module/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/allocation-module/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/allocation-module/index.html (original)
+++ mesos/site/publish/documentation/latest/allocation-module/index.html Wed Jul  1 18:55:31 2015
@@ -115,7 +115,7 @@
 
 <p>An allocator module is a factory function and a module description, as defined in <code>mesos/module/allocator.hpp</code>. Assuming the allocation logic is implemented by the <code>ExternalAllocator</code> class declared in <code>external_allocator.hpp</code>, the following snippet describes the implementation of an allocator module named <code>ExternalAllocatorModule</code>:</p>
 
-<pre><code>#include &lt;mesos/master/allocator.hpp&gt;
+<pre><code class="{.cpp}">#include &lt;mesos/master/allocator.hpp&gt;
 #include &lt;mesos/module/allocator.hpp&gt;
 #include &lt;stout/try.hpp&gt;
 

Modified: mesos/site/publish/documentation/latest/app-framework-development-guide/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/app-framework-development-guide/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/app-framework-development-guide/index.html (original)
+++ mesos/site/publish/documentation/latest/app-framework-development-guide/index.html Wed Jul  1 18:55:31 2015
@@ -85,126 +85,126 @@
 
 <p>In this document we refer to Mesos applications as &ldquo;frameworks&rdquo;.</p>
 
-<p>See one of the example framework schedulers in <code>MESOS_HOME/src/examples/</code> to get an idea of what a Mesos framework scheduler and executor in the language of your choice looks like.</p>
+<p>See one of the example framework schedulers in <code>MESOS_HOME/src/examples/</code> to get an idea of what a Mesos framework scheduler and executor in the language of your choice looks like. <a href="https://github.com/mesosphere/RENDLER">RENDLER</a> provides example framework implementations in C++, Go, Haskell, Java, Python and Scala.</p>
 
 <h2>Create your Framework Scheduler</h2>
 
-<p>You can write a framework scheduler in C, C++, Java/Scala, or Python. Your framework scheduler should inherit from the <code>Scheduler</code> class (see API below). Your scheduler should create a SchedulerDriver (which will mediate communication between your scheduler and the Mesos master) and then call <code>SchedulerDriver.run()</code></p>
+<p>You can write a framework scheduler in C, C++, Java/Scala, or Python. Your framework scheduler should inherit from the <code>Scheduler</code> class (see API below). Your scheduler should create a SchedulerDriver (which will mediate communication between your scheduler and the Mesos master) and then call <code>SchedulerDriver.run()</code>.</p>
 
 <h3>Scheduler API</h3>
 
-<p>Declared in <code>MESOS_HOME/include/mesos/scheduler.hpp</code></p>
-
-<pre><code>  /**
-   * Empty virtual destructor (necessary to instantiate subclasses).
-   */
-  virtual ~Scheduler() {}
-
-  /**
-   * Invoked when the scheduler successfully registers with a Mesos
-   * master. A unique ID (generated by the master) used for
-   * distinguishing this framework from others and MasterInfo
-   * with the ip and port of the current master are provided as arguments.
-   */
-  virtual void registered(SchedulerDriver* driver,
-                          const FrameworkID&amp; frameworkId,
-                          const MasterInfo&amp; masterInfo) = 0;
-
-  /**
-   * Invoked when the scheduler re-registers with a newly elected Mesos master.
-   * This is only called when the scheduler has previously been registered.
-   * MasterInfo containing the updated information about the elected master
-   * is provided as an argument.
-   */
-  virtual void reregistered(SchedulerDriver* driver,
-                            const MasterInfo&amp; masterInfo) = 0;
-
-  /**
-   * Invoked when the scheduler becomes "disconnected" from the master
-   * (e.g., the master fails and another is taking over).
-   */
-  virtual void disconnected(SchedulerDriver* driver) = 0;
-
-  /**
-   * Invoked when resources have been offered to this framework. A
-   * single offer will only contain resources from a single slave.
-   * Resources associated with an offer will not be re-offered to
-   * _this_ framework until either (a) this framework has rejected
-   * those resources (see SchedulerDriver::launchTasks) or (b) those
-   * resources have been rescinded (see Scheduler::offerRescinded).
-   * Note that resources may be concurrently offered to more than one
-   * framework at a time (depending on the allocator being used). In
-   * that case, the first framework to launch tasks using those
-   * resources will be able to use them while the other frameworks
-   * will have those resources rescinded (or if a framework has
-   * already launched tasks with those resources then those tasks will
-   * fail with a TASK_LOST status and a message saying as much).
-   */
-  virtual void resourceOffers(SchedulerDriver* driver,
-                              const std::vector&lt;Offer&gt;&amp; offers) = 0;
-
-  /**
-   * Invoked when an offer is no longer valid (e.g., the slave was
-   * lost or another framework used resources in the offer). If for
-   * whatever reason an offer is never rescinded (e.g., dropped
-   * message, failing over framework, etc.), a framwork that attempts
-   * to launch tasks using an invalid offer will receive TASK_LOST
-   * status updats for those tasks (see Scheduler::resourceOffers).
-   */
-  virtual void offerRescinded(SchedulerDriver* driver,
-                              const OfferID&amp; offerId) = 0;
-
-  /**
-   * Invoked when the status of a task has changed (e.g., a slave is
-   * lost and so the task is lost, a task finishes and an executor
-   * sends a status update saying so, etc). If implicit
-   * acknowledgements are being used, then returning from this
-   * callback _acknowledges_ receipt of this status update! If for
-   * whatever reason the scheduler aborts during this callback (or
-   * the process exits) another status update will be delivered (note,
-   * however, that this is currently not true if the slave sending the
-   * status update is lost/fails during that time). If explicit
-   * acknowledgements are in use, the scheduler must acknowledge this
-   * status on the driver.
-   */
-  virtual void statusUpdate(SchedulerDriver* driver,
-                            const TaskStatus&amp; status) = 0;
-
-  /**
-   * Invoked when an executor sends a message. These messages are best
-   * effort; do not expect a framework message to be retransmitted in
-   * any reliable fashion.
-   */
-  virtual void frameworkMessage(SchedulerDriver* driver,
-                                const ExecutorID&amp; executorId,
-                                const SlaveID&amp; slaveId,
-                                const std::string&amp; data) = 0;
-
-  /**
-   * Invoked when a slave has been determined unreachable (e.g.,
-   * machine failure, network partition). Most frameworks will need to
-   * reschedule any tasks launched on this slave on a new slave.
-   */
-  virtual void slaveLost(SchedulerDriver* driver,
-                         const SlaveID&amp; slaveId) = 0;
-
-  /**
-   * Invoked when an executor has exited/terminated. Note that any
-   * tasks running will have TASK_LOST status updates automagically
-   * generated.
-   */
-  virtual void executorLost(SchedulerDriver* driver,
-                            const ExecutorID&amp; executorId,
-                            const SlaveID&amp; slaveId,
-                            int status) = 0;
-
-  /**
-   * Invoked when there is an unrecoverable error in the scheduler or
-   * scheduler driver. The driver will be aborted BEFORE invoking this
-   * callback.
-   */
-  virtual void error(SchedulerDriver* driver, const std::string&amp; message) = 0;
-</code></pre>
+<p>Declared in <code>MESOS_HOME/include/mesos/scheduler.hpp</code>
+<del>~~{.cpp}
+/<em>
+ * Empty virtual destructor (necessary to instantiate subclasses).
+ </em>/
+virtual </del>Scheduler() {}</p>
+
+<p>/<em>
+ * Invoked when the scheduler successfully registers with a Mesos
+ * master. A unique ID (generated by the master) used for
+ * distinguishing this framework from others and MasterInfo
+ * with the ip and port of the current master are provided as arguments.
+ </em>/
+virtual void registered(SchedulerDriver* driver,
+                        const FrameworkID&amp; frameworkId,
+                        const MasterInfo&amp; masterInfo) = 0;</p>
+
+<p>/<em>
+ * Invoked when the scheduler re-registers with a newly elected Mesos master.
+ * This is only called when the scheduler has previously been registered.
+ * MasterInfo containing the updated information about the elected master
+ * is provided as an argument.
+ </em>/
+virtual void reregistered(SchedulerDriver* driver,
+                          const MasterInfo&amp; masterInfo) = 0;</p>
+
+<p>/<em>
+ * Invoked when the scheduler becomes &ldquo;disconnected&rdquo; from the master
+ * (e.g., the master fails and another is taking over).
+ </em>/
+virtual void disconnected(SchedulerDriver* driver) = 0;</p>
+
+<p>/<em>
+ * Invoked when resources have been offered to this framework. A
+ * single offer will only contain resources from a single slave.
+ * Resources associated with an offer will not be re-offered to
+ * <em>this</em> framework until either (a) this framework has rejected
+ * those resources (see SchedulerDriver::launchTasks) or (b) those
+ * resources have been rescinded (see Scheduler::offerRescinded).
+ * Note that resources may be concurrently offered to more than one
+ * framework at a time (depending on the allocator being used). In
+ * that case, the first framework to launch tasks using those
+ * resources will be able to use them while the other frameworks
+ * will have those resources rescinded (or if a framework has
+ * already launched tasks with those resources then those tasks will
+ * fail with a TASK_LOST status and a message saying as much).
+ </em>/
+virtual void resourceOffers(SchedulerDriver* driver,
+                            const std::vector<Offer>&amp; offers) = 0;</p>
+
+<p>/<em>
+ * Invoked when an offer is no longer valid (e.g., the slave was
+ * lost or another framework used resources in the offer). If for
+ * whatever reason an offer is never rescinded (e.g., dropped
+ * message, failing over framework, etc.), a framwork that attempts
+ * to launch tasks using an invalid offer will receive TASK_LOST
+ * status updats for those tasks (see Scheduler::resourceOffers).
+ </em>/
+virtual void offerRescinded(SchedulerDriver* driver,
+                            const OfferID&amp; offerId) = 0;</p>
+
+<p>/<em>
+ * Invoked when the status of a task has changed (e.g., a slave is
+ * lost and so the task is lost, a task finishes and an executor
+ * sends a status update saying so, etc). If implicit
+ * acknowledgements are being used, then returning from this
+ * callback <em>acknowledges</em> receipt of this status update! If for
+ * whatever reason the scheduler aborts during this callback (or
+ * the process exits) another status update will be delivered (note,
+ * however, that this is currently not true if the slave sending the
+ * status update is lost/fails during that time). If explicit
+ * acknowledgements are in use, the scheduler must acknowledge this
+ * status on the driver.
+ </em>/
+virtual void statusUpdate(SchedulerDriver* driver,
+                          const TaskStatus&amp; status) = 0;</p>
+
+<p>/<em>
+ * Invoked when an executor sends a message. These messages are best
+ * effort; do not expect a framework message to be retransmitted in
+ * any reliable fashion.
+ </em>/
+virtual void frameworkMessage(SchedulerDriver* driver,
+                              const ExecutorID&amp; executorId,
+                              const SlaveID&amp; slaveId,
+                              const std::string&amp; data) = 0;</p>
+
+<p>/<em>
+ * Invoked when a slave has been determined unreachable (e.g.,
+ * machine failure, network partition). Most frameworks will need to
+ * reschedule any tasks launched on this slave on a new slave.
+ </em>/
+virtual void slaveLost(SchedulerDriver* driver,
+                       const SlaveID&amp; slaveId) = 0;</p>
+
+<p>/<em>
+ * Invoked when an executor has exited/terminated. Note that any
+ * tasks running will have TASK_LOST status updates automagically
+ * generated.
+ </em>/
+virtual void executorLost(SchedulerDriver* driver,
+                          const ExecutorID&amp; executorId,
+                          const SlaveID&amp; slaveId,
+                          int status) = 0;</p>
+
+<p>/<em>
+ * Invoked when there is an unrecoverable error in the scheduler or
+ * scheduler driver. The driver will be aborted BEFORE invoking this
+ * callback.
+ </em>/
+virtual void error(SchedulerDriver* driver, const std::string&amp; message) = 0;
+~~~</p>
 
 <h2>Create your Framework Executor</h2>
 
@@ -214,71 +214,71 @@
 
 <p>Declared in <code>MESOS_HOME/include/mesos/executor.hpp</code></p>
 
-<pre><code>  /**
-   * Invoked once the executor driver has been able to successfully
-   * connect with Mesos. In particular, a scheduler can pass some
-   * data to it's executors through the FrameworkInfo.ExecutorInfo's
-   * data field.
-   */
-  virtual void registered(ExecutorDriver* driver,
-                          const ExecutorInfo&amp; executorInfo,
-                          const FrameworkInfo&amp; frameworkInfo,
+<pre><code class="{.cpp}">/*
+ * Invoked once the executor driver has been able to successfully
+ * connect with Mesos. In particular, a scheduler can pass some
+ * data to it's executors through the FrameworkInfo.ExecutorInfo's
+ * data field.
+ */
+virtual void registered(ExecutorDriver* driver,
+                        const ExecutorInfo&amp; executorInfo,
+                        const FrameworkInfo&amp; frameworkInfo,
+                        const SlaveInfo&amp; slaveInfo) = 0;
+
+/*
+ * Invoked when the executor re-registers with a restarted slave.
+ */
+virtual void reregistered(ExecutorDriver* driver,
                           const SlaveInfo&amp; slaveInfo) = 0;
 
-  /**
-   * Invoked when the executor re-registers with a restarted slave.
-   */
-  virtual void reregistered(ExecutorDriver* driver,
-                            const SlaveInfo&amp; slaveInfo) = 0;
-
-  /**
-   * Invoked when the executor becomes "disconnected" from the slave
-   * (e.g., the slave is being restarted due to an upgrade).
-   */
-  virtual void disconnected(ExecutorDriver* driver) = 0;
-
-  /**
-   * Invoked when a task has been launched on this executor (initiated
-   * via Scheduler::launchTasks). Note that this task can be realized
-   * with a thread, a process, or some simple computation, however, no
-   * other callbacks will be invoked on this executor until this
-   * callback has returned.
-   */
-  virtual void launchTask(ExecutorDriver* driver,
-                          const TaskInfo&amp; task) = 0;
-
-  /**
-   * Invoked when a task running within this executor has been killed
-   * (via SchedulerDriver::killTask). Note that no status update will
-   * be sent on behalf of the executor, the executor is responsible
-   * for creating a new TaskStatus (i.e., with TASK_KILLED) and
-   * invoking ExecutorDriver::sendStatusUpdate.
-   */
-  virtual void killTask(ExecutorDriver* driver, const TaskID&amp; taskId) = 0;
-
-  /**
-   * Invoked when a framework message has arrived for this
-   * executor. These messages are best effort; do not expect a
-   * framework message to be retransmitted in any reliable fashion.
-   */
-    virtual void frameworkMessage(ExecutorDriver* driver,
-                                  const std::string&amp; data) = 0;
-
-  /**
-   * Invoked when the executor should terminate all of it's currently
-   * running tasks. Note that after a Mesos has determined that an
-   * executor has terminated any tasks that the executor did not send
-   * terminal status updates for (e.g., TASK_KILLED, TASK_FINISHED,
-   * TASK_FAILED, etc) a TASK_LOST status update will be created.
-   */
-  virtual void shutdown(ExecutorDriver* driver) = 0;
-
-  /**
-   * Invoked when a fatal error has occurred with the executor and/or
-   * executor driver. The driver will be aborted BEFORE invoking this
-   * callback.
-   */
-  virtual void error(ExecutorDriver* driver, const std::string&amp; message) = 0;
+/*
+ * Invoked when the executor becomes "disconnected" from the slave
+ * (e.g., the slave is being restarted due to an upgrade).
+ */
+virtual void disconnected(ExecutorDriver* driver) = 0;
+
+/*
+ * Invoked when a task has been launched on this executor (initiated
+ * via Scheduler::launchTasks). Note that this task can be realized
+ * with a thread, a process, or some simple computation, however, no
+ * other callbacks will be invoked on this executor until this
+ * callback has returned.
+ */
+virtual void launchTask(ExecutorDriver* driver,
+                        const TaskInfo&amp; task) = 0;
+
+/*
+ * Invoked when a task running within this executor has been killed
+ * (via SchedulerDriver::killTask). Note that no status update will
+ * be sent on behalf of the executor, the executor is responsible
+ * for creating a new TaskStatus (i.e., with TASK_KILLED) and
+ * invoking ExecutorDriver::sendStatusUpdate.
+ */
+virtual void killTask(ExecutorDriver* driver, const TaskID&amp; taskId) = 0;
+
+/*
+ * Invoked when a framework message has arrived for this
+ * executor. These messages are best effort; do not expect a
+ * framework message to be retransmitted in any reliable fashion.
+ */
+virtual void frameworkMessage(ExecutorDriver* driver,
+                              const std::string&amp; data) = 0;
+
+/*
+ * Invoked when the executor should terminate all of it's currently
+ * running tasks. Note that after a Mesos has determined that an
+ * executor has terminated any tasks that the executor did not send
+ * terminal status updates for (e.g., TASK_KILLED, TASK_FINISHED,
+ * TASK_FAILED, etc) a TASK_LOST status update will be created.
+ */
+virtual void shutdown(ExecutorDriver* driver) = 0;
+
+/*
+ * Invoked when a fatal error has occurred with the executor and/or
+ * executor driver. The driver will be aborted BEFORE invoking this
+ * callback.
+ */
+virtual void error(ExecutorDriver* driver, const std::string&amp; message) = 0;
 </code></pre>
 
 <h2>Install your Framework</h2>

Modified: mesos/site/publish/documentation/latest/clang-format/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/clang-format/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/clang-format/index.html (original)
+++ mesos/site/publish/documentation/latest/clang-format/index.html Wed Jul  1 18:55:31 2015
@@ -93,7 +93,7 @@
 
 <h4>Ubuntu 14.04</h4>
 
-<pre><code class="bash"># Ensure apt-get is up to date.
+<pre><code># Ensure apt-get is up to date.
 sudo apt-get update
 
 # Install clang-format-3.5
@@ -102,7 +102,7 @@ sudo apt-get install clang-format-3.5
 
 <h4>OS X Yosemite</h4>
 
-<pre><code class="bash"># Install clang-3.5. The binaries are suffixed with '-3.5', e.g. 'clang++-3.5'.
+<pre><code># Install clang-3.5. The binaries are suffixed with '-3.5', e.g. 'clang++-3.5'.
 $ brew install llvm35 --with-clang
 
 # Download and install the clang-format scripts.

Modified: mesos/site/publish/documentation/latest/configuration/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/configuration/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/configuration/index.html (original)
+++ mesos/site/publish/documentation/latest/configuration/index.html Wed Jul  1 18:55:31 2015
@@ -448,6 +448,17 @@ file:///path/to/file (where file contain
   </tr>
   <tr>
     <td>
+      --max_slave_ping_timeouts=VALUE
+    </td>
+    <td>
+      The number of times a slave can fail to respond to a
+      ping from the master. Slaves that incur more than
+      `max_slave_ping_timeouts` timeouts will be removed.
+      (default: 5)
+    </td>
+  </tr>
+  <tr>
+    <td>
       --modules=VALUE
     </td>
     <td>
@@ -561,18 +572,6 @@ file:///path/to/file (where file contain
   </tr>
   <tr>
     <td>
-      --slave_removal_rate_limit=VALUE
-    </td>
-    <td>
-      The maximum rate (e.g., 1/10mins, 2/3hrs, etc) at which slaves will
-      be removed from the master when they fail health checks. By default
-      slaves will be removed as soon as they fail the health checks.
-      <p/>
-      The value is of the form 'Number of slaves'/'Duration'
-    </td>
-  </tr>
-  <tr>
-    <td>
       --registry=VALUE
     </td>
     <td>
@@ -633,6 +632,29 @@ file:///path/to/file (where file contain
     </td>
   </tr>
   <tr>
+    <td>
+      --slave_ping_timeout=VALUE
+    </td>
+    <td>
+      The timeout within which each slave is expected to respond to a
+      ping from the master. Slaves that do not respond within
+      `max_slave_ping_timeouts` ping retries will be removed.
+      (default: 15secs)
+    </td>
+  </tr>
+  <tr>
+    <td>
+      --slave_removal_rate_limit=VALUE
+    </td>
+    <td>
+      The maximum rate (e.g., 1/10mins, 2/3hrs, etc) at which slaves will
+      be removed from the master when they fail health checks. By default
+      slaves will be removed as soon as they fail the health checks.
+      <p/>
+      The value is of the form 'Number of slaves'/'Duration'
+    </td>
+  </tr>
+  <tr>
     <td>
       --slave_reregister_timeout=VALUE
     </td>

Modified: mesos/site/publish/documentation/latest/docker-containerizer/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/docker-containerizer/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/docker-containerizer/index.html (original)
+++ mesos/site/publish/documentation/latest/docker-containerizer/index.html Wed Jul  1 18:55:31 2015
@@ -137,7 +137,7 @@ set the HOME environment variable pointi
 
 <h2>CommandInfo to run Docker images</h2>
 
-<p>A docker image currently supports having a entrypoint and/or a default command.</p>
+<p>A docker image currently supports having an entrypoint and/or a default command.</p>
 
 <p>To run a docker image with the default command (ie: docker run image), the CommandInfo&rsquo;s value must not be set. If the value is set then it will override the default command.</p>
 

Modified: mesos/site/publish/documentation/latest/getting-started/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/getting-started/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/getting-started/index.html (original)
+++ mesos/site/publish/documentation/latest/getting-started/index.html Wed Jul  1 18:55:31 2015
@@ -180,34 +180,31 @@
 
 <h3>CentOS 7.1</h3>
 
-<ul>
-<li><p>Following are the instructions for stock CentOS 7.1. If you are using a different OS, please install the packages accordingly.</p>
+<p>Following are the instructions for stock CentOS 7.1. If you are using a different OS, please install the packages accordingly.</p>
 
-<pre><code>  # Install a few utility tools
-  $ sudo yum install -y tar wget
+<pre><code>    # Install a few utility tools
+    $ sudo yum install -y tar wget
 
-  # Fetch the Apache Maven repo file.
-  $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
+    # Fetch the Apache Maven repo file.
+    $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
 
-  # 'Mesos &gt; 0.21.0' requires 'subversion &gt; 1.8' devel package, which is
-  # not available in the default repositories.
-  # Add the WANdisco SVN repo file: '/etc/yum.repos.d/wandisco-svn.repo' with content:
-
-    [WANdiscoSVN]
-    name=WANdisco SVN Repo 1.9
-    enabled=1
-    baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
-    gpgcheck=1
-    gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
-
-  # Install essential development tools.
-  $ sudo yum groupinstall -y "Development Tools"
-
-  # Install other Mesos dependencies.
-  $ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
-</code></pre></li>
-</ul>
+    # 'Mesos &gt; 0.21.0' requires 'subversion &gt; 1.8' devel package, which is
+    # not available in the default repositories.
+    # Add the WANdisco SVN repo file: '/etc/yum.repos.d/wandisco-svn.repo' with content:
+
+      [WANdiscoSVN]
+      name=WANdisco SVN Repo 1.9
+      enabled=1
+      baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
+      gpgcheck=1
+      gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
 
+    # Install essential development tools.
+    $ sudo yum groupinstall -y "Development Tools"
+
+    # Install other Mesos dependencies.
+    $ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
+</code></pre>
 
 <h2>Building Mesos</h2>
 
@@ -224,7 +221,7 @@
     $ make
 </code></pre>
 
-<p>In order to speed up the build and reduce verbosity of the logs, you can append <code>-j=&lt;number of cores&gt; V=0</code> to <code>make</code>.</p>
+<p>In order to speed up the build and reduce verbosity of the logs, you can append <code>-j &lt;number of cores&gt; V=0</code> to <code>make</code>.</p>
 
 <pre><code>    # Run test suite.
     $ make check

Modified: mesos/site/publish/documentation/latest/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/index.html (original)
+++ mesos/site/publish/documentation/latest/index.html Wed Jul  1 18:55:31 2015
@@ -103,6 +103,7 @@
 <li><a href="/documentation/latest/logging-and-debugging/">Logging and Debugging</a> for viewing Mesos and framework logs.</li>
 <li><a href="/documentation/latest/high-availability/">High Availability</a> for running multiple masters simultaneously.</li>
 <li><a href="/documentation/latest/operational-guide/">Operational Guide</a></li>
+<li><a href="/documentation/latest/monitoring/">Monitoring</a></li>
 <li><a href="/documentation/latest/network-monitoring/">Network Monitoring</a></li>
 <li><a href="/documentation/latest/slave-recovery/">Slave Recovery</a> for doing seamless upgrades.</li>
 <li><a href="/documentation/latest/tools/">Tools</a> for setting up and running a Mesos cluster.</li>
@@ -145,8 +146,14 @@
 <li><a href="/documentation/latest/committing/">Committing</a> guidelines for committing changes.</li>
 <li><a href="/documentation/latest/committers/">Committers and Maintainers</a> a listing of project committers and component maintainers; useful when seeking feedback.</li>
 <li><a href="/api/latest/c++/">Doxygen</a> documents the internal Mesos APIs.</li>
+<li><a href="/documentation/latest/mesos-documentation-guide/">Documentation Guide</a>
+
+<ul>
 <li><a href="/documentation/latest/mesos-c++-style-guide/">C++ Style Guide</a></li>
 <li><a href="/documentation/latest/mesos-doxygen-style-guide/">Doxygen Style Guide</a></li>
+<li><a href="/documentation/latest/mesos-markdown-style-guide/">Markdown Style Guide</a></li>
+</ul>
+</li>
 <li><a href="/documentation/latest/mesos-roadmap/">Development Roadmap</a></li>
 <li><a href="/documentation/latest/release-guide/">Release Guide</a></li>
 </ul>

Modified: mesos/site/publish/documentation/latest/mesos-c++-style-guide/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/mesos-c%2B%2B-style-guide/index.html?rev=1688707&r1=1688706&r2=1688707&view=diff
==============================================================================
--- mesos/site/publish/documentation/latest/mesos-c++-style-guide/index.html (original)
+++ mesos/site/publish/documentation/latest/mesos-c++-style-guide/index.html Wed Jul  1 18:55:31 2015
@@ -95,7 +95,7 @@
 </ul>
 
 
-<pre><code>Try(State _state, T* _t = NULL, const std::string&amp; _message = "")
+<pre><code class="{.cpp}">Try(State _state, T* _t = NULL, const std::string&amp; _message = "")
   : state(_state), t(_t), message(_message) {}
 </code></pre>
 
@@ -105,7 +105,7 @@
 </ul>
 
 
-<pre><code>// You can pass-by-value in ProtobufProcess::install() handlers.
+<pre><code class="{.cpp}">// You can pass-by-value in ProtobufProcess::install() handlers.
 void Slave::statusUpdate(StatusUpdate update, const UPID&amp; pid)
 {
   ...
@@ -178,7 +178,7 @@ void Slave::statusUpdate(StatusUpdate up
 </ul>
 
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 allocator-&gt;resourcesRecovered(frameworkId, slaveId, resources, filters);
 
 // 2: Don't use.
@@ -215,7 +215,7 @@ allocator-&gt;resourcesRecovered(
 </ul>
 
 
-<pre><code>Try&lt;Duration&gt; failoverTimeout =
+<pre><code class="{.cpp}">Try&lt;Duration&gt; failoverTimeout =
   Duration::create(FrameworkInfo().failover_timeout());
 </code></pre>
 
@@ -232,7 +232,7 @@ allocator-&gt;resourcesRecovered(
 
 <p>We disallow capturing <strong>temporaries</strong> by reference. See <a href="https://issues.apache.org/jira/browse/MESOS-2629">MESOS-2629</a> for the rationale.</p>
 
-<pre><code>Future&lt;Nothing&gt; f() { return Nothing(); }
+<pre><code class="{.cpp}">Future&lt;Nothing&gt; f() { return Nothing(); }
 Future&lt;bool&gt; g() { return false; }
 
 struct T
@@ -282,7 +282,7 @@ const T t = T("Hello").member();
 </ul>
 
 
-<pre><code>hashmap&lt;string, hashset&lt;int&gt;&gt; index;
+<pre><code class="{.cpp}">hashmap&lt;string, hashset&lt;int&gt;&gt; index;
 
 // 1: Ok.
 const hashset&lt;int&gt;&amp; values = index[2];
@@ -311,49 +311,45 @@ s += "world"; // THIS IS A DANGLING REFE
 <h2>File Headers</h2>
 
 <ul>
-<li>Mesos source files must contain the &ldquo;ASF&rdquo; header:</li>
-</ul>
-
+<li><p>Mesos source files must contain the &ldquo;ASF&rdquo; header:</p>
 
-<pre><code>/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-</code></pre>
+<pre><code>  /**
+   * Licensed to the Apache Software Foundation (ASF) under one
+   * or more contributor license agreements.  See the NOTICE file
+   * distributed with this work for additional information
+   * regarding copyright ownership.  The ASF licenses this file
+   * to you under the Apache License, Version 2.0 (the
+   * "License"); you may not use this file except in compliance
+   * with the License.  You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+   */
+</code></pre></li>
+<li><p>Stout and libprocess source files must contain the &ldquo;Apache License Version 2.0&rdquo; header:</p>
 
-<ul>
-<li>Stout and libprocess source files must contain the &ldquo;Apache License Version 2.0&rdquo; header:</li>
+<pre><code>  /**
+   * Licensed under the Apache License, Version 2.0 (the "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   *     http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License
+   */
+</code></pre></li>
 </ul>
 
 
-<pre><code>/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-</code></pre>
-
 <h2>C++11</h2>
 
 <p>We support C++11 and require GCC 4.8+ or Clang 3.5+ compilers. The whitelist of supported C++11 features is:</p>
@@ -365,7 +361,7 @@ s += "world"; // THIS IS A DANGLING REFE
 </ul>
 
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 const auto&amp; i = values.find(keys.front());
 // Compare with
 const typename map::iterator&amp; i = values.find(keys.front());
@@ -401,20 +397,28 @@ Try&lt;Owned&lt;LocalAuthorizer&gt;&gt;
 <li><code>shared_from_this()</code></li>
 </ul>
 </li>
-<li><p>Lambdas!</p>
+<li>Lambdas!
 
 <ul>
-<li><p>Don&rsquo;t put a space between the capture list and the parameter list:</p>
+<li>Don&rsquo;t put a space between the capture list and the parameter list:</li>
+</ul>
+</li>
+</ul>
+
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 []() { ...; };
 
 // 2: Don't use.
 [] () { ...; };
-</code></pre></li>
-<li><p>Prefer default capture by value, explicit capture by value, then capture by reference. To avoid dangling-pointer bugs, <em>never</em> use default capture by reference:</p>
+</code></pre>
 
-<pre><code>// 1: OK.
+<ul>
+<li>Prefer default capture by value, explicit capture by value, then capture by reference. To avoid dangling-pointer bugs, <em>never</em> use default capture by reference:</li>
+</ul>
+
+
+<pre><code class="{.cpp}">// 1: OK.
 [=]() { ... }; // Default capture by value.
 [n]() { ... }; // Explicit capture by value.
 [&amp;n]() { ... }; // Explicit capture by reference.
@@ -422,26 +426,42 @@ Try&lt;Owned&lt;LocalAuthorizer&gt;&gt;
 
 // 2: Don't use.
 [&amp;]() { ... }; // Default capture by reference.
-</code></pre></li>
-<li><p>Use <code>mutable</code> only when absolutely necessary.</p>
+</code></pre>
+
+<ul>
+<li>Use <code>mutable</code> only when absolutely necessary.</li>
+</ul>
+
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 []() mutable { ...; };
-</code></pre></li>
-<li><p>Feel free to ignore the return type by default, adding it as necessary to appease the compiler or be more explicit for the reader.</p>
+</code></pre>
+
+<ul>
+<li>Feel free to ignore the return type by default, adding it as necessary to appease the compiler or be more explicit for the reader.</li>
+</ul>
+
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 []() { return true; };
 []() -&gt; bool { return ambiguous(); };
-</code></pre></li>
-<li><p>Feel free to use <code>auto</code> when naming a lambda expression:</p>
+</code></pre>
 
-<pre><code>// 1: OK.
+<ul>
+<li>Feel free to use <code>auto</code> when naming a lambda expression:</li>
+</ul>
+
+
+<pre><code class="{.cpp}">// 1: OK.
 auto lambda = []() { ...; };
-</code></pre></li>
-<li><p>Format lambdas similar to how we format functions and methods. Feel free to let lambdas be one-liners:</p>
+</code></pre>
+
+<ul>
+<li>Format lambdas similar to how we format functions and methods. Feel free to let lambdas be one-liners:</li>
+</ul>
+
 
-<pre><code>// 1: OK.
+<pre><code class="{.cpp}">// 1: OK.
 auto lambda = []() {
   ...;
 };
@@ -450,16 +470,22 @@ auto lambda = []() {
 auto lambda = []() { ...; };
 </code></pre>
 
-<p>Feel free to inline lambdas within function arguments:</p>
+<ul>
+<li>Feel free to inline lambdas within function arguments:</li>
+</ul>
+
 
-<pre><code>instance.method([]() {
+<pre><code class="{.cpp}">instance.method([]() {
   ...;
 });
 </code></pre>
 
-<p>Chain function calls on a newline after the closing brace of the lambda and the closing parenthesis of function call:</p>
+<ul>
+<li>Chain function calls on a newline after the closing brace of the lambda and the closing parenthesis of function call:</li>
+</ul>
 
-<pre><code>// 1: OK.
+
+<pre><code class="{.cpp}">// 1: OK.
 instance
   .method([]() {
     ...;
@@ -493,9 +519,12 @@ instance.method([]() {
 });
 </code></pre>
 
-<p>Wrap capture lists indepedently of parameters, <em>use the same formatting as if the capture list were template parameters</em>:</p>
+<ul>
+<li>Wrap capture lists indepedently of parameters, <em>use the same formatting as if the capture list were template parameters</em>:</li>
+</ul>
 
-<pre><code>// 1: OK.
+
+<pre><code class="{.cpp}">// 1: OK.
 function([&amp;capture1, &amp;capture2, &amp;capture3](
     const T1&amp; p1, const T2&amp; p2, const T3&amp; p3) {
   ...;
@@ -512,7 +541,6 @@ auto lambda = [&amp;capture1, &amp;captu
   ...;
 };
 
-
 auto lambda =
   [&amp;capture1, &amp;capture2, &amp;capture3](
       const T1&amp; p1, const T2&amp; p2, const T3&amp; p3) {
@@ -568,13 +596,13 @@ auto lambda = [&amp;capture1,
                &amp;capture3,
                &amp;capture4](const T1&amp; p1, const T2&amp; p2) {
   ...;
-};
+  };
 
 // 4: Don't use.
 function([&amp;capture1,
-          &amp;capture2,
-          &amp;capture3,
-          &amp;capture4](
+           &amp;capture2,
+           &amp;capture3,
+           &amp;capture4](
     const T1&amp; p1, const T2&amp; p2, const T3&amp; p3) {
   ...;
 });
@@ -596,7 +624,7 @@ function([&amp;capture1,
     const T2&amp; p2,
     const T3&amp; p3) {
   ...;
-});
+  });
 
 auto lambda = [&amp;capture1,
                &amp;capture2,
@@ -649,12 +677,52 @@ auto lambda = [
         const T4&amp; p4) {
   ...;
 };
-</code></pre></li>
-</ul>
-</li>
+</code></pre>
+
+<ul>
 <li><p>Unrestricted Union.</p>
 
 <p>Like the pre-existing <code>union</code>, we can overlap storage allocation for objects that never exist simultaneously. However, with C++11 we are no longer <em>restricted to having only non-POD types in unions</em>. Adding non-POD types to unions complicates things, however, because we need to make sure to properly call constructors and destructors. Therefore, only use unrestricted unions (i.e., unions with non-POD types) when the union has only a single field. What does this buy us? Now we can avoid dynamic memory allocations for &ldquo;container&rdquo; like types, e.g., <code>Option</code>, <code>Try</code>, <code>Result</code>, etc. In effect, we treat the union like a dynamic allocation, calling <em>placement new</em>, <code>new (&amp;t) T(...)</code> anyplace we would have just called <code>new T(...)</code> and the destructor <code>t.~T()</code> anyplace we would have called <code>delete t</code>.</p></li>
+<li><p>Constant expressions.</p>
+
+<p>Constant expressions allow the declaration of static non-POD objects while eliminating the unpredictable runtime initialization and destruction issues normally encountered, helping eliminate macros and hard-coded literals without sacrificing performance and type safety.  Changes which require converting from <code>constexpr</code> to <code>const</code> can propagate through the dependency tree requiring that dependent <code>constexpr</code> uses also be converted to <code>const</code>, hence we avoid using <code>constexpr</code> in complex functions.</p>
+
+<p><code>constexpr</code> behaves as a combination of <code>inline</code> and <code>const</code> and hence must be defined before use in another <code>constexpr</code>.</p>
+
+<p>Prefer <code>constexpr to</code>const<code>for all constant POD declarations,</code>constexpr<code></code>char<code>arrays are preferred to</code>const<code></code>string` literals.
+```
+// OK
+constexpr char LITERAL[] = &ldquo;value&rdquo;;</p>
+
+<p>// Not OK - not available at compile time for optimization and
+// definition required in a separate compilation module.
+const char LITERAL[];</p>
+
+<p>// Not OK - uncertain initialization order, cannot be used in other
+// constexpr statements.
+const string LITERAL(&ldquo;value&rdquo;);</p>
+
+<pre><code>`constexpr` functions are evaluated at compile time if all their arguments are constant expressions. Otherwise they default to initialization at runtime. However `constexpr` functions are limited in that they cannot perform dynamic casts, memory allocation or calls to non-constexpr functions.  Prefer `constexpr` over const inline functions.
+</code></pre>
+
+<p>constexpr size_t MIN = 200;
+constexpr size_t MAX = 1000;
+constexpr size_t SPAN() { return MAX-MIN; }
+int array[SPAN()];
+<code>
+Const expression constructors allow object initialization at compile time provided that all the constructor arguments are constexpr and the constuctor body is empty, i.e. all initialization is performed in the initialization list.  Classes which provide constexpr constructors should normally also provide constexpr copy constructors to allow the class to be used in the return value from a constexpr function.
+</code>
+class C
+{
+public:
+  constexpr C(int <em>i) : i(</em>i) {};
+  constexpr C(const C&amp; c) : i(c.i) {}
+private:
+  const int i;
+};</p>
+
+<p>```
+C++11 does not provide constexpr string or containers in the STL and hence constexpr cannot be used for any class using stout&rsquo;s Error() class.</p></li>
 </ul>
 
 

Added: mesos/site/publish/documentation/latest/mesos-documentation-guide/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/mesos-documentation-guide/index.html?rev=1688707&view=auto
==============================================================================
--- mesos/site/publish/documentation/latest/mesos-documentation-guide/index.html (added)
+++ mesos/site/publish/documentation/latest/mesos-documentation-guide/index.html Wed Jul  1 18:55:31 2015
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title></title>
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+		    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+		    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
+		    
+		    <link href="../../../assets/css/main.css" media="screen" rel="stylesheet" type="text/css" />
+				
+		    
+			
+			<!-- Google Analytics Magic -->
+			<script type="text/javascript">
+			  var _gaq = _gaq || [];
+			  _gaq.push(['_setAccount', 'UA-20226872-1']);
+			  _gaq.push(['_setDomainName', 'apache.org']);
+			  _gaq.push(['_trackPageview']);
+
+			  (function() {
+			    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+			    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+			    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			  })();
+			</script>
+    </head>
+    <body>
+			<!-- magical breadcrumbs -->
+			<div class="topnav">
+			<ul class="breadcrumb">
+			  <li>
+					<div class="dropdown">
+					  <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
+					  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+							<li><a href="http://www.apache.org">Apache Homepage</a></li>
+							<li><a href="http://www.apache.org/licenses/">License</a></li>
+					  	<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+					  	<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+							<li><a href="http://www.apache.org/security/">Security</a></li>
+					  </ul>
+					</div>
+				</li>
+				<li><a href="http://mesos.apache.org">Apache Mesos</a></li>
+				
+				
+					<li><a href="/documentation
+/">Documentation
+</a></li>
+				
+				
+			</ul><!-- /breadcrumb -->
+			</div>
+			
+			<!-- navbar excitement -->
+	    <div class="navbar navbar-static-top" role="navigation">
+	      <div class="navbar-inner">
+	        <div class="container">
+						<a href="/" class="logo"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo" /></a>
+					<div class="nav-collapse">
+						<ul class="nav nav-pills navbar-right">
+						  <li><a href="/gettingstarted/">Getting Started</a></li>
+						  <li><a href="/documentation/latest/">Documentation</a></li>
+						  <li><a href="/downloads/">Downloads</a></li>
+						  <li><a href="/community/">Community</a></li>
+						</ul>
+					</div>
+	        </div>
+	      </div>
+	    </div><!-- /.navbar -->
+
+      <div class="container">
+
+			<div class="row-fluid">
+	<div class="col-md-4">
+		<h4>If you're new to Mesos</h4>
+		<p>See the <a href="/gettingstarted/">getting started</a> page for more information about downloading, building, and deploying Mesos.</p>
+		
+		<h4>If you'd like to get involved or you're looking for support</h4>
+		<p>See our <a href="/community/">community</a> page for more details.</p>
+	</div>
+	<div class="col-md-8">
+		<h1>Mesos Documentation  Guide</h1>
+
+<p>Documentation is an integral part of every good feature. It describes the intended usage and enables new users to start using and understanding the feature.</p>
+
+<p>We have three different kinds of documentation:</p>
+
+<ol>
+<li><a href="/documentation/latest/mesos-markdown-style-guide/">MarkDown User Guides</a></li>
+</ol>
+
+
+<p>  User guides and non-code technical documentation are stored in markdown files in the <code>docs/</code> folder. These files get rendered for the <a href="http://mesos.apache.org/documentation/latest/">online documentation</a>.</p>
+
+<ol>
+<li><a href="/documentation/latest/mesos-doxygen-style-guide/">Doxygen API Documentation and Developer Guides as part of source code</a></li>
+</ol>
+
+
+<p>  Doxygen API documentation needs only to be applied to source code parts that
+  constitute an interface for which we want to generate Mesos API documentation
+  files. Implementation code that does not participate in this should still be
+  enhanced by source code comments as appropriate, but these comments should not follow the doxygen style.</p>
+
+<p>  Substantial libraries, components, and subcomponents of the Mesos system such as
+  stout, libprocess, master, slave, containerizer, allocator, and others
+  should have an overview page in markdown format that explains their
+  purpose, overall structure, and general use. This can even be a complete developer guide.</p>
+
+<ol>
+<li>Regular source code documentation</li>
+</ol>
+
+
+<p>  All other source code comments must follow the <a href="https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Comments">Google Style Guide</a>.</p>
+
+<h2>Conventions</h2>
+
+<p>We follow the <a href="https://www.ietf.org/rfc/rfc2119.txt">IETF RFC 2119</a>
+on how to use words such as &ldquo;must&rdquo;, &ldquo;should&rdquo;, &ldquo;can&rdquo;,
+and other requirement-related notions.</p>
+
+	</div>
+</div>
+
+			
+	      <hr>
+
+				<!-- footer -->
+	      <div class="footer">
+	        <p>&copy; 2012-2014 <a href="http://apache.org">The Apache Software Foundation</a>.
+	        Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.<p>
+	      </div><!-- /footer -->
+
+	    </div> <!-- /container -->
+
+	    <!-- JS -->
+	    <script src="//code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
+			<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js" type="text/javascript"></script>
+    </body>
+</html>
\ No newline at end of file