blob: b2b028f67f2af3a080cd6bcad6edbbfb4d0a5f0b [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Apache Mesos - Newbie Guide</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:locale" content="en_US"/>
<meta property="og:type" content="website"/>
<meta property="og:title" content="Apache Mesos"/>
<meta property="og:site_name" content="Apache Mesos"/>
<meta property="og:url" content="http://mesos.apache.org/"/>
<meta property="og:image" content="http://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
<meta property="og:description"
content="Apache Mesos abstracts resources away from machines,
enabling fault-tolerant and elastic distributed systems
to easily be built and run effectively."/>
<meta name="twitter:card" content="summary"/>
<meta name="twitter:site" content="@ApacheMesos"/>
<meta name="twitter:title" content="Apache Mesos"/>
<meta name="twitter:image" content="http://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
<meta name="twitter:description"
content="Apache Mesos abstracts resources away from machines,
enabling fault-tolerant and elastic distributed systems
to easily be built and run effectively."/>
<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">
<div class="container">
<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><!-- /.container -->
</div><!-- /.topnav -->
<!-- navbar excitement -->
<div class="navbar navbar-default navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#mesos-menu" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo"/></a>
</div><!-- /.navbar-header -->
<div class="navbar-collapse collapse" id="mesos-menu">
<ul class="nav navbar-nav navbar-right">
<li><a href="/gettingstarted/">Getting Started</a></li>
<li><a href="/blog/">Blog</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><!-- /#mesos-menu -->
</div><!-- /.container -->
</div><!-- /.navbar -->
<div class="content">
<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>Newbie Guide</h1>
<h2>Introduction</h2>
<p>The purpose of this document is to give an introduction and overall description of the contribution process for contributors new to Mesos. This document is intended to extend the existing documentation with a focus on on-boarding contributors to the community as quickly as possible.</p>
<h1>Contribution Process Overview</h1>
<p>Details of the contribution process can be obtained from the <a href="/documentation/latest/./submitting-a-patch/">submitting-a-patch</a> document of the Mesos distribution along with the Getting Started Guidance section of this document.</p>
<h2>Preparation and Build Environment Setup</h2>
<p>In order to complete the contribution process you will need to obtain account authorizations and install additional tooling to build the Mesos binaries. These pre-requisites are listed below:</p>
<ul>
<li>Required account authorizations
<ul>
<li>Apache Review Board Account</li>
<li>Apache JIRA Account
<br/><br/></li>
</ul>
</li>
<li>Required installations
<ul>
<li>Git</li>
<li>RBtools</li>
<li>GTest</li>
<li>GLog</li>
</ul>
</li>
</ul>
<h2>Download and Build Mesos</h2>
<p>In order to begin contributing you will need to download and build the latest stable release of the Mesos distribution. Documentation on the steps to complete this process is described in the Mesos document and link listed above.</p>
<h2>Make Modifications</h2>
<p>Make your intended modifications to the source code and then commit the changes to your local build repository. Changes to the source should also include test cases to exercise the modification. Details about this process are found in the Mesos document listed above and Getting Started section below.</p>
<h2>Submit Patch</h2>
<p>Once changes are completed and tested submit the patch for review. This process will take the modifications from review submission to committed changes in the Mesos distribution.</p>
<h1>Getting Started Guidance</h1>
<p>The following information will help provide additional guidance to execute the steps summarized in Contribution Process Overview described above as well as provide helpful hints when following the <a href="/documentation/latest/./submitting-a-patch/">submitting-a-patch</a> document of the Mesos distribution.</p>
<h2>Apache JIRA Account Pre-Requisite</h2>
<p>Detailed steps are provided in the Mesos documentation to obtain a JIRA account. Once you have obtained a JIRA account, ensure the additional step to request addition to the list of &ldquo;contributors&rdquo; is completed.</p>
<h2>Tooling Pre-Requisites</h2>
<p>There is a set of tooling listed below that is required to be installed for the contribution process. These tools will not be described in this document and it is assumed that the reader will seek alternative references to become familiar with each of these tools outside of this document.</p>
<ul>
<li><a href="https://git-scm.com/">Git Client</a></li>
<li><a href="https://www.reviewboard.org/docs/rbtools/dev/">RBTools</a></li>
<li><a href="https://github.com/google/googletest">GTest</a></li>
<li><a href="https://github.com/google/glog">GLog</a></li>
</ul>
<h2>Core Libraries</h2>
<p>There are two core libraries in Mesos: <em>stout</em> and <em>libprocess</em>. <em>stout</em> is the low level operating system abstraction tooling that should be used in place of writing your own low level tools. <em>libprocess</em> is a library used to support building compatible concurrent components (see <a href="https://www.youtube.com/watch?v=5EIiU6R_6KE">video</a> for an introduction to the <em>libprocess</em> library). New contributors to Mesos should become familiar with these libraries and utilize them where appropriate. Additional documentation can be found in the following two README files: 3rdparty/libprocess/README.md and 3rdparty/stout/README.md.</p>
<h2>Download and Build Mesos</h2>
<p>Detailed steps are provided in the <a href="/documentation/latest/./getting-started/">Mesos documentation</a> to download and build Mesos. When downloading the Mesos distribution there are 2 options to obtain the Mesos source code. For contributing, ensure that the Git option is used.</p>
<h2>JIRA</h2>
<p><a href="http://issues.apache.org/jira/browse/MESOS">JIRA</a> is the issue tracking system for all bug fixes and feature additions in Mesos. When contributing to Mesos, all assignments, discussions, and resolution proposals for a specific issue should be documented as comments within the JIRA item.</p>
<h2>Identifying a JIRA Issue</h2>
<p>To begin the contribution process, identify a Mesos JIRA issue that is currently unassigned. It is highly recommended to start contributing to beginner level issues and overtime move to advanced level issues. The JIRA issue-tracking system can be filtered based on labels. The following labels can be used to identify beginner level JIRA tickets:</p>
<ul>
<li>newbie</li>
<li>newbie++</li>
<li>beginner</li>
<li>beginners</li>
</ul>
<p>When identifying a JIRA issue to work on, it is recommended to work on items that are relevant to the next release. Selecting work items important for the next release increases the priority for reviewers during the contribution process. See the tracking ticket for the release to figure out the high priority projects or ask the release manager to guide you.</p>
<h2>Assign a JIRA Issue</h2>
<p>There are a couple options to assign a work item: 1) create a new JIRA issue to work on or 2) identify an existing JIRA issue item to work on as described above. Whichever option is chosen there are several steps that should be followed when assigning yourself a JIRA ticket.</p>
<p>It is important to identify a shepherd before you assign a ticket to yourself. Working with a shepherd will reveal its priority at the current time. To identify a shepherd look at the <a href="/documentation/latest/./committers/">maintainers</a> file to get an idea who to ask to shepherd your JIRA issue.</p>
<h2>JIRA Issue Solution Proposals</h2>
<p>Once you have an assigned JIRA issue and you have identified a shepherd, it is important to discuss your proposed solution within the JIRA ticket early in the resolution process in order to get feedback from reviewers. Early discussions will help:</p>
<ol>
<li><p>ensure the solution will be scoped in a consumable fashion;</p></li>
<li><p>eliminate duplicate work with other contributions; and</p></li>
<li><p>alert anyone interested in following the activity and progress of the ticket.</p></li>
</ol>
<p>Guidelines to consider when designing a solution can be found in the <a href="/documentation/latest/./effective-code-reviewing/">effective-code-reviewing</a> document.</p>
<h2>Making Changes</h2>
<p>After completing the solution review make the source code changes, build and successfully run relevant test cases. Guidelines for these processes can be found in the <a href="/documentation/latest/./submitting-a-patch/">submitting-a-patch</a> and <a href="/documentation/latest/./c++-style-guide/">mesos-c++style-guide</a>.</p>
<p>When creating and running test cases pay particular attention to race conditions. One recommendation is to run system tests multiple times. Below is a sample command to repeat the test 100 times.</p>
<pre><code>sudo GLOG_v=1 ./bin/mesos-tests.sh --verbose --gtest_filter="*DOCKER*" --break-on-error --gtest_shuffle --gtest_repeat=100
</code></pre>
<h2>Submit a Patch to the Review Board</h2>
<p>Submit your patch for review after you have come to an agreement with your shepherd on the proposed solution, made the modifications and successfully ran the test cases. Make sure your shepherd is added as a &ldquo;reviewer&rdquo; (among others) in the review. This will ensure that your reviews get processed.</p>
<p>When submitting a patch for review, include all testing done in the submission documentation. Follow the detailed steps found in the <a href="/documentation/latest/./submitting-a-patch/">submitting-a-patch</a> document to submit a patch for review.</p>
<h1>Advanced Level JIRA Items</h1>
<p>As you gain experience contributing to Mesos you may want to tackle more advanced level JIRA items. These items may touch multiple components within Mesos and/or may have a significant impact on the developer or user community. In these cases, a working group of stakeholders is formed to develop a design document. The initial formation of this working group will be part of the community communication resources, e.g. the re-occurring developer sync meetings, the developer email list, the IRC channel, etc. For reference, a contributor new to an advanced level work item can refer to the work done for the <a href="https://issues.apache.org/jira/browse/MESOS-1592">inverse offer</a> project.</p>
<hr />
<h1>FAQs</h1>
<p>Q: Where can I find documentation about Mesos?
A: Mesos documentation is located in the &lsquo;docs&rsquo; directory of the Mesos distribution. This documentation includes information about Mesos architecture and design, running Mesos, developing within the Mesos ecosystem and contributing to Mesos. Additionally, the latest documentation can be found here:
<a href="http://mesos.apache.org/documentation/latest/index.html">http://mesos.apache.org/documentation/latest/index.html</a></p>
<p>Q: What is a Shepherd?
A: An identified PMC/committer that works with a contributor to help shepherd a JIRA item to completion. Shepherds should be as identified at the beginning of the design/development phase.</p>
</div>
</div>
</div><!-- /.container -->
</div><!-- /.content -->
<hr>
<!-- footer -->
<div class="footer">
<div class="container">
<div class="col-md-4 social-blk">
<span class="social">
<a href="https://twitter.com/ApacheMesos"
class="twitter-follow-button"
data-show-count="false" data-size="large">Follow @ApacheMesos</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<a href="https://twitter.com/intent/tweet?button_hashtag=mesos"
class="twitter-hashtag-button"
data-size="large"
data-related="ApacheMesos">Tweet #mesos</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</span>
</div>
<div class="col-md-8 trademark">
<p>&copy; 2012-2017 <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>
</div><!-- /.container -->
</div><!-- /.footer -->
<!-- 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>