Release Notes - Mesos - Version 0.27.3
--------------------------------------
* This is a bug fix release.

All Issues:
** Bug
  * [MESOS-4705] - Linux 'perf' parsing logic may fail when OS distribution has perf backports.
  * [MESOS-4869] - /usr/libexec/mesos/mesos-health-check using/leaking a lot of memory.
  * [MESOS-5018] - FrameworkInfo Capability enum does not support upgrades.
  * [MESOS-5021] - Memory leak in subprocess when 'environment' argument is provided.
  * [MESOS-5449] - Memory leak in SchedulerProcess.declineOffer.


Release Notes - Mesos - Version 0.27.2
--------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-4693] - Variable shadowing in HookManager::slavePreLaunchDockerHook.
  * [MESOS-4711] - Race condition in libevent poll implementation causes crash.
  * [MESOS-4754] - The "executors" field is exposed under a backwards incompatible schema.

** Improvement
  * [MESOS-4687] - Implement reliable floating point for scalar resources.


Release Notes - Mesos - Version 0.27.1
--------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-4546] - Mesos Agents needs to re-resolve hosts in zk string on leader change / failure to connect.
  * [MESOS-4563] - Docker::Container::Create should handle NetworkSettings.IPAddress being an empty string.
  * [MESOS-4582] - state.json serving duplicate "active" fields.
  * [MESOS-4585] - mesos-fetcher LIBPROCESS_PORT set to 5051 URI fetch failure.
  * [MESOS-4587] - Docker environment variables must be able to contain the equal sign.
  * [MESOS-4597] - `freebsd.hpp` is missing from the release tarball.
  * [MESOS-4598] - Logrotate ContainerLogger should not remove IP from environment.
  * [MESOS-4637] - Docker process executor can die with agent unit on systemd.
  * [MESOS-4639] - Posix process executor can die with agent unit on systemd.
  * [MESOS-4640] - Logrotate container logger can die with agent unit on systemd.
  * [MESOS-4675] - Can not disable systemd support.

** Improvement
  * [MESOS-4566] - Avoid unnecessary temporary `std::string` constructions and copies in `jsonify`.
  * [MESOS-4636] - Add parent hook to subprocess.

** Task
  * [MESOS-4435] - Update `Master::Http::stateSummary` to use `jsonify`.
  * [MESOS-4531] - Document multi-disk support.


Release Notes - Mesos - Version 0.27.0
--------------------------------------------

** API Changes:
  * [MESOS-313]  - Report executor termination to framework schedulers.
  * [MESOS-2315] - Removed deprecated CommandInfo::ContainerInfo.
  * [MESOS-3988] - Implicit roles.
  * [MESOS-4154] - Rename shutdown_frameworks to teardown_frameworks.

** Bug
  * [MESOS-934] - 'Logging and Debugging' document is out-of-date.
  * [MESOS-1613] - HealthCheckTest.ConsecutiveFailures is flaky
  * [MESOS-2209] - Mesos should not use negative exit codes
  * [MESOS-2768] - SIGPIPE in process::run_in_event_loop()
  * [MESOS-3134] - Port bootstrap to CMake
  * [MESOS-3151] - ReservationTest.CompatibleCheckpointedResourcesWithPersistentVolumes is flaky
  * [MESOS-3235] - FetcherCacheHttpTest.HttpCachedSerialized and FetcherCacheHttpTest.HttpCachedConcurrent are flaky
  * [MESOS-3307] - Configurable size of completed task / framework history
  * [MESOS-3349] - Removing mount point fails with EBUSY in LinuxFilesystemIsolator.
  * [MESOS-3379] - LinuxFilesystemIsolatorTest.ROOT_VolumeFromHostSandboxMountPoint is failed
  * [MESOS-3472] - RegistryTokenTest.ExpiredToken test is flaky
  * [MESOS-3479] - COMMAND Health Checks are not executed if the timeout is exceeded
  * [MESOS-3551] - Replace use of strerror with thread-safe alternatives strerror_r / strerror_l.
  * [MESOS-3595] - Framework process hangs after master failover when number frameworks > libprocess thread pool size
  * [MESOS-3718] - Implement Quota support in allocator
  * [MESOS-3773] - RegistryClientTest.SimpleGetBlob is flaky
  * [MESOS-3799] - Compilation warning with Ubuntu wily: auto_ptr is deprecated
  * [MESOS-3809] - Expose advertise_ip and advertise_port as command line options in mesos slave
  * [MESOS-3817] - Rename offers to outstanding offers
  * [MESOS-3832] - Scheduler HTTP API does not redirect to leading master
  * [MESOS-3834] - slave upgrade framework checkpoint incompatibility
  * [MESOS-3851] - Investigate recent crashes in Command Executor
  * [MESOS-3859] - Add github support to apply-reviews.py.
  * [MESOS-3860] - Add support for `stout/process.hpp` on Windows.
  * [MESOS-3868] - Make apply-review.sh use apply-reviews.py
  * [MESOS-3909] - isolator module headers depend on picojson headers
  * [MESOS-3916] - MasterMaintenanceTest.InverseOffersFilters is flaky
  * [MESOS-3939] - ubsan error in net::IP::create(sockaddr const&): misaligned address
  * [MESOS-3963] - Move "using mesos::fetcher::FetcherInfo" into internal namespace in "fetcher.hpp"
  * [MESOS-3965] - Ensure resources in `QuotaInfo` protobuf do not contain `role`
  * [MESOS-4002] - ReservationEndpointsTest.UnreserveAvailableAndOfferedResources is flaky
  * [MESOS-4024] - HealthCheckTest.CheckCommandTimeout is flaky.
  * [MESOS-4031] - slave crashed in cgroupstatistics()
  * [MESOS-4047] - MemoryPressureMesosTest.CGROUPS_ROOT_SlaveRecovery is flaky
  * [MESOS-4067] - ReservationTest.ACLMultipleOperations is flaky
  * [MESOS-4069] - libevent_ssl_socket assertion fails
  * [MESOS-4072] - The lt-mesos-master will coredump in some situation.
  * [MESOS-4102] - Quota doesn't allocate resources on slave joining.
  * [MESOS-4107] - `os::strerror_r` breaks the Windows build
  * [MESOS-4108] - Implement `os::mkdtemp` for Windows
  * [MESOS-4109] - HTTPConnectionTest.ClosingResponse is flaky
  * [MESOS-4110] - Implement `WindowsError` to correspond with `ErrnoError`.
  * [MESOS-4154] - Rename shutdown_frameworks to teardown_frameworks
  * [MESOS-4177] - Create a user doc for Executor HTTP API
  * [MESOS-4184] - Jenkins builds for Centos fail with missing 'which' utility and incorrect 'java.home'
  * [MESOS-4192] - Add documentation for API Versioning
  * [MESOS-4193] - Port `process/file.hpp`
  * [MESOS-4202] - Race in SSL socket shutdown
  * [MESOS-4218] - Test for Quota Status Endpoint
  * [MESOS-4266] - S3 URIs prefixed with / by fetcher
  * [MESOS-4274] - libprocess build fail with libhttp-parser >= 2.0
  * [MESOS-4275] - Duration uses fixed-width types inconsistently
  * [MESOS-4281] - Correctly handle disk quota usage when volumes are bind mounted into the container.
  * [MESOS-4283] - Accept 3-field version of HDFS du output
  * [MESOS-4290] - Reject tasks with images with filesystem/posix isolator
  * [MESOS-4293] - Updated master help message for acls.
  * [MESOS-4294] - Protobuf parse should support parsing JSON object containing JSON Null.
  * [MESOS-4310] - Disable support for --switch-user on Windows.
  * [MESOS-4311] - Protobuf parse should pass error messages when parsing nested JSON.
  * [MESOS-4328] - Docker container REST API /monitor/statistics.json output have no timestamp field
  * [MESOS-4347] - GMock warning in ReservationTest.ACLMultipleOperations
  * [MESOS-4348] - GMock warning in HookTest.VerifySlaveRunTaskHook, HookTest.VerifySlaveTaskStatusDecorator
  * [MESOS-4349] - GMock warning in SlaveTest.ContainerUpdatedBeforeTaskReachesExecutor
  * [MESOS-4357] - GMock warning in RoleTest.ImplicitRoleStaticReservation
  * [MESOS-4375] - Allow schemes in HDFS URI fetcher plugin to be configurable.
  * [MESOS-4409] - MasterTest.MaxCompletedFrameworksFlag is flaky
  * [MESOS-4411] - Traverse all roles for quota allocation.
  * [MESOS-4417] - Prevent allocator from crashing on successful recovery.
  * [MESOS-4425] - Introduce filtering test abstractions for HTTP events to libprocess
  * [MESOS-4449] - SegFault on agent during executor startup
  * [MESOS-4507] - Replace busybox image with alpine in Docker tests
  * [MESOS-4515] - ContainerLoggerTest.LOGROTATE_RotateInSandbox breaks when running on Centos6.
  * [MESOS-4530] - NetClsIsolatorTest.ROOT_CGROUPS_NetClsIsolate is flaky
  * [MESOS-4533] - DiskUsageCollectorTest.ExcludeRelativePath fails on Linux
  * [MESOS-4534] - Resources object can be mutated through the public API
  * [MESOS-4535] - Logrotate ContainerLogger may not handle FD ownership correctly
  * [MESOS-4539] - Exclude paths in Posix disk isolator should be absolute paths.

** Documentation
  * [MESOS-3581] - License headers show up all over doxygen documentation.
  * [MESOS-3936] - Document possible task state transitions for framework authors
  * [MESOS-3996] - libprocess: document when, why defer() is necessary
  * [MESOS-4204] - Document that frameworks that participate in a role should cooperate
  * [MESOS-4206] - Write new logging-related documentation
  * [MESOS-4207] - Add an example bug due to a lack of defer() to the defer() documentation
  * [MESOS-4209] - Document "how to program with dynamic reservations and persistent volumes"
  * [MESOS-4314] - Publish Quota Documentation
  * [MESOS-4396] - Adding Tachyon to the list of frameworks

** Improvement
  * [MESOS-313] - Report executor terminations to framework schedulers.
  * [MESOS-920] - Set GLOG_drop_log_memory=false in environment prior to logging initialization.
  * [MESOS-2275] - Document header include rules in style guide
  * [MESOS-2353] - Improve performance of the state.json endpoint for large clusters.
  * [MESOS-3074] - Add capacity heuristic for quota requests in Master
  * [MESOS-3232] - Implement HTTP Basic Authentication for Mesos endpoints
  * [MESOS-3493] - benchmark for declining offers
  * [MESOS-3720] - Tests for Quota support in master
  * [MESOS-3827] - Improve compilation speed of GMock tests
  * [MESOS-3960] - Standardize quota endpoints
  * [MESOS-3979] - Replace `QuotaInfo` with `Quota` in allocator interface
  * [MESOS-4020] - Introduce filter for non-revocable resources in `Resources`
  * [MESOS-4021] - Remove quota from Registry for quota remove request
  * [MESOS-4056] - Respond with `MethodNotAllowed` if a request uses an unsupported method.
  * [MESOS-4058] - Do not use `Resource.role` for resources in quota request.
  * [MESOS-4085] - Implement implicit roles
  * [MESOS-4103] - Show disk usage and allocation in WebUI
  * [MESOS-4128] - Refactor sorter factories in allocator and improve comments around them.
  * [MESOS-4136] - Add a ContainerLogger module that restrains log sizes
  * [MESOS-4183] - Move operator<< definitions to .cpp files and include <iosfwd> in .hpp where possible.
  * [MESOS-4195] - Add dynamic reservation tests with no principal
  * [MESOS-4231] - Add a new category to cpplint to detect missing white-space in comments
  * [MESOS-4241] - Consolidate docker store slave flags
  * [MESOS-4262] - Enable net_cls subsytem in cgroup infrastructure
  * [MESOS-4277] - Provide constexpr Duration::min() and max()
  * [MESOS-4302] - Offer filter timeouts are ignored if the allocator is slow or backlogged.
  * [MESOS-4337] - Implement a simple Windows version of dirent.hpp, for compatibility.
  * [MESOS-4351] - Remove logic around checkpointing in the slave
  * [MESOS-4410] - Introduce protobuf for quota set request.
  * [MESOS-4505] - Hierarchical allocator performance is slow due to Quota
  * [MESOS-4578] - docker run -c is deprecated

** Task
  * [MESOS-2079] - IO.Write test is flaky on OS X 10.10.
  * [MESOS-2210] - Disallow special characters in role.
  * [MESOS-2296] - Implement the Events stream on slave for Call endpoint
  * [MESOS-2315] - Deprecate / Remove CommandInfo::ContainerInfo
  * [MESOS-2455] - Add operator endpoints to create/destroy persistent volumes.
  * [MESOS-3515] - Support Subscribe Call for HTTP based Executors
  * [MESOS-3550] - Create a Executor Library based on the new Executor HTTP API
  * [MESOS-3615] - Port slave/state.cpp
  * [MESOS-3627] - Port process/pid.hpp to Windows
  * [MESOS-3628] - Port process/address.hpp to Windows
  * [MESOS-3629] - Port stout/ip.hpp to Windows
  * [MESOS-3630] - Port stout/net.hpp to Windows
  * [MESOS-3631] - Implement stout/windows/net.hpp
  * [MESOS-3633] - Port stout/path.hpp to Windows
  * [MESOS-3640] - Implement stout/os/windows/ls.hpp
  * [MESOS-3645] - Implement stout/os/windows/stat.hpp
  * [MESOS-3658] - Port stout/protobuf.hpp to Windows
  * [MESOS-3659] - Port slave/paths.hpp to Windows
  * [MESOS-3660] - Port slave/state.hpp to Windows
  * [MESOS-3693] - Port stout/os/open.hpp to Windows
  * [MESOS-3861] - Authenticate quota requests
  * [MESOS-3862] - Authorize set quota requests.
  * [MESOS-3864] - Simplify and/or document the libprocess initialization synchronization logic
  * [MESOS-3882] - Libprocess: Implement process::Clock::finalize
  * [MESOS-3911] - Add a `--force` flag to disable sanity check in quota
  * [MESOS-3912] - Rescind offers in order to satisfy quota
  * [MESOS-3925] - Add HDFS based URI fetcher plugin.
  * [MESOS-3951] - Make HDFS tool wrappers asynchronous.
  * [MESOS-3981] - Implement recovery in the Hierarchical allocator
  * [MESOS-3983] - Tests for quota request validation
  * [MESOS-3984] - Tests for quota support in `allocate()` function.
  * [MESOS-3985] - Tests for rescinding offers for quota
  * [MESOS-4013] - Introduce status endpoint for quota
  * [MESOS-4014] - Introduce remove endpoint for quota
  * [MESOS-4064] - Add ContainerInfo to internal Task protobuf.
  * [MESOS-4081] - Authorize quota removal
  * [MESOS-4087] - Introduce a module for logging executor/task output
  * [MESOS-4088] - Modularize existing plain-file logging for executor/task logs launched with the Mesos Containerizer
  * [MESOS-4116] - Add tests for quotas + empty roles (no registered frameworks)
  * [MESOS-4137] - Modularize plain-file logging for executor/task logs launched with the Docker Containerizer
  * [MESOS-4150] - Implement container logger module metadata recovery
  * [MESOS-4220] - Introduce result_of with C++14 semantics to stout.
  * [MESOS-4221] - Invoke _Deferred's implicit conversion operator explicitly.
  * [MESOS-4228] - Use std::is_bind_expression to reroute the result of std::bind.
  * [MESOS-4236] - Create a design document for jsonify
  * [MESOS-4237] - Introduce `jsonify` to stout.
  * [MESOS-4238] - Update `Master::Http::state` to use the `jsonify` facility.
  * [MESOS-4239] - Update relevant libprocess components to support the `jsonify` facility.
  * [MESOS-4240] - Pull provisioner from linux filesystem isolator to Mesos containerizer.
  * [MESOS-4378] - Add Source to Resource.DiskInfo.
  * [MESOS-4380] - Adjust Resource arithmetics for DiskInfo.Source.
  * [MESOS-4400] - Create persistent volume directories based on DiskInfo.Source.
  * [MESOS-4402] - Update filesystem isolators to look for persistent volume directories from the correct location.
  * [MESOS-4403] - Check paths in DiskInfo.Source.Path exist during slave initialization.
  * [MESOS-4415] - Implement stout/os/windows/rmdir.hpp
  * [MESOS-4506] - Posix disk isolator should ignore disk quota enforcement for MOUNT type disk resources.
  * [MESOS-4526] - Include the allocated portion of reserved resources in the role sorter for DRF.
  * [MESOS-4527] - Include allocated portion of the reserved resources in the quota role sorter for DRF.
  * [MESOS-4528] - Account for reserved resources in the quota guarantee check.
  * [MESOS-4529] - Update the allocator to not offer unreserved resources beyond quota.

**  Wish
  * [MESOS-3962] - Add labels to the message Port


Release Notes - Mesos - Version 0.26.0
--------------------------------------

** API Changes:
  * [MESOS-3560] - Fix JSON-based credential files by changing protobuf `Credential` field `secret` from bytes to string.
  * [MESOS-3824] - Add /frameworks endpoint to master.

** Bug
  * [MESOS-1867] - Precision errors in UI.
  * [MESOS-2864] - Master should not change the state of a terminal task if it receives another terminal update.
  * [MESOS-3030] - Build failure on OS 10.11 using Xcode 7.
  * [MESOS-3280] - Master fails to access replicated log after network partition.
  * [MESOS-3293] - Failing ROOT_ tests on CentOS 7.1 - LimitedCpuIsolatorTest.
  * [MESOS-3326] - Make use of C++11 atomics.
  * [MESOS-3329] - Unused hashmap::existsValue functions have incomplete code paths.
  * [MESOS-3411] - ReservationEndpointsTest.AvailableResources appears to be faulty.
  * [MESOS-3428] - Support running filesystem isolation with Command Executor in MesosContainerizer.
  * [MESOS-3470] - UserCgroupIsolatorTest failed on CentOS 6.6.
  * [MESOS-3501] - Configure cannot find libevent headers in CentOS 6.
  * [MESOS-3506] - Build instructions for CentOS 6.6 should include `sudo yum update`.
  * [MESOS-3517] - Building mesos from source fails when OS language is not English.
  * [MESOS-3519] - Fix file descriptor leakage / double close in the code base.
  * [MESOS-3522] - MesosScheduler declineOffer results in an acceptOffer.
  * [MESOS-3552] - CHECK failure due to floating point precision on reservation request.
  * [MESOS-3553] - LIBPROCESS_IP not passed when executor's environment is specified.
  * [MESOS-3560] - JSON-based credential files do not work correctly.
  * [MESOS-3563] - Revocable task CPU shows as zero in /state.json.
  * [MESOS-3569] - Typos in Mesos Monitoring doc page.
  * [MESOS-3584] - Rename libprocess tests to "libprocess-tests".
  * [MESOS-3591] - mesos-slave: --help output for "--master" is incomplete.
  * [MESOS-3594] - Rename http_api_tests.cpp to scheduler_http_api_tests.cpp.
  * [MESOS-3597] - Running tests with CMake are annoying and have a bad reporting story.
  * [MESOS-3600] - Unable to build with non-default protobuf.
  * [MESOS-3602] - hdfs du fails due to prepended / on path.
  * [MESOS-3603] - Test build failure due to comparison between signed and unsigned integers.
  * [MESOS-3604] - ExamplesTest.PersistentVolumeFramework does not work in OS X El Capitan.
  * [MESOS-3605] - hdfs.du() fails on os x due to lack of native-hadoop library.
  * [MESOS-3694] - Enable building mesos.apache.org locally in a Docker container.
  * [MESOS-3698] - JSON parsing allows non-whitespace trailing characters.
  * [MESOS-3700] - Deprecate resource_monitoring_interval flag.
  * [MESOS-3708] - Improve process::subprocess ABORT message.
  * [MESOS-3715] - Enable Request resource using Call::REQUEST in scheduler driver.
  * [MESOS-3716] - Update Allocator interface to support quota.
  * [MESOS-3728] - Libprocess: Flaky behavior on test suite when finalizing.
  * [MESOS-3733] - ContentType/SchedulerTest.Suppress/0 is flaky.
  * [MESOS-3734] - Incorrect sed syntax for Mac OSX.
  * [MESOS-3738] - Mesos health check is invoked incorrectly when Mesos slave is within the docker container.
  * [MESOS-3743] - Provide diagnostic output in agent log when fetching fails.
  * [MESOS-3748] - HTTP scheduler library does not gracefully parse invalid resource identifiers.
  * [MESOS-3751] - MESOS_NATIVE_JAVA_LIBRARY not set on MesosContainerize tasks with --executor_environmnent_variables.
  * [MESOS-3769] - Agent logs are misleading during agent shutdown.
  * [MESOS-3770] - SlaveRecoveryTest/0.RecoverCompletedExecutor is flaky.
  * [MESOS-3771] - Mesos JSON API creates invalid JSON due to lack of binary data / non-ASCII handling.
  * [MESOS-3773] - RegistryClientTest.SimpleGetBlob is flaky.
  * [MESOS-3793] - Cannot start mesos local on a Debian GNU/Linux 8 docker machine.
  * [MESOS-3800] - Containerizer attempts to create Linux launcher by default.
  * [MESOS-3806] - 'mount --make-rslave /' does not work as expected on ubuntu 14.04.
  * [MESOS-3810] - Must be able to use NetworkInfo with mesos-executor.
  * [MESOS-3822] - Cannot specify multiple masters when slave start up.
  * [MESOS-3834] - Slave upgrade framework checkpoint incompatibility.
  * [MESOS-3837] - Rootfs in provisioner test doesn't handle symlink directories properly.
  * [MESOS-3840] - Build broken: 'adding 'bool' to a string does not append to the string' in filesystem tests.
  * [MESOS-3847] - Root tests for LinuxFilesystemIsolatorTest are broken.
  * [MESOS-3849] - Corrected style in Makefiles.
  * [MESOS-3937] - Test DockerContainerizerTest.ROOT_DOCKER_Launch_Executor fails.
  * [MESOS-3953] - DockerTest.ROOT_DOCKER_CheckPortResource fails.
  * [MESOS-3964] - LimitedCpuIsolatorTest.ROOT_CGROUPS_Cfs and LimitedCpuIsolatorTest.ROOT_CGROUPS_Cfs_Big_Quota fail on Debian 8.
  * [MESOS-3966] - LinuxFilesystemIsolatorTest.ROOT_ImageInVolumeWithRootFilesystem fails on Centos 7.1.
  * [MESOS-3969] - Failing 'make distcheck' on Debian 8, somehow SSL-related.
  * [MESOS-3974] - CgroupsAnyHierarchyMemoryPressureTest tests fail on CentOS 6.7.
  * [MESOS-3975] - SSL build of mesos causes flaky testsuite.
  * [MESOS-3989] - Add missing DiscoveryInfo field to v1/mesos.proto.
  * [MESOS-4106] - The health checker may fail to inform the executor to kill an unhealthy task after max_consecutive_failures.

** Documentation
  * [MESOS-2783] - Document the fetcher.
  * [MESOS-3692] - Clarify error message 'could not chown work directory'.
  * [MESOS-3749] - Configuration docs are missing --enable-libevent and --enable-ssl.
  * [MESOS-3752] - CentOS 6 dependency install fails at Maven.
  * [MESOS-3905] - Five new docker-related slave flags are not covered by the configuration documentation.

** Improvement
  * [MESOS-1841] - Mesos components should expose their version on an endpoint.
  * [MESOS-2035] - Add reason to containerizer proto Termination.
  * [MESOS-2273] - Add "tests" target to Makefile for building-but-not-running tests.
  * [MESOS-2467] - Allow --resources flag to take JSON.
  * [MESOS-2613] - Change docker rm command.
  * [MESOS-2924] - Allow simple construction via initializer list on hashset.
  * [MESOS-2960] - Configure DiscoveryInfo and Visibility per port.
  * [MESOS-2972] - Serialize Docker image spec as protobuf.
  * [MESOS-3099] - Validation of Docker Image Manifests from Docker Registry.
  * [MESOS-3366] - Allow resources/attributes discovery.
  * [MESOS-3417] - Log source address replicated log received broadcasts.
  * [MESOS-3429] - Allow HTTP response codes in libprocess to be matched.
  * [MESOS-3468] - Improve apply_reviews.sh script to apply chain of reviews.
  * [MESOS-3554] - Allocator changes trigger large re-compiles.
  * [MESOS-3566] - Add a section to the Scheduler HTTP API docs around RecordIO specification.
  * [MESOS-3721] - We need the active flag on frameworks in the /state-summary endpoint.
  * [MESOS-3735] - Mesos master should expose the version of registered agents.
  * [MESOS-3759] - Document messages.proto.
  * [MESOS-3788] - Clarify NetworkInfo semantics for IP addresses and group policies.
  * [MESOS-3819] - Add documentation explaining "roles".
  * [MESOS-4015] - Expose task / executor health in master & slave state.json.

** Task
  * [MESOS-1832] - Slave should accept PingSlaveMessage but not "PING" message.
  * [MESOS-2224] - Add explanatory comments for Allocator interface.
  * [MESOS-2295] - Implement the Call endpoint on Slave.
  * [MESOS-2906] - Slave : Synchronous Validation for Calls.
  * [MESOS-3104] - Add an endpoint that exposes component flags.
  * [MESOS-3129] - Move all MesosContainerizer related files under src/slave/containerizer/mesos.
  * [MESOS-3332] - Support HTTP Pipelining in libprocess (http::post).
  * [MESOS-3405] - Add JSON::protobuf for google::protobuf::RepeatedPtrField.
  * [MESOS-3407] - Mesos fetcher automatically extract gz files.
  * [MESOS-3480] - Refactor Executor struct in Slave to handle HTTP based executors.
  * [MESOS-3762] - Refactor SSLTest fixture such that MesosTest can use the same helpers.
  * [MESOS-3824] - Add /frameworks endpoint to master.
  * [MESOS-3845] - Send TaskStatus::container_status inside reconciliation updates.
  * [MESOS-3900] - Enable mesos-reviewbot project on jenkins to use docker.

Release Notes - Mesos - Version 0.25.0
--------------------------------------
This release contains:
 * [MESOS-1474] - Experimental support for maintenance primitives. Please refer
                  to maintenance.md for more information.
 * [MESOS-2600] - Added master endpoints /reserve and /unreserve for dynamic
                  reservations. Please refer to reservation.md for more
                  information.
 * [MESOS-2044] - Extended Module APIs to enable IP per container assignment,
                  isolation and resolution.

** API Changes
  * [MESOS-3037] - Add a SUPPRESS call to the scheduler.

** Bug
  * [MESOS-2635] - Web UI Display Bug when starting lots of tasks with small cpu value.
  * [MESOS-2986] - Docker version output is not compatible with Mesos.
  * [MESOS-3046] - Stout's UUID re-seeds a new random generator during each call to UUID::random.
  * [MESOS-3051] - performance issues with port ranges comparison.
  * [MESOS-3052] - Allocator performance issue when using a large number of filters.
  * [MESOS-3136] - COMMAND health checks with Marathon 0.10.0 are broken.
  * [MESOS-3169] - FrameworkInfo should only be updated if the re-registration is valid.
  * [MESOS-3185] - Refactor Subprocess logic in linux/perf.cpp to use common subroutine.
  * [MESOS-3239] - Refactor master HTTP endpoints help messages such that they cannot be out of sync.
  * [MESOS-3245] - The comments of DRFSorter::dirty is not correct.
  * [MESOS-3254] - Cgroup CHECK fails test harness.
  * [MESOS-3258] - Remove Frameworkinfo capabilities on re-registration.
  * [MESOS-3261] - Move QoS plug-ins to a specified folder like resource_estimator.
  * [MESOS-3269] - The comments of Master::updateSlave() is not correct.
  * [MESOS-3282] - Web UI no longer shows Tasks information.
  * [MESOS-3344] - Add more comments for strings::internal::fmt.
  * [MESOS-3351] - duplicated slave id in master after master failover.
  * [MESOS-3387] - Refactor MesosContainerizer to accept namespace dynamically.
  * [MESOS-3408] - Labels field of FrameworkInfo should be added into v1 mesos.proto.
  * [MESOS-3411] - ReservationEndpointsTest.AvailableResources appears to be faulty.
  * [MESOS-3423] - Perf event isolator stops performing sampling if a single timeout occurs.
  * [MESOS-3426] - process::collect and process::await do not perform discard propagation.
  * [MESOS-3430] - LinuxFilesystemIsolatorTest.ROOT_PersistentVolumeWithoutRootFilesystem fails on CentOS 7.1.
  * [MESOS-3450] - Update Mesos C++ Style Guide for namespace usage.
  * [MESOS-3451] - Failing tests after changes to Isolator/MesosContainerizer API.
  * [MESOS-3458] - Segfault when accepting or declining inverse offers.
  * [MESOS-3474] - ExamplesTest.{TestFramework, JavaFramework, PythonFramework} failed on CentOS 6.
  * [MESOS-3489] - Add support for exposing Accept/Decline responses for inverse offers.
  * [MESOS-3490] - Mesos UI fails to represent JSON entities.
  * [MESOS-3512] - Don't retry close() on EINTR.
  * [MESOS-3513] - Cgroups Test Filters aborts tests on Centos 6.6.
  * [MESOS-3519] - Fix file descriptor leakage / double close in the code base.
  * [MESOS-3538] - CgroupsNoHierarchyTest.ROOT_CGROUPS_NOHIERARCHY_MountUnmountHierarchy test is flaky.
  * [MESOS-3575] - V1 API java/python protos are not generated.

** Documentation
  * [MESOS-2083] - Add documentation for maintenance primitives.
  * [MESOS-2466] - Write documentation for all the LIBPROCESS_* environment variables.
  * [MESOS-3230] - Create a HTTP based Authentication design doc.
  * [MESOS-3492] - Expose maintenance user doc via the documentation home page.
  * [MESOS-3508] - Update docs for Agent's --launcher flag.
  * [MESOS-3516] - Add user doc for networking support in Mesos 0.25.0.

** Improvement
  * [MESOS-2719] - Deprecating '.json' extension in master endpoints urls.
  * [MESOS-2757] - Add -> operator for Option<T>, Try<T>, Result<T>, Future<T>.
  * [MESOS-2875] - Add containerId to ResourceUsage to enable QoS controller to target a container.
  * [MESOS-2964] - libprocess io does not support peek().
  * [MESOS-2983] - Deprecating '.json' extension in slave endpoints url.
  * [MESOS-2984] - Deprecating '.json' extension in files endpoints url.
  * [MESOS-3037] - Add a SUPPRESS call to the scheduler.
  * [MESOS-3187] - Docker cli option support.
  * [MESOS-3304] - Remove remnants of LIBPROCESS_STATISTICS_WINDOW.
  * [MESOS-3312] - Factor out JSON to repeated protobuf conversion.
  * [MESOS-3340] - Command-line flags should take precedence over OS Env variables.
  * [MESOS-3347] - Remove dead code in src/linux/perf.cpp.
  * [MESOS-3377] - mesos docker container with container_name as ENV variable.
  * [MESOS-3457] - Add flag to disable hostname lookup.

** Task
  * [MESOS-1831] - Master should send PingSlaveMessage instead of "PING".
  * [MESOS-1935] - Replace hard-coded reap interval with a constant.
  * [MESOS-2061] - Add InverseOffer protobuf message.
  * [MESOS-2062] - Add InverseOffer to Event/Call API.
  * [MESOS-2066] - Add optional 'Unavailability' to resource offers to provide maintenance awareness.
  * [MESOS-2067] - Add HTTP API to the master for maintenance operations.
  * [MESOS-2600] - Add /reserve and /unreserve endpoints on the master for dynamic reservation.
  * [MESOS-2907] - Agent : Create Basic Functionality to handle /call endpoint.
  * [MESOS-3015] - Add hooks for Slave exits.
  * [MESOS-3038] - Resource offers do not contain Unavailability, given a maintenance schedule.
  * [MESOS-3042] - Master/Allocator does not send InverseOffers to resources to be maintained.
  * [MESOS-3043] - Master does not handle InverseOffers in the Accept call (Event/Call API).
  * [MESOS-3045] - Maintenance information is not populated in case of failover.
  * [MESOS-3066] - Replicated registry needs a representation of maintenance schedules.
  * [MESOS-3069] - Registry operations do not exist for manipulating maintanence schedules.
  * [MESOS-3217] - Replace boost unordered_{set,map} and hash with std versions.
  * [MESOS-3223] - Implement token manager for docker registry.
  * [MESOS-3265] - Starting maintenance needs to deactivate agents and kill tasks.
  * [MESOS-3266] - Stopping/Completing maintenance needs to reactivate agents.
  * [MESOS-3299] - Add a protobuf to represent time with integer precision.
  * [MESOS-3310] - Support provisioning images specified in volumes.
  * [MESOS-3345] - Expand the range of integer precision when converting into/out of json.
  * [MESOS-3346] - Add filter support for inverse offers.
  * [MESOS-3375] - Add executor protobuf to v1.
  * [MESOS-3395] - In CMake build system, download third party dependencies from a "trusted channel" instead of from Mesos GitHub mirror.
  * [MESOS-3419] - Add HELP message for reserve/unreserve endpoint.
  * [MESOS-3425] - Modify LinuxLauncher to support Systemd.
  * [MESOS-3459] - Change /machine/up and /machine/down endpoints to take an array.
  * [MESOS-3510] - Synchronize V1 helper functions with pre-v1.

* Work In Progress:
  * Functionality for endpoint 'api/v1/executor' introduced on 'Agent' is incomplete.


Release Notes - Mesos - Version 0.24.1
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-2986] - Docker version output is not compatible with Mesos
    * [MESOS-3136] - COMMAND health checks with Marathon 0.10.0 are broken


Release Notes - Mesos - Version 0.24.0
--------------------------------------
This release contains experimental v1 scheduler HTTP API. This allows framework schedulers
to send HTTP requests to master endpoint ('/api/v1/scheduler') without the need for a driver.

The release also includes these features:
    * [MESOS-336] - Mesos slave should cache executors

* API Changes:
  * [MESOS-2293] - Implement the scheduler endpoint on master
  * [MESOS-3135] - Publish MasterInfo to ZK using JSON

* Binary API Changes (e.g., new flags)
    * [MESOS-3154] - Enable Mesos Agent Node to use arbitrary script / module to figure out IP, HOSTNAME
    * [MESOS-809] - External control of the ip that Mesos components publish to zookeeper

* Deprecations:
  * [MESOS-2736]  - MasterInfo `ip`, `port` and `hostname` are deprecated in
                    favor of using the `address` field (see `Address` protobuf)

* Work In Progress:
  * Support for 'Image' field added to 'Volume' and 'ContainerInfo' protobufs is incomplete.


This release also includes several bug fixes and stability improvements.

** Bug
    * [MESOS-2166] -  PerfEventIsolatorTest.ROOT_CGROUPS_Sample requires 'perf' to be installed
    * [MESOS-2337] - __init__.py not getting installed in $PREFIX/lib/pythonX.Y/site-packages/mesos
    * [MESOS-2480] - Protobuf jar is required for unbundled protobuf regardless of --disable-java flag.
    * [MESOS-2493] - google glog link is incorrect
    * [MESOS-2497] - Create synchronous validations for Calls
    * [MESOS-2552] - C++ Scheduler library should send HTTP Calls to master
    * [MESOS-2559] - Do not use RunTaskMessage.framework_id.
    * [MESOS-2660] - ROOT_CGROUPS_Listen and ROOT_IncreaseRSS tests are flaky
    * [MESOS-2862] - mesos-fetcher won't fetch uris which begin with a " "
    * [MESOS-2868] - --attributes flag in slave cannot take a value with ':'
    * [MESOS-2882] - Duplicate name-value env-vars in '-e' option of docker run
    * [MESOS-2900] - Display capabilities in state.json
    * [MESOS-2989] - Changing to "framework" from "framwork"
    * [MESOS-3001] - Create a "demo" HTTP API client
    * [MESOS-3002] - Rename Option<T>::get(const T& _t) to getOrElse() broke network isolator
    * [MESOS-3027] - Compiler warning in stout subcommand tests
    * [MESOS-3058] - Cgroup tests relies on cgroups::get() returning in a specific order
    * [MESOS-3079] - `sudo make distcheck` fails on Ubuntu 14.04 (and possibly other OSes too)
    * [MESOS-3121] - Always disable SSLV2
    * [MESOS-3124] - Updating persistent volumes after slave restart is problematic.
    * [MESOS-3138] - PersistentVolumeTest.SlaveRecovery test fails on OSX
    * [MESOS-3141] - Compiler warning when mocking function type has an enum return type.
    * [MESOS-3143] - Disable endpoints rule fails to recognize HTTP path delegates
    * [MESOS-3148] - Resolve issue with hanging tests with Zookeeper
    * [MESOS-3168] - MesosZooKeeperTest fixture can have side effects across tests
    * [MESOS-3170] - 0.23 Build fails when compiling against -lsasl2 which has been statically linked
    * [MESOS-3175] - subprocess_tests.cpp:598 delete used but allocated with new[]
    * [MESOS-3178] - Perform a self bind mount of rootfs itself in fs::chroot::enter.
    * [MESOS-3192] - ContainerInfo::Image::AppC::id should be optional
    * [MESOS-3195] - Fix master metrics for scheduler calls
    * [MESOS-3197] - MemIsolatorTest/{0,1}.MemUsage fails on OS X
    * [MESOS-3201] - Libev handle_async can deadlock with run_in_event_loop
    * [MESOS-3203] - MasterAuthorizationTest.DuplicateRegistration test is flaky
    * [MESOS-3204] - PortMappingIsolatorProcess shell script can silently fail
    * [MESOS-3207] - C++ style guide is not rendered correctly (code section syntax disregarded)
    * [MESOS-3209] - parameterize allocator benchmark by framework count
    * [MESOS-3234] - enable automake maintainer mode
    * [MESOS-3237] - HTTP requests with nested path are not properly handled by libprocess
    * [MESOS-3238] - Master endpoint help message is incorrect
    * [MESOS-3260] - SchedulerTest.* are broken on OSX and CentOS
    * [MESOS-3262] - HTTPTest.NestedGet is flaky
    * [MESOS-3263] - SchedulerTask.KillTest fails for JSON Requests
    * [MESOS-3267] - JSON serialization/deserialization of bytes is incorrect
    * [MESOS-3274] - Build error with port mapping isolator
    * [MESOS-3275] - ContentType/HttpApiTest.UpdatePidToHttpSchedulerWithoutForce is flaky
    * [MESOS-3284] - JSON representation of Protobuf should use base64 encoding for 'bytes' fields.
    * [MESOS-3287] - downloadWithHadoop tries to access Error() for a valid Try<bool>
    * [MESOS-3290] - Master should drop HTTP calls when it's recovering

** Documentation
    * [MESOS-1838] - Add documentation for Authentication
    * [MESOS-2555] - Document issue with slave recovery when using systemd.
    * [MESOS-3087] - Typos in oversubscription doc
    * [MESOS-3167] - Design doc for versioning the HTTP API
    * [MESOS-3278] -  Add the revocable metrics information in monitoring doc
    * [MESOS-3281] - Create a user doc for Scheduler HTTP API
    * [MESOS-3286] - Revocable metrics information are missed for slave node

** Improvement
    * [MESOS-2350] - Add support for MesosContainerizerLaunch to chroot to a specified path
    * [MESOS-2794] - Implement filesystem isolators
    * [MESOS-2795] - Introduce filesystem provisioner abstraction
    * [MESOS-2798] - Export statistics on "unevictable" memory
    * [MESOS-2800] - Rename Option<T>::get(const T& _t) to getOrElse() and refactor the original function
    * [MESOS-2841] - FrameworkInfo should include a Labels field to support arbitrary, lightweight metadata
    * [MESOS-2880] - Add Frameworkinfo.capabilities on framework re-registration
    * [MESOS-2902] - Enable Mesos to use arbitrary script / module to figure out IP, HOSTNAME
    * [MESOS-2924] - Allow simple construction via initializer list on hashset.
    * [MESOS-2946] - Authorizer Module: Interface design
    * [MESOS-2947] - Authorizer Module: Implementation, Integration & Tests
    * [MESOS-2951] - Inefficient container usage collection
    * [MESOS-2965] - Add implicit cast to string operator to Path.
    * [MESOS-2967] - Missing doxygen documentation for libprocess socket interface
    * [MESOS-3020] - Expose major, minor and patch components from stout Version
    * [MESOS-3054] - update gitignore
    * [MESOS-3093] - Support HTTPS requests in libprocess
    * [MESOS-3112] - Fetcher should perform cache eviction based on cache file usage patterns.
    * [MESOS-3118] - Remove pthread specific code from Stout
    * [MESOS-3119] - Remove pthread specific code from Libprocess
    * [MESOS-3120] - Remove pthread specific code from Mesos
    * [MESOS-3127] - Improve task reconciliation documentation.
    * [MESOS-3173] - Mark Path::basename, Path::dirname as const functions.
    * [MESOS-3182] - Make Master::registerFramework() and Master::reregisterFramework() call into Master::subscribe()

** Story
    * [MESOS-2860] - Create the basic infrastructure to handle /scheduler endpoint
    * [MESOS-3142] - As a Developer I want a better way to run shell commands
    * [MESOS-3211] - As a Python developer I want a simple way to obtain information about Master from ZooKeeper
    * [MESOS-3212] - As a Java developer I want a simple way to obtain information about Master from ZooKeeper

** Task
    * [MESOS-2294] - Implement the Events stream on master for Call endpoint
    * [MESOS-2640] - Remove old frameworks and ec2 scripts from core Mesos repository
    * [MESOS-2910] - Add an Event message handler to scheduler driver
    * [MESOS-2913] - Scheduler driver should send Call messages to the master
    * [MESOS-2933] - Pass slave's total resources to the ResourceEstimator and QoSController via Slave::usage().
    * [MESOS-2961] - Add cpuacct subsystem utils to cgroups
    * [MESOS-3012] - Support existing message passing optimization with Event/Call.
    * [MESOS-3067] - Implement a streaming response decoder for events stream
    * [MESOS-3088] - Update scheduler driver to send SUBSCRIBE call
    * [MESOS-3089] - Update scheduler library to send REQUEST call
    * [MESOS-3101] - Standardize separation of Windows/Linux-specific OS code
    * [MESOS-3102] - Separate OS-specific code in the stout library
    * [MESOS-3130] - Custom isolators should implement Isolator instead of IsolatorProcess.
    * [MESOS-3131] - Master should send heartbeats on the subscription connection
    * [MESOS-3132] - Allow slave to forward messages through the master for HTTP schedulers.
    * [MESOS-3145] - Using a unresolvable hostname crashes the framework on registration
    * [MESOS-3149] - Use setuptools to install python cli package
    * [MESOS-3162] - Provide a means to check http connection equality for streaming connections.
    * [MESOS-3179] - Create a test abstraction for preparing test rootfs.
    * [MESOS-3194] - Implement a 'read-only' AppC Image Store

** Wish
    * [MESOS-3276] - Add Scrapinghub to the Powered By Mesos page


Release Notes - Mesos - Version 0.23.1
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-2986] - Docker version output is not compatible with Mesos
    * [MESOS-3136] - COMMAND health checks with Marathon 0.10.0 are broken


Release Notes - Mesos - Version 0.23.0
--------------------------------------
This release contains new features:

* [MESOS-1585] - Per-container network isolation: bandwidth capping and unique
                 egress flow to reduce buffer bloat. Refer to the network
                 monitoring and isolation documentation for more information.
* [MESOS-2115] - Dockerized slaves will properly recover Docker containers upon failover.

Plus an upgrade to the minimum required compiler versions:

* [MESOS-2604] - Upgrade minimum required compilers to GCC 4.8+ or clang 3.5+.

And experimental support for the following features:

* [MESOS-336] - Fetcher Caching of executor/task binaries. Refer to the fetcher
                documentation for more information.
* [MESOS-354] - Support for launching tasks/executors on revocable resources.
                These resources can be revoked by Mesos at any time, causing the
                tasks using them to be throttled or preempted.
* [MESOS-910] - SSL encryption via libevent. Refer to the SSL documentation for
                instructions on building and enabling SSL.
* [MESOS-1554] - Frameworks can create Persistent Volumes from disk resources.
                 Refer to the persistent volume documentation for more information.
* [MESOS-2018] - Frameworks can dynamically reserve resources for their role.
                 Refer to the reservation documentation for more information.

This release also includes API changes, new modules, and deprecations.

* Binary API Changes (e.g. new flags):
  * [MESOS-1913] - Create libevent/SSL-backed Socket implementation
  * [MESOS-2110] - Configurable Ping Timeouts
  * [MESOS-2155] - Make docker containerizer killing orphan containers optional
  * [MESOS-2832] - Enable configuring Mesos with environment variables without
                   having them leak to tasks launched

* Framework API Changes:
  * [MESOS-1127] - Implement the protobufs for the scheduler API
  * [MESOS-2097] - Update Resource protobuf with DiskInfo.
  * [MESOS-2191] - Add ContainerId to the TaskStatus message
  * [MESOS-2292] - Implement Call/Event protobufs for Executor
  * [MESOS-2475] - Add the Resource::ReservationInfo protobuf message.
  * [MESOS-2614] - Update name, hostname, failover_timeout, and webui_url in
                   master on framework re-registration
  * [MESOS-2654] - A new 'capabilities' field has been added to FrameworkInfo to
                   opt in to revocable resources.
  * [MESOS-2691] - Update Resource message to include revocable resources.
  * [MESOS-2955] - Introduce acceptOffers scheduler driver API for performing
                   operations on Offers
  * [MESOS-2957] - Add version to MasterInfo

* Web UI Changes:
  * [MESOS-2104] - Correct naming of cgroup memory statistics
  * [MESOS-2485] - Added master metrics for slave removal reasons.
  * [MESOS-2620] - Implement a mechanism which allows access control of endpoints
  * [MESOS-2743] - Include ExecutorInfos for custom executors in master/state.json
  * [MESOS-2775] - Added slave metrics for revocable resources.
  * [MESOS-2776] - Added master metrics for revocable resources.

* Module API Changes:
  * [MESOS-2050] - Revise Authenticator interface
  * [MESOS-2351] - Enable label and environment decorators (hooks) to remove
                   label and environment entries
  * [MESOS-2884] - Allow isolators to specify required namespaces

* New Module/Hook interfaces:
  * [MESOS-2160] - Add support for allocator modules
  * [MESOS-2650] - Modularize the Resource Estimator

* Deprecations:
  * [MESOS-2058] - Remove stats.json endpoints for Master and Slave
  * [MESOS-2697] - '/master/shutdown' endpoint is deprecated in favor of
                   the new '/master/teardown' endpoint.

This release also includes several bug fixes and stability improvements.

** Bug
  * [MESOS-328] - HTTP headers should be considered case-insensitive.
  * [MESOS-719] - missing-call-to-setgroups
  * [MESOS-757] - The post-reviews.py script hangs if HTTP authentication has expired
  * [MESOS-1303] - ExamplesTest.{TestFramework, NoExecutorFramework} flaky
  * [MESOS-1690] - Expose metric for container destroy failures
  * [MESOS-1795] - Assertion failure in state abstraction crashes JVM
  * [MESOS-1825] - Support the webui over HTTPS.
  * [MESOS-2016] - docker_name_prefix is too generic
  * [MESOS-2020] - mesos should send docker failure messages to scheduler
  * [MESOS-2161] - AbstractState JNI check fails for Marathon framework
  * [MESOS-2165] - When cyrus sasl MD5 isn't installed configure passes,
                   tests fail without any output
  * [MESOS-2183] - docker containerizer doesn't work when mesos-slave is
                   running in a container
  * [MESOS-2199] - Failing test: SlaveTest.ROOT_RunTaskWithCommandInfoWithUser
  * [MESOS-2309] - Mesos rejects ExecutorInfo as incompatible when there is no
                   functional difference
  * [MESOS-2367] - Improve slave resiliency in the face of orphan containers
  * [MESOS-2373] - DRFSorter needs to distinguish resources from different slaves.
  * [MESOS-2387] - SlaveTest.TaskLaunchContainerizerUpdateFails is flaky
  * [MESOS-2401] - MasterTest.ShutdownFrameworkWhileTaskRunning is flaky
  * [MESOS-2402] - MesosContainerizerDestroyTest.LauncherDestroyFailure is flaky
  * [MESOS-2403] - MasterAllocatorTest/0.FrameworkReregistersFirst is flaky
  * [MESOS-2412] - Potential memleak(s) in stout/os.hpp
  * [MESOS-2426] - Developer Guide improvements
  * [MESOS-2436] - Adapt unit test relying on non-checkpointing slaves
  * [MESOS-2450] - Hardcoded constants in libprocess should be replaced by
                   their INADDR_XXX equivalents
  * [MESOS-2457] - Update post-reviews to rbtools in 'submit your patch' of
                   developer's guide
  * [MESOS-2464] - Authentication failure may lead to slave crash
  * [MESOS-2469] - Mesos master/slave should be able to bind to 127.0.0.1 if
                   explicitly requested
  * [MESOS-2479] - Task filter input disappears entirely once the search query
                   yields no results
  * [MESOS-2481] - Update CHANGELOG and upgrades doc about the new acceptOffers API.
  * [MESOS-2494] - Clang build broken with "expression result unused" warning
  * [MESOS-2514] - Change the default leaf qdisc to fq_codel inside containers
  * [MESOS-2530] -  Alloc-dealloc-mismatch in OsSendfileTest.sendfile
  * [MESOS-2534] - PerfTest.ROOT_SampleInit test fails.
  * [MESOS-2538] - Remove unnecessary default flags from PortMappingMesosTest.
  * [MESOS-2548] - new `make distcheck` failures inside a docker container
  * [MESOS-2557] - Do not pass FrameworkID to Framework constructor for Master/Slave.
  * [MESOS-2558] - Mark RunTaskMessage.framework_id as optional
  * [MESOS-2566] - Fix the Attributes and Resources documentation
  * [MESOS-2592] - The sandbox directory is not chown'ed if the fetcher doesn't run
  * [MESOS-2598] - Slave state.json frameworks.executors.queued_tasks wrong format?
  * [MESOS-2601] - Tasks are not removed after recovery from slave and mesos containerizer
  * [MESOS-2603] - Permissions and ownership of persistent volumes are not set correctly.
  * [MESOS-2611] - Get Started about CentOS 6.5 is wrong
  * [MESOS-2627] - ExamplesTest.PersistentVolumeFramework is flaky
  * [MESOS-2636] - Segfault in inline Try<IP> getIP(const std::string& hostname, int family)
  * [MESOS-2656] - Slave should send status update immediately when container
                   launch fails.
  * [MESOS-2659] - update pthread and python autoconf macros
  * [MESOS-2660] - ROOT_CGROUPS_Listen test is flaky
  * [MESOS-2668] - Slave fails to recover when there are still processes left
                   in its cgroup
  * [MESOS-2671] - Port mapping isolator causes SIGABRT during slave recovery.
  * [MESOS-2672] - ContainerizerTest.ROOT_CGROUPS_BalloonFramework flaky
  * [MESOS-2690] - --enable-optimize build fails with maybe-uninitialized
  * [MESOS-2748] - /help generated links point to wrong URLs
  * [MESOS-2764] - Allow Resource Estimator to get Resource Usage information.
  * [MESOS-2778] - Non-POD static variables used in fq_codel and ingress.
  * [MESOS-2781] - getQdisc function in routing::queueing::internal.cpp returns
                   incorrect qdisc
  * [MESOS-2787] - mesos-ps fails with "KeyError: 'mem_rss_bytes'"
  * [MESOS-2788] - mesos-ps truncates memory statistics
  * [MESOS-2792] - Remove duplicate literals in ingress & fq_codel queueing disciplines
  * [MESOS-2808] - Slave should call into resource estimator whenever it wants
                   to forward oversubscribed resources
  * [MESOS-2809] - Mesos fails to launch Docker images built with large Dockerfiles
  * [MESOS-2815] - Flaky test: FetcherCacheHttpTest.HttpCachedSerialized
  * [MESOS-2835] - Fix typos in source comments
  * [MESOS-2866] - Slave should send oversubscribed resource information after
                   master failover.
  * [MESOS-2869] - OversubscriptionTest.FixedResourceEstimator is flaky
  * [MESOS-2873] - style hook prevent's valid markdown files from getting committed
  * [MESOS-2874] - Convert PortMappingStatistics to use automatic JSON encoding/decoding
  * [MESOS-2877] - Allow libprocess firewall to have more control over the
                   responses sent on failures
  * [MESOS-2881] - Linker error when building Mesos with unbundled dependencies
  * [MESOS-2889] - Add SSL switch to python configuration
  * [MESOS-2890] - Sandbox URL doesn't work in web-ui when using SSL
  * [MESOS-2891] - Performance regression in hierarchical allocator.
  * [MESOS-2894] - web UI shows "YYYY" for year instead of year
  * [MESOS-2904] - Add slave metric to count container launch failures
  * [MESOS-2914] - Port mapping isolator should cleanup unknown orphan containers
                   after all known orphan containers are recovered during recovery.
  * [MESOS-2917] - Specify correct libnl version for configure check
  * [MESOS-2919] - Framework can overcommit oversubscribable resources during
                   master failover.
  * [MESOS-2925] - Invalid usage of ATOMIC_FLAG_INIT in member initialization
  * [MESOS-2932] - There is a typo in docs/docker-containerizer.md file
  * [MESOS-2943] - mesos fails to compile under mac when libssl and libevent are enabled
  * [MESOS-2962] - Slave fails with Abort stacktrace when DNS cannot resolve hostname
  * [MESOS-2973] - SSL tests don't work with --gtest_repeat
  * [MESOS-2975] - SSL tests don't work with --gtest_shuffle
  * [MESOS-2986] - Docker version output is not compatible with Mesos
  * [MESOS-2991] - Compilation Error on Mac OS 10.10.4 with clang 3.5.0
  * [MESOS-2993] - Document per container unique egress flow and network queueing statistics
  * [MESOS-2996] - Failing Docker tests on CentOS Linux release 7.1.1503.
  * [MESOS-2997] - SSL connection failure causes failed CHECK.
  * [MESOS-3005] - SSL tests can fail depending on hostname configuration
  * [MESOS-3025] - 0.22.x scheduler driver drops 0.23.x reconciliation status
                   updates due to missing StatusUpdate.uuid.
  * [MESOS-3034] - ReservationTest.CompatibleCheckpointedResources is flaky
  * [MESOS-3055] - Master doesn't properly handle SUBSCRIBE call
  * [MESOS-3060] - FTP response code for success not recognized by fetcher.

** Documentation
  * [MESOS-2205] - Add user documentation for reservations
  * [MESOS-2395] - Slave recovery documentation shows incorrect recover flag
  * [MESOS-2416] - Update or delete release guide in confluence wiki
  * [MESOS-2525] - Missing information in Python interface launchTasks scheduler method
  * [MESOS-2616] - Update C++ style guide on variable naming.
  * [MESOS-2621] - Create documentation for observability metrics
  * [MESOS-2622] - Document the semantic change in decorator return values
  * [MESOS-2783] - document the fetcher
  * [MESOS-2886] - Capture some testing patterns we use in a doc
  * [MESOS-2942] - Create documentation for using SSL
  * [MESOS-2992] - Improve attribute documentation to reflect current state
  * [MESOS-3033] - Add user guide for oversubscription

** Improvement
  * [MESOS-692] - Reservations are not reported in master's state.json
  * [MESOS-994] - Add an Option<string> os::getenv() to stout
  * [MESOS-1733] - Change the stout path utility to declare a single, variadic
                   'join' function instead of several separate declarations of
                   various discrete arities
  * [MESOS-1991] - Remove dynamic allocation from Option
  * [MESOS-2023] - mesos-execute should allow setting environment variables
  * [MESOS-2057] - Concurrency control for fetcher cache
  * [MESOS-2069] - Basic fetcher cache functionality
  * [MESOS-2070] - Implement simple slave recovery behavior for fetcher cache
  * [MESOS-2072] - Fetcher cache eviction
  * [MESOS-2074] - Fetcher cache test fixture
  * [MESOS-2103] - Expose number of processes and threads in a container
  * [MESOS-2111] - Add build instructions for OSX in getting started
  * [MESOS-2136] - Expose per-cgroup memory pressure
  * [MESOS-2277] - Document undocumented HTTP endpoints
  * [MESOS-2323] - write flags to log at startup
  * [MESOS-2332] - Report per-container metrics for network bandwidth throttling
  * [MESOS-2333] - Securing Sandboxes via Filebrowser Access Control
  * [MESOS-2340] - Add ability to decode JSON serialized MasterInfo from ZK
  * [MESOS-2374] - Support relative host paths for container volumes
  * [MESOS-2392] - Rate limit slaves removals during master recovery.
  * [MESOS-2400] - Improve NsTest.ROOT_setns
  * [MESOS-2438] - Improve support for streaming HTTP Responses in libprocess.
  * [MESOS-2454] - Add support for /proc/self/mountinfo on Linux
  * [MESOS-2461] - Slave should provide details on processes running in its cgroups
  * [MESOS-2462] - Add option for Subprocess to set a death signal for the forked child
  * [MESOS-2507] - Performance issue in the master when a large number of
                   slaves are registering.
  * [MESOS-2519] - Log IP addresses from HTTP requests
  * [MESOS-2527] - Add default bind to socket
  * [MESOS-2528] - Symlink the namespace handle with ContainerID for the port
                   mapping isolator.
  * [MESOS-2547] - Cleanup stale bind mounts for port mapping isolator during
                   slave recovery.
  * [MESOS-2549] - Remove non-variadic strings::format
  * [MESOS-2550] - Mesos doesn't compile with clang 3.6
  * [MESOS-2565] - Clean up style and comments in modules.
  * [MESOS-2571] - Expose Memory Pressure in MemIsolator
  * [MESOS-2573] - Use Memory Test Helper to improve some test code.
  * [MESOS-2595] - Create docker executor
  * [MESOS-2608] - test-framework should support principal only credential
  * [MESOS-2609] - Move StatusUpdateStream implementation to a compilation unit
  * [MESOS-2624] - "configure" should fail when "patch" is not available.
  * [MESOS-2653] - Slave should act on correction events from QoS controller
  * [MESOS-2666] - use standard compiler detection macros
  * [MESOS-2680] - Update modules doc with hook usage example
  * [MESOS-2693] - Printing a resource should show information about
                   reservation, disk etc
  * [MESOS-2709] - Design Master discovery functionality for HTTP-only clients
  * [MESOS-2716] - Add non-const reference version of Option<T>::get.
  * [MESOS-2729] - Update DRF sorter to update total resources
  * [MESOS-2745] - Add 'Path' to stout's user guide
  * [MESOS-2752] - Add HTB queueing discipline wrapper class
  * [MESOS-2784] - Added constexpr to C++11 whitelist.
  * [MESOS-2793] - Add support for container rootfs to Mesos isolators
  * [MESOS-2801] - Remove dynamic allocation from Future<T>
  * [MESOS-2804] - Log framework capabilities in the master.
  * [MESOS-2805] - Make synchronized as primary form of synchronization.
  * [MESOS-2836] - Report per-container metrics for network bandwidth
                   throttling to the slave
  * [MESOS-2837] - Decode network statistics from mesos-network-helper
  * [MESOS-2870] - Add validation capability to stout Flags
  * [MESOS-2888] - Add SSL socket tests
  * [MESOS-2928] - Update stout #include headers
  * [MESOS-2940] - Reconciliation is expensive for large numbers of tasks.
  * [MESOS-2958] - Update Call protobuf to move top level FrameworkInfo inside Subscribe
  * [MESOS-2966] - socket::peer() and socket::address() might fail with SSL enabled

** Story
  * [MESOS-1552] - Mesos javadoc should include .proto javadoc
  * [MESOS-2551] - C++ Scheduler library should send Call messages to Master
  * [MESOS-2746] - As a Framework User I want to be able to discover my Task's IP

** Task
  * [MESOS-1598] - Add advanced shaping controls to routing library
  * [MESOS-1856] - Support specifying libnl3 install location.
  * [MESOS-2031] - Manage persistent directories on slave.
  * [MESOS-2085] - Add support encrypted and non-encrypted communication in
                   parallel for cluster upgrade
  * [MESOS-2108] - Add configure flag or environment variable to enable
                   SSL/libevent Socket
  * [MESOS-2123] - Document changes in C++ Resources API in CHANGELOG.
  * [MESOS-2139] - Enable the master to handle reservation operations
  * [MESOS-2213] - Custom allocators should implement Allocator instead of
                   AllocatorProcess
  * [MESOS-2233] - Run ASF CI mesos builds inside docker
  * [MESOS-2289] - Design doc for the HTTP API
  * [MESOS-2290] - Move all scheduler driver validations to master
  * [MESOS-2291] - Move executor driver validations to slave
  * [MESOS-2348] - Introduce a new filter abstraction for Resources.
  * [MESOS-2366] - MasterSlaveReconciliationTest.ReconcileLostTask is flaky
  * [MESOS-2375] - Remove the checkpoint variable entirely from slave/flags.hpp
  * [MESOS-2404] - Add an example framework to test persistent volumes.
  * [MESOS-2405] - Add user doc for using persistent volumes.
  * [MESOS-2422] - Use fq_codel qdisc for egress network traffic isolation
  * [MESOS-2427] - Add Java binding for the acceptOffers API.
  * [MESOS-2428] - Add Python bindings for the acceptOffers API.
  * [MESOS-2476] - Enable Resources to handle Resource::ReservationInfo
  * [MESOS-2477] - Enable Resources::apply to handle reservation operations.
  * [MESOS-2489] - Enable a framework to perform reservation operations.
  * [MESOS-2491] - Persist the reservation state on the slave
  * [MESOS-2496] - Make description consistent when adding flags
  * [MESOS-2563] - Add license blobs to Java JNI cpp files
  * [MESOS-2596] - Update allocator docs
  * [MESOS-2597] - Choose allocator based on master flag and loaded modules
  * [MESOS-2615] - Pipe 'updateFramework' path from master to Allocator to
                   support framework re-registration
  * [MESOS-2629] - Update style guide to disallow capture by reference of temporaries
  * [MESOS-2630] - Remove capture by reference of temporaries in Stout
  * [MESOS-2631] - Remove capture by reference of temporaries in libprocess
  * [MESOS-2649] - Implement Resource Estimator
  * [MESOS-2652] - Update Mesos containerizer to understand revocable cpu resources
  * [MESOS-2655] - Implement a stand alone test framework that uses revocable
                   cpu resources
  * [MESOS-2661] - Remove pre-C++11 codepaths
  * [MESOS-2662] - Remove <stout/memory.hpp> and switch from memory:: to std::
  * [MESOS-2663] - Remove <stout/tuple.hpp> and switch from tuples:: to std::
  * [MESOS-2670] - Update existing lambdas to meet style guide
  * [MESOS-2677] - Add unrestricted unions to style guide
  * [MESOS-2689] - Slave should forward oversubscribable resources to the master
  * [MESOS-2730] - Add a new API call to the allocator to update
                   oversubscribed resources
  * [MESOS-2733] - Update master to handle oversubscribed resource estimate
                   from the slave
  * [MESOS-2734] - Update allocator to allocate revocable resources
  * [MESOS-2739] - Remove dynamic allocation from Stout Try<T>
  * [MESOS-2740] - Remove dynamic allocation from Stout Result<T>
  * [MESOS-2753] - Master should validate tasks using oversubscribed resources
  * [MESOS-2761] - Delegating constructors are not allowed by styleguide
  * [MESOS-2762] - Explicitly-defaulted functions are not allowed by styleguide
  * [MESOS-2770] - Slave should forward total amount of oversubscribed
                   resources to the master
  * [MESOS-2773] - Pass callback to the resource estimator to retrieve
                   ResourceUsage from Resource Monitor on demand.
  * [MESOS-2791] - Create a FixedResourceEstimator to return fixed amount of
                   oversubscribable resources.
  * [MESOS-2807] - As a developer I need an easy way to convert MasterInfo
                   protobuf to/from JSON
  * [MESOS-2818] - Pass 'allocated' resources for each executor to the
                   resource estimator.
  * [MESOS-2823] - Pass callback to the QoS Controller to retrieve
                   ResourceUsage from Resource Monitor on demand.
  * [MESOS-2892] - Add benchmark for hierarchical allocator.
  * [MESOS-2893] - Add queue size metrics for the allocator.
  * [MESOS-2898] - Write tests for new JSON (ZooKeeper) functionality

** Wish
  * [MESOS-2510] - Add a function which test if a JSON object is contained in
                   another JSON object


Release Notes - Mesos - Version 0.22.2
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-2986] - Docker version output is not compatible with Mesos


Release Notes - Mesos - Version 0.22.1
--------------------------------------

* This is a bug fix release.

** Bug
  * [MESOS-1795] - Assertion failure in state abstraction crashes JVM.
  * [MESOS-2161] - AbstractState JNI check fails for Marathon framework.
  * [MESOS-2583] - Tasks getting stuck in staging.
  * [MESOS-2592] - The sandbox directory is not chown'ed if the
                   fetcher doesn't run.
  * [MESOS-2601] - Tasks are not removed after recovery from slave and mesos
                   containerizer
  * [MESOS-2643] - Python scheduler driver disables implicit acknowledgments by
                   default.
  * [MESOS-2668] - Slave fails to recover when there are still processes left in
                   its cgroup

** Improvement
  * [MESOS-2461] - Slave should provide details on processes running in its
                   cgroups

** Task
  * [MESOS-2614] - Update name, hostname, failover_timeout, and webui_url
                   in master on framework re-registration


Release Notes - Mesos - Version 0.22.0
--------------------------------------

This release contains several new features:

* Support for explicitly sending status updates acknowledgements from
  schedulers; refer to the upgrades document for upgrading schedulers.
* Rate limiting slave removal, to safeguard against unforeseen bugs leading to
  widespread slave removal.
* Disk quota isolation in Mesos containerizer; refer to the containerization
  documentation to enable disk quota monitoring and enforcement.
* Support for module hooks in task launch sequence. Refer to the modules
  documentation for more information.
* Anonymous modules: a new kind of module that does not receive any callbacks
  but coexists with its parent process.
* New service discovery info in task info allows framework users to specify
  discoverability of tasks for external service discovery systems. Refer to
  the framework development guide for more information.
* New '--external_log_file' flag to serve external logs through the Mesos web UI.
* New '--gc_disk_headroom' flag to control maxmimum executor sandbox age.

* API Changes:
  * [MESOS-1143] - TASK_ERROR is now sent instead of TASK_LOST when rescheduling
                   a task should not be attempted.
  * [MESOS-2086] - Update messages.proto to use a raw bytestream instead of a
                   string for AuthenticationStartMessage.
  * [MESOS-2120] - Task labels which enable key value pairs in task info which
                   follows them through the task life-cycle.
  * [MESOS-2185] - Slave state.json will now include custom resource types in
                   addition to first-class resource types.
  * [MESOS-2208] - Service discovery info for tasks and executors.
  * [MESOS-2322] - All arguments can now read their values from a file, just
                   specify --name=file://path/to/file.
  * [MESOS-2347] - The C++/Java/Python APIs have been updated to provide the
                   ability for schedulers to explicitly send acknowledgements.
                   TaskStatus now includes a UUID to enable this.

* Deprecations:
  * [MESOS-444]  - Slave checkpoint flag has been removed as it will be enabled
                   for all slaves.
  * [MESOS-1876] - Remove deprecated 'slave_id' field in ReregisterSlaveMessage.
  * [MESOS-2058] - Deprecate stats.json endpoints for Master and Slave and task
                   status counts from state.json. See /help/metrics endpoint for
                   more information.
  * [MESOS-2322] - Deprecated specifying JSON blobs to parse using an absolute
                   path to point at the filename.

This release also includes several bug fixes and stability improvements.

** Technical task
  * [MESOS-2263] - Enable protobuf::write to handle google::protobuf::RepeatedPtrField<T>
  * [MESOS-2264] - Enable protobuf::read to handle google::protobuf::RepeatedPtrField<T>
  * [MESOS-2265] - Introduce an os::rename abstraction to stout.
  * [MESOS-2266] - Introduce a checkpoint function to support google::protobuf::Repeated<T>

** Bug
  * [MESOS-998]  - Slave should wait until Containerizer::update() completes
                   successfully.
  * [MESOS-1432] - Atomically set close-on-exec where possible.
  * [MESOS-1708] - Using the wrong resource "name" should report a better error.
  * [MESOS-1922] - Slave blocks on the fetcher after terminating an executor.
  * [MESOS-2008] - MasterAuthorizationTest.DuplicateReregistration is flaky.
  * [MESOS-2048] - Fix MesosContainerizerExecuteTest.IoRedirection test.
  * [MESOS-2121] - Fix ProcTest.MultipleThreads flaky.
  * [MESOS-2167] - Remove empty resource checker in master.
  * [MESOS-2176] - Hierarchical allocator inconsistently accounts for
                   reserved resources.
  * [MESOS-2177] - Create socket wrappers for different protocol families.
  * [MESOS-2181] - Build failure - overloaded 'socket(int, __socket_type, int)'
                   is ambiguous.
  * [MESOS-2185] - slave state endpoint does not contain all resources in
                   the resources field.
  * [MESOS-2192] - libprocess fails to build under g++-4.6 - src/clock.cpp.
  * [MESOS-2206] - Latest health status omitted during reconciliation.
  * [MESOS-2225] - FaultToleranceTest.ReregisterFrameworkExitedExecutor is
                   flaky.
  * [MESOS-2228] - SlaveTest.MesosExecutorGracefulShutdown is flaky.
  * [MESOS-2232] - Suppress MockAllocator::transformAllocation() warnings.
  * [MESOS-2236] - Compilation failure on GCC 4.4.7.
  * [MESOS-2241] - DiskUsageCollectorTest.SymbolicLink test is flaky.
  * [MESOS-2279] - Future callbacks should be cleared once the future has transitioned.
  * [MESOS-2283] - SlaveRecoveryTest.ReconcileKillTask is flaky.
  * [MESOS-2302] - FaultToleranceTest.SchedulerFailoverFrameworkMessage is flaky.
  * [MESOS-2305] - Refactor validators in Master.
  * [MESOS-2306] - MasterAuthorizationTest.FrameworkRemovedBeforeReregistration
                   is flaky.
  * [MESOS-2313] - fix reviewboard setting so all users have same rbt settings.
  * [MESOS-2319] - Unable to set --work_dir to a non /tmp device.
  * [MESOS-2324] - MasterAllocatorTest/0.OutOfOrderDispatch is flaky.
  * [MESOS-2325] - CPU busy loop in libprocess libev clock.
  * [MESOS-2326] - Broken OSX Build after fixed bugs in CREATE/DESTROY operation
                   handlers.
  * [MESOS-2328] - http::URL build error with clang 3.3.
  * [MESOS-2344] - segfaults running make check from ev integration.
  * [MESOS-2355] - MasterTest.SlavesEndpointTwoSlaves fails sometimes because
                   the master assigns the same ID to both slaves.
  * [MESOS-2366] - Fixed a flaky reconciliation test.
  * [MESOS-2377] - Fix leak in libevent's version EventLoop::delay.
  * [MESOS-2381] - Put Authentication protobufs back in mesos.internal package.
  * [MESOS-2390] - HADOOP_HOME no longer works with fetcher.
  * [MESOS-2410] - Broken build on OS X 10.8.5 caused by mac_tests in stout.
  * [MESOS-2414] - Java bindings segfault during framework shutdown.
  * [MESOS-2420] - Fetcher tests fail to build on ubuntu 14.10.
  * [MESOS-2447] - Mesos replicated log does not log the Action type name.
  * [MESOS-2452] - The recovered executor directory points to the meta directory.
  * [MESOS-2463] - Slaves sends mutated copy of executorinfo to new elected
                   master.
  * [MESOS-2486] - With unbundled dependencies Mesos doesn't build with
                   -Wl,--no-copy-dt-needed-entries.
  * [MESOS-2499] - SOURCE_EXECUTOR not set properly in slave.cpp.

** Documentation
  * [MESOS-1470] - Add operational documentation for running HA masters.
  * [MESOS-2282] - developers guide is missing some details.
  * [MESOS-2327] - Authorization docs incorrectly describe how to configure turn
                   off permissive mode.
  * [MESOS-2391] - Provide user doc for the new posix disk isolator in Mesos
                   containerizer.
  * [MESOS-2396] - Provide user doc for service discovery info.

** Epic
  * [MESOS-2150] - Service discovery info for tasks and executors.

** Improvement
  * [MESOS-1148] - Add support for rate limiting slave removal.
  * [MESOS-1248] - Use JSON instead of our own format for passing URI information
                   to mesos-fetcher.
  * [MESOS-1316] - Implement decent unit test coverage for the mesos-fetcher
                   tool.
  * [MESOS-1587] - Report disk usage from MesosContainerizer.
  * [MESOS-1588] - Enforce disk quota in MesosContainerizer.
  * [MESOS-1711] - Create method for users to identify HDFS compatible protocols
                   in fetcher.cpp.
  * [MESOS-1960] - Silence symbolic link to pre-commit in bootstrap.
  * [MESOS-1974] - Refactor the C++ Resources abstraction for DiskInfo.
  * [MESOS-2009] - Libprocess: Introduce mutex.
  * [MESOS-2010] - Libprocess: Introduce enable_shared_from_this.
  * [MESOS-2011] - Introduce mutex.
  * [MESOS-2012] - Introduce enable_shared_from_this.
  * [MESOS-2019] - Replace the ip and port pairs from the UPID class and
                   process namespace with Node class.
  * [MESOS-2051] - Pull Metrics struct out of Master and Slave to improve
                   readability.
  * [MESOS-2056] - Refactor fetcher code in preparation for fetcher cache.
  * [MESOS-2094] - Libprocess: Introduce make_shared.
  * [MESOS-2095] - Introduce make_shared.
  * [MESOS-2104] - Correct naming of cgroup memory statistics.
  * [MESOS-2126] - Libprocess Future: Improve performance, Vector instead of
                   Queue.
  * [MESOS-2127] - killTask() should perform reconciliation for unknown tasks.
  * [MESOS-2169] - Make GC_DISK_HEADROOM configurable through slave command line
                   flag.
  * [MESOS-2172] - Refactor fetcher namespace into a class.
  * [MESOS-2173] - Consolidate all fetcher env vars into one that holds a JSON
                   object.
  * [MESOS-2193] - serve an externally managed log via the web ui.
  * [MESOS-2230] - Update RateLimiter to allow the acquired future to be
                   discarded.
  * [MESOS-2272] - Remove "internal" namespace from within "mesos"
  * [MESOS-2314] - remove unnecessary constants.
  * [MESOS-2347] - Add ability for schedulers to explicitly acknowledge status
                   updates on the driver.

** Story
  * [MESOS-444] - Remove --checkpoint flag in the slave once checkpointing is stable.
  * [MESOS-1694] - Future::failure should return a const string&
  * [MESOS-1830] - Expose master stats differentiating between master-generated
                   and slave-generated LOST tasks Task.
  * [MESOS-1876] - Remove deprecated 'slave_id' field in ReregisterSlaveMessage.
  * [MESOS-1903] - Add backoff to framework re-registration retries.
  * [MESOS-2029] - Allow slave to checkpoint resources.
  * [MESOS-2060] - Add support for 'hooks' in task launch sequence.
  * [MESOS-2098] - Update task validation to be after task authorization.
  * [MESOS-2099] - Support acquiring/releasing resources with DiskInfo in allocator.
  * [MESOS-2100] - Implement master to slave protocol for persistent disk resources.
  * [MESOS-2101] - Add the persistent resources release primitive to the
                   framework API.
  * [MESOS-2106] - Enable libevent backed libprocess with configure flag.
  * [MESOS-2107] - Create libevent-backed clock implementation.
  * [MESOS-2109] - Introduce socket factory.
  * [MESOS-2114] - Extract and generalize WhitelistWatcher.
  * [MESOS-2133] - Create libevent-backed poll implementation.
  * [MESOS-2135] - Support DiskInfo in C++ Resources.
  * [MESOS-2138] - Add an Offer::Operation message for Dynamic Reservations.
  * [MESOS-2178] - Add a method from converting the hostname to an ip address and
                   create initialization wrappers for sockaddr_in and addrinfo.
  * [MESOS-2240] - Narrow down file permissions on os::open.


Release Notes - Mesos - Version 0.21.2
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-2986] - Docker version output is not compatible with Mesos


Release Notes - Mesos - Version 0.21.1
--------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-2047] Isolator cleanup failures shouldn't cause TASK_LOST.
  * [MESOS-2071] Libprocess generates invalid HTTP
  * [MESOS-2147] Large number of connections slows statistics.json responses.
  * [MESOS-2182] Performance issue in libprocess SocketManager.

** Improvement
  * [MESOS-1925] Docker kill does not allow containers to exit gracefully
  * [MESOS-2113] Improve configure to find apr and svn libraries/headers in OSX


Release Notes - Mesos - Version 0.21.0
--------------------------------------

This release includes several new features.

* State reconciliation for frameworks:
  * Allows frameworks to reconcile the states of the tasks.

* Support for Mesos modules
  * Support for modules in master, slave and tests using the --modules
    flag.

* Task status now includes source and reason:
  * [MESOS-343] - Expose TASK_FAILED reason to Frameworks.
  * [MESOS-1143] - Add a TASK_ERROR task status.

* A shared filesystem isolator:
  * Volumes can be mounted from the host into a container's
    filesystem.
  * Parts of the shared filesystem can be made private to each
    container, e.g., a private /tmp for each container.

* A pid namespace isolator:
  * Processes inside a container will not have visibility to host
    processes or processes in any other container.
  * Containers will be destroyed by terminating the 'init' process for
    the pid namespace rather than using the freezer cgroup, avoiding known
    kernel bugs.

* API Changes:
  * [MESOS-1461] - Add task reconciliation to the Python API.

* Deprecations:
  * [MESOS-1807] - Disallow executors with cpu only or memory only resources.
  * [MESOS-1986] - Disabling checkpointing is deprecated and the --checkpoint flag will be removed in a future release.

* Build changes:
  * [MESOS-1044] - Require C++11 compiler support.

This release also includes several bug fixes and stability
improvements.

** Bug
  * [MESOS-487] - Balloon framework fails to run due to bad flags
  * [MESOS-631] - Slave started in cleanup mode shouldn't accept new tasks
  * [MESOS-947] - Slave should properly handle a killTask() that arrives between runTask() and _runTask()
  * [MESOS-1081] - Master should not deactivate authenticated framework/slave on new AuthenticateMessage unless new authentication succeeds.
  * [MESOS-1195] - systemd.slice + cgroup enablement fails in multiple ways.
  * [MESOS-1208] - 3rdparty/libprocess/3rdparty/boost-1.53.0/boost/math/special_functions/sign.hpp:113:55: error: typedef 'fp_tag' locally defined but not used [-Werror=unused-local-typedefs]
  * [MESOS-1219] - Master should disallow frameworks that reconnect after failover timeout.
  * [MESOS-1389] - Reconciliation can send TASK_LOST before a terminal update reaches the framework.
  * [MESOS-1392] - Failure when znode is removed before we can read its contents.
  * [MESOS-1414] - Status updates should not be sent from the slave until it is registered.
  * [MESOS-1463] - mesos-local.sh dumps core
  * [MESOS-1668] - Handle a temporary one-way master --> slave socket closure.
  * [MESOS-1676] - ZooKeeperMasterContenderDetectorTest.MasterDetectorTimedoutSession is flaky
  * [MESOS-1688] - No offers if no memory is allocatable
  * [MESOS-1695] - The stats.json endpoint on the slave exposes "registered" as a string.
  * [MESOS-1696] - Improve reconciliation between master and slave.
  * [MESOS-1703] - better error message when replicated log hasn't been initialized
  * [MESOS-1712] - Automate disallowing of commits mixing mesos/libprocess/stout
  * [MESOS-1715] - The slave does not send pending tasks during re-registration.
  * [MESOS-1716] - The slave does not add pending tasks as part of the staging tasks metric.
  * [MESOS-1722] - Wrong attributes separator in slave --help
  * [MESOS-1741] - mesos-slave shouldn't fail if dockerd is down
  * [MESOS-1746] - clear TaskStatus data to avoid OOM
  * [MESOS-1748] - MasterZooKeeperTest.LostZooKeeperCluster is flaky
  * [MESOS-1769] - Segfault when using external containerizer
  * [MESOS-1774] - Fix protobuf detection on systems with Python 3 as default
  * [MESOS-1782] - AllocatorTest/0.FrameworkExited is flaky
  * [MESOS-1783] - MasterTest.LaunchDuplicateOfferTest is flaky
  * [MESOS-1786] - FaultToleranceTest.ReconcilePendingTasks is flaky.
  * [MESOS-1797] - Packaged Zookeeper does not compile on OSX Yosemite
  * [MESOS-1799] - Reconciliation can send out-of-order updates.
  * [MESOS-1814] - Task attempted to use more offers than requested in example jave and python frameworks
  * [MESOS-1817] - Completed tasks remains in TASK_RUNNING when framework is disconnected
  * [MESOS-1821] - CHECK failure in master.
  * [MESOS-1824] - when "docker ps -a" returns 400+ lines enabling docker containerizer results in all executors dying
  * [MESOS-1833] - Running docker container with colon in executor id generates error
  * [MESOS-1834] - Default port for mesos is 5050, but documentation states it as 5051
  * [MESOS-1843] - Specifying --with-curl doesn't work.
  * [MESOS-1844] - AllocatorTest/0.SlaveLost is flaky
  * [MESOS-1849] - Cannot execute container in privileged mode
  * [MESOS-1853] - Remove /proc and /sys remounts from port_mapping isolator
  * [MESOS-1854] - SlaveRecoveryTest.MultipleSlaves is flaky.
  * [MESOS-1855] - Mesos 0.20.1 doesn't compile
  * [MESOS-1857] - path::join() is broken
  * [MESOS-1858] - Leaked file descriptors in StatusUpdateStream.
  * [MESOS-1862] - Performance regression in the Master's http metrics.
  * [MESOS-1866] - Race between ~Authenticator() and Authenticator::authenticate() can lead to schedulers/slaves to never get authenticated
  * [MESOS-1869] - UpdateFramework message might reach the slave before Reregistered message and get dropped
  * [MESOS-1873] - Don't pass task-related arguments to mesos-executor
  * [MESOS-1875] - os::killtree() incorrectly returns early if pid has terminated
  * [MESOS-1878] - Access to sandbox on slave from master UI does not show the sandbox contents
  * [MESOS-1881] - Reviewbot should not apply reviews that are submitted.
  * [MESOS-1884] - Composing Containerizer is not sending calls to still launching containers
  * [MESOS-1892] - Using mesos-0.20.1.jar with libmesos-0.21.0 reliably segfaults
  * [MESOS-1901] - Slave resources obtained from localhost:5051/state.json is not correct.
  * [MESOS-1915] - Docker containers that fail to launch are not killed
  * [MESOS-1945] - SlaveTest.KillTaskBetweenRunTaskParts is flaky
  * [MESOS-1948] - Docker tests are flaky
  * [MESOS-1967] - Test RoutingTest.INETSockets fails on some machine
  * [MESOS-1969] - RBT only takes revision ranges as args for versions >= 0.6
  * [MESOS-1970] - slave and offer ids are indistinguishable in the logs
  * [MESOS-1975] - Module manager causes make check failure for annotated mesos versions.
  * [MESOS-1989] - Container network stats reported by the port mapping isolator is the reverse of the actual network stats.
  * [MESOS-2025] - OsTest.killtreeNoRoot: Process reparent assumes new parent is init pid 1
  * [MESOS-2036] - Fix the Json format for the --modules and update the help message
  * [MESOS-2046] - Configure should check headers and libraries for svn and apr
  * [MESOS-2050] - InMemoryAuxProp plugin used by Authenticators results in SEGFAULT
  * [MESOS-2052] - RunState::recover should always recover 'completed'
  * [MESOS-2078] - Scheduler driver may ACK status updates when the scheduler threw an exception

** Documentation
  * [MESOS-1506] - Update documentation/flags regarding new default hostname semantics
  * [MESOS-1950] - Add module writers guide
  * [MESOS-1984] - Documentation for Egress Control Limit
  * [MESOS-2033] - Documentation for isolator filesystem/shared.
  * [MESOS-2034] - Documentation for isolator namespaces/pid.
  * [MESOS-2037] - Update docs/configuration.md

* Epic
  * [MESOS-1407] - Provide state reconciliation for frameworks.

* Improvement
  * [MESOS-186] - Resource offers should be rescinded after some configurable timeout
  * [MESOS-750] - Require compilers that support c++11
  * [MESOS-1181] - Improve cpplint rule coverage
  * [MESOS-1502] - expose message event queue size from libprocess
  * [MESOS-1567] - Add logging of the user uid when receiving SIGTERM.
  * [MESOS-1586] - Isolate system directories, e.g., per-container /tmp
  * [MESOS-1643] - Provide APIs to return port resource for a given role
  * [MESOS-1656] - Do not remove docker container until gc process runs
  * [MESOS-1728] - Libprocess: report bind parameters on failure
  * [MESOS-1752] - Allow variadic templates
  * [MESOS-1771] - introduce unique_ptr
  * [MESOS-1779] - Mesos style checker should catch trailing white space
  * [MESOS-1811] - Reconcile disconnected/deactivated semantics in the master code
  * [MESOS-1813] - Fail fast in example frameworks if task goes into unexpected state
  * [MESOS-1863] - Split launch tasks and decline offers metrics
  * [MESOS-1896] - Enable module specific command line parameters
  * [MESOS-1927] - Enable implicit local cluster launch to load modules
  * [MESOS-1932] - Install git pre commit hook during bootstrap
  * [MESOS-1951] - Add --isolation flag to mesos-tests
  * [MESOS-1972] - Move TASK_LOST generations due to invalid tasks from scheduler driver to master
  * [MESOS-2038] - Remove dead code in Slave::_runTask

* Story
  * [MESOS-343] - Expose TASK_FAILED reason to Frameworks.
  * [MESOS-1765] - Use PID namespace to avoid freezing cgroup

* Task
  * [MESOS-681] - Document the reconciliation API.
  * [MESOS-1410] - Keep terminal unacknowledged tasks in the master's state.
  * [MESOS-1808] - Expose RTT in container stats
  * [MESOS-1864] - Add test integration for module developers
  * [MESOS-1931] - Add support for isolator modules
  * [MESOS-1943] - Add event queue size metrics to scheduler driver
  * [MESOS-1964] - 0.21.0 release
  * [MESOS-1965] - Create mesos::modules namespace for all module related stuff
  * [MESOS-1985] - Use more standard debug / release build flags


Release Notes - Mesos - Version 0.20.1
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-1705] - SubprocessTest.Status sometimes flakes out
    * [MESOS-1724] - Can't include port in DockerInfo's image
    * [MESOS-1727] - Configure fails with ../configure: line 18439: syntax error near unexpected token `PROTOBUFPREFIX,'
    * [MESOS-1729] - LogZooKeeperTest.WriteRead fails due to SIGPIPE (escalated to SIGABRT)
    * [MESOS-1730] - Should be an error if commandinfo shell=true when using docker containerizer
    * [MESOS-1732] - Mesos containerizer doesn't reject tasks with container info set
    * [MESOS-1737] - Isolation=external result in core dump on 0.20.0
    * [MESOS-1740] - Bad error message when docker containerizer isn't enabled
    * [MESOS-1749] - SlaveRecoveryTest.ShutdownSlave is flaky
    * [MESOS-1755] - Add docker support to mesos-execute
    * [MESOS-1758] - Freezer failure leads to lost task during container destruction.
    * [MESOS-1760] - MasterAuthorizationTest.FrameworkRemovedBeforeReregistration is flaky
    * [MESOS-1764] - Build Fixes from 0.20 release
    * [MESOS-1766] - MasterAuthorizationTest.DuplicateRegistration test is flaky
    * [MESOS-1809] - Modify docker pull to use docker inspect after a successful pull

** Improvement
    * [MESOS-1621] - Docker run networking should be configurable and support bridge network
    * [MESOS-1762] - Avoid docker pull on each container run
    * [MESOS-1770] - Docker with command shell=true should override entrypoint


Release Notes - Mesos - Version 0.20.0
--------------------------------------

This release includes a lot of new cool features. The major new features are
listed below:

* Docker support in Mesos:
  * Users now can launch executors/tasks within Docker containers.
  * Mesos now supports running multiple containerizers simultaneously. The slave
    can dynamically choose a containerizer to launch containers based on the
    configuration of executors/tasks.

* Container level network monitoring for mesos containerizer:
  * Network statistics for each active container can be retrieved through the
    /monitor/statistics.json endpoint on the slave.
  * Completely transparent to the tasks running on the slave. No need to change
    the service discovery mechanism for tasks.

* Framework authorization:
  * Allows frameworks to (re-)register with authorized roles.
  * Allows frameworks to launch tasks/executors as authorized users.
  * Allows authorized principals to shutdown framework(s) through HTTP endpoint.

* Framework rate limiting:
  * In a multi-framework environment, this feature aims to protect the
    throughput of high-SLA (e.g., production, service) frameworks by having the
    master throttle messages from other (e.g., development, batch) frameworks.

* Enable building against installed third-party dependencies.

* API Changes:
  * [MESOS-857] - The Python API now uses different namespacing. This will break
    existing schedulers, please refer to the upgrades document.
  * [MESOS-1409] - Status update acknowledgements are sent through the Master
    now. This only affects you if you're using a non-Mesos binding (e.g. pure
    language binding), in which case refer to the upgrades document.

* HTTP endpoint changes:
  * [MESOS-1188] - "deactivated_slaves" represents inactive slaves in "/stats.json" and "/state.json".
  * [MESOS-1390] - "/shutdown" authenticated endpoint has been added to master to shutdown a framework.

* Deprecations:
  * [MESOS-1219] - Master should disallow completed frameworks from re-registering with same framework id.
  * [MESOS-1695] - "/stats.json" on the slave exposes "registered" value as string instead of integer.


This release also includes several bug fixes and stability improvements.


** Sub-task
    * [MESOS-1292] - [MESOS-1259]:Enrich the Java Docs in the src/java files. -- ZooKeeperState.java
    * [MESOS-1293] - [MESOS-1259]:Enrich the Java Docs in the src/java files. -- Variable.java
    * [MESOS-1294] - [MESOS-1259]:Enrich the Java Docs in the src/java files. -- State.java

** Bug
    * [MESOS-445] - Scheduler driver destructor waits forever
    * [MESOS-473] - Freezer fails fatally when it is unable to write 'FROZEN' to freezer.state
    * [MESOS-759] - The cgroups TaskKiller should skip freezing the cgroup if it is already empty.
    * [MESOS-856] - TasksKiller may run forever because the cgroup cannot be frozen.
    * [MESOS-878] - Slave should not register with the master when in TERMINATING.
    * [MESOS-1001] - registrar doesn't build on Linux/Clang
    * [MESOS-1119] - Allocator should make an allocation decision per slave instead of per framework/role.
    * [MESOS-1149] - SlaveRecovery.Reboot test doesn't reap executor
    * [MESOS-1170] - Update system check (glog)
    * [MESOS-1171] - Update system check (gmock)
    * [MESOS-1172] - Update system check (libev)
    * [MESOS-1173] - Update system check (picojson)
    * [MESOS-1174] - Update system check (protobuf)
    * [MESOS-1178] - Only enable the oom killer if it's not enabled
    * [MESOS-1337] - AllocatorZooKeeperTest/0.FrameworkReregistersFirst runs forever
    * [MESOS-1341] - AllocatorZooKeeperTest/0.FrameworkReregistersFirst is flaky
    * [MESOS-1348] - The SlaveRecoveryTest.GCExecutor test leaks child processes.
    * [MESOS-1354] - Resource leak in jvm.cpp
    * [MESOS-1404] - Glibc 'fork()' is not async signal safe
    * [MESOS-1417] - Slave should not send terminal status update before containerizer update is finished
    * [MESOS-1422] - AllocatorTest/0.SchedulerFailover test is flaky
    * [MESOS-1428] - Failed to update 'registry': Failed to perform store within 5secs (caused flaky MasterTest.StatusUpdateAcknowledgementsThroughMaster)
    * [MESOS-1435] - RegistrarZooKeeperTest.TaskRunning is flaky, sometimes runs forever.
    * [MESOS-1436] - AllocatorZooKeeperTest/0.SlaveReregistersFirst flaky and can run forever
    * [MESOS-1437] - SlaveRecoveryTest/0.RestartBeforeContainerizerLaunch is flaky
    * [MESOS-1439] - SchedulerTest.MetricsEndpoint is flaky
    * [MESOS-1454] - Command executor should have nonzero resources
    * [MESOS-1467] - commit msg was changed after run ./support/post-reviews.py
    * [MESOS-1477] - Deadlock when terminating ZooKeeperProcess
    * [MESOS-1479] - Cgroups cpu isolator should only report cfs stats if cfs is enabled
    * [MESOS-1492] - Add support for optionally throttling the frameworks not specified in RateLimits config
    * [MESOS-1504] - mesos.pb.h header include is problematic.
    * [MESOS-1513] - FaultToleranceTest.SlaveReregisterTerminatedExecutor is flaky
    * [MESOS-1526] - Regression in 'make distclean': files left around.
    * [MESOS-1529] - Handle a network partition between Master and Slave
    * [MESOS-1532] - AllocatorZooKeeperTest/0.SlaveReregistersFirst and AllocatorZooKeeperTest/0.FrameworkReregistersFirst are flaky
    * [MESOS-1533] - HealthCheck tests are flaky
    * [MESOS-1536] - AllocatorZooKeeperTest/0.FrameworkReregistersFirst
    * [MESOS-1540] - Fix a typo in src/Makefile.am to include java test cases
    * [MESOS-1543] - MasterTest.OrphanTasks is flaky
    * [MESOS-1544] - DRFAllocatorTest.SameShareAllocations is flaky
    * [MESOS-1549] - The configure script should check for libnl headers as well
    * [MESOS-1555] - ExecutorInfo validity check is broken in Master
    * [MESOS-1578] - Improve framework rate limiting by imposing the max number of outstanding messages per framework principal
    * [MESOS-1604] - LowLevelSchedulerLibprocess did not receive offers from Master
    * [MESOS-1610] - Mesos containerizer should not call isolate if the child process already died.
    * [MESOS-1617] - Linux kernel generates duplicated tc u32 filter handles
    * [MESOS-1624] - Apache Jenkins build fails due to -lsnappy is set when building leveldb
    * [MESOS-1627] - Installed protobuf header files include wrong path to mesos header file
    * [MESOS-1629] - GLOG Initialized twice if the Framework Scheduler also uses GLOG
    * [MESOS-1632] - Seg fault due to infinite recursion "<< RepeatedPtrField<Resource>"
    * [MESOS-1633] - Create a static mesos library
    * [MESOS-1635] - zk flag fails when specifying a file and the replicated logs
    * [MESOS-1639] - Master OOMs when throttling traffic from LoadGeneratorFramework
    * [MESOS-1649] - Network isolator should tolerate slave crashes while doing isolate/cleanup.
    * [MESOS-1653] - HealthCheckTest.GracePeriod is flaky.
    * [MESOS-1655] - ZooKeeperTest.LeaderDetectorTimeoutHandling is flaky
    * [MESOS-1658] - Implementation of process::io::poll can lead to broken pipes.
    * [MESOS-1670] - Build Failure on Mac OSX with undefined link
    * [MESOS-1673] - The value of MASTER_PING_TIMEOUT is non-deterministic
    * [MESOS-1677] - AllocatorTest.FrameworkReregistersFirst is flaky.
    * [MESOS-1692] - Build error on gcc-4.4.
    * [MESOS-1693] - Enable builds for ARM
    * [MESOS-1700] - ThreadLocal does not release pthread keys or log properly.
    * [MESOS-1704] - Mac OS X build breaks in DockerContainerizerProcess::fetch
    * [MESOS-1705] - SubprocessTest.Status sometimes flakes out
    * [MESOS-1710] - Compilation against master fails on make check

** Documentation
    * [MESOS-1480] - Write Documentation for Authorization
    * [MESOS-1702] - Add document for network monitoring.

** Epic
    * [MESOS-1071] - Enable building against installed third-party dependencies.
    * [MESOS-1228] - Container level network monitoring
    * [MESOS-1342] - Add authorization support.

** Improvement
    * [MESOS-292] - Remove unnecessary includes of headers to improve compile times
    * [MESOS-320] - Add instrumentation into libprocess.
    * [MESOS-857] - restructure mesos python namespace
    * [MESOS-921] - Consider simultaneous containerizer support
    * [MESOS-987] - Wire up a code coverage tool
    * [MESOS-1188] - Rename slaves/frameworks.activated/deactivated
    * [MESOS-1236] - stout's os module uses a mix of Try<Nothing> and bool returns
    * [MESOS-1237] - stout's os::ls should return a Try<>
    * [MESOS-1259] - Enrich the Java Docs in the src/java files.
    * [MESOS-1312] - Show active tasks orphaned by a framework disconnect
    * [MESOS-1324] - Create a network isolator based on port mapping
    * [MESOS-1339] - Add "per-framework-principal" counters for all messages from a scheduler on Master
    * [MESOS-1379] - Provide a reconciliation mechanism for tasks unknown to the framework.
    * [MESOS-1390] - Add an authenticated '/shutdown' endpoint for shutting down a running framework
    * [MESOS-1446] - Create an abstraction for launching an operation in a subprocess.
    * [MESOS-1450] - Add setns utilities to stout
    * [MESOS-1453] - Update reconciliation semantics send statuses for each task.
    * [MESOS-1499] - Add flags parse support for specific protobufs
    * [MESOS-1501] - Add flags parse support for RateLimits protobuf
    * [MESOS-1511] - Simplify 'Operation' semantics to only handle logics in the subprocess side
    * [MESOS-1519] - Expose constructors of types used in java APIs
    * [MESOS-1523] - ZooKeeper timeout should be longer
    * [MESOS-1525] - Don't require slave id for reconciliation requests.
    * [MESOS-1528] - Refactor Subprocess to support execve style launch and customized clone function
    * [MESOS-1557] - Allow the network isolator to handle those tasks that are not isolated by the network isolator
    * [MESOS-1559] - Allow jenkins build machine to dump stack traces of all threads when timeout
    * [MESOS-1590] - Allow LoadGeneratorFramework to read password from a file
    * [MESOS-1591] - Do not install LoadGeneratorFramework
    * [MESOS-1608] - Add support for installing stout headers
    * [MESOS-1616] - ReregisterCompletedFrameworks test does not use real JSON parser
    * [MESOS-1620] - Reconciliation does not send back tasks pending validation / authorization.
    * [MESOS-1652] - Stream Docker logs into sandbox logs

** Story
    * [MESOS-1350] - Initial implementation of framework API rate limiter, taking the config via master flag
    * [MESOS-1595] - Provide a way to install libprocess

** Task
    * [MESOS-1307] - Authorize offer allocations
    * [MESOS-1325] - Create a linux routing library abstraction based on libnl
    * [MESOS-1343] - Authorize "/shutdown" HTTP endpoint through ACLs.
    * [MESOS-1374] - Verify static libprocess scheduler port works with Mesos Master
    * [MESOS-1409] - Send status update acknowledgments through the Master.
    * [MESOS-1443] - Create a protobuf for framework rate limit configuration and load it as JSON through master flags
    * [MESOS-1444] - Integrate rate limiter into the master
    * [MESOS-1445] - Add new tests for framework rate limiting
    * [MESOS-1451] - Remove 'offer_id' field from LaunchTasksMessage.
    * [MESOS-1505] - Add a test to verify that frameworks with same share get equal number of allocations
    * [MESOS-1530] - Create LoadGeneratorScheduler to test Framework Rate Limiting
    * [MESOS-1568] - Support ENTRYPOINT style containers
    * [MESOS-1580] - Accept --isolation=external through a deprecation cycle.
    * [MESOS-1593] - Add DockerInfo Configuration
    * [MESOS-1600] - IP classifiers in routing lib should ignore IP packets with IP options
    * [MESOS-1601] - Add metrics for port mapping network isolator
    * [MESOS-1671] - Expose executor metrics for slave.
    * [MESOS-1672] - Add filter to allocator resourcesRecovered method
    * [MESOS-1674] - Kill private_resources and treat 'ephemeral_ports' as a resource.
    * [MESOS-1683] - Create user doc for framework rate limiting feature


Release Notes - Mesos - Version 0.19.1
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-1448] - Mesos Fetcher doesn't support URLs that have 30X redirects.
    * [MESOS-1534] - Scheduler process is not explicitly terminated in the destructor of MesosSchedulerDriver.
    * [MESOS-1538] - A container destruction in the middle of a launch leads to CHECK failure.
    * [MESOS-1539] - No longer able to spin up Mesos master in local mode.
    * [MESOS-1550] - MesosSchedulerDriver should never, ever, call 'stop'.
    * [MESOS-1551] - Master does not create work directory when missing.


Release Notes - Mesos - Version 0.19.0
--------------------------------------
* The primary feature of this release is the "Registrar". This is the addition
  of replicated state in the master to ensure the set of slaves in the cluster
  remains consistent in the presence of master failovers.
  * This feature is currently used in a write-only manner by default to allow
    smooth upgrades. 0.20.0 by default will be write *and* read.
  * Operators must now specify the 'work_dir' for the master, along with the
    'quorum' size of the ensemble of masters.
  * This means adding or removing masters must be done carefully! The best
    practice is to only ever add or remove a single master at a time and to
    allow a small amount of time for the replicated log to catch up on the new
    master.

* Authentication support has been added for slaves.

* Metrics reporting has been overhauled and is now exposed on /metrics/snapshot.

* Support for external containerization strategies has been added to support
  custom container needs as well as experimentation; this is an alpha release!

* There are also several bug fixes and stability improvements.


** Sub-task
    * [MESOS-562] - Update 'Getting Started' Documentation Page
    * [MESOS-783] - Master::killTask must not answer with TASK_LOST when the task is unknown.
    * [MESOS-841] - Enforce only leading master can write to the Registrar.
    * [MESOS-880] - introduce observe endpoint to master
    * [MESOS-957] - introduce RepairCoordinator stub into master
    * [MESOS-1226] - Add flags for replicated log backed registry.
    * [MESOS-1338] - Add global counters for each message type on Master

** Bug
    * [MESOS-361] - Restrict the character space of user provided TaskIDs.
    * [MESOS-577] - bootstrap fails with automake 1.14
    * [MESOS-578] - configure fails on OSX 10.8.4
    * [MESOS-682] - Master should properly consolidate "slaves" and "deactivated" maps
    * [MESOS-743] - ReservationAllocatorTest.ResourcesReturned test is flaky
    * [MESOS-767] - Slave should re-register with completed frameworks/executors
    * [MESOS-779] - mesos python examples use 2 space indent
    * [MESOS-873] - Crash in os::killtree on Mavericks
    * [MESOS-931] - post-review is deprecated.
    * [MESOS-1000] - Clang build broken on 0.18.0 master
    * [MESOS-1019] - AllocatorZooKeeperTest/0.SlaveReregistersFirst is flaky.
    * [MESOS-1020] - AllocatorZooKeeperTest/0.SlaveReregistersFirst is flaky
    * [MESOS-1025] - json_tests fails build
    * [MESOS-1042] - Fix bad CGROUPS_ROOT_Write test
    * [MESOS-1048] - LimitedCpuIsolatorTest.CgroupsCfs is broken when run as non-root
    * [MESOS-1053] - tar: You must specify one of the `-Acdtrux' or `--test-label'  options
    * [MESOS-1054] - Java extension build is broken if libsnappy is installed
    * [MESOS-1058] - Master CHECK failure: hierarchical_allocator_process.hpp:421 Check failed: !slaves.contains(slaveId)
    * [MESOS-1062] - CpuIsolatorTest/0.SystemCpuUsage is flaky
    * [MESOS-1067] - Specifying minimum logging level doesn't work
    * [MESOS-1072] - Update system check (python boto)
    * [MESOS-1077] - Registrar tests are flaky.
    * [MESOS-1080] - cpplint.py doesn't analyze hpp files
    * [MESOS-1082] - Make fails on AWS Ubuntu 12.04 and 13.10
    * [MESOS-1083] - Error in CgroupsTest::SetUpTestCase() and TearDownTestCase()
    * [MESOS-1088] - ZooKeeperMasterContenderDetectorTest.MasterDetectorExpireSlaveZKSessionNewMaster is flaky
    * [MESOS-1092] - [Doc] "bin/mesos-master --help" to "mesos-master --help"
    * [MESOS-1099] - Log health checks in mesos
    * [MESOS-1100] - Drop "OOM notifier is triggered" log message
    * [MESOS-1124] - Mesos EC2 scripts: Cannot find any cluster
    * [MESOS-1126] - Change linkage around libjvm to use dlopen.
    * [MESOS-1152] - ProcTest.MultipleThreads is flaky
    * [MESOS-1157] - make dist fail
    * [MESOS-1158] - make distcheck fail
    * [MESOS-1161] - Inconsistent completed frameworks state between slave and master
    * [MESOS-1164] - URL encoded urls do not work in slave
    * [MESOS-1165] - Retry required when recovering an empty log
    * [MESOS-1167] - Update system check (boost)
    * [MESOS-1168] - Update system check (zookeeper)
    * [MESOS-1175] - Update system check (http-parser)
    * [MESOS-1191] - ProcTest unit tests flaky
    * [MESOS-1202] - Make it easy to apply GitHub pull requests
    * [MESOS-1210] - OsTest.children test is flaky
    * [MESOS-1211] - MesosContainerizer should  recover isolators after the launcher recovers
    * [MESOS-1214] - CHECK failure in Group
    * [MESOS-1230] - Compiler warning in libprocess statistics
    * [MESOS-1231] - CHECK failed in log coordinator
    * [MESOS-1235] - Metrics.Snapshot* tests fail
    * [MESOS-1239] - Group CHECK failure
    * [MESOS-1264] - Slave authentication retries can trigger TASK_LOST for non-checkpointing frameworks.
    * [MESOS-1265] - Group should not process enqueued events from previous ZooKeeper instance (and ZK session)
    * [MESOS-1268] - distclean break during maven clean up
    * [MESOS-1271] - CHECK failure in replica.
    * [MESOS-1273] - SlaveRecoveryTest/0.RestartBeforeContainerizerLaunch is flaky
    * [MESOS-1275] - FaultToleranceTest.SlaveReregisterOnZKExpiration is flaky
    * [MESOS-1276] - Make the delay between master detection and registration configurable
    * [MESOS-1310] - Queuing up slave (re-)registration during authentication causes reply() to fail
    * [MESOS-1318] - ProcessWatcher triggers seg fault
    * [MESOS-1331] - SlaveRecoveryTest/0.NonCheckpointingFramework is flaky.
    * [MESOS-1333] - Runtime error when invoking post-reviews.py with rbt 0.6
    * [MESOS-1347] - GarbageCollectorIntegrationTest.DiskUsage is flaky.
    * [MESOS-1348] - The SlaveRecoveryTest.GCExecutor test leaks child processes.
    * [MESOS-1361] - Flaky test: SlaveRecoveryTest/0.RecoverCompletedExecutor
    * [MESOS-1362] - Flaky test: SlaveRecoveryTest/0.RemoveNonCheckpointingFramework
    * [MESOS-1365] - SlaveRecoveryTest/0.MultipleFrameworks is flaky
    * [MESOS-1368] - Credentials file permissions check is broken
    * [MESOS-1370] - SlaveRecoveryTest/0.RemoveNonCheckpointingFramework is flaky
    * [MESOS-1372] - Compiler warning from stout flags
    * [MESOS-1376] - CHECK failure in the Registrar
    * [MESOS-1400] - Master doesn't recover resources for invalid offers
    * [MESOS-1406] - Master stats.json using boolean instead of integral value for 'elected'.
    * [MESOS-1408] - Unnecessary queuing of status update acknowledgments in the scheduler driver.
    * [MESOS-1413] - MesosContainerizerExecuteTest.IoRedirection  fails on OSX
    * [MESOS-1415] - Web UI master redirect message doesn't show up
    * [MESOS-1418] - Master should remove/rescind offers for disconnected slave.
    * [MESOS-1419] - Properly rescind offers
    * [MESOS-1449] - Isolator::recover will attempt to remove slave cgroup when using --slave_subsystems
    * [MESOS-1455] - Segfault in libprocess during Process linking.

** Documentation
    * [MESOS-1002] - Add "make check" instruction to getting started doc
    * [MESOS-1377] - Update configuration documentation to reflect 0.19.0 master flags.

** Epic
    * [MESOS-764] - Implement Master persistence using the Registrar.

** Improvement
    * [MESOS-135] - Improve javadoc (use @param, @return, etc)
    * [MESOS-269] - Better JSON Support
    * [MESOS-295] - Allow new masters to have better understanding of cluster state
    * [MESOS-581] - Expose cpu and memory usage statistics for master and slave
    * [MESOS-610] - Split slave specific tests out of master_tests
    * [MESOS-922] - Containerizer to support launching tasks by TaskInfo
    * [MESOS-945] - Show framework host name in the WebUI
    * [MESOS-956] - Add an "Sequence" abstraction to serialize callbacks.
    * [MESOS-980] - Revisit Future discard semantics to enforce that transitions occur through a Promise.
    * [MESOS-982] - Relax slave (re-)registration retries and add a backoff mechanism.
    * [MESOS-983] - Expose log coordinator demotion.
    * [MESOS-984] - Implement "auto-initialization" of the Replicated Log.
    * [MESOS-995] - Extend Subprocess to support environment variables, changing user and working directory
    * [MESOS-1015] - Some header files have 'using' statements
    * [MESOS-1026] - Pull std::tuple / boost::tuples::tuple into tuples namespace of stout
    * [MESOS-1036] - Implement a library for exposing statistical metrics.
    * [MESOS-1041] - fatal() should use abort rather than exit(1) to get stacktraces
    * [MESOS-1052] - Add a script that can run via CI to verify the reviews.
    * [MESOS-1055] - Add explicit to single argument constructors
    * [MESOS-1057] - libprocess: Add explicit to single argument constructors
    * [MESOS-1068] - No --version command line parameter
    * [MESOS-1087] - Display warning for credentials file permissions
    * [MESOS-1105] - TODO(benh): choose a better scheme to set mem in slave/containerizer/containerizer.cpp
    * [MESOS-1112] - Refactor the Registrar to push the operations to the caller to simplify the interface
    * [MESOS-1151] - Make review bot check for style issues
    * [MESOS-1155] - Improve the performance of Registrar
    * [MESOS-1160] - Support flattening from Try into Future.
    * [MESOS-1182] - Implement an output stream operator overload for Master::Slave
    * [MESOS-1224] - Add dynamic loadable library abstraction to stout.
    * [MESOS-1234] - Mesos ReviewBot should look at old reviews first
    * [MESOS-1252] - Support ENV MAVEN_HOME to establish the path of the `mvn` executable.
    * [MESOS-1255] - Master UI should show Mesos version
    * [MESOS-1270] - Reconcile logging messages in master
    * [MESOS-1274] - Disallow further operations in the Registrar when a failure occurs.
    * [MESOS-1287] - metrics collection should not wait indefinitely
    * [MESOS-1332] - Improve Master and Slave metric names
    * [MESOS-1344] - Add flags support for JSON
    * [MESOS-1349] - Mesos style checker should only check for updated files
    * [MESOS-1358] - Show when the leading master was elected in the webui
    * [MESOS-1382] - Include the error message in routing::socket().
    * [MESOS-1405] - Mesos fetcher does not support S3(n)

** Story
    * [MESOS-804] - Add authentication support for slaves
    * [MESOS-838] - Consider exporting queue size as a metric from the master

** Task
    * [MESOS-911] - Add pluggable authorization interface
    * [MESOS-974] - Add a unit test for java api of replicated log
    * [MESOS-981] - Implement Storage on the Replicated Log.
    * [MESOS-1116] - Create library to track statistics of metrics
    * [MESOS-1123] - Implement tests for stout/cache.hpp
    * [MESOS-1132] - Port master stats.json over to new metrics library
    * [MESOS-1133] - Port slave stats.json over to new metrics library
    * [MESOS-1146] - Port system process stats over to new metrics library
    * [MESOS-1197] - Adding signal safe os::system
    * [MESOS-1217] - Add Timer metric to Metrics library
    * [MESOS-1284] - metrics Timer should use Clock
    * [MESOS-1304] - Create framework rate limiting design document and gather feedback
    * [MESOS-1305] - Export frameworks QPS through metrics endpoint
    * [MESOS-1314] - Update default registry to "replicated_log".
    * [MESOS-1317] - Add integration tests to enforce the semantics of a "strict" registry.
    * [MESOS-1319] - Add recovery integration tests for a "strict" registry.
    * [MESOS-1320] - Add reconciliation integration tests for a "strict" registry.
    * [MESOS-1321] - Add killTask integration tests for a "strict" registry.
    * [MESOS-1322] - Add failover integration tests for a "strict" registry.
    * [MESOS-1371] - Expose libprocess queue length from scheduler driver to metrics endpoint
    * [MESOS-1373] - Keep track of the principals for authenticated pids in Master.
    * [MESOS-1380] - mesos-local should set default work_dir
    * [MESOS-1383] - Expose the authenticated principal through Authenticator::authenticate() result
    * [MESOS-1387] - Integrate Authorizer into Master
    * [MESOS-1411] - Update Master and Slave to handle status update acknowledgments going through the master.


Release Notes - Mesos - Version 0.18.2
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-1313] - The executor bit is now essentially ignored with the 0.18.1 fetcher implementation


Release Notes - Mesos - Version 0.18.1
--------------------------------------
* This is a bug fix release.

** Bug
    * [MESOS-979] - Master segfault when tasks.json endpoint is hit
    * [MESOS-1045] - Unrecognized file extension in CommandInfo.URI causes executor to exit
    * [MESOS-1078] - JNI calls hasNext on ArrayList instead of iterator
    * [MESOS-1221] - Slave should update the containerizers with executor resources after recovery
    * [MESOS-1241] - Unable to disable the auto-extraction of URIs (mesos-fetcher)

** Improvement
    * [MESOS-1212] - Use maven to compile and package Mesos' Java files


Release Notes - Mesos - Version 0.18.0
--------------------------------------
* The primary feature of this release is a refactor of the isolation
  abstraction to make it easy to add pluggable isolators/containerizers.

** Sub-task
    * [MESOS-1043] - Change configure.ac to use C++11 by default.

** Bug
    * [MESOS-422] - Master leader election should be more robust to stale ephemeral nodes
    * [MESOS-537] - ZooKeeperMasterDetectorTest.MasterDetectorExpireSlaveZKSessionNewMaster is flaky
    * [MESOS-672] - Web UI redirection does not work for hosts whose ip addresses are not publicly accessible
    * [MESOS-837] - AWAIT_READY should not depend on process::Clock
    * [MESOS-904] - Check for libcxx is missing in configure.ac
    * [MESOS-912] - Slave sometimes crashes with SIGPIPE
    * [MESOS-927] - OsTest.killtree is flaky
    * [MESOS-937] - Fix "pure virtual method called" bug in zookeeper::ProcessWatcher
    * [MESOS-952] - Clock::resume should adjust timeouts that were created in a paused/advanced Clock context.
    * [MESOS-954] - The /__processes__ endpoint in libprocess is missing a needed lock acquisition.
    * [MESOS-958] - Group should not ignore the ZNOAUTH error in creating the parent path for the group
    * [MESOS-963] - Compile fails on 10.9
    * [MESOS-965] - GroupTest.GroupWatchWithSessionExpiration is flaky
    * [MESOS-966] - symbolize.cc:235:58: error: invalid suffix on literal; C++11 requires a space between literal and identifier
    * [MESOS-967] - configure: error: cannot find libsasl2
    * [MESOS-977] - MasterZooKeeperTest.LostZooKeeperCluster is flaky
    * [MESOS-985] - FaultToleranceTest.IgnoreKillTaskFromUnregisteredFramework is flaky
    * [MESOS-989] - Flaky whitelist tests
    * [MESOS-991] - hashmap.hpp error: control reaches end of non-void function
    * [MESOS-1009] - src/demangle.cc:170:13: error: comparison between pointer and integer ('const char *' and 'int')
    * [MESOS-1029] - lib stout compile errors on Ubuntu 13.10 with Clang 3.5
    * [MESOS-1030] - Mesos compile errors on Ubuntu 13.10 with Clang 3.5: const & ..., header guard
    * [MESOS-1038] - Log coordinator should demote itself after a write is discarded.
    * [MESOS-1045] - Unrecognized file extension in CommandInfo.URI causes executor to exit
    * [MESOS-1049] - Cpu Isolator incorrectly writes double values when writing cpu.cfs_quota_us.
    * [MESOS-1050] - Containerizer broke getting hadoop binary from $HADOOP_HOME and $PATH
    * [MESOS-1051] - tar command used in fetcher not portable to OS X
    * [MESOS-1063] - Containerizer fails when fetching more than one URL
    * [MESOS-1079] - Mesos python egg build failure on OS X Mavericks (Xcode 5.1)
    * [MESOS-1086] - DRF allocator should take into account past allocations when determining an ordering so frameworks are not starved.
    * [MESOS-1095] - Build failure on OSX when using gcc-4.7
    * [MESOS-1121] - /usr/include/c++/4.7/type_traits:1834:9: error: no match for call to '(std::_Bind<process::Future<process::http::Response> (*(std::_Placeholder<1>))(const std::basic_string<char>&)>) ()'
    * [MESOS-1128] - ':' colon in executor work directories is unusual
    * [MESOS-1135] - A re-registering framework that authenticates with Master might not get any offers
    * [MESOS-1176] - make distcheck fails when enabling c++11

** Documentation
    * [MESOS-926] - Document change to separate cgroup mounts

** Improvement
    * [MESOS-903] - Store MasterInfo in ZK to enable master web UI redirection etc.
    * [MESOS-943] - Provide an abstraction for asynchronous launching of subprocesses.
    * [MESOS-975] - Show git tag info in master and slave log output

** New Feature
    * [MESOS-600] - Rework Isolator abstraction


Release Notes - Mesos - Version 0.17.0
--------------------------------------
* The primary feature of this release is to add recovery support for
  replicated log to make it more resilient to disk failures.
 * If less than quorum of disks fail, the replicated log will
   automatically perform catch-up to recover lost data.

** Sub-task
    * [MESOS-902] - add post to libprocess

** Bug
    * [MESOS-280] - ExecutorDriver methods' javadocs should not be referring to SchedulerDriver methods
    * [MESOS-533] - SlaveRecoveryTest/0.CleanupExecutor is flaky on Jenkins.
    * [MESOS-789] - Make link to times in the webui clickable
    * [MESOS-799] - Mesos python egg is faulty on OS X Mavericks
    * [MESOS-831] - script-without-shebang
    * [MESOS-861] - FaultToleranceTest.FrameworkReliableRegistration could hang
    * [MESOS-875] - A recovering slave should not ignore valid status updates.
    * [MESOS-877] - Future::then and Promise::associate have memory leaks.
    * [MESOS-897] - Cleanup of stout headers from fedora review
    * [MESOS-913] - Help endpoint does not work on slaves.
    * [MESOS-916] - add .gitignore-template file for ./bootstrap generated files
    * [MESOS-925] - remove --without-curl from libprocess
    * [MESOS-941] - Memory limit not correctly set when no memory resource set on executor level
    * [MESOS-951] - Build failure: in log/catchup.cpp on Clang
    * [MESOS-993] - Performance issue during replicated log catch-up when the initial log position is large
    * [MESOS-1014] - Log truncation takes a long time during catch-up if the initial position is very large

** Documentation
    * [MESOS-929] - Aurora not added to the framework docs

** Improvement
    * [MESOS-749] - Add support for multiple offers in launchTasks
    * [MESOS-772] - expose count of running tasks
    * [MESOS-827] - Create LOOP_FOR(duration) macro to guard testing loop from running indefinitely
    * [MESOS-860] - Get mesos' libprocess dependency glog to compile with clang and libc++
    * [MESOS-863] - Get mesos' libprocess dependency protobuf to compile with clang and libc++
    * [MESOS-864] - Eliminate the use of internal stdlibc++ templates for achieving libc++ compatibility
    * [MESOS-896] - Enable newer versions of http_parser.

** New Feature
    * [MESOS-736] - Support catch-up replicated log

** Task
    * [MESOS-323] - Get mesos compiling with clang to open up path forward to c++11
    * [MESOS-519] - Deprecate and remove old monitoring endpoint.


Release Notes - Mesos - Version 0.16.0
--------------------------------------
* The primary feature of this release is major refactoring work on the
  master election and detection process to improve its reliability and
  flexibility.

** Sub-task
    * [MESOS-645] - Improve the performance of Future.

** Bug
    * [MESOS-403] - CoordinatorTest.TruncateLearnedFill test is flaky
    * [MESOS-455] - ZooKeeperTest.MasterDetectorShutdownNetwork runs forever
    * [MESOS-463] - Detector ZNode creation failure.
    * [MESOS-465] - Failures due to ZooKeeper operation timeouts in the master detector.
    * [MESOS-498] - ZooKeeperTest.MasterDetectorTimedoutSession is flaky
    * [MESOS-536] - GarbageCollectorTest.Unschedule is flaky
    * [MESOS-592] - Don't dump a stack trace from bad --zk flag in the detector, use EXIT(1) instead of LOG(FATAL).
    * [MESOS-624] - Master improperly prints the exit status of the executor
    * [MESOS-641] - Stout killtree / pstree tests fail on Ubuntu 10.04.
    * [MESOS-778] - FaultToleranceTest.ReconcileIncompleteTasks test is flaky
    * [MESOS-782] - Slaves in local cluster should get unique work directories
    * [MESOS-795] - ZooKeeperTest.MasterDetectorTimedoutSession test is flaky
    * [MESOS-800] - CHECK failure in cgroups_isolator.
    * [MESOS-807] - Discard is not propagated in process::dispatch.
    * [MESOS-811] - Group::cancel can return a failed future if the membership is already cancelled
    * [MESOS-822] - AllocatorTest/0.SchedulerFailover is flaky
    * [MESOS-823] - ZooKeeperMasterContenderDetectorTest.ContenderDetectorShutdownNetwork is flaky
    * [MESOS-826] - Bad 'master' flag in slave should not print a stack trace
    * [MESOS-828] - CgroupsIsolator BalloonFramework Test is broken.
    * [MESOS-842] - ZooKeeperMasterContenderDetectorTest.ContenderDetectorShutdownNetwork runs forever
    * [MESOS-844] - Slave should not recover checkpointed data immediately after reboot
    * [MESOS-851] - Scheduler Driver does not guarantee that abort() prevents further calls on the Scheduler.
    * [MESOS-858] - Ignore launch/kill requests in the slave originating from non-leading masters.
    * [MESOS-859] - Cgroup kill should use cgroup.procs, not tasks
    * [MESOS-866] - Pailer popup window is not scrollable in Chrome or Safari
    * [MESOS-867] - ZK Membership IDs are 32 bit signed integers, not 64 bit unsigned integers.
    * [MESOS-870] - Slave http endpoint can crash the slave when no master is detected.
    * [MESOS-871] - GroupTest.RetryableErrors is flaky
    * [MESOS-883] - Group's handling of non-retryable errors and local timeout is incorrect
    * [MESOS-884] - Incorrect asynchronous detection and contention loops in Master
    * [MESOS-889] - Bad 'master' string given by scheduler should not print a stack trace
    * [MESOS-892] - Additional Issues with contender related change
    * [MESOS-935] - Group should tell MasterDetector "no memberships detected" when it locally times out
    * [MESOS-940] - Slave should checkpoint bootid after recovery instead of after registration

** Improvement
    * [MESOS-111] - Add SVN ignore and git ignore info to repository
    * [MESOS-728] - Masters should seppuku using EXIT instead of abort() when leadership is lost.
    * [MESOS-756] - Improve release tooling.
    * [MESOS-760] - Capture memory usage statistics before OOM
    * [MESOS-761] - Export all memory stats from memory.stat via CgroupsIsolator's usage()
    * [MESOS-768] - Executor driver stop() should dispatch stop to executor process instead of terminating it
    * [MESOS-802] - Web UI shows no errors when navigation to slave fails
    * [MESOS-806] - Allowing converting from an Owned<T> to a Shared<T>.
    * [MESOS-818] - Bump up the minimum number threads libprocess creates to accommodate new tests
    * [MESOS-833] - The Status Update Manager should use a back-off mechanism for retried updates.
    * [MESOS-835] - Reduce the minimum amount of CPUs required to make offers
    * [MESOS-849] - As a developer I should be able to set the AUTOMAKE and ACLOCAL environment variables for autoconf to pickup when using the bootstrap script.
    * [MESOS-881] - Tests are slow because the scheduler attempts to authenticate before the master realizes it is elected.
    * [MESOS-900] - Paginate all tables in the web UI


Release Notes - Mesos - Version 0.15.0
--------------------------------------
* The primary feature in this release is to add authentication support
  between frameworks and masters.
 * You can set --authentication=true on masters to only allow
   authenticated frameworks to register.
 * Frameworks can call the new `MesosSchedulerDriver` constructor to
   enable authentication.

* This release also moves Jenkins framework out of the mesos repo to
  https://github.com/jenkinsci/mesos-plugin.

** Sub-task
    * [MESOS-742] - GC directories based on modification time
    * [MESOS-766] - Make --checkpoint to true by default

** Bug
    * [MESOS-400] - Example Java framework test is flaky
    * [MESOS-467] - AllocatorTest.FrameworkExited is flaky
    * [MESOS-477] - Improve stout duration tests and Stringify(Days(value))
    * [MESOS-512] - GroupTest.MultipleGroups is flaky.
    * [MESOS-577] - bootstrap fails with automake 1.14
    * [MESOS-650] - SlaveExecutorRerouterCtrl does not handle missing slave.
    * [MESOS-655] - FaultToleranceTest.MasterFailover not simulating a realistic Master shutdown
    * [MESOS-661] - WebUI pailer does not preserve newlines when data is copied from firefox.
    * [MESOS-664] - Type resolution issue on 32 bit systems
    * [MESOS-685] - SlaveRecoveryTest/0.RecoveryTimeout Java SIGSEGV
    * [MESOS-686] - Testing isolator is broken when multiple frameworks are in play
    * [MESOS-702] - Webui table headers are not consistently aligned vertically
    * [MESOS-729] - ./stout/include/stout/hashmap.hpp:49:5: error: ‘erase’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    * [MESOS-732] - Make slave recovery asynchronous
    * [MESOS-734] - MasterTest.ReconcileTaskTest "not authenticated"
    * [MESOS-737] - Recover completed frameworks/executors during recovery
    * [MESOS-738] - CgroupsIsolatorTest.ROOT_CGROUPS_BalloonFramework_NoBuffer can't finish
    * [MESOS-746] - master error when start with --weights  input parameters
    * [MESOS-747] - FaultToleranceTest.ReregisterFrameworkExitedExecutor test fails
    * [MESOS-758] - Incorrect memory statistics are reported under linux
    * [MESOS-762] - Revert the use of the soft limit and memory threshold notifications.
    * [MESOS-771] - StatusUpdateManagerTest.DuplicateTerminalUpdateBeforeAck is flaky
    * [MESOS-773] - StatusUpdateManagerTest.DuplicateTerminalUpdateBeforeAck is flaky
    * [MESOS-774] - FaultToleranceTest.MasterFailover test is flaky
    * [MESOS-777] - GarbageCollectorIntegrationTest.ExitedFramework test is flaky
    * [MESOS-787] - Authenticatee process deadlocks
    * [MESOS-792] - FaultToleranceTest.SchedulerFailoverFrameworkMessage is flaky
    * [MESOS-801] - SlaveRecoveryTest / ReconcileTasksMissingFromSlave is flaky.

** Documentation
    * [MESOS-518] - Improve README with Markdown

** Improvement
    * [MESOS-769] - Master's authenticate should not depend on 'from'

** New Feature
    * [MESOS-704] - Add authentication support using SASL and CRAM-MD5

** Task
    * [MESOS-608] - Move Jenkins code out of the mesos repo to Jenkins CI repo


Release Notes - Mesos - Version 0.14.1
--------------------------------------
* This is a bug fix release.

** Sub-task
    * [MESOS-725] - Slave should cleanup meta directory if started in non-strict mode and slave info changes.

** Bug
    * [MESOS-420] - Master crashes when re-registering framework
    * [MESOS-488] - The Master incorrectly sends a "Framework failed over" message when the scheduler driver retries an initial failover re-registration.
    * [MESOS-641] - Stout killtree / pstree tests fail on Ubuntu 10.04.
    * [MESOS-658] - A framework can be incorrectly removed by the Master.
    * [MESOS-662] - Executor OOM could lead to a kernel hang
    * [MESOS-679] - Inability to find a latest run should not be considered a recovery error
    * [MESOS-680] - Empty files should not be considered as recovery errors
    * [MESOS-690] - Slave finalize() throws segfault
    * [MESOS-694] - Preserve exit status for SIGTERM.
    * [MESOS-711] - Master::reconcile incorrectly recovers resources from reconciled tasks.
    * [MESOS-714] - Slave should check if the (re-)registered is from the expected master

** Improvement
    * [MESOS-620] - Add slaveDisconnected and slaveReconnected calls to the Allocator


Release Notes - Mesos - Version 0.14.0
--------------------------------------
* The primary feature in this release is "Slave Recovery" which allows
  restarted slaves (e.g., deploys, crashes) to reconnect with old live
  executors/tasks. To enable slave recovery:
  * First you need to enable checkpointing on slaves with "--checkpoint" flag.
  * Frameworks can opt in to this feature by setting "FrameworkInfo.checkpoint"
    when registering with the master.
  * Once a Framework opts in, a restarted slave will recover all the framework's
    tasks and executors. The tasks/executors stay alive through a slave
    restart and reconnect with the restarted slave.
  * Slave recovery also improves the reliability of delivering status updates.

* The release also includes a new feature called "Resource Reservations" which
  allows reserving resources on a slave to particular roles (This is an
  experimental feature).

* This release also includes a new Mesos plugin for Jenkins which allows Jenkins
  to dynamically launch Jenkins slaves on a Mesos cluster (This is an
  experimental feature).

* There are also several bug fixes and stability improvements.

** Sub-task
    * [MESOS-548] - Upgrade angular.js to use the full angular-ui.js
    * [MESOS-549] - Change truncated IDs to show on hover
    * [MESOS-630] - Improve the performance of Master::Http::stats().

** Bug
    * [MESOS-235] - Mesos daemon ignores --conf option
    * [MESOS-368] - HTTP.Endpoints test is flaky.
    * [MESOS-370] - The process based isolation module should walk the process tree to collect resource usage.
    * [MESOS-380] - Command Executor doesn't send TASK_KILLED for killed tasks.
    * [MESOS-434] - Process isolator libprocess throws exception
    * [MESOS-449] - CgroupsTests are flaky on Ubuntu
    * [MESOS-451] - Always update resources for re-registered executors.
    * [MESOS-461] - Freezer failure while in FREEZING state.
    * [MESOS-479] - SlaveRecoveryTest/0.CleanupExecutor failure.
    * [MESOS-485] - Latest trunk fails on strict aliasing on CentOS
    * [MESOS-490] - Update mesos-daemon.sh (and associated scripts) to work with new flags mechanisms.
    * [MESOS-497] - Queued tasks should be launched in the order they were received
    * [MESOS-499] - Local slave run crashes on startup
    * [MESOS-508] - Master crash due to Broken Pipe
    * [MESOS-514] - FaultToleranceTest.ReconcileIncompleteTasks is flaky
    * [MESOS-522] - ZooKeeperMasterDetectorTest.MasterDetectorExpireSlaveZKSessionNewMaster
    * [MESOS-534] - ReaperTest.TerminatedChildProcess is flaky on Jenkins.
    * [MESOS-545] - Remove hack in post-reviews.py for tracking parent branch
    * [MESOS-582] - HTTP.Endpoints is flaky
    * [MESOS-594] - Add CXXFLAGS='-fno-strict-aliasing' if using gcc 4.4.*.
    * [MESOS-597] - Set MESOS_NATIVE_LIBRARY or (DY)LD_LIBRARY_PATH before launching an executor in order to enable JVM based executors to easily find libmesos.so.
    * [MESOS-599] - Make sure stderr/stdout get launcher output.
    * [MESOS-607] - Slave recovery should properly handle executors that were cleanly terminated in the previous run
    * [MESOS-611] - Refactor slave recovery to ensure slave recovers its state first
    * [MESOS-612] - Slave should not recover completed executors
    * [MESOS-614] - Master should remove checkpointing slave that gets disconnected when the new slave tries to register
    * [MESOS-616] - The Master / Slave should not store frameworks as both active and completed.
    * [MESOS-619] - Master should properly reconcile KillTasks
    * [MESOS-627] - Slave should offer total disk instead of available disk by default
    * [MESOS-628] - A non-checkpointing slave should still cleanup the latest slave symlink
    * [MESOS-632] - Executor driver should commit suicide if it cannot re-connect with a slave after a timeout
    * [MESOS-633] - Master should inform a recovered slave about frameworks that were completed
    * [MESOS-635] - Master doesn't update the task state when it generates TASK_LOST
    * [MESOS-636] - Executors under cgroups isolator die immediately when a slave dies if it has a controlling TTY attached
    * [MESOS-637] - Executor should re-register with the updates in the same order as it received them
    * [MESOS-638] - Slave should not send command executor infos to master when it reregisters
    * [MESOS-640] - Duplicate status update with same UUID crashes the slave
    * [MESOS-644] - Slave doesn't correctly handle checkpointed terminal update whose ack doesn't reach the executor
    * [MESOS-646] - Slave recovery doesn't properly handle checkpointed queued tasks
    * [MESOS-648] - Slave should properly handle partial writes of status updates
    * [MESOS-657] - SlaveRecoveryTest/1.PartitionedSlave fails with cgroups
    * [MESOS-668] - SlaveRecoveryTest/0.MultipleFrameworks flaky
    * [MESOS-671] - CgroupsIsolator does not listen for OOM events on recovered executors.
    * [MESOS-673] - Task reconciliation does not properly release executor resources.
    * [MESOS-675] - CHECK failure in the Master.
    * [MESOS-676] - Slave::reregistered LOG(FATAL)s due to being in RECOVERING state.
    * [MESOS-689] - Master incorrectly rejects tasks for long lived executors if they don't have FrameworkID set

** Improvement
    * [MESOS-179] - Need to check for Python development headers
    * [MESOS-221] - New Allocators
    * [MESOS-329] - Add 'help' endpoints to libprocess.
    * [MESOS-552] - Jenkins scheduler should use the latest Mesos jar built from the repo
    * [MESOS-553] - Jenkins plugin should bundle the native Mesos library
    * [MESOS-554] - Jenkins scheduler should properly handle TASK_LOST
    * [MESOS-555] - Jenkins scheduler should reuse a Jenkins slave
    * [MESOS-557] - Upgrade to Bootstrap CSS v2.3.2
    * [MESOS-558] - Upgrade to full release of Angular JS
    * [MESOS-559] - Replace Bootstrap's JS with Angular UI Bootstrap
    * [MESOS-580] - Improve Command Executor
    * [MESOS-613] - Give better guidance when recovery fails
    * [MESOS-626] - Add the ability for example frameworks to checkpoint
    * [MESOS-634] - Make slave recovery more robust by ignoring absence of files
    * [MESOS-651] - Expose slave re-registration time in the Web UI
    * [MESOS-663] - Expose recovery errors when running recovery in --no-strict mode

** New Feature
    * [MESOS-110] - Slave Recovery: A slave restart should not restart tasks
    * [MESOS-203] - Killtree that recursively kills sessions
    * [MESOS-504] - Add weighted DRF.
    * [MESOS-505] - Add resource reservations/pools per role.
    * [MESOS-506] - Implement Jenkins scheduler for Mesos

** Task
    * [MESOS-643] - Revert the semantics of newly introduced changes to FrameworkReregistered messages
    * [MESOS-647] - Revert the default recovery mode to strict


Release Notes - Mesos - Version 0.13.0
--------------------------------------
* This release includes a major refactor of the internal testing infrastructure.
* There are also several bug fixes and stability improvements (esp. around ZooKeeper).
* Hadoop on Mesos is moved out of the mesos repo to its own repository (https://github.com/mesos/hadoop).

** Bug
    * [MESOS-77] - ExceptionTest.AbortOnFrameworkError sometimes hangs if Mesos built without optimizations
    * [MESOS-201] - CppFramework test occasionally fails
    * [MESOS-217] - LOST tasks are incorrectly reconciled between mesos and framework
    * [MESOS-232] - Unit test CoordinatorTest.Elect triggers non-deterministic assertion failure in libprocess.
    * [MESOS-276] - SIGSEV with current trunk and OpenJDK 7u3
    * [MESOS-277] - Java test framework test is flaky
    * [MESOS-289] - Zookeeper tests are flaky
    * [MESOS-301] - Coordinator test is flaky
    * [MESOS-318] - os::memory does not consider sysinfo.mem_unit
    * [MESOS-321] - libprocess http::encode fails test
    * [MESOS-344] - --disable-java still uses java headers during make check
    * [MESOS-353] - ZooKeepet state test GetSetGet hung
    * [MESOS-362] - Inconsistent slave maps in the master.
    * [MESOS-365] - Slave should reject tasks before registering with the master.
    * [MESOS-366] - Master check failure during load tests.
    * [MESOS-369] - Mesos tests spitting out error messages.
    * [MESOS-379] - Zookeeper MasterDetectorExpireSlaveZKSessionNewMaster test is flaky
    * [MESOS-385] - MasterTest.TaskRunning flaky on Jenkins.
    * [MESOS-392] - FaultTolerance SchedulerExit test hangs
    * [MESOS-393] - Forking at an unlucky time on OS X can cause the C++ library to deadlock.
    * [MESOS-394] - Don't do ExecutorLauncher in forked process but exec first instead.
    * [MESOS-395] - FaultToleranceTest.SchedulerFailoverFrameworkMessage test is flaky.
    * [MESOS-399] - MonitorTest.WatchUnwatch failed.
    * [MESOS-400] - Example Java framework test is flaky
    * [MESOS-401] - SlaveRecoveryTest/0.RecoverTerminatedExecutor is flaky on OSX.
    * [MESOS-402] - CoordinatorTest.TruncateNotLearnedFill test is flaky
    * [MESOS-405] - SlaveRecoveryTest/1.ReconnectExecutor crashes.
    * [MESOS-406] - Google mock throws a segfault when invoked by TestFilter
    * [MESOS-407] - Google test filter processing is incorrect for the empty string.
    * [MESOS-408] - FaultToleranceTest.SlavePartitioned is flaky
    * [MESOS-412] - MasterTest.ShutdownUnregisteredExecutor flaky
    * [MESOS-423] - A slave asked to shutdown should not re-register with a new slave id
    * [MESOS-424] - CgroupsIsolatorTest.BalloonFramework runs forever
    * [MESOS-436] - FaultToleranceTest.SchedulerFailover test is flaky
    * [MESOS-437] - ResourceOffersTest.ResourceOfferWithMultipleSlaves is flaky
    * [MESOS-440] - Allow for headroom in the GC algorithm.
    * [MESOS-441] - AllocatorZooKeeperTest/0.FrameworkReregistersFirst is flaky
    * [MESOS-446] - Master should shutdown slaves that were deactivated
    * [MESOS-447] - Master should send TASK_LOST updates for unknown tasks when slave reregisters
    * [MESOS-450] - The master should shut down slaves upon removal.
    * [MESOS-453] - AllocatorZookeeper tests are using /tmp/mesos work directory
    * [MESOS-454] - ResourceOffers tests are using /tmp/mesos working directory
    * [MESOS-462] - Resource usage collection failure messages have '1' as the failure message.
    * [MESOS-469] - Scheduler driver should call disconnected on master failover
    * [MESOS-474] - Mesos 0.10.0: make check fails on Ubuntu 12.04LTS
    * [MESOS-476] - Upgrade libev to 4.15
    * [MESOS-481] -  Slave needs to only inform the master about non-terminal executors, for proper resource accounting
    * [MESOS-482] - Status update manager should not cleanup the stream when there are pending updates, even though it received an ACK for a terminal update
    * [MESOS-484] - Latest ZooKeeperState.cpp doesn't compile on Mountain Lion
    * [MESOS-502] - Slave crashes when handling duplicate terminal updates
    * [MESOS-515] - Slave fails to detect free disk space
    * [MESOS-524] - JVM tests are flaky on OSX.
    * [MESOS-530] - A registered slave should check registration id when it receives mulitple re(re-)gistered messages from the master
    * [MESOS-535] - Master crashes when removing non-checkpointing framework from a checkpointing slave
    * [MESOS-538] - Master should not offer non-checkpointing slave's resources to checkpointing frameworks
    * [MESOS-587] - MesosNativeLibrary.java doesn't read environment variable "MESOS_NATIVE_LIBRARY".
    * [MESOS-604] - Slave should use the filesystem containing the work directory for disk usage calculation
    * [MESOS-605] - Fix wrong compression for hadoop package
    * [MESOS-606] - Slave incorrectly moves a task from 'terminatedTasks' to 'completedTasks'
    * [MESOS-609] - Executor should remove the task from queuedTasks when it moves a queued task to terminatedTasks.

** Improvement
    * [MESOS-46] - Refactor MasterTest to use fixture
    * [MESOS-134] - Add Python documentation
    * [MESOS-140] - Unrecognized command line args should fail the process
    * [MESOS-242] - Add more tests to Dominant Share Allocator
    * [MESOS-305] - Inform the frameworks / slaves about a master failover
    * [MESOS-346] - Improve OSX configure output when deprecated headers are present.
    * [MESOS-360] - Mesos jar should be built for java 6
    * [MESOS-409] - Master detector code should stat nodes before attempting to create
    * [MESOS-472] - Separate ResourceStatistics::cpu_time into ResourceStatistics::cpu_user_time and ResourceStatistics::cpu_system_time.
    * [MESOS-493] - Expose version information in http endpoints
    * [MESOS-503] - Master should log LOST messages sent to the framework
    * [MESOS-526] - Change slave command line flag from 'safe' to 'strict'
    * [MESOS-602] - Allow Mesos native library to be loaded from an absolute path
    * [MESOS-603] - Add support for better test output in newer versions of autools

** New Feature
    * [MESOS-169] - Ability to for tests to catch in-flight messages that are dispatched

** Task
    * [MESOS-618] - Remove Hadoop on Mesos from repository in favor of external repository
    * [MESOS-643] - Revert the semantics of newly introduced changes to FrameworkReregistered messages


Release Notes - Mesos - Version 0.12.1
--------------------------------------
* This release is primarily a bug fix release with a few small features for running JVM frameworks, like Hadoop and Jenkins.

** Bug
    * [MESOS-515] - Slave fails to detect free disk space
    * [MESOS-524] - JVM tests are flaky on OSX.
    * [MESOS-587] - MesosNativeLibrary.java doesn't read environment variable "MESOS_NATIVE_LIBRARY".
    * [MESOS-597] - Set MESOS_NATIVE_LIBRARY or (DY)LD_LIBRARY_PATH before launching an executor in order to enable JVM based executors to easily find libmesos.so.
    * [MESOS-599] - Make sure stderr/stdout get launcher output.
    * [MESOS-604] - Slave should use the filesystem containing the work directory for disk usage calculation
    * [MESOS-605] - Fix wrong compression for hadoop package

** Improvement
    * [MESOS-179] - Need to check for Python development headers
    * [MESOS-346] - Improve OSX configure output when deprecated headers are present.
    * [MESOS-360] - Mesos jar should be built for java 6
    * [MESOS-602] - Allow Mesos native library to be loaded from an absolute path
    * [MESOS-603] - Add support for better test output in newer versions of autools


Release Notes - Mesos - Version 0.12.0
--------------------------------------
* This release includes bug fixes and stability improvements.
* The primary feature in this release is executor resource consumption monitoring. Slaves now monitor resource consumption of running executors and expose it over JSON and through the webui.
* This release also includes a new and improved Hadoop framework. The new port doesn't require patching Hadoop (i.e., it's a self contained Hadoop contrib) and lets you use existing schedulers (e.g., the fair scheduler or capacity scheduler)! The tradeoff, however, is that it doesn't take as much advantage of the fine-grained nature of a Mesos task (i.e., there is no longer a 1-1 mapping between a Mesos task and a map/reduce task).

** Sub-task
    * [MESOS-214] - Report resources being used by executors
    * [MESOS-419] - Old slave directories should not be garbage collected based on file modification time

** Bug
    * [MESOS-107] - Scheduler library should not acknowledge a status update if the driver has been aborted.
    * [MESOS-152] - Slave should forward status updates for unknown tasks
    * [MESOS-285] - configure.macosx checks for version "10.7" but should check for 10.7 or greater
    * [MESOS-307] - Web UI file download links are broken.
    * [MESOS-317] - python mesos core bindings rejects framework messages with null bytes
    * [MESOS-319] - Fix buggy read / write calls.
    * [MESOS-325] - make clean is broken
    * [MESOS-332] - Executor launcher fetches resources as slave user, instead of executor user.
    * [MESOS-340] - Gperftools target always rebuilds.
    * [MESOS-374] - HTTP GET requests to /statistics/snapshot.json crash the slave
    * [MESOS-422] - Master leader election should be more robust to stale ephemeral nodes
    * [MESOS-486] - TaskInfo should include a 'source' in order to enable getting resource monitoring statistics.

** Improvement
    * [MESOS-293] - Make clean deletes checked in files.

** New Feature
    * [MESOS-99] - display slave resource usage information in the slave webui

** Task
    * [MESOS-274] - Unicode / Binary files over http endpoints.
    * [MESOS-324] - Monitor executor resource usage.
    * [MESOS-331] - Add --disable-perftools to configure.


Release Notes - Mesos - Version 0.11.0
--------------------------------------
** Brainstorming
    * [MESOS-357] - participate in GSoC 2013
    * [MESOS-358] - do not participate in the GSoC 2013

** Bug
    * [MESOS-260] - Implement a duration abstraction
    * [MESOS-261] - bootstrap fails when automake version >= 1.12
    * [MESOS-263] - Complete the new webui (slave, framework, executor pages)
    * [MESOS-264] - Make fails on the latest ubuntu
    * [MESOS-270] - Log viewing broken on mesos-local runs
    * [MESOS-364] - cgroup tests fail on Ubuntu
    * [MESOS-386] - AllocatorTest/0.TaskFinished has incomplete expectations.
    * [MESOS-388] - Latest update breaks building on OSX
    * [MESOS-404] - FilesTest.BrowseTest is flaky
    * [MESOS-413] - AllocatorTest/0.TaskFinished test has bad expectations.

** Improvement
    * [MESOS-252] - Web UI Improvements
    * [MESOS-253] - Enable -Wall -Werror on the build
    * [MESOS-254] - Improve mesos slave's garbage collection
    * [MESOS-259] - Expose slave attributes in slave endpoint & sortable tables

** Task
    * [MESOS-275] - HTTP endpoint for file download.
    * [MESOS-279] - Impose a limit on HTTP Response size
    * [MESOS-389] - Add OSX slave to the Jenkins build.
    * [MESOS-491] - Add mesos-0.11.0-incubating jar to maven central


Release Notes - Mesos - Version 0.10.0
--------------------------------------
** Sub-task
    * [MESOS-89] - create utilities to collect information from the proc filesystem
    * [MESOS-212] - Eliminate Bottle and Python based webui.
    * [MESOS-222] - Rename SimpleAllocator to DominantShareAllocator
    * [MESOS-223] - Libprocess-ify Allocator
    * [MESOS-224] - Write allocator tests

** Bug
    * [MESOS-17] - Hadoop executors killed while tasks in COMMIT_PENDING
    * [MESOS-34] - Rendering JSON needs to escape strings properly.
    * [MESOS-44] - Master Detector uses the wrong ACL when auth is not required
    * [MESOS-48] -  Remove the failover flag from executor driver
    * [MESOS-54] - Mesos ZooKeeper authentication is broken
    * [MESOS-83] - Filters should be removed when more resources are available than rejected offer had
    * [MESOS-145] - mesos executor holds on to fd spawned by slave after slave death, preventing slave from restarting
    * [MESOS-148] - Building of included Hadoop broken
    * [MESOS-164] - Crash on Mac OS X due to dlopen not being thread-safe
    * [MESOS-183] - Included MPI Framework Fails to Start
    * [MESOS-187] - Mesos should not pass an invalid task to a slave
    * [MESOS-190] - Slave seg fault when executor exited
    * [MESOS-199] - Attempting to use killtree.sh after forked pid has died is fruitless.
    * [MESOS-200] - New Linux 'proc' code assuming too new a kernel.
    * [MESOS-209] - A race bug in ProcessManager::spawn in libprocess.
    * [MESOS-211] - Fix Slave GC tests
    * [MESOS-218] - Master throws exception on removeTask() if Framework is not connected
    * [MESOS-220] - Slave throws exception in librocess when master is down
    * [MESOS-229] - mesos zookeeper group code fails to connect when pre-existing children of the group path are read-only
    * [MESOS-233] - port should not be of type short
    * [MESOS-239] - Allocator doesn't handle framework failover correctly
    * [MESOS-244] - Mesos slave process is not shutting down cleanly
    * [MESOS-247] - Ranges comparison has a bug
    * [MESOS-248] - Python quit unexpectedly while using mesos plugin
    * [MESOS-251] - DRF allocator doesn't expire filter correctly
    * [MESOS-257] - Master doesn't recover resources when executor exits
    * [MESOS-262] - Slave should not charge the resources required for launching a executor against the executor
    * [MESOS-266] - When the master removes a slave, a shutdown should be sent.
    * [MESOS-268] - Slave should force kill executors when it is shutting down
    * [MESOS-278] - Master Fails to Connect to Zookeeper
    * [MESOS-284] - Short-term fix for fire-walling slave shutdown and lost slave messages from the 'wrong' master
    * [MESOS-286] - AllocatorTest is flaky
    * [MESOS-288] - Latest trunk does not finish make check
    * [MESOS-290] - Jobtracker can't get TaskTrackerInfo when the JobTracker log file is deleted
    * [MESOS-299] - Master detector doesn't notify about leading master after network disconnection
    * [MESOS-302] - Scheduler driver shouldn't send an ACK if the driver is aborted while sending stats update
    * [MESOS-303] - mesos slave crashes during framework termination
    * [MESOS-306] - Mesos-master frequently crashes
    * [MESOS-310] - cgroups isolation module should not block on fetching executors
    * [MESOS-339] - Release script is expecting enter, not any key
    * [MESOS-382] - FaultToleranceTest.FrameworkReliableRegistration test is flaky.
    * [MESOS-383] - AllocatorTest/0.FrameworkExited test is broken
    * [MESOS-464] - mesos 0.10.0 fails to build on ubutu 13.04

** Improvement
    * [MESOS-8] - Maintain a history of executed frameworks/tasks and show it on the web UI
    * [MESOS-57] - Submit mesos.jar to Maven Central
    * [MESOS-142] - Explicitly set and clean test work directories
    * [MESOS-149] - Garbage collection on slaves
    * [MESOS-171] - Make CommandInfo 'uri' field be repeated, possibly making a URI embedded message to describe whether or not we should 'chmod +x' the resulting resource.
    * [MESOS-180] - Update the Hadoop patch to list protobuf-2.4.1 as a dependency so Maven pulls it down.
    * [MESOS-193] - Create a single-page javascript interface to replace the existing webui
    * [MESOS-194] - Make killtree more verbose.
    * [MESOS-255] - Expose files through HTTP endpoints.
    * [MESOS-256] - Introduce a cluster name into the Web UI
    * [MESOS-272] - Create a 'fs' namespace and migrate as appropriate from our 'os' namespace.

** New Feature
    * [MESOS-86] - Expose master url to the scheduler
    * [MESOS-158] - Make ExecutorInfo more rich
    * [MESOS-185] - Provide a master stat indicating number of outstanding resource offers
    * [MESOS-207] - A new isolation module on Linux that uses Linux control groups (cgroups) directly.
    * [MESOS-208] - Add whitelist option to master

** Question
    * [MESOS-258] - mesos-master / mesos-slave => error: [Errno 32] Broken pipe
    * [MESOS-298] - Executor fails to start
    * [MESOS-311] - ClassNotFoundException when deploying hadoop on mesos

** Task
    * [MESOS-69] - Migrate to Apache wiki and de-activate github wiki
    * [MESOS-80] - Add a page or section to the wiki defining project coding standards
    * [MESOS-133] - Make Mesos clean of most GCC warnings
    * [MESOS-398] - Add mesos-0.10.0-incubating jar to maven central


Release Notes - Mesos - Version 0.9.0
-------------------------------------
** Dependency upgrade
    * [MESOS-174] - Upgrade protobuf dependency to version 2.4.1

** Improvement
    * [MESOS-3] - Ask executors to shutdown when a framework goes away
    * [MESOS-167] - Make API names consistent

** New Feature
    * [MESOS-146] - EC2 scripts should find the latest AMI from a known URL
