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

All Issues:
** Bug
  * [MESOS-6743] - Docker executor hangs forever if `docker stop` fails.
  * [MESOS-6950] - Launching two tasks with the same Docker image simultaneously may cause a staging dir never cleaned up.
  * [MESOS-7365] - Compile error with recent glibc.
  * [MESOS-7378] - Build failure with glibc 2.12.
  * [MESOS-7627] - Mesos slave stucks.
  * [MESOS-7652] - Docker image with universal containerizer does not work if WORKDIR is missing in the rootfs.
  * [MESOS-7744] - Mesos Agent Sends TASK_KILL status update to Master, and still launches task.
  * [MESOS-7783] - Framework might not receive status update when a just launched task is killed immediately.
  * [MESOS-7858] - Launching a nested container with namespace/pid isolation, with glibc < 2.25, may deadlock the LinuxLauncher and MesosContainerizer.
  * [MESOS-7863] - Agent may drop pending kill task status updates.
  * [MESOS-7865] - Agent may process a kill task and still launch the task.
  * [MESOS-7872] - Scheduler hang when registration fails.
  * [MESOS-7909] - Ordering dependency between 'linux/capabilities' and 'docker/runtime' isolator.
  * [MESOS-7926] - Abnormal termination of default executor can cause MesosContainerizer::destroy to fail.
  * [MESOS-7934] - OOM due to LibeventSSLSocket send incorrectly returning 0 after shutdown.
  * [MESOS-7968] - Handle `/proc/self/ns/pid_for_children` when parsing available namespace.
  * [MESOS-7969] - Handle cgroups v2 hierarchy when parsing /proc/self/cgroups.
  * [MESOS-7975] - The command/default/docker executor can incorrectly send a TASK_FINISHED update even when the task is killed.
  * [MESOS-7980] - Stout fails to compile with libc >= 2.26.
  * [MESOS-8051] - Killing TASK_GROUP fail to kill some tasks.
  * [MESOS-8080] - The default executor does not propagate missing task exit status correctly.
  * [MESOS-8135] - Masters can lose track of tasks' executor IDs.


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

All Issues:
** Bug
  * [MESOS-5187] - The filesystem/linux isolator does not set the permissions of the host_path.
  * [MESOS-7252] - Need to fix resource check in long-lived framework.
  * [MESOS-7546] - WAIT_NESTED_CONTAINER sometimes returns 404.
  * [MESOS-7569] - Allow "old" executors with half-open connections to be preserved during agent upgrade / restart.
  * [MESOS-7581] - Fix interference of external Boost installations when using some unbundled dependencies.
  * [MESOS-7689] - Libprocess can crash on malformed request paths for libprocess messages.
  * [MESOS-7690] - The agent can crash when an unknown executor tries to register.
  * [MESOS-7703] - Mesos fails to exec a custom executor when no shell is used.
  * [MESOS-7728] - Java HTTP adapter crashes JVM when leading master disconnects.
  * [MESOS-7770] - Persistent volume might not be mounted if there is a sandbox volume whose source is the same as the target of the persistent volume.
  * [MESOS-7777] - Agent failed to recover due to mount namespace leakage in Docker 1.12/1.13.
  * [MESOS-7796] - LIBPROCESS_IP isn't passed on to the fetcher.
  * [MESOS-7830] - Sandbox_path volume does not have ownership set correctly.

** Improvement
  * [MESOS-7540] - Add an agent flag for executor re-registration timeout.


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

**NOTE**: In Mesos 1.2.1, the master will no longer allow 0.x agents to
register. Interoperability between 1.1+ masters and 0.x agents has never
been supported; however, it was not explicitly disallowed, either.
Starting with this release of Mesos, registration attempts by 0.x Mesos
agents will be ignored.

All Issues:
** Bug
  * [MESOS-1987] - Add support for SemVer build and prerelease labels to stout.
  * [MESOS-5028] - Copy provisioner cannot replace directory with symlink.
  * [MESOS-5172] - Registry puller cannot fetch blobs correctly from http Redirect 3xx urls.
  * [MESOS-6327] - Large docker images causes container launch failures: Too many levels of symbolic links.
  * [MESOS-6951] - Docker containerizer: mangled environment when env value contains LF byte.
  * [MESOS-6976] - Disallow (re-)registration attempts by old agents.
  * [MESOS-7133] - mesos-fetcher fails with openssl-related output.
  * [MESOS-7197] - Requesting tiny amount of CPU crashes master.
  * [MESOS-7208] - Persistent volume ownership is set to root when task is running with non-root user.
  * [MESOS-7210] - HTTP health check doesn't work when mesos runs with --docker_mesos_image.
  * [MESOS-7232] - Add support to auto-load /dev/nvidia-uvm in the GPU isolator.
  * [MESOS-7237] - Enabling cgroups_limit_swap can lead to "invalid argument" error.
  * [MESOS-7261] - maintenance.html is missing during packaging.
  * [MESOS-7263] - User supplied task environment variables cause warnings in sandbox stdout.
  * [MESOS-7264] - Possibly duplicate environment variables should not leak values to the sandbox.
  * [MESOS-7265] - Containerizer startup may cause sensitive data to leak into sandbox logs.
  * [MESOS-7272] - Unified containerizer does not support docker registry version < 2.3.
  * [MESOS-7280] - Unified containerizer provisions docker image error with COPY backend.
  * [MESOS-7316] - Upgrading Mesos to 1.2.0 results in some information missing from the `/flags` endpoint.
  * [MESOS-7346] - Agent crashes if the task name is too long.
  * [MESOS-7350] - Failed to pull image from Nexus Registry due to signature missing.
  * [MESOS-7366] - Agent sandbox gc could accidentally delete the entire persistent volume content.
  * [MESOS-7368] - Documentation of framework role(s) in proto definition is confusing.
  * [MESOS-7383] - Docker executor logs possibly sensitive parameters.
  * [MESOS-7389] - Mesos 1.2.0 crashes with pre-1.0 Mesos agents.
  * [MESOS-7400] - The mesos master crashes due to an incorrect invariant check in the decoder.
  * [MESOS-7427] - Registry puller cannot fetch manifests from Amazon ECR: 405 Unsupported.
  * [MESOS-7429] - Allow isolators to inject task-specific environment variables.
  * [MESOS-7453] - glyphicons-halflings-regular.woff2 is missing in WebUI.
  * [MESOS-7464] - Recent Docker versions cannot be parsed by stout.
  * [MESOS-7471] - Provisioner recover should not always assume 'rootfses' dir exists.
  * [MESOS-7478] - Pre-1.2.x master does not work with 1.2.x agent.
  * [MESOS-7484] - VersionTest.ParseInvalid aborts on Windows.


Release Notes - Mesos - Version 1.2.0
-------------------------------------------
This release contains the following new features:

  * [MESOS-5931] - **Experimental** Support auto backend in Mesos Containerizer,
    prefering overlayfs then aufs. Please note that the bind backend needs to be
    specified explicitly through the agent flag '--image_provisioner_backend'
    since it requires the sandbox already existed.

  * [MESOS-6402] - **Experimental** Add rlimit support to Mesos containerizer.
    The isolator adds support for setting POSIX resource limits (rlimits) for
    containers launched using the Mesos containerizer. POSIX rlimits can be used
    to control the resources a process can consume. See `docs/posix_rlimits.md`
    for details.

  * [MESOS-6419] - **Experimental** Teardown unregistered frameworks. The master
    now treats recovered frameworks very similarly to frameworks that are registered
    but currently disconnected. For example, recovered frameworks will be reported
    via the normal "frameworks" key when querying HTTP endpoints. This means there
    is no longer a concept of "orphan tasks": if the master knows about a task, the
    task will be running under a framework. Similarly, "teardown" operations on
    recovered frameworks will now work correctly.

  * [MESOS-6460] - **Experimental** Container Attach and Exec. This feature adds
    new Agent APIs for attaching a remote client to the stdin, stdout, and stderr
    of a running Mesos task, as well as an API for launching new processes inside
    the same container as a running Mesos task and attaching to its stdin, stdout,
    and stderr. At a high level, these APIs mimic functionality similar to docker
    attach and docker exec. The primary motivation for such functionality is to
    enable users to debug their running Mesos tasks.

  * [MESOS-6758] - **Experimental** Support 'Basic' auth docker private registry
    on Mesos Containerizer. Until now, the mesos containerizer always assumed
    Bearer auth, but we now also support basic auth for private registries. Please
    note that the AWS ECS uses Basic authorization but it does not work yet due to
    the redirect issue MESOS-5172.

Deprecations:
  * [MESOS-6650] - Remove slavePreLaunchDockerEnvironmentDecorator and slavePreLaunchDockerHook.

Additional API Changes:
  * [MESOS-3601] - Formalize all headers and metadata for HTTP API Event Stream

  * [MESOS-6286] - If an agent restarts but fails to complete recovery
    within `agent_reregister_timeout`, the master will now mark the
    agent as unreachable. This mainly changes behavior in two
    situations: (a) the master will now be more robust if agent recovery
    hangs indefinitely (e.g., due to a container being in a bad state),
    and (b) if agent recovery takes a very long time (e.g., because the
    agent's work directory contains a large number of completed tasks),
    the master might now mark an agent unreachable that would previously
    have been able to eventually recover successfully.

  * [MESOS-6419] - When a framework re-registers after master failover,
    it is only allowed to change certain fields in its FrameworkInfo.
    For example, changing "failover_timeout" is allowed, but changing
    "role" is not. In previous Mesos releases, the same restrictions on
    changes to FrameworkInfo were only enforced after framework
    failover, not master failover.

  * [MESOS-6670] - Authz for Agent v1 operator API

  * [MESOS-6675] - Changed the allocator API to support adding inactive
    frameworks. Custom allocator implementations will need to be updated.

  * [MESOS-6865] - Remove the constraint of being only able to launch
    2-level nested containers on Agent API.

Unresolved Critical Issues:
  * [MESOS-1625] - Extra trailing CRLF being sent after the HTTP body in libprocess
  * [MESOS-1718] - Command executor can overcommit the agent.
  * [MESOS-2554] - Slave flaps when using --slave_subsystems that are not used for isolation.
  * [MESOS-2774] - SIGSEGV received during process::MessageEncoder::encode()
  * [MESOS-2842] - Update FrameworkInfo.principal on framework re-registration
  * [MESOS-3533] - Unable to find and run URIs files
  * [MESOS-3747] - HTTP Scheduler API no longer allows FrameworkInfo.user to be empty string
  * [MESOS-3794] - Master should not store arbitrarily sized data in ExecutorInfo.
  * [MESOS-4259] - mesos HA can't delete the the redundant container on failure slave node.
  * [MESOS-4297] - Executor does not shutdown when framework teardown.
  * [MESOS-4642] - Mesos Agent Json API can dump binary data from log files out as invalid JSON.
  * [MESOS-4996] - 'containerizer->update' will always fail after killing a docker container.
  * [MESOS-5352] - Docker volume isolator cleanup can be blocked by first cleanup failure.
  * [MESOS-5396] - After failover, master does not remove agents with same UPID.
  * [MESOS-5849] - Agent sandboxes on Windows surpass the 260 character path length limit
  * [MESOS-5859] - Some tasks are always in staged state.
  * [MESOS-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.
  * [MESOS-6327] - Large docker images causes container launch failures: Too many levels of symbolic links.
  * [MESOS-6356] - ASF CI has interleaved logging.
  * [MESOS-6615] - Running mesos-slave in the docker that leave many zombie process
  * [MESOS-6623] - Re-enable tests impacted by request streaming support
  * [MESOS-6632] - ContainerLogger might leak FD if container launch fails.
  * [MESOS-6780] - ContentType/AgentAPIStreamingTest.AttachContainerInput test fails reliably
  * [MESOS-6784] - IOSwitchboardTest.KillSwitchboardContainerDestroyed is flaky
  * [MESOS-6804] - Running 'tty' inside a debug container that has a tty reports "Not a tty"
  * [MESOS-6815] - Enable glog stack traces when we call things like `ABORT` on Windows
  * [MESOS-6843] - Fetcher should not assume stdout/stderr in the sandbox.
  * [MESOS-6913] - AgentAPIStreamingTest.AttachInputToNestedContainerSession fails on Mac OS.
  * [MESOS-6974] - DefaultExecutorTest.CommitSuicideOnTaskFailure test is flaky.
  * [MESOS-6986] - abort in DRFSorter::add
  * [MESOS-7017] - HTTP API responses can crash the master.
  * [MESOS-7050] - IOSwitchboard FDs leaked when containerizer launch fails -- leads to deadlock
  * [MESOS-7099] - Quota can be exceeded due to coarse-grained offer technique.

Feature Graduations:
  * None

All Experimental Features:
  * [MESOS-2449] - Support group of tasks (Pod) constructs and API in Mesos.
  * [MESOS-2533] - Support HTTP checks in Mesos.
  * [MESOS-3094] - Mesos on Windows.
  * [MESOS-3421] - Support sharing of resources across task instances.
  * [MESOS-3567] - Support TCP checks in Mesos.
  * [MESOS-4312] - Porting Mesos on Power (ppc64le).
  * [MESOS-4355] - Implement isolator for Docker volume.
  * [MESOS-4641] - Support Container Network Interface (CNI).
  * [MESOS-4791] - Operator API v1.
  * [MESOS-4828] - XFS disk quota isolator.
  * [MESOS-5275] - Add capabilities support for mesos containerizer.
  * [MESOS-5344] - Partition-aware Mesos frameworks.
  * [MESOS-5788] - Added JAVA API adapter for seamless transition to new scheduler API.
  * [MESOS-5931] - **NEW** Support auto backend in Mesos Containerizer.
  * [MESOS-6014] - Added port mapping CNI plugin.
  * [MESOS-6077] - Added a default (task group) executor.
  * [MESOS-6402] - **NEW** rlimit support for Mesos containerizer
  * [MESOS-6419] - **NEW** Teardown unregistered frameworks
  * [MESOS-6460] - **NEW** Container Attach/Exec
  * [MESOS-6758] - **NEW** Support docker registry that requires basic auth.

All Issues:

** Bug
    * [MESOS-1802] - HealthCheckTest.HealthStatusChange is flaky on jenkins.
    * [MESOS-2537] - AC_ARG_ENABLED checks are broken
    * [MESOS-2723] - The mesos-execute tool does not support zk:// master URLs
    * [MESOS-3335] - FlagsBase copy-ctor leads to dangling pointer.
    * [MESOS-3932] - Silence Boost compiler warnings with CMake
    * [MESOS-4601] - Don't dump stack trace on failure to bind()
    * [MESOS-4695] - SlaveTest.StateEndpoint is flaky
    * [MESOS-4973] - Duplicates in 'unregistered_frameworks' in /state
    * [MESOS-4975] - mesos::internal::master::Slave::tasks can grow unboundedly
    * [MESOS-5218] - Fetcher should not chown the entire sandbox.
    * [MESOS-5303] - Add capabilities support for mesos execute cli.
    * [MESOS-5662] - Call parent class `SetUpTestCase` function in our test fixtures.
    * [MESOS-5821] - Clean up the thousands of compiler warnings on MSVC
    * [MESOS-5835] - Audit `PATCH_CMD`; make sure all patches are being applied on Windows.
    * [MESOS-5856] - Logrotate ContainerLogger module does not rotate logs when run as root with `--switch_user`.
    * [MESOS-5879] - cgroups/net_cls isolator causing agent recovery issues
    * [MESOS-5963] - HealthChecker should not decide when to kill tasks and when to stop performing health checks.
    * [MESOS-6001] - Aufs backend cannot support the image with numerous layers.
    * [MESOS-6002] - The whiteout file cannot be removed correctly using aufs backend.
    * [MESOS-6010] - Docker registry puller shows decode error "No response decoded".
    * [MESOS-6119] - TCP health checks are not portable.
    * [MESOS-6142] - Frameworks may RESERVE for an arbitrary role.
    * [MESOS-6206] - Change reconciliation to return results for in-progress removals and reregistrations
    * [MESOS-6286] - Master does not remove an agent if it is responsive but not registered
    * [MESOS-6288] - The default executor should maintain launcher_dir.
    * [MESOS-6293] - HealthCheckTest.HealthyTaskViaHTTPWithoutType fails on some distros.
    * [MESOS-6316] - CREATE of shared volumes should not be allowed by frameworks not opted in to the capability.
    * [MESOS-6320] - Implement clang-tidy check to catch incorrect flags hierarchies
    * [MESOS-6349] - JSON Generation breaks if other locale than C is used.
    * [MESOS-6360] - The handling of whiteout files in provisioner is not correct.
    * [MESOS-6380] - mesos-local failed to start without sudo
    * [MESOS-6388] - Report new PARTITION_AWARE task statuses in HTTP endpoints
    * [MESOS-6389] - Update webui for PARTITION_AWARE changes
    * [MESOS-6409] - mesos-ps - Invalid header value
    * [MESOS-6414] - cgroups isolator cleanup failed when the hierarchy is cleanup by docker daemon
    * [MESOS-6419] - The 'master/teardown' endpoint should support tearing down 'unregistered_frameworks'.
    * [MESOS-6420] - Mesos Agent leaking sockets when port mapping network isolator is ON
    * [MESOS-6432] - Roles with quota assigned can "game" the system to receive excessive resources.
    * [MESOS-6444] - Ensure single copy of shared count of total resources in role sorter.
    * [MESOS-6446] - WebUI redirect doesn't work with stats from /metric/snapshot
    * [MESOS-6448] - Show the leading master hostname in the webUI.
    * [MESOS-6452] - Compile error in strerror.h on OSX
    * [MESOS-6455] - DefaultExecutorTests fail when running on hosts without docker.
    * [MESOS-6459] - PosixRLimitsIsolatorTest.TaskExceedingLimit fails on OS X
    * [MESOS-6461] - Duplicate framework ids in /master/frameworks endpoint 'unregistered_frameworks'.
    * [MESOS-6478] - "filesystem/linux" isolator leaks (phantom) mounts in `mount` output
    * [MESOS-6483] - Check failure when a 1.1 master marking a 0.28 agent as unreachable
    * [MESOS-6484] - Memory leak in `Future<T>::after()`
    * [MESOS-6501] - Add a test for duplicate framework ids in "unregistered_frameworks"
    * [MESOS-6504] - Use 'geteuid()' for the root privileges check.
    * [MESOS-6508] - monitor/statistics error in webui when launch mesos via mesos-local
    * [MESOS-6516] - Parallel test running does not respect GTEST_FILTER
    * [MESOS-6519] - MasterTest.OrphanTasksMultipleAgents
    * [MESOS-6520] - Make errno an explicit argument for ErrnoError.
    * [MESOS-6526] - `mesos-containerizer launch --environment` exposes executor env vars in `ps`.
    * [MESOS-6527] - Memory leak in the libprocess request decoder.
    * [MESOS-6544] - MasterMaintenanceTest.InverseOffersFilters is flaky.
    * [MESOS-6545] - TestContainerizer is not thread-safe.
    * [MESOS-6566] - The Docker executor should not leak task env variables in the Docker command cmd line.
    * [MESOS-6569] - MesosContainerizer/DefaultExecutorTest.KillTask/0 failing on ASF CI
    * [MESOS-6576] - DefaultExecutorTest.KillTaskGroupOnTaskFailure sometimes fails in CI
    * [MESOS-6588] - LinuxRootfs misses required files
    * [MESOS-6597] - Include v1 Operator API protos in generated JAR and python packages.
    * [MESOS-6598] - Broken Link Framework Development Page
    * [MESOS-6602] - Shutdown completed frameworks when unreachable agent re-registers
    * [MESOS-6604] - Uninitialized member ObjectApprover::weight_info.
    * [MESOS-6606] - Reject optimized builds with libcxx before 3.9
    * [MESOS-6618] - Some tests use hardcoded port numbers.
    * [MESOS-6619] - Improve task management for unreachable tasks
    * [MESOS-6621] - SSL downgrade path will CHECK-fail when using both temporary and persistent sockets
    * [MESOS-6624] - Master WebUI does not work on Firefox 45
    * [MESOS-6625] - Expose container id in ContainerStatus in DockerContainerizer.
    * [MESOS-6640] - mesos-local doesn't hande --work_dir correctly.
    * [MESOS-6646] - StreamingRequestDecoder incompletely initializes its http_parser_settings
    * [MESOS-6647] - Cyclic header dependency between libprocess' defer.hpp and executor.hpp
    * [MESOS-6652] - Perf version not correctly parsed on Fedora 24 (and probably others)
    * [MESOS-6653] - Overlayfs backend may fail to mount the rootfs if both container image and image volume are specified.
    * [MESOS-6654] - Duplicate image layer ids may make the backend failed to mount rootfs.
    * [MESOS-6658] - Mesos tests generated with cmake build fail to unload libraries properly
    * [MESOS-6665] - io::redirect might cause stack overflow.
    * [MESOS-6666] - HttpServeTest.Discard failed on OSX sierra
    * [MESOS-6672] - Class DynamicLibrary's default copy constructor can lead to inconsistent state
    * [MESOS-6676] - Always re-link with scheduler during re-registration.
    * [MESOS-6677] - Error in Windows agent's Flags::runtime_dir CLI
    * [MESOS-6684] - Update addFramework/removeFramework to handle multi-role frameworks
    * [MESOS-6685] - Update Role::Resources to correctly account for multi-role frameworks
    * [MESOS-6688] - IOSwitchboard should recover spawned server pid on agent restarts
    * [MESOS-6689] - Remove of unix domain socket path in IOSwitchboard::cleanup
    * [MESOS-6700] - Port `http_tests.cpp`
    * [MESOS-6701] - Port `recordio_tests.cpp`
    * [MESOS-6704] - Port `executor_http_api_tests.cpp`
    * [MESOS-6707] - Port `gc_tests.cpp`
    * [MESOS-6710] - Port `http_authentication_tests.cpp`
    * [MESOS-6711] - Port `values_tests.cpp`
    * [MESOS-6716] - Port `uri_tests.cpp`
    * [MESOS-6717] - Add Windows support to agent test harness
    * [MESOS-6718] - Should destroy DEBUG containers on agent recovery.
    * [MESOS-6722] - Agent tries to use POSIX paths for the variable data runtime directory.
    * [MESOS-6725] - The style of `.navbar-text` is inconsistent with the style of texts on the left side
    * [MESOS-6726] - IOSwitchboardServerFlags adds flags for non-optional fields w/o providing a default value
    * [MESOS-6736] - CMake's `CURRENT_CMAKE_BUILD_DIR` does not escape '\'
    * [MESOS-6737] - The agent should synchronize with the IOSwitchboard to determine when it is ready to accept incoming connections.
    * [MESOS-6739] - Authorize v1 GET_CONTAINERS call
    * [MESOS-6740] - Authorize v1 GET_FLAGS call
    * [MESOS-6741] - Authorize v1 SET_LOGGING_LEVEL call
    * [MESOS-6744] - DefaultExecutorTest.KillTaskGroupOnTaskFailure is flaky
    * [MESOS-6745] - MesosContainerizer/DefaultExecutorTest.KillTask/0 is flaky
    * [MESOS-6746] - IOSwitchboard doesn't properly flush data on ATTACH_CONTAINER_OUTPUT
    * [MESOS-6747] - ContainerLogger runnable must not inherit the slave environment.
    * [MESOS-6748] - I/O switchboard should inherit agent environment variables.
    * [MESOS-6750] - Metrics on the Agent view of the Mesos web UI flickers between empty and non-empty states
    * [MESOS-6756] - I/O switchboard should deal with the case when reaping of the server failed.
    * [MESOS-6757] - Consider using CMake to configure test scripts in the `bin/` diretory
    * [MESOS-6761] - Implement `os::user` on Windows
    * [MESOS-6767] - Reached unreachable statement at <path>/mesos/src/slave/containerizer/mesos/launch.cpp:766
    * [MESOS-6772] - Stop building `mesos-agent` twice.
    * [MESOS-6775] - The 'http::connect(address)' always uses the DEFAULT_KIND() of socket even if SSL is undesired.
    * [MESOS-6781] - Mesos containerizer overrides environment variables passed to the executor incorrectly.
    * [MESOS-6788] - Avoid stack overflow when handling streaming responses in API handlers
    * [MESOS-6789] - SSL socket's 'shutdown()' method is broken
    * [MESOS-6793] - CniIsolatorTest.ROOT_EnvironmentLibprocessIP fails on systems using dash as sh
    * [MESOS-6795] - Listening socket might get closed while the accept is still in flight.
    * [MESOS-6802] - SSL socket can lose bytes in the case of EOF
    * [MESOS-6803] - Agent authentication does not have an initial `delay`
    * [MESOS-6805] - Check unreachable task cache for task ID collisions on launch
    * [MESOS-6811] - IOSwitchboardServerTest.SendHeartbeat and IOSwitchboardServerTest.ReceiveHeartbeat broken on OS X
    * [MESOS-6813] - IOSwitchboardServerTest.AttachOutput has stack overflow issue.
    * [MESOS-6820] - FaultToleranceTest.FrameworkReregister is flaky.
    * [MESOS-6824] - mesos-this-capture clang-tidy check has false positives
    * [MESOS-6826] - OsTest.User fails on recent Arch Linux.
    * [MESOS-6829] - Mesos fails to compile when using FORTIFY_SOURCE without optimizations
    * [MESOS-6830] - Mesos fails to link with gold when providing -pie without -fPIC
    * [MESOS-6837] - FaultToleranceTest.FrameworkReregister is flaky
    * [MESOS-6839] - It is currently impossible to kill a task in the Windows executor
    * [MESOS-6848] - The default executor does not exit if a single task pod fails.
    * [MESOS-6852] - Nested container's launch command is not set correctly in docker/runtime isolator.
    * [MESOS-6860] - Some tests use CHECK instead of ASSERT
    * [MESOS-6862] - Replace os::system usages to reduce the risk of command injection.
    * [MESOS-6864] - Container Exec should be possible with tasks belonging to a task group
    * [MESOS-6866] - Mesos agent not checking IDs before using them as part of the paths
    * [MESOS-6870] - Port `default_executor_tests.cpp`
    * [MESOS-6871] - Scheme parsing is incorrect in libprocess URL::parse().
    * [MESOS-6895] - Loop uses dependent nested names for friend declaration which isn't supported by recent clang
    * [MESOS-6900] - Add test for framework upgrading to multi-role capability.
    * [MESOS-6904] - Perform batching of allocations to reduce allocator queue backlogging.
    * [MESOS-6908] - Zero health check timeout is interpreted literally.
    * [MESOS-6911] - SlaveRecoveryTest/0.RegisterDisconnectedSlave test is flaky
    * [MESOS-6912] - IOSwitchboardServerTest.AttachInput fails consistently on Mac OS.
    * [MESOS-6917] - Segfault when the executor sets an invalid UUID  when sending a status update.
    * [MESOS-6920] - Validate the UUID in Master::statusUpdate.
    * [MESOS-6922] - SlaveRecoveryTest/0.RecoverTerminatedExecutor is flaky
    * [MESOS-6937] - ContentType/MasterAPITest.ReserveResources/1 fails during Writer close
    * [MESOS-6946] - Make wait status checks consistent.
    * [MESOS-6948] - AgentAPITest.LaunchNestedContainerSession is flaky
    * [MESOS-6954] - Running LAUNCH_NESTED_CONTAINER with a docker container id as parent crashes the agent
    * [MESOS-6962] - Navbar overlays breadcrumbs in WebUI on narrow screens
    * [MESOS-6963] - The logo doesn't fit in mobile WebUI
    * [MESOS-6966] - master/tasks_unreachable metric never decremented
    * [MESOS-6969] - Use clipboard.js for copy/paste webui functionality
    * [MESOS-6983] - TaskValidationTest.TaskReusesUnreachableTaskID is flaky
    * [MESOS-6989] - Docker executor segfaults in ~MesosExecutorDriver()
    * [MESOS-6991] - Change `Environment.Variable.Value` from required to optional
    * [MESOS-7008] - Quota not recovered from registry in empty cluster.
    * [MESOS-7020] - cgroups::internal::write can incorrectly report success
    * [MESOS-7027] - CommandExecutor ENV overwritten by Docker Image ENV in Unified Containerizer
    * [MESOS-7036] - Rate limiter deadlocks during IO Switchboard-related tests
    * [MESOS-7057] - Consider using the relink functionality of libprocess in the executor driver.
    * [MESOS-7059] - Unnecessary mkdirs in ProvisionerDockerLocalStoreTest.*
    * [MESOS-7060] - Tests depends on DockerArchive and LinuxRootfs failed.
    * [MESOS-7075] - mesos-execute rejects all offers
    * [MESOS-7077] - Check failed: resource.has_allocation_info().
    * [MESOS-7102] - Crash when sending a SIGUSR1 signal to the agent.
    * [MESOS-7119] - Mesos master crash while accepting inverse offer.
    * [MESOS-7129] - Default executor exits with a stack trace in a few scenarios.
    * [MESOS-7133] - mesos-fetcher fails with openssl-related output.
    * [MESOS-7137] - Custom executors cannot use any reserved resources.
    * [MESOS-7144] - Wrap IOSwitchboard.connect() in a dispatch
    * [MESOS-7152] - The agent may be flapping after the machine reboots due to provisioner recover.
    * [MESOS-7153] - The new http::Headers abstraction may break some modules.

** Documentation
    * [MESOS-5597] - Document Mesos "health check" feature.
    * [MESOS-6335] - Add user doc for task group tasks
    * [MESOS-6411] - Add documentation for CNI port-mapper plugin.
    * [MESOS-6806] - Update the addition, deletion and modification logic of CNI configuration files.
    * [MESOS-7154] - Document provisioner auto backend support.

** Epic
    * [MESOS-3820] - Test-only libprocess reinitialization
    * [MESOS-4641] - Support Container Network Interface (CNI).
    * [MESOS-4766] - Improve allocator performance.
    * [MESOS-6402] - Add rlimit support to Mesos containerizer
    * [MESOS-6460] - Mesos Support for Container Attach and Container Exec
    * [MESOS-6670] - Authz for Agent v1 operator API

** Improvement
    * [MESOS-3601] - Formalize all headers and metadata for HTTP API Event Stream
    * [MESOS-5792] - Add mesos tests to CMake (make check)
    * [MESOS-5900] - Support Unix domain socket connections in libprocess
    * [MESOS-5931] - Support auto backend in Unified Containerizer.
    * [MESOS-5992] - Complete the list of API Calls on the Operator HTTP API Doc
    * [MESOS-6177] - Return unregistered agents recovered from registrar in `GetAgents` and/or `/state.json`
    * [MESOS-6229] - Default to using hardened compilation flags
    * [MESOS-6296] - Default executor should be able to launch multiple task groups
    * [MESOS-6305] - Add authorization support for nested container calls
    * [MESOS-6309] - Mesos-specific targets appear in libprocess' cmake config.
    * [MESOS-6329] - Send TASK_DROPPED for task launch errors
    * [MESOS-6330] - Send TASK_UNKNOWN during explicit reconciliation
    * [MESOS-6331] - Don't send TASK_LOST when accepting offers in a disconnected scheduler
    * [MESOS-6332] - Don't send TASK_LOST in the agent
    * [MESOS-6339] - Support docker registry that requires basic auth.
    * [MESOS-6361] - Enable partition-awareness in mesos-execute
    * [MESOS-6369] - Add a column for FrameworkID when displaying tasks in the WebUI
    * [MESOS-6395] - HealthChecker sends updates to executor via libprocess messaging.
    * [MESOS-6396] - Hooks should allow sandbox dependent environment variables.
    * [MESOS-6397] - Simplify the comparison logic for `ExecutorInfo`.
    * [MESOS-6399] - Allowed to pass extra envs when launch development scripts.
    * [MESOS-6401] - Authorizer interface should behave more uniform
    * [MESOS-6407] - Move DEFAULT_v1_xxx macros to the v1 namespace.
    * [MESOS-6426] - Add rlimit support to Mesos containerizer
    * [MESOS-6427] - Add documentation for rlimit support of Mesos containerizer
    * [MESOS-6443] - Display maintenance information in the webui.
    * [MESOS-6530] - Add support for incremental gzip decompression.
    * [MESOS-6556] - Hostname support for the network/cni isolator.
    * [MESOS-6557] - IPC namespace isolator
    * [MESOS-6562] - Use JSON content type in mesos-execute.
    * [MESOS-6567] - Actively Scan for CNI Configurations
    * [MESOS-6571] - Add "--task" flag to mesos-execute
    * [MESOS-6626] - Support `foreachpair` for LinkedHashMap
    * [MESOS-6639] - Update 'io::redirect()' to take an optional vector of callback hooks.
    * [MESOS-6648] - MesosContainerizer launch helper should take ContainerLaunchInfo.
    * [MESOS-6650] - Remove slavePreLaunchDockerEnvironmentDecorator and slavePreLaunchDockerHook.
    * [MESOS-6675] - Change allocator API to support adding inactive frameworks
    * [MESOS-6719] - Unify "active" and "state"/"connected" fields in Master::Framework
    * [MESOS-6758] - Support 'Basic' auth docker private registry on Unified Containerizer.
    * [MESOS-6763] - Add heartbeats to both input/output connections in IOSwitchboard
    * [MESOS-6821] - Override of automatic resources should be by exact match not substring
    * [MESOS-6865] - Remove the constraint of being only able to launch 2 level nested containers on Agent API
    * [MESOS-6936] - Add support for media types needed for streaming request/responses.
    * [MESOS-6947] - Fix pailer XSS vulnerability
    * [MESOS-7045] - Skip already stored layers in local Docker puller
    * [MESOS-7051] - Introduce a new http::Headers abstraction.
    * [MESOS-7071] - Agent State Lacks Framework Principal

** Story
    * [MESOS-3505] - Support specifying Docker image by Image ID.
    * [MESOS-3753] - Test the HTTP Scheduler library with SSL enabled

** Task
    * [MESOS-3398] - Revisit MAXHOSTNAMELEN implementation in Windows
    * [MESOS-3697] - Add `make tests` target to CMake build system.
    * [MESOS-3843] - Audit `src/CMakelists.txt` to make sure we're compiling everything we need to build the agent binary.
    * [MESOS-3910] - Libprocess: Implement cleanup of the SocketManager in process::finalize
    * [MESOS-3934] - Libprocess: Unify the initialization of the MetricsProcess and ReaperProcess
    * [MESOS-4119] - Add support for enabling --3way to apply-reviews.py.
    * [MESOS-5826] - Streamline building of example frameworks
    * [MESOS-5966] - Add libprocess HTTP tests with SSL support
    * [MESOS-6040] - Add a CMake build for `mesos-port-mapper`
    * [MESOS-6185] - Improve test coverage for shared persistent volumes.
    * [MESOS-6214] - Containerizers assume caller will call 'destroy' if 'launch' fails.
    * [MESOS-6278] - Add test cases for the HTTP health checks.
    * [MESOS-6279] - Add test cases for the TCP health check.
    * [MESOS-6366] - Design doc for executor authentication
    * [MESOS-6376] - Add documentation for capabilities support of the mesos containerizer
    * [MESOS-6403] - Draft design doc for rlimit support for Mesos containerizer
    * [MESOS-6431] - Add support for port-mapping in `mesos-execute`
    * [MESOS-6462] - Design Doc: Mesos Support for Container Attach and Container Exec
    * [MESOS-6463] - Build a prototype for remote pty support
    * [MESOS-6464] - Add fine grained control of which namespaces a nested container should inherit (or not).
    * [MESOS-6465] - Add a task_id -> container_id mapping in state.json
    * [MESOS-6466] - Add support for streaming HTTP requests in Mesos
    * [MESOS-6467] - Build a Container I/O Switchboard
    * [MESOS-6470] - Support TTY in IOSwitchboard.
    * [MESOS-6471] - Build support for LAUNCH_NESTED_CONTAINER_SESSION call into the Agent API in Mesos
    * [MESOS-6472] - Build support for ATTACH_CONTAINER_INPUT into the Agent API in Mesos
    * [MESOS-6473] - Build support for ATTACH_CONTAINER_OUTPUT into the Agent API in Mesos
    * [MESOS-6474] - Add fine-grained ACLs for authorization with the new debugging APIs
    * [MESOS-6475] - Mesos Container Attach/Exec Unit Tests
    * [MESOS-6476] - Build a Mock HTTP Server that implements the new Debugging API calls
    * [MESOS-6477] - Build a standalone python client for connecting to our Mock HTTP Server that implements the new Debug APIs
    * [MESOS-6493] - Add test cases for the HTTPS health checks.
    * [MESOS-6525] - Add API protos for managing debug containers
    * [MESOS-6528] - Container status of a task in a pod is not correct.
    * [MESOS-6543] - Add special case for entering the "mount" namespace of a parent container
    * [MESOS-6546] - Update the Containerizer to handle attachInput and attachOutput calls.
    * [MESOS-6547] - Update the mesos containerizer to launch per-container I/O switchboards
    * [MESOS-6553] - Update `MesosContainerizerProcess::_launch()` to pass `ContainerLaunchInfo` to launcher->fork()`
    * [MESOS-6594] - Add `Containerizer::attach()` API call
    * [MESOS-6628] - Add a FrameworkInfo.roles field along with a MULTI_ROLE capability.
    * [MESOS-6629] - Add master validation of FrameworkInfo.roles.
    * [MESOS-6631] - Disallow frameworks from modifying FrameworkInfo.roles.
    * [MESOS-6633] - Introduce Resource.AllocationInfo.
    * [MESOS-6634] - Add Resource.AllocationInfo in Offer to indicate a single role per offer.
    * [MESOS-6638] - Update Suppress and Revive to be per-role.
    * [MESOS-6651] - Make IOSwitchboard an isolator.
    * [MESOS-6663] - Container should be destroyed if IOSwitchboard server terminates unexpectedly.
    * [MESOS-6664] - Force cleanup of IOSwitchboard server if it does not terminate after the container terminates.
    * [MESOS-6749] - Update master and agent endpoints to expose FrameworkInfo.roles.
    * [MESOS-6764] - Add a grace period for terminating the I/O switchboard server.
    * [MESOS-6958] - Support linux filesystem type detection.
    * [MESOS-6970] - Display allocation info when printing Resources.
    * [MESOS-7062] - Add a test for a MULTI_ROLE framework receiving offers for each of its roles.


Release Notes - Mesos - Version 1.1.1 (WIP)
-------------------------------------------
* This is a bug fix release.

All Issues:
** Bug
  * [MESOS-6002] - The whiteout file cannot be removed correctly using aufs backend.
  * [MESOS-6010] - Docker registry puller shows decode error "No response decoded".
  * [MESOS-6142] - Frameworks may RESERVE for an arbitrary role.
  * [MESOS-6360] - The handling of whiteout files in provisioner is not correct.
  * [MESOS-6411] - Add documentation for CNI port-mapper plugin.
  * [MESOS-6526] - `mesos-containerizer launch --environment` exposes executor env vars in `ps`.
  * [MESOS-6571] - Add "--task" flag to mesos-execute.
  * [MESOS-6597] - Include v1 Operator API protos in generated JAR and python packages.
  * [MESOS-6621] - SSL downgrade path will CHECK-fail when using both temporary and persistent sockets.
  * [MESOS-6624] - Master WebUI does not work on Firefox 45.
  * [MESOS-6676] - Always re-link with scheduler during re-registration.
  * [MESOS-6848] - The default executor does not exit if a single task pod fails.
  * [MESOS-6852] - Nested container's launch command is not set correctly in docker/runtime isolator.
  * [MESOS-6917] - Segfault when the executor sets an invalid UUID when sending a status update.
  * [MESOS-7008] - Quota not recovered from registry in empty cluster.


Release Notes - Mesos - Version 1.1.0
-------------------------------------
This release contains the following new features:

  * [MESOS-2449] - **Experimental** support for launching a group of tasks
    via a new `LAUNCH_GROUP` Offer operation. Mesos will guarantee that either
    all tasks or none of the tasks in the group are delivered to the executor.
    Executors receive the task group via a new `LAUNCH_GROUP` event.

  * [MESOS-2533] - **Experimental** support for HTTP and HTTPS health checks.
    Executors may now use the updated `HealthCheck` protobuf to implement
    HTTP(S) health checks. Both default executors (command and docker) leverage
    `curl` binary for sending HTTP(S) requests and connect to `127.0.0.1`,
    hence a task must listen on all interfaces. On Linux, for BRIDGE and USER
    modes, docker executor enters the task's network namespace.

  * [MESOS-3421] - **Experimental** Support sharing of resources across
    containers. Currently persistent volumes are the only resources allowed to
    be shared.

  * [MESOS-3567] - **Experimental** support for TCP health checks. Executors
    may now use the updated `HealthCheck` protobuf to implement TCP health
    checks. Both default executors (command and docker) connect to `127.0.0.1`,
    hence a task must listen on all interfaces. On Linux, for BRIDGE and USER
    modes, docker executor enters the task's network namespace.

  * [MESOS-4324] - Allow tasks to access persistent volumes in either a
    read-only or read-write manner. Using a volume in read-only mode can
    simplify sharing that volume between multiple tasks on the same agent.

  * [MESOS-5275] - **Experimental** support for linux capabilities. Frameworks
    or operators now have fine-grained control over the capabilities that a
    container may have. This allows a container to run as root, but not have all
    the privileges associated with the root user (e.g., CAP_SYS_ADMIN).

  * [MESOS-5344] - **Experimental** support for partition-aware Mesos
    frameworks. In previous Mesos releases, when an agent is partitioned from
    the master and then reregisters with the cluster, all tasks running on the
    agent are terminated and the agent is shutdown. In Mesos 1.1, partitioned
    agents will no longer be shutdown when they reregister with the master. By
    default, tasks running on such agents will still be killed (for backward
    compatibility); however, frameworks can opt-in to the new PARTITION_AWARE
    capability. If they do this, their tasks will not be killed when a partition
    is healed. This allows frameworks to define their own policies for how to
    handle partitioned tasks. Enabling the PARTITION_AWARE capability also
    introduces a new set of task states: TASK_UNREACHABLE, TASK_DROPPED,
    TASK_GONE, TASK_GONE_BY_OPERATOR, and TASK_UNKNOWN. These new states are
    intended to eventually replace the TASK_LOST state.

  * [MESOS-5788] - **Experimental** support for Java scheduler adapter. This
    adapter allows framework developers to toggle between the old/new API
    (driver/scheduler library) implementations, thereby allowing them to easily
    transition their frameworks to the new v1 Scheduler API.

  * [MESOS-6014] - **Experimental** A new port-mapper CNI plugin, the
    `mesos-cni-port-mapper` has been introduced. For Mesos containers, with the
    CNI port-mapper plugin, users can now expose container ports through host
    ports using DNAT. This is especially useful when Mesos containers are
    attached to isolated CNI networks such as private bridge networks, and the
    services running in the container needs to be exposed outside these
    isolated networks.

  * [MESOS-6077] - **Experimental** A new default executor is introduced which
    frameworks can use to launch task groups as nested containers. All the
    nested containers share resources likes cpu, memory, network and volumes.

Deprecations:
  * The following metrics are deprecated and will be removed in Mesos 1.4:
      master/slave_shutdowns_scheduled,
      master/slave_shutdowns_canceled,
      slave_shutdowns_completed.
    As of Mesos 1.1.0, these metrics will always be zero. The following new
    metrics have been introduced as replacements:
      master/slave_unreachable_scheduled,
      master/slave_unreachable_canceled,
      master/slave_unreachable_completed.

  * [MESOS-5955] - Health check binary "mesos-health-check" is removed.

  * [MESOS-6371] - Remove the 'recover()' interface in 'ContainerLogger'.

Additional API Changes:
  * [MESOS-6204] - A new agent flag called `--runtime_dir`. Unlike
    `--work_dir` which persists data across reboots, `--runtime_dir` is designed
    to checkpoint state that should persist across agent restarts, but not
    across reboots. By default this flag is set to `/var/run/mesos` when run as
    root and `os::temp/mesos/runtime/` when run as non-root.

  * [MESOS-6220] - HTTP handler failures should result in 500 rather than
    503 responses. This means that when using the master or agent endpoints,
    failures will now result in a `500 Internal Server Error` rather than a
    `503 Service Unavailable`.

  * [MESOS-6241] - New API calls (LAUNCH_NESTED_CONTAINER,
    KILL_NESTED_CONTAINER and WAIT_NESTED_CONTAINER) have been added to the
    v1 Agent API to manage nested containers within an executor container.

Unresolved Critical Issues:
  * [MESOS-3794] - Master should not store arbitrarily sized data in ExecutorInfo.
  * [MESOS-4642] - Mesos Agent Json API can dump binary data from log files out as invalid JSON.
  * [MESOS-5396] - After failover, master does not remove agents with same UPID.
  * [MESOS-5856] - Logrotate ContainerLogger module does not rotate logs when run as root with `--switch_user`.
  * [MESOS-6142] - Frameworks may RESERVE for an arbitrary role.
  * [MESOS-6327] - Large docker images causes container launch failures: Too many levels of symbolic links.
  * [MESOS-6360] - The handling of whiteout files in provisioner is not correct.
  * [MESOS-6419] - The 'master/teardown' endpoint should support tearing down 'unregistered_frameworks'.
  * [MESOS-6432] - Roles with quota assigned can "game" the system to receive excessive resources.

All Experimental Features:
  * [MESOS-2449] - Support group of tasks (Pod) constructs and API in Mesos.
  * [MESOS-2533] - Support HTTP checks in Mesos.
  * [MESOS-3094] - Mesos on Windows.
  * [MESOS-3421] - Support sharing of resources across task instances.
  * [MESOS-3567] - Support TCP checks in Mesos.
  * [MESOS-4312] - Porting Mesos on Power (ppc64le).
  * [MESOS-4355] - Implement isolator for Docker volume.
  * [MESOS-4641] - Support Container Network Interface (CNI).
  * [MESOS-4791] - Operator API v1.
  * [MESOS-4828] - XFS disk quota isolator.
  * [MESOS-5275] - Add capabilities support for unified containerizer.
  * [MESOS-5344] - Partition-aware Mesos frameworks.
  * [MESOS-5788] - Added JAVA API adapter for seamless transition to new scheduler API.
  * [MESOS-6014] - Added port mapping CNI plugin.
  * [MESOS-6077] - Added a default (task group) executor.

All Issues:

** Bug
  * [MESOS-1653] - HealthCheckTest.GracePeriod is flaky.
  * [MESOS-2346] - Docker tasks exiting normally, but returning TASK_FAILED.
  * [MESOS-3471] - Disable perf test when perf version is not support.
  * [MESOS-3760] - Remove fragile sleep() from ProcessManager::settle().
  * [MESOS-3959] - Executor page of mesos ui does not show slave hostname.
  * [MESOS-4070] - numify() handles negative numbers inconsistently.
  * [MESOS-4638] - versioning preprocessor macros.
  * [MESOS-4668] - Agent's /state endpoint does not include full reservation information.
  * [MESOS-4948] - Move maintenance tests to use the new scheduler library interface.
  * [MESOS-4973] - Duplicates in 'unregistered_frameworks' in /state
  * [MESOS-4975] - mesos::internal::master::Slave::tasks can grow unboundedly.
  * [MESOS-5276] - HTTPCommandExecutor should terminate after it receives an ACK from the agent.
  * [MESOS-5290] - WebUI shows the active task is launched 46 years ago.
  * [MESOS-5320] - SSL related error messages can be misguiding or incomplete.
  * [MESOS-5448] - Persistent volume deletion on the agent should survive slave restart.
  * [MESOS-5481] - PerfFilter disable Registrar_BENCHMARK test cases incorrectly.
  * [MESOS-5613] - mesos-local fails to start if MESOS_WORK_DIR isn't set.
  * [MESOS-5701] - Add benchmark for sorter performance.
  * [MESOS-5752] - ROOT_GarbageCollectorUndeletableFilesTest.BusyMountPoint is flaky.
  * [MESOS-5759] - ProcessRemoteLinkTest.RemoteUseStaleLink and RemoteStaleLinkRelink are flaky.
  * [MESOS-5812] - MasterAPITest.Subscribe is flaky.
  * [MESOS-5846] - AgentAPITest.GetState is flaky.
  * [MESOS-5852] - CMake build needs to generate protobufs before building libmesos.
  * [MESOS-5860] - MasterAPITest.GetTasks is flaky.
  * [MESOS-5864] - Document MESOS_SANDBOX executor env variable.
  * [MESOS-5867] - Operator ReadFile API read file bugs.
  * [MESOS-5869] - Disable resources validation for `+=` and `-=`.
  * [MESOS-5875] - Scalar resource output operator doesn't print full significant digits.
  * [MESOS-5878] - Strict/RegistrarTest.UpdateQuota/0 is flaky.
  * [MESOS-5888] - SlaveAuthorizerTest/ViewFlags is flaky.
  * [MESOS-5891] - /help endpoint does not set Content-Type to HTML.
  * [MESOS-5907] - ExamplesTest.DiskFullFramework fails on Arch.
  * [MESOS-5909] - Stout "OsTest.User" test can fail on some systems.
  * [MESOS-5917] - All actors should have a distinguishable ID.
  * [MESOS-5919] - Improve performance for `Resources.contains` and `Resources.filter`.
  * [MESOS-5921] - `validate` is a bit heavy to check negative scalar resource.
  * [MESOS-5922] - mesos-agent --help exit status is 1.
  * [MESOS-5928] - Agent's '--version' flag doesn't work.
  * [MESOS-5930] - Orphan tasks can show up as running after they have finished.
  * [MESOS-5942] - Windows implementation of `os::rmdir` is not compliant with POSIX version.
  * [MESOS-5958] - Reviewbot failing due to python files not being cleaned up after distclean.
  * [MESOS-5972] - SharedResourcesTest failing.
  * [MESOS-5979] - elfio-3.1.patch is actually not applied.
  * [MESOS-5981] - task failed in windows Server 2012 client, test-framwork example.
  * [MESOS-5985] - Fix broken link in `networking.md`.
  * [MESOS-5996] - Windows mesos-containerizer crashes.
  * [MESOS-6000] - Overlayfs backend cannot support the image with numerous layers.
  * [MESOS-6005] - Support docker registry running non-https on localhost:<non-80-port>.
  * [MESOS-6013] - Use readdir instead of readdir_r.
  * [MESOS-6026] - Tasks mistakenly marked as FAILED due to race b/w sendExecutorTerminatedStatusUpdate() and _statusUpdate().
  * [MESOS-6031] - Collect throttle related metrics for DockerContainerizer.
  * [MESOS-6041] - Stream ID mismatch should print out expected and received stream ID.
  * [MESOS-6049] - XFS disk isolator doesn't handle old containers correctly.
  * [MESOS-6052] - Unable to launch containers on CNI networks on CoreOS.
  * [MESOS-6057] - docker isolator does not overwrite Dockerfile ENV.
  * [MESOS-6059] - Allow clean up unknown container during the clean up phase of the container.
  * [MESOS-6069] - Misspelled TASK_KILLED in mesos slave.
  * [MESOS-6074] - Master check failure if the metrics endpoint is polled soon after it starts.
  * [MESOS-6085] - Agent's /state endpoint does not include total resources.
  * [MESOS-6087] - Add master tests for TaskGroup.
  * [MESOS-6100] - Make fails compiling 1.0.1.
  * [MESOS-6104] - Potential FD double close in libevent's implementation of `sendfile`.
  * [MESOS-6110] - Deprecate using health checks without setting the type.
  * [MESOS-6118] - Agent would crash with docker container tasks due to host mount table read.
  * [MESOS-6122] - Mesos slave throws systemd errors even when passed a flag to disable systemd.
  * [MESOS-6131] - Improved performance for resource flatten.
  * [MESOS-6141] - Some tests do not properly set 'flags.launcher' with the correct value.
  * [MESOS-6144] - Validate that TaskGroup executor and tasks do not use DOCKER ContainerInfo.
  * [MESOS-6145] - Isolator namespaces/pid is leaking mounts.
  * [MESOS-6152] - Resource leak in libevent_ssl_socket.cpp.
  * [MESOS-6153] - Resource leak in slave.cpp.
  * [MESOS-6154] - Clean up queued tasks if a task group is killed before launch.
  * [MESOS-6157] - ContainerInfo is not validated.
  * [MESOS-6159] - Remove stout's Set type.
  * [MESOS-6167] - CgroupsIsolatorTest.ROOT_CGROUPS_RevocableCpu is flaky.
  * [MESOS-6170] - Health check grace period covers failures happening after first success.
  * [MESOS-6173] - Authentication in v2 protobuf should not be `required`.
  * [MESOS-6176] - CpuIsolatorTest.ROOT_SystemCpuUsage is flaky.
  * [MESOS-6181] - The logic for BadACLNoPrincipal and BadACLDropCreateAndDestroy is not correct.
  * [MESOS-6207] - Python bindings fail to build with custom SVN installation path.
  * [MESOS-6208] - Containers that use the Mesos containerizer but don't want to provision a container image fail to validate.
  * [MESOS-6210] - Master redirect with suffix gets in redirect loop.
  * [MESOS-6216] - LibeventSSLSocketImpl::create is not safe to call concurrently with os::getenv.
  * [MESOS-6217] - PAGE_SIZE was not declared in PPC64LE.
  * [MESOS-6226] - Master crashes while transitioning tasks to 'TASK_UNREACHABLE'.
  * [MESOS-6233] - Master CHECK fails during recovery while relinking to other masters.
  * [MESOS-6234] - Potential socket leak during Zookeeper network changes.
  * [MESOS-6245] - Driver based schedulers performing explicit acknowledgements cannot acknowledge updates from HTTP based executors.
  * [MESOS-6246] - Libprocess links will not generate an ExitedEvent if the socket creation fails.
  * [MESOS-6248] - mesos-slave cannot start , Assertion `isError()' failed.
  * [MESOS-6257] - Resources not recovered after rescinding an offer on DESTROY on shared volumes.
  * [MESOS-6259] - CNI isolator should not `CHECK` for `resolv.conf` under `rootContainerDir`.
  * [MESOS-6260] - Composing containerizer needs to properly handle nested container launch.
  * [MESOS-6262] - Default executor should kill all other tasks in a task group if any task exits with a non-zero exit status.
  * [MESOS-6263] - Mesos containerizer should figure out the correct sandbox directory for nested launch.
  * [MESOS-6269] - CNI isolator doesn't activate loopback interface.
  * [MESOS-6270] - Agent crashes when trying to recover pods.
  * [MESOS-6274] - Agent should not allow HTTP executors to re-subscribe before containerizer recovery is done.
  * [MESOS-6283] - Fix the Web UI allowing access to the task sandbox for nested containers.
  * [MESOS-6289] - Pass the 'user' into nested container launch.
  * [MESOS-6290] - Support nested containers for logger in Mesos Containerizer.
  * [MESOS-6295] - Excessive logging on agent when oversubscription modules are attached.
  * [MESOS-6300] - A destroyed nested container is not reflected in the parent container's children map.
  * [MESOS-6301] - Recursive destroy in MesosContainerizer is problematic.
  * [MESOS-6302] - Agent recovery can fail after nested containers are launched.
  * [MESOS-6308] - CHECK failure in DRF sorter.
  * [MESOS-6317] - Race in master/allocator when updating oversubscribed resources of an agent.
  * [MESOS-6319] - ContentType/AgentAPITest.NestedContainerLaunch/1 is flaky.
  * [MESOS-6321] - CHECK failure in HierarchicalAllocatorTest.NoDoubleAccounting.
  * [MESOS-6322] - Agent fails to kill empty parent container.
  * [MESOS-6323] - 'mesos-containerizer launch' should inherit agent environment variables.
  * [MESOS-6324] - CNI should not use `ifconfig` in executors `pre_exec_command`.
  * [MESOS-6363] - Default executor should not crash with a failed assertion if it notices a disconnection from the agent for non checkpointed frameworks.
  * [MESOS-6370] - The executor library does not invoke the shutdown callback upon recovery timeout.
  * [MESOS-6386] - "Reached unreachable statement" in LinuxCapabilitiesIsolatorTest.
  * [MESOS-6391] - Command task's sandbox should not be owned by root if it uses container image.
  * [MESOS-6393] - Deprecated SSL_ environment variables are non functional already.
  * [MESOS-6420] - Mesos Agent leaking sockets when port mapping network isolator is ON.
  * [MESOS-6445] - Reconciliation for unreachable agent after master failover is incorrect.
  * [MESOS-6446] - WebUI redirect doesn't work with stats from /metric/snapshot.
  * [MESOS-6457] - Tasks shouldn't transition from TASK_KILLING to TASK_RUNNING.
  * [MESOS-6461] - Duplicate framework ids in /master/frameworks endpoint 'unregistered_frameworks'.
  * [MESOS-6482] - Master check failure when marking an agent unreachable.
  * [MESOS-6483] - Check failure when a 1.1 master marking a 0.28 agent as unreachable.
  * [MESOS-6497] - Java Scheduler Adapter does not surface MasterInfo.
  * [MESOS-6502] - _version uses incorrect MESOS_{MAJOR,MINOR,PATCH}_VERSION in libmesos java binding.
  * [MESOS-6527] - Memory leak in the libprocess request decoder.

** Documentation
  * [MESOS-5221] - Add Documentation for Nvidia GPU support.
  * [MESOS-5808] - Elasticsearch misspelled on homepage.
  * [MESOS-6028] - mesos-execute has a typo in volume help.
  * [MESOS-6103] - Mesos version is not uptodate in getting-started page.
  * [MESOS-6343] - Documentation Error: Default Executor does not implicitly construct resources.

** Epic
  * [MESOS-2449] - Support group of tasks (Pod) constructs and API in Mesos.
  * [MESOS-3421] - Support sharing of resources across task instances.
  * [MESOS-4312] - Porting Mesos on Power (ppc64le).
  * [MESOS-4791] - Operator API v1.
  * [MESOS-5344] - Partition-aware Mesos frameworks.
  * [MESOS-6014] - Added port mapping CNI plugin.

** Improvement
  * [MESOS-2533] - Support HTTP checks in Mesos.
  * [MESOS-3567] - Support TCP checks in Mesos.
  * [MESOS-4049] - Allow user to control behavior of partitioned agents/tasks.
  * [MESOS-4155] - Speed up ExamplesTest.*.
  * [MESOS-4172] - GarbageCollectorIntegrationTest.Restart is slow.
  * [MESOS-4324] - Allow access to shared persistent volumes as read only or read write by tasks.
  * [MESOS-4325] - Offer shareable resources to frameworks only if it is opted in.
  * [MESOS-4431] - Support sharing of persistent volumes via shared resources.
  * [MESOS-4663] - Speed up ExamplesTest.PersistentVolumeFramework.
  * [MESOS-4694] - DRFAllocator takes very long to allocate resources with a large number of frameworks.
  * [MESOS-4892] - Support arithmetic operations for shared resources with consumer counts.
  * [MESOS-5038] - Added a any mechanism for futures.
  * [MESOS-5070] - Introduce more flexible subprocess interface for child options.
  * [MESOS-5425] - Consider using IntervalSet for Port range resource math.
  * [MESOS-5464] - The max number of completed executors for a mesos slave should be configurable.
  * [MESOS-5565] - Add logging when Offer::Operation::Launch message has no tasks.
  * [MESOS-5716] - Document docker private registry with authentication support in Unified Containerizer.
  * [MESOS-5732] - MasterAPITest.UnreserveResources is slow.
  * [MESOS-5756] - Cmake build system needs to regenerate protobufs when they are updated.
  * [MESOS-5790] - Ensure all examples in Scheduler HTTP API docs are valid JSON.
  * [MESOS-5822] - Add a build script for the Windows CI.
  * [MESOS-5870] - Fix the large preview logo in Slack.
  * [MESOS-5901] - Make the command executor unversioned.
  * [MESOS-5936] - Operator SUBSCRIBE api should provdide more task metadata than just state changes.
  * [MESOS-5944] - Remove `O_SYNC` from StatusUpdateManager logs.
  * [MESOS-5949] - Allow frameworks to learn the time when an agent became unreachable.
  * [MESOS-5951] - Remove "strict registry" code.
  * [MESOS-5954] - Docker executor does not use HealthChecker library.
  * [MESOS-5955] - The "mesos-health-check" binary is not used anymore.
  * [MESOS-5961] - HTTP and TCP health checks should support docker executor and bridged mode.
  * [MESOS-5965] - Implement garbage collection for unreachable agent lists in registry.
  * [MESOS-5978] - Improve run time for arithmetic operators for Resources.
  * [MESOS-5983] - Number of libprocess worker threads is not configurable for log-rotation module.
  * [MESOS-6006] - Abstract mesos-style.py to allow future linters to be added more easily.
  * [MESOS-6008] - Add the infrastructure for a new python-based CLI.
  * [MESOS-6025] - Validate health check protobuf in the master.
  * [MESOS-6037] - Offer::Operation.type should be optional.
  * [MESOS-6039] - Update elfio to version 3.2.
  * [MESOS-6050] - Add an agent flag for 'runtime_dir'.
  * [MESOS-6051] - Add functions to the 'Launcher' abstraction to aid in checkpointing the exit status of containers.
  * [MESOS-6060] - Add MOUNT or PATH disk type in logging resources.
  * [MESOS-6063] - Track recovered and prepared subsystems for a container.
  * [MESOS-6065] - Support provisioning image volumes in an isolator.
  * [MESOS-6075] - Avoid libprocess functions in `mesos-containerizer launch`.
  * [MESOS-6080] - Expose metrics in scheduler library.
  * [MESOS-6088] - Update launch helper to checkpoint exit status of launched process.
  * [MESOS-6090] - Change master to always update registry before in-memory state.
  * [MESOS-6096] - Update mesos-execute to support launching task groups.
  * [MESOS-6098] - Frameworks UI shows metrics for used resources plus offers.
  * [MESOS-6140] - Add a parallel test runner.
  * [MESOS-6218] - Avoided to concat cgroup internally in subsystems.
  * [MESOS-6220] - HTTP handler failures should result in 500 response rather than 503 response.
  * [MESOS-6242] - Expose unknown container case on Containerizer::wait.
  * [MESOS-6243] - Expose failures and unknown container cases from Containerizer::destroy.
  * [MESOS-6282] - CNI isolator should print plugin's stderr.
  * [MESOS-6299] - Master doesn't remove task from pending when it is invalid.
  * [MESOS-6310] - Remove or define non-POSIX function.
  * [MESOS-6371] - Remove the 'recover()' interface in 'ContainerLogger'.

** Task
  * [MESOS-3370] - Deprecate the external containerizer.
  * [MESOS-4390] - Shared Volumes Design Doc.
  * [MESOS-5039] - Add Subsystem abstraction for cgroups unified isolator.
  * [MESOS-5040] - Add cgroups_subsystems flag for cgroups unified isolator.
  * [MESOS-5041] - Add cgroups unified isolator.
  * [MESOS-5042] - Add cpu subsystem support in cgroups unified isolator.
  * [MESOS-5043] - Add cpuacct subsystem support in cgroups unified isolator.
  * [MESOS-5045] - Add memory subsystem support in cgroups unified isolator.
  * [MESOS-5046] - Add net_cls subsystem support in cgroups unified isolator.
  * [MESOS-5047] - Add perf_event subsystem support in cgroups unified isolator.
  * [MESOS-5051] - Create helpers for manipulating Linux capabilities.
  * [MESOS-5144] - Cleanup memory leaks in libprocess finalize().
  * [MESOS-5228] - Add tests for Capability API.
  * [MESOS-5232] - Add capability information to ContainerInfo protobuf message.
  * [MESOS-5275] - Add capabilities support for unified containerizer.
  * [MESOS-5488] - Implement READ_FILE Call in v1 master API.
  * [MESOS-5515] - Implement READ_FILE Call in v1 agent API.
  * [MESOS-5516] - Implement GET_STATE Call in v1 agent API.
  * [MESOS-5651] - Add devices subsystem support in cgroups unified isolator.
  * [MESOS-5652] - Enable cgroups unified isolator.
  * [MESOS-5788] - Added JAVA API adapter for seamless transition to new scheduler API.
  * [MESOS-5809] - Implement GET_FRAMEWORKS Call in v1 agent API.
  * [MESOS-5810] - Implement GET_EXECUTORS Call in v1 agent API.
  * [MESOS-5811] - Implement GET_TASKS Call in v1 agent API.
  * [MESOS-5855] - Create a 'Disk (not) full' example framework.
  * [MESOS-5970] - Remove HTTP_PARSER_VERSION_MAJOR < 2 code in decoder.
  * [MESOS-5973] - Remove CgroupsCpushareIsolator.
  * [MESOS-5974] - Remove CgroupsMemIsolator.
  * [MESOS-5975] - Remove CgroupsPerfEventIsolator.
  * [MESOS-5976] - Remove CgroupsNetClsIsolator.
  * [MESOS-5977] - Remove CgroupsDevicesIsolator.
  * [MESOS-5987] - Update health check protobuf for HTTP and TCP health check.
  * [MESOS-6017] - Introduce `PortMapping` protobuf.
  * [MESOS-6020] - Remove `slavePid` from the Containerizer::launch API.
  * [MESOS-6021] - Consolidate two `Containerizer::launch` methods into one.
  * [MESOS-6023] - Create a binary for the port-mapper plugin.
  * [MESOS-6036] - Define the Framework API protobufs required for TaskGroups.
  * [MESOS-6042] - Validate TaskGroup launch in the master.
  * [MESOS-6043] - Add interface for launching nested containers in Containerizer.
  * [MESOS-6045] - Implement LAUNCH_GROUP operation in master.
  * [MESOS-6067] - Support provisioner to be nested aware for Mesos Pods.
  * [MESOS-6068] - Refactor MesosContainerizer::launch to prepare for nesting support.
  * [MESOS-6070] - Renamed containerizer::Termination to ContainerTermination.
  * [MESOS-6071] - Validate that an explicitly specified DEFAULT executor has disk resources.
  * [MESOS-6073] - Update the streaming function for ContainerID to be nesting aware.
  * [MESOS-6076] - Implement RunTaskGroup handler on the agent.
  * [MESOS-6077] - Added a default (task group) executor.
  * [MESOS-6102] - Add event for agent added in master operator API.
  * [MESOS-6130] - Make the disk usage isolator nesting-aware.
  * [MESOS-6150] - Introduce the new isolator recover interface for nested container support.
  * [MESOS-6151] - Populate `CommandInfo` correctly for default executors.
  * [MESOS-6156] - Make the `network/cni` isolator nesting aware.
  * [MESOS-6160] - Add protobuf definition for a Volume::Source that specifies a path from parent contianer's sandbox.
  * [MESOS-6186] - Make the generic `cgroups` isolator nesting aware.
  * [MESOS-6188] - Make the `gpu/nvidia` isolator nesting aware.
  * [MESOS-6189] - Add a virtual method to Isolator to indicate if it supports nesting.
  * [MESOS-6190] - Make the docker/runtime isolator nesting aware.
  * [MESOS-6191] - Make the filesystem/linux isolator nesting aware.
  * [MESOS-6192] - Make the appc/runtime isolator nesting aware.
  * [MESOS-6194] - Make the disk/du isolator nesting aware.
  * [MESOS-6199] - Make the volume/image isolator nesting aware.
  * [MESOS-6204] - Introduce a "runtime" directory owned by the containerizer for checkpointing container information.
  * [MESOS-6227] - Update the default executor to launch/wait/destroy child containers.
  * [MESOS-6230] - Add support for health checks to the default executor.
  * [MESOS-6235] - Add 'argv' variant of 'os::system'.
  * [MESOS-6241] - Add agent::Call / agent::Response API for managing nested containers.
  * [MESOS-6258] - Add `volume/sandbox_path` isolator to support Volume::Source::SANDBOX_PATH.
  * [MESOS-6265] - Adjust cgroups layout for nested containers.
  * [MESOS-6272] - Allow WebUI/other tools to access the task sandbox for a nested container.
  * [MESOS-6284] - MesosContainerizer should skip non-nesting aware isolators for nested container.
  * [MESOS-6287] - MesosContainer should allow 'wait' on terminated nested container.
  * [MESOS-6312] - Update CHANGELOG to mention addition of agent '--runtime_dir' flag.
  * [MESOS-6344] - Allow `network/cni` isolator to take a search path for CNI plugins instead of single directory.
  * [MESOS-6408] - Changelog for `mesos-cni-port-mapper` to 1.1.0.

** Wish
  * [MESOS-5929] - Total cluster resources on master Mesos UI should have better spacing.


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

All Issues:
** Bug
    * [MESOS-6052] - Unable to launch containers on CNI networks on CoreOS
    * [MESOS-6142] - Frameworks may RESERVE for an arbitrary role.
    * [MESOS-6621] - SSL downgrade path will CHECK-fail when using both temporary and persistent sockets
    * [MESOS-6676] - Always re-link with scheduler during re-registration.
    * [MESOS-6917] - Segfault when the executor sets an invalid UUID when sending a status update.
    * [MESOS-7008] - Quota not recovered from registry in empty cluster.


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

All Issues:
** Bug
    * [MESOS-4638] - Versioning preprocessor macros.
    * [MESOS-4973] - Duplicates in 'unregistered_frameworks' in /state
    * [MESOS-4975] - mesos::internal::master::Slave::tasks can grow unboundedly.
    * [MESOS-5613] - mesos-local fails to start if MESOS_WORK_DIR isn't set.
    * [MESOS-6013] - Use readdir instead of readdir_r.
    * [MESOS-6026] - Tasks mistakenly marked as FAILED due to race b/w sendExecutorTerminatedStatusUpdate() and _statusUpdate().
    * [MESOS-6074] - Master check failure if the metrics endpoint is polled soon after it starts.
    * [MESOS-6100] - Make fails compiling 1.0.1.
    * [MESOS-6104] - Potential FD double close in libevent's implementation of `sendfile`.
    * [MESOS-6118] - Agent would crash with docker container tasks due to host mount table read.
    * [MESOS-6122] - Mesos slave throws systemd errors even when passed a flag to disable systemd.
    * [MESOS-6152] - Resource leak in libevent_ssl_socket.cpp.
    * [MESOS-6212] - Validate the name format of mesos managed docker containers.
    * [MESOS-6216] - LibeventSSLSocketImpl::create is not safe to call concurrently with os::getenv.
    * [MESOS-6233] - Master CHECK fails during recovery while relinking to other masters.
    * [MESOS-6234] - Potential socket leak during Zookeeper network changes.
    * [MESOS-6245] - Driver based schedulers performing explicit acknowledgements cannot acknowledge updates from HTTP based executors.
    * [MESOS-6246] - Libprocess links will not generate an ExitedEvent if the socket creation fails.
    * [MESOS-6269] - CNI isolator doesn't activate loopback interface.
    * [MESOS-6274] - Agent should not allow HTTP executors to re-subscribe before containerizer recovery is done.
    * [MESOS-6324] - CNI should not use `ifconfig` in executors `pre_exec_command`.
    * [MESOS-6391] - Command task's sandbox should not be owned by root if it uses container image.
    * [MESOS-6393] - Deprecated SSL_ environment variables are non functional already.
    * [MESOS-6420] - Mesos Agent leaking sockets when port mapping network isolator is ON.
    * [MESOS-6446] - WebUI redirect doesn't work with stats from /metric/snapshot.
    * [MESOS-6457] - Tasks shouldn't transition from TASK_KILLING to TASK_RUNNING.
    * [MESOS-6461] - Duplicate framework ids in /master/frameworks endpoint 'unregistered_frameworks'.
    * [MESOS-6502] - _version uses incorrect MESOS_{MAJOR,MINOR,PATCH}_VERSION in libmesos java binding.
    * [MESOS-6527] - Memory leak in the libprocess request decoder.

** Improvement
    * [MESOS-6075] - Avoid libprocess functions in `mesos-containerizer launch`.
    * [MESOS-6299] - Master doesn't remove task from pending when it is invalid.


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

All Issues:
** Bug
    * [MESOS-5388] - MesosContainerizerLaunch flags execute arbitrary commands via shell.
    * [MESOS-5862] - External links to .md files broken.
    * [MESOS-5911] - Webui redirection to leader in browser does not work.
    * [MESOS-5913] - Stale socket FD usage when using libevent + SSL.
    * [MESOS-5922] - mesos-agent --help exit status is 1.
    * [MESOS-5923] - Ubuntu 14.04 LTS GPU Isolator "/run" directory is noexec.
    * [MESOS-5927] - Unable to run "scratch" Dockerfiles with Unified Containerizer.
    * [MESOS-5928] - Agent's '--version' flag doesn't work.
    * [MESOS-5930] - Orphan tasks can show up as running after they have finished.
    * [MESOS-5943] - Incremental http parsing of URLs leads to decoder error.
    * [MESOS-5945] - NvidiaVolume::create() should check for root before creating volume.
    * [MESOS-5959] - All non-root tests fail on GPU machine.
    * [MESOS-5969] - Linux 'MountInfoTable' entries not sorted as expected.
    * [MESOS-5982] - NvidiaVolume errors out if any binary is missing.
    * [MESOS-5986] - SSL Socket CHECK can fail after socket receives EOF.
    * [MESOS-5988] - PollSocketImpl can write to a stale fd.

** Improvement
    * [MESOS-5830] - Make a sweep to trim excess space around angle brackets.

** Task
    * [MESOS-5970] - Remove HTTP_PARSER_VERSION_MAJOR < 2 code in decoder.


Release Notes - Mesos - Version 1.0.0
-------------------------------------
This release contains the following new features:

  * Scheduler and Executor v1 HTTP APIs are now considered stable.

  * [MESOS-4791] - **Experimental** support for v1 Master and Agent APIs. These
    APIs let operators and services (monitoring, load balancers) send HTTP
    requests to '/api/v1' endpoint on master or agent. See
    `docs/operator-http-api.md` for details.

  * [MESOS-4828] - **Experimental** support for a new `disk/xfs' isolator
    has been added to isolate disk resources more efficiently. Please refer to
    docs/mesos-containerizer.md for more details.

  * [MESOS-4355] - **Experimental** support for Docker volume plugin. We added a
    new isolator 'docker/volume' which allows users to use external volumes in
    Mesos containerizer. Currently, the isolator interacts with the Docker
    volume plugins using a tool called 'dvdcli'. By speaking the Docker volume
    plugin API, most of the Docker volume plugins are supported.

  * [MESOS-4641] - **Experimental** A new network isolator, the
    `network/cni` isolator, has been introduced in the `MesosContainerizer`. The
    `network/cni` isolator implements the Container Network Interface (CNI)
    specification proposed by CoreOS.  With CNI the `network/cni` isolator is
    able to allocate a network namespace to Mesos containers and attach the
    container to different types of IP networks by invoking network drivers
    called CNI plugins.

  * [MESOS-2948, MESOS-5403] - The authorizer interface has been refactored in
    order to decouple the ACLs definition language from the interface.
    It additionally includes the option of retrieving `ObjectApprover`. An
    `ObjectApprover` can be used to synchronously check authorizations for a
    given object and is hence useful when authorizing a large number of objects
    and/or large objects (which need to be copied using request based
    authorization). NOTE: This is a **breaking change** for authorizer modules.

  * [MESOS-5405] - The `subject` and `object` fields in authorization::Request
    have been changed from required to optional. If either of these fields is
    not set, the request should only be authorized if any subject/object should
    be allowed.
    NOTE: This is a semantic change for authorizer modules.

  * [MESOS-4931, MESOS-5709, MESOS-5704] - Authorization based HTTP endpoint
    filtering enables operators to restrict what part of the cluster state a
    user is authorized to see.
    Consider for example the `/state` master endpoint: an operator can now
    authorize users to only see a subset of the running frameworks, tasks, or
    executors. The following endpoints support HTTP endpoint filtering:
    '/state', '/state-summary', '/tasks', '/frameworks','/weights',
    and '/roles'. Additonally the following v1 API calls support filtering:
    'GET_ROLES','GET_WEIGHTS','GET_FRAMEWORKS', 'GET_STATE', and 'GET_TASKS'.

  * [MESOS-4909] - Tasks can now specify a kill policy. They are best-effort,
    because machine failures or forcible terminations may occur. Currently, the
    only available kill policy is how long to wait between graceful and forcible
    task kill. In the future, more policies may be available (e.g. hitting an
    HTTP endpoint, running a command, etc). Note that it is the executor's
    responsibility to enforce kill policies. For executor-less command-based
    tasks, the kill is performed via sending a signal to the task process:
    SIGTERM for the graceful kill and SIGKILL for the forcible kill. For docker
    executor-less tasks the grace period is passed to 'docker stop --time'. This
    feature supersedes the '--docker_stop_timeout', which is now deprecated.

  * [MESOS-4908] - The task kill policy defined within 'TaskInfo' can now be
    overridden when the scheduler kills the task. This can be used by schedulers
    to forcefully kill a task which is already being killed, e.g. if something
    went wrong during a graceful kill and a forcible kill is desired. Note that
    it is the executor's responsibility to honor the 'Event.kill.kill_policy'
    field and override the task's kill policy and kill policy from a previous
    kill task request. To use this feature, schedulers and executors must
    support HTTP API; use the '--http_command_executor' agent flag to ensure
    the agent launches the HTTP API based command executor.

  * [MESOS-4949] - The executor shutdown grace period can now be configured in
    `ExecutorInfo`, which overrides the agent flag. When shutting down an
    executor the agent will wait in a best-effort manner for the grace period
    specified here before forcibly destroying the container. The executor must
    not assume that it will always be allotted the full grace period, as the
    agent may decide to allot a shorter period and failures / forcible
    terminations may occur. Together with kill policies this gives frameworks
    flexibility around how to clean up tasks and executors.

  * [MESOS-3094] - **Experimental** support for launching mesos tasks on
    Windows. Note that there are no isolation guarantees provided yet.

  * [MESOS-4090] - The `mesos.native` python module has been split into two,
    `mesos.executor` and `mesos.scheduler`. This change also removes
    un-necessary 3rd party dependencies from `mesos.executor` and
    `mesos.scheduler`. `mesos.native` still exists, combining both modules for
    backwards compatibility with existing code.

  * [MESOS-1478] - Phase I of the Slave to Agent rename is complete. To support
    the rename, new duplicate flags (e.g., --agent_reregister_timeout), new
    binaries (e.g., mesos-agent) and WebUI sandbox links have been added. All
    the logging output has been updated to use the term 'agent' now. Flags,
    binaries and scripts with 'slave' keyword have been deprecated (see
    "Deprecations section below").

  * [MESOS-4312] - **Experimental** support for building and running mesos on
    IBM PowerPC platform.

  * [MESOS-4189] - Weights for resource roles can now be configured dynamically
    via the new '/weights' endpoint on the master.

  * [MESOS-4424] - Support for using Nvidia GPUs as a resource in the
    Mesos "unified" containerizer. This support includes running containers
    with and without filesystem isolation (i.e. running both imageless
    containers as well as containers using a docker image). Frameworks must
    opt-in to receiving GPU resources via the GPU_RESOURCES framework
    capability (see the scarce resource problem in MESOS-5377). We support
    'nvidia-docker'-style docker containers by injecting a volume that
    contains the Nvidia libraries / binaries when the docker image has
    the 'com.nvidia.volumes.needed' label. Support for the docker
    containerizer will come in a future release.

  * [MESOS-5724] - SSL certificate validation allows for additional IP address
    subject alternative name extension verification.

Deprecations:
  * [MESOS-2281] - Deprecated the plain text format for credentials in favor of
    the JSON format.

  * [MESOS-4910] - Deprecate the --docker_stop_timeout agent flag.

  * [MESOS-5001] - The 'allocator/event_queue_dispatches' metric is now
    deprecated in favor 'of allocator/mesos/event_queue_dispatches'.

  * [MESOS-5029] - Deprecated the ExecutorInfo.source field in favor of
    ExecutorInfo.labels.

  * [MESOS-3781] - Deprecated flags with keyword 'slave' in favor of 'agent'.

  * [MESOS-3779] - Deprecated sandbox links with 'slave' keyword in the WebUI.

  * [MESOS-3784] - Deprecated `slave` subcommand for mesos-cli.

  * [MESOS-5155] - Deprecated `SetQuota` and `RemoveQuota` ACLs. This change is
    applicable to the local authorizer as well as any custom authorizer module.

  * [MESOS-5666] - Deprecated camel cased `taskInfo` and `executorInfo` in
    isolator `ContainerConfig`.

  * [MESOS-5863] - Deprecated `SSL_*` environment variables used by libprocess
    SSL support in favor of using `LIBPROCESS_SSL_*`.

Additional API Changes:
  * [MESOS-4580] - Returning `202` (Accepted) for /reserve and related endpoints.

  * [MESOS-4735] - Added 'output_file' field to CommandInfo.URI in Scheduler API
    and v1 Scheduler HTTP API.

  * [MESOS-5014] - Changed Call and Event Type enums in scheduler.proto
    from required to optional for the purpose of backwards compatibility.

  * [MESOS-5015] - Changed Call and Event Type enums in executor.proto
    from required to optional for the purpose of backwards compatibility.

  * [MESOS-5029] - Added 'labels' to ExecutorInfo.

  * [MESOS-5030] - Added non-terminal task metadata to the container resource
    usage information.

  * [MESOS-5408] - Deleted the /observe HTTP endpoint.

  * [MESOS-4843, MESOS-5150, MESOS-5286, MESOS-5335, MESOS-5336] - Authorization
    has been added to the '/metrics/snapshot', '/logging/toggle', '/quota',
    '/files/browse', '/files/download', '/files/read', '/flags', and
    '/containers' endpoints. If a Mesos cluster has authorization enabled, these
    endpoints now require that ACLs be set to authorize principals to access
    them. Note that the '/metrics/snapshot' and '/files/*' endpoints are used by
    the web UI, and thus using the web UI in a cluster with authorization
    enabled will require that ACLs be set appropriately.

  * [MESOS-5064] - Remove default value for the agent `work_dir`. This flag is
    now required, and the agent will exit immediately if it is not provided.

  * [MESOS-5637] - Authorized endpoints consistently return `503` (Service
    Unavailable) instead of `500` (Internal Server Error) when the authenticator
    or the authorizer fails to process the request.

  * [MESOS-5657] - Executors should not inherit environment variables from the
    agent.

  * [MESOS-5680] - We should not 'chown -R' on persistent volumes every time
    container tries to use it.

  * [MESOS-5642] - Namespace and header file of `Allocator` has been moved to
    be consistent with other packages.

  * [MESOS-5851] - The flag `--authenticate_http` has been deprecated in favor
    of `--authenticate_http_readwrite`. This new flag enables authentication for
    all HTTP endpoints which support authentication and allow modification of
    the state of the cluster. A new flag has also been added,
    `--authenticate_http_readonly`, which enables authentication for those
    authenticatable endpoints that cannot be used to modify the cluster state.

  * [MESOS-5833] - Disable the experimental `registry_strict` master flag.

3rd Party Upgrades:
  * [MESOS-4805] - Upgraded vendored ry-http-parser-1c3624a to nodejs/http-parser 2.6.1.
  * [MESOS-4678] - Upgraded vendored protobuf 2.5.0 to 2.6.1.
  * [MESOS-4803] - Upgraded vendored libev 4.15 to 4.22.
  * [MESOS-4612] - Upgraded vendored ZooKeeper 3.4.5 to 3.4.8.

Binary API Changes:
  * [MESOS-5055] - Slave/Agent Rename Phase I - Update strings in the log message
    and standard output.
  * [MESOS-3782] - Slave/Agent Rename Phase I - Duplicate/Rename binaries.
  * [MESOS-5057] - Slave/Agent Rename Phase I - Update strings in error messages and
    other strings.
  * [MESOS-5230] - Slave/Agent Rename Phase I: Rename '/include/mesos/slave' folder

All Issues:

** Bug
    * [MESOS-1495] - Create separate local data file to manage releases
    * [MESOS-1575] - master sets failover timeout to 0 when framework requests a high value
    * [MESOS-1865] - Redirect to the leader master when current master is not a leader
    * [MESOS-2043] - Framework auth fail with timeout error and never get authenticated
    * [MESOS-2198] - Document that TaskIDs should not be reused
    * [MESOS-2201] - ReplicaTest.Restore fails with leveldb greater than v1.7.
    * [MESOS-2331] - MasterSlaveReconciliationTest.ReconcileRace is flaky
    * [MESOS-2858] - FetcherCacheHttpTest.HttpMixed is flaky.
    * [MESOS-3181] - Implement package rebundling for Windows
    * [MESOS-3319] - Mesos will not build when configured with gperftools enabled
    * [MESOS-3402] - mesos-execute does not support credentials
    * [MESOS-3573] - Mesos does not kill orphaned docker containers
    * [MESOS-3714] - `os::environ` collides with the `environ` macro in Windows headers.
    * [MESOS-3737] - `limiter.hpp` causes template specialization error on Windows 10/MSVC 1900
    * [MESOS-3739] - Mesos does not set Content-Type for 400 Bad Request
    * [MESOS-3881] - Implement `stout/os/pstree.hpp` on Windows
    * [MESOS-3902] - The Location header when non-leading master redirects to leading master is incomplete.
    * [MESOS-3923] - Implement AuthN handling in Master for the Scheduler endpoint
    * [MESOS-3976] - C++ HTTP Scheduler Library does not work with SSL enabled
    * [MESOS-4099] - parallel make tests does not build all test targets
    * [MESOS-4269] - Minor typo in src/linux/cgroups.cpp
    * [MESOS-4279] - Docker executor truncates task's output when the task is killed.
    * [MESOS-4387] - Added a new test cases for reviveOffers in allocator test
    * [MESOS-4434] - Install 3rdparty package boost, glog, protobuf and picojson when installing Mesos
    * [MESOS-4447] - Renamed reserved() API to reservations()
    * [MESOS-4462] - Port `gmtime_r`
    * [MESOS-4463] - Implement `hsterror`
    * [MESOS-4464] - Implement cpu count facilities on Windows
    * [MESOS-4465] - Implement pagesize facilities in Windows
    * [MESOS-4466] - Implement `waitpid` in Windows
    * [MESOS-4469] - Implement memory querying in Windows
    * [MESOS-4470] - Implement `uname` in Windows
    * [MESOS-4471] - Implement process querying/counting in Windows
    * [MESOS-4472] - Implement `getenv` in Windows
    * [MESOS-4473] - Implement `shell` in Windows
    * [MESOS-4474] - Implement `sendfile` in Windows
    * [MESOS-4580] - Consider returning `202` (Accepted) for /reserve and related endpoints
    * [MESOS-4611] - Passing a lambda to dispatch() always matches the template returning void
    * [MESOS-4633] - Tests will dereference stack allocated agent objects upon assertion/expectation failure.
    * [MESOS-4634] - Tests will dereference stack allocated master objects upon assertion/expectation failure.
    * [MESOS-4658] - process::Connection can lead to process::wait deadlock
    * [MESOS-4662] - PortMapping network isolator should not assume BIND_MOUNT_ROOT is a realpath.
    * [MESOS-4672] - Implement aufs based provisioner backend.
    * [MESOS-4673] - Agent fails to shutdown after re-registering period timed-out.
    * [MESOS-4680] - HTTP requests to non leading mesos-master redirect to top level page
    * [MESOS-4684] - Create base docker image for test suite.
    * [MESOS-4705] - Linux 'perf' parsing logic may fail when OS distribution has perf backports.
    * [MESOS-4744] - mesos-execute should allow setting role
    * [MESOS-4807] - IOTest.BufferedRead writes to the current directory
    * [MESOS-4810] - ProvisionerDockerPullerTest.ROOT_INTERNET_CURL_ShellCommand fails.
    * [MESOS-4827] - Destroy Docker container crashes Mesos slave
    * [MESOS-4875] - overlayfs does not work when launching tasks
    * [MESOS-4876] - bind backend does not work when launching tasks
    * [MESOS-4885] - Unzip should force overwrite
    * [MESOS-4901] - Build fails on some systems due to unportable use of time.h
    * [MESOS-4911] - Executor driver does not respect executor shutdown grace period.
    * [MESOS-4912] - LinuxFilesystemIsolatorTest.ROOT_MultipleContainers fails.
    * [MESOS-4922] - Setup proper /etc/hostname, /etc/hosts and /etc/resolv.conf for containers in network/cni isolator.
    * [MESOS-4924] - MAC OS build failed
    * [MESOS-4942] - Docker runtime isolator tests may cause disk issue.
    * [MESOS-4950] - Implement reconnect funtionality in the scheduler library.
    * [MESOS-4952] - Annoying image provisioner logging for when images are not used.
    * [MESOS-4954] - URI fetcher error message if plugin is not found is mis-leading.
    * [MESOS-4957] - Typo in Mesos portal
    * [MESOS-4961] - ContainerLoggerTest.LOGROTATE_RotateInSandbox is flaky
    * [MESOS-4963] - Incorrect CXXFLAGS with GCC 6
    * [MESOS-4972] - Implement `os::rename`
    * [MESOS-4978] - Update mesos-execute with Appc changes.
    * [MESOS-4981] - Framework (re-)register metric counters broken for calls made via scheduler driver
    * [MESOS-4984] - MasterTest.SlavesEndpointTwoSlaves is flaky
    * [MESOS-5000] - MasterTest.MasterLost is flaky
    * [MESOS-5005] - Enforce that DiskInfo principal is equal to framework/operator principal
    * [MESOS-5010] - Installation of mesos python package is incomplete
    * [MESOS-5012] - Protobuf change for external storage.
    * [MESOS-5013] - Add docker volume driver isolator for Mesos containerizer.
    * [MESOS-5018] - FrameworkInfo Capability enum does not support upgrades.
    * [MESOS-5031] - Authorization Action enum does not support upgrades.
    * [MESOS-5060] - Requesting /files/read.json with a negative length value causes subsequent /files requests to 404.
    * [MESOS-5063] - SSLTest.HTTPSPost and SSLTest.HTTPSGet tests fail
    * [MESOS-5064] - Remove default value for the agent `work_dir`
    * [MESOS-5082] - Fix a bug in the Nvidia GPU device isolator that exposes a discrepancy between clang and gcc in 'using' declarations
    * [MESOS-5113] - `network/cni` isolator crashes when launched without the --network_cni_plugins_dir flag
    * [MESOS-5114] - Flags::parse does not handle empty string correctly.
    * [MESOS-5115] - Grant access to /dev/nvidiactl and /dev/nvidia-uvm in the Nvidia GPU isolator.
    * [MESOS-5121] - pivot_root is not available on PowerPC
    * [MESOS-5125] - Commit message hook iterates over words, rather than lines.
    * [MESOS-5126] - Commit message hook iterates over the commented lines.
    * [MESOS-5127] - Reset `LIBPROCESS_IP` in `network\cni` isolator.
    * [MESOS-5128] - PersistentVolumeTest.AccessPersistentVolume is flaky
    * [MESOS-5131] - Slave allows the resource estimator to send non-revocable resources.
    * [MESOS-5132] - Commit message hook lints the diff in verbose mode.
    * [MESOS-5138] - Fix Nvidia GPU test build for namespace change of MasterDetector
    * [MESOS-5142] - Add agent flags for HTTP authorization.
    * [MESOS-5146] - MasterAllocatorTest/1.RebalancedForUpdatedWeights is flaky.
    * [MESOS-5153] - Sandboxes contents should be protected from unauthorized users
    * [MESOS-5162] - Commit message hook behaves incorrectly when a message includes a "*".
    * [MESOS-5166] - ExamplesTest.DynamicReservationFramework is slow
    * [MESOS-5181] - Master should reject calls from the scheduler driver if the scheduler is not connected.
    * [MESOS-5184] - Mesos does not validate role info when framework registered with specified role
    * [MESOS-5196] - Sandbox GC shouldn't return early in the face of an error.
    * [MESOS-5199] - The mesos-execute prints confusing message when launching tasks.
    * [MESOS-5216] - Document docker volume driver isolator.
    * [MESOS-5224] - buffer overflow error in slave upon processing malformed UUIDs
    * [MESOS-5225] - Command executor can not start when joining a CNI network
    * [MESOS-5226] - The image-less task launched by mesos-execute can not join CNI network
    * [MESOS-5230] - Slave/Agent Rename Phase I: Rename '/include/mesos/slave' folder
    * [MESOS-5233] - python packages installation is broken
    * [MESOS-5237] - The windows version of `os::access` has differing behavior than the POSIX version.
    * [MESOS-5239] - Persistent volume DockerContainerizer support assumes proper mount propagation setup on the host.
    * [MESOS-5240] - Command executor may escalate after the task is reaped.
    * [MESOS-5244] - Compilation failure on Ubuntu 16.04
    * [MESOS-5253] - Isolator cleanup should not be invoked if they are not prepared yet.
    * [MESOS-5263] - pivot_root is not available on ARM
    * [MESOS-5265] - Update mesos-execute to support docker volume isolator.
    * [MESOS-5266] - add test cases for docker volume driver
    * [MESOS-5277] - Need to add REMOVE semantics to the copy backend
    * [MESOS-5279] - DRF sorter add/activate doesn't check if it's adding a duplicate entry
    * [MESOS-5282] - Destroy container while provisioning volume images may lead to a race.
    * [MESOS-5287] - boto is no longer a Mesos dependency.
    * [MESOS-5293] - Endpoint handlers for master and agent are implemented surprisingly differently.
    * [MESOS-5294] - Status updates after a health check are incomplete or invalid
    * [MESOS-5295] - The task launched by non-checkpointed HTTP command executor will keep running till executor shutdown grace period (5s) after agent process exits.
    * [MESOS-5304] - /metrics/snapshot endpoint help disappeared on agent.
    * [MESOS-5308] - ROOT_XFS_QuotaTest.NoCheckpointRecovery failed.
    * [MESOS-5312] - Env `MESOS_SANDBOX` is not set properly for command tasks that changes rootfs.
    * [MESOS-5318] - Make `os::close` always catch structured exceptions on Windows
    * [MESOS-5326] - Error symbolic link of include/slave
    * [MESOS-5330] - Agent should backoff before connecting to the master
    * [MESOS-5340] - libevent builds may prevent new connections
    * [MESOS-5341] - Enabled docker volume support for DockerContainerizer
    * [MESOS-5351] - DockerVolumeIsolatorTest.ROOT_INTERNET_CURL_CommandTaskRootfsWithVolumes is flaky
    * [MESOS-5354] - Update "driver" as optional for DockerVolume.
    * [MESOS-5359] - The scheduler library should have a delay before initiating a connection with master.
    * [MESOS-5380] - Killing a queued task can cause the corresponding command executor to never terminate.
    * [MESOS-5381] - Network portmapping isolator disable IPv6 failed
    * [MESOS-5382] - Implement os::fsync
    * [MESOS-5383] - Implement os::setHostname
    * [MESOS-5386] - Add `HANDLE` overloads for functions that take a file descriptor
    * [MESOS-5389] - docker containerizer should prefix relative volume.container_path values with the path to the sandbox.
    * [MESOS-5390] - v1 Executor Protos not included in maven jar
    * [MESOS-5397] - Slave/Agent Rename Phase 1: Update terms in the website
    * [MESOS-5403] - Introduce ObjectApprover Interface to Authorizer.
    * [MESOS-5405] - Make fields in authorization::Request protobuf optional.
    * [MESOS-5407] - Slave/Agent rename: diagrams in docs
    * [MESOS-5408] - Delete the /observe HTTP endpoint
    * [MESOS-5413] - `network/cni` isolator should skip the bind mounting of the CNI network information root directory if possible
    * [MESOS-5414] - configure failed on ubuntu and centos
    * [MESOS-5415] - bootstrap of libprocess fails.
    * [MESOS-5416] - make check of stout fails.
    * [MESOS-5422] - Website README.md is out of dated
    * [MESOS-5423] - Updating the website section in release-guide is out of dated
    * [MESOS-5428] - Update the mechanism to define flags in FlagsBase derived clases
    * [MESOS-5429] - Enhance error message for mesos-ps
    * [MESOS-5432] - Javadoc in project website didn't include the generated protobuf
    * [MESOS-5434] - Incomplete bootstrap 3.3.6 upgrade in webui
    * [MESOS-5436] - GPU resource broke framework data table in webUI
    * [MESOS-5437] - AppC  appc_simple_discovery_uri_prefix is lost in configuration.md
    * [MESOS-5438] - Add more verbose log for mesos-cat, mesos-tail or mesos-scp
    * [MESOS-5445] - Allow libprocess/stout to build without first doing `make` in 3rdparty.
    * [MESOS-5449] - Memory leak in SchedulerProcess.declineOffer
    * [MESOS-5450] - Make the SASL dependency optional.
    * [MESOS-5451] - Show Framework ID in log for long-lived-framework
    * [MESOS-5453] - CNI should not store subnet of address in NetworkInfo
    * [MESOS-5477] - Implement GET_HEALTH Call in v1 master API.
    * [MESOS-5478] - Implement GET_HEALTH Call in v1 agent API.
    * [MESOS-5479] - Implement GET_VERSION Call in v1 master API.
    * [MESOS-5480] - Implement GET_VERSION Call in v1 agent API.
    * [MESOS-5531] - Re-enable style-check for stout.
    * [MESOS-5537] - http v1 SUBSCRIBED scheduler event always has nil http_interval_seconds
    * [MESOS-5543] - /dev/fd is missing in the Mesos containerizer environment
    * [MESOS-5554] - Change major/minor device types for Nvidia GPUs to `unsigned int`
    * [MESOS-5556] - Fix method of populating device entries for `/dev/nvidia-uvm`, etc.
    * [MESOS-5561] - Need to remove references to "messages/messages.hpp" from `State` API
    * [MESOS-5571] - Scheduler JNI throws exception when the major versions of JAR and libmesos don't match
    * [MESOS-5575] - Attempting to Parse PID logging is too verbose
    * [MESOS-5577] - Modules using replicated log state API require zookeeper headers
    * [MESOS-5587] - FullFrameworkWriter makes master segmentation fault.
    * [MESOS-5595] - GMock warning in FaultToleranceTest.SchedulerReregisterAfterFailoverTimeout
    * [MESOS-5600] - DRF sorter unnecessarily re-sorts due to misuse of "dirty" bit.
    * [MESOS-5601] - DRF sorter does not re-calculate share if a client weight is updated.
    * [MESOS-5607] - Refactored overlay, overlayfs and aufs checking to fs::supported
    * [MESOS-5609] - Put initial scaffolding in place for implementing SUBSCRIBE call on v1 Master API.
    * [MESOS-5611] - Error message is not clear when create docker volume with absolute path
    * [MESOS-5615] - When using command executor, the ExecutorInfo is useless for sandbox authorization
    * [MESOS-5616] - Add missing comments for GET_FLAGS, GET_HEALTH, GET_VERSION, GET_LOGGING_LEVEL, GET_LEADING_MASTER
    * [MESOS-5627] - Quota-related authorization actions should be removed rather than deprecated.
    * [MESOS-5629] - Agent segfaults after request to '/files/browse'
    * [MESOS-5637] - Authorized endpoint results are inconsistent for failures.
    * [MESOS-5642] - Move include/mesos/v1/master/allocator.proto to its own directory and package
    * [MESOS-5657] - Executors should not inherit environment variables from the agent.
    * [MESOS-5660] - ContainerizerTest.ROOT_CGROUPS_BalloonFramework fails because executor environment isn't inherited
    * [MESOS-5664] - Invalid resources sent to '/reserve' are silently dropped
    * [MESOS-5667] - CniIsolatorTest.ROOT_INTERNET_CURL_LaunchCommandTask fails on CentOS 7.
    * [MESOS-5668] - Add CGROUP namespace to linux ns helper.
    * [MESOS-5669] - CNI isolator should not return failure if /etc/hostname does not exist on host.
    * [MESOS-5670] - MemoryPressureMesosTest.CGROUPS_ROOT_SlaveRecovery is flaky.
    * [MESOS-5671] - MemoryPressureMesosTest.CGROUPS_ROOT_Statistics is flaky.
    * [MESOS-5673] - Port mapping isolator may cause segfault if it bind mount root does not exist.
    * [MESOS-5674] - Port mapping isolator may fail in 'isolate' method.
    * [MESOS-5680] - We should not 'chown -R' on persistent volumes every time container tries to use it.
    * [MESOS-5684] - Master captures `this` when creating authorization callback
    * [MESOS-5685] - The /files/download endpoint's authorization can be compromised
    * [MESOS-5691] - SSL downgrade support will leak sockets in CLOSE_WAIT status
    * [MESOS-5692] - Add helper function "begin_with/end_with" to strings
    * [MESOS-5695] - Add missing comments for GET_ROLES, GET_WEIGHTS, SUBSCRIBE, CREATE_VOLUMES, DESTROY_VOLUMES, SET_QUOTA
    * [MESOS-5698] - Quota sorter not updated for resource changes at agent.
    * [MESOS-5715] - Enhance startsWith/endsWith's performance
    * [MESOS-5723] - SSL-enabled libprocess will leak incoming links to forks
    * [MESOS-5724] - SSL certificate validation should allow IP only verification.
    * [MESOS-5727] - Command executor health check does not work when the task specifies container image.
    * [MESOS-5748] - Potential segfault in `link` and `send` when linking to a remote process
    * [MESOS-5755] - NVML headers are not installed as part of 3rdparty install with --enable-install-module-dependencies
    * [MESOS-5757] - Authorize orphaned tasks
    * [MESOS-5760] - MAC OS Build failed
    * [MESOS-5763] - Task stuck in fetching is not cleaned up after --executor_registration_timeout.
    * [MESOS-5766] - Missing License Information for Bundled NVML headers
    * [MESOS-5794] - Agent's /containers endpoint should skip terminated executors.
    * [MESOS-5799] - docker::inspect() may get wrong output when a docker container is not in "running" state
    * [MESOS-5806] - CNI isolator should prepare network related /etc/* files for containers using host mode but specify container images.
    * [MESOS-5834] - Mesos may pass --volume-driver to the Docker daemon multiple times.
    * [MESOS-5844] - PersistentVolumeEndpointsTest.OfferCreateThenEndpointRemove test is flaky
    * [MESOS-5845] - The fetcher can access any local file as root
    * [MESOS-5848] - Docker health checks are malformed.
    * [MESOS-5851] - Create mechanism to control authentication between different HTTP endpoints
    * [MESOS-5863] - Enabling SSL causes fetcher fail to fetch from HTTPS sites.
    * [MESOS-5891] - /help endpoint does not set Content-Type to HTML.

** Documentation
    * [MESOS-4381] - Improve upgrade compatibility documentation.
    * [MESOS-4514] - Document how to implement Mesos HTTP operator endpoints.
    * [MESOS-4689] - Design doc for v1 Operator API
    * [MESOS-4726] - Document scheduler driver calls in framework development guide.
    * [MESOS-4750] - Document: Mesos Executor expects all SSL_* environment variables to be set
    * [MESOS-4785] - Reorganize ACL subject/object descriptions.
    * [MESOS-4787] - HTTP endpoint docs should use shorter paths
    * [MESOS-5215] - Update the documentation for '/reserve' and '/create-volumes'
    * [MESOS-5313] - Failed to set quota and update weight according to document
    * [MESOS-5366] - Update documentation to include contender/detector module
    * [MESOS-5419] - Document all known client libraries for the Scheduler/Executor API
    * [MESOS-5583] - Improve authorization documentation when setting permissive flag.
    * [MESOS-5586] - Move design docs from wiki to web page
    * [MESOS-5702] - CNI documentation example is not explicit enough about external plugins

** Epic
    * [MESOS-1478] - Slave to Agent rename (Phase I).
    * [MESOS-2297] - Add authentication support for HTTP API
    * [MESOS-2948] - Generalize authorizer interface in order to allow for arbitrary Subjects, Actions and Objects
    * [MESOS-4189] - Dynamic weights
    * [MESOS-4843] - Authorize Master Operator Endpoints
    * [MESOS-4847] - Agent HTTP Authentication
    * [MESOS-4931] - Authorization based filtering for endpoints.
    * [MESOS-5150] - Authorize Agent HTTP Endpoints
    * [MESOS-5703] - Authorize operator endpoints for Mesos 1.0

** Improvement
    * [MESOS-1571] - Signal escalation timeout is not configurable.
    * [MESOS-2145] - Distinguish frameworks according to their state in the webui
    * [MESOS-2154] - Port CFS quota support to Docker Containerizer
    * [MESOS-2281] - Deprecate plain text Credential format.
    * [MESOS-2372] - Test script for verifying compatibility between Mesos components
    * [MESOS-2602] - Provide a way to "push" cluster state updates to a registered service.
    * [MESOS-2720] - Publish the schema for operator endpoints
    * [MESOS-3243] - Replace NULL with nullptr
    * [MESOS-3690] - Make Apache Mesos' website mobile friendly
    * [MESOS-3774] - Migrate Future tests from process_tests.cpp to future_tests.cpp
    * [MESOS-3775] - MasterAllocatorTest.SlaveLost is slow.
    * [MESOS-4090] - Create light-weight executor only and scheduler only mesos eggs
    * [MESOS-4126] - Construct the error string in `MethodNotAllowed`.
    * [MESOS-4160] - Log recover tests are slow.
    * [MESOS-4164] - MasterTest.RecoverResources is slow.
    * [MESOS-4165] - MasterTest.MasterInfoOnReElection is slow.
    * [MESOS-4166] - MasterTest.LaunchCombinedOfferTest is slow.
    * [MESOS-4167] - MasterTest.OfferTimeout is slow.
    * [MESOS-4170] - OversubscriptionTest.UpdateAllocatorOnSchedulerFailover is slow.
    * [MESOS-4171] - OversubscriptionTest.RemoveCapabilitiesOnSchedulerFailover is slow.
    * [MESOS-4174] - HookTest.VerifySlaveLaunchExecutorHook is slow.
    * [MESOS-4175] - ContentType/SchedulerTest.Decline is slow.
    * [MESOS-4309] - Update documentation to cover HTTP authentication.
    * [MESOS-4353] - Limit the number of processes created by libprocess
    * [MESOS-4369] - Enhance DockerExecuter to support Docker's user-defined networks
    * [MESOS-4386] - Deprecate 'authenticate' master flag in favor of 'authenticate_frameworks' flag
    * [MESOS-4576] - Introduce a stout helper for "which"
    * [MESOS-4610] - MasterContender/MasterDetector should be loadable as modules
    * [MESOS-4612] - Update vendored ZooKeeper to 3.4.8
    * [MESOS-4678] - Upgrade vendored Protobuf to 2.6.1
    * [MESOS-4720] - Add allocator metrics for total vs offered/allocated resources.
    * [MESOS-4721] - Expose allocation algorithm latency via a metric.
    * [MESOS-4722] - Add allocator metric for number of active offer filters
    * [MESOS-4723] - Add allocator metric for currently satisfied quotas
    * [MESOS-4724] - Add allocator metric for currrent dominant shares of frameworks and roles
    * [MESOS-4735] - CommandInfo.URI should allow specifying target filename
    * [MESOS-4790] - Revert external linkage of symbols in master/constants.hpp
    * [MESOS-4801] - Updated `createFrameworkInfo` for hierarchical_allocator_tests.cpp.
    * [MESOS-4802] - Update leveldb patch file to suport PowerPC LE
    * [MESOS-4803] - Update vendored libev to 4.22
    * [MESOS-4805] - Update ry-http-parser-1c3624a to nodejs/http-parser 2.6.1
    * [MESOS-4839] - Move placement new processes into the freezer cgroup into a parent hook.
    * [MESOS-4868] - PersistentVolumeTests do not need to set up ACLs.
    * [MESOS-4879] - Update glog patch to support PowerPC LE
    * [MESOS-4886] - Support mesos containerizer force_pull_image option.
    * [MESOS-4891] - Add a '/containers' endpoint to the agent to list all the active containers.
    * [MESOS-4897] - Update test cases to support PowerPC LE
    * [MESOS-4902] - Add authentication to libprocess endpoints
    * [MESOS-4908] - Tasks cannot be killed forcefully.
    * [MESOS-4909] - Introduce kill policy for tasks.
    * [MESOS-4910] - Deprecate the --docker_stop_timeout agent flag.
    * [MESOS-4914] - ProcessorManager delegate should be an Option<string>, not just a string.
    * [MESOS-4926] - Add a list parser for comma separated integers in flags.
    * [MESOS-4928] - Remove all '.get().' calls on Option / Try variables in the resources abstraction.
    * [MESOS-4943] - Reduce the size of LinuxRootfs in tests.
    * [MESOS-4949] - Executor shutdown grace period should be configurable.
    * [MESOS-4951] - Enable actors to pass an authentication realm to libprocess
    * [MESOS-4956] - Add authentication to /files endpoints
    * [MESOS-5001] - Prefix allocator metrics with "mesos/" to better support custom allocator metrics.
    * [MESOS-5002] - Reflecting the Tachyon => Alluxio rename in the documentation.
    * [MESOS-5014] - Call and Event Type enums in scheduler.proto should be optional
    * [MESOS-5015] - Call and Event Type enums in executor.proto should be optional
    * [MESOS-5020] - Drop `404 Not Found` and `307 Temporary Redirect` in the scheduler library.
    * [MESOS-5029] - Add labels to ExecutorInfo
    * [MESOS-5030] - Expose TaskInfo's metadata to ResourceUsage struct
    * [MESOS-5044] - Temporary directories created by environment->mkdtemp cleanup can be problematic.
    * [MESOS-5049] - Refactore subproces setup functions.
    * [MESOS-5062] - Update the long-lived-framework example to run on test clusters
    * [MESOS-5069] - Upgrade http-parser to v2.6.2
    * [MESOS-5073] - Mesos allocator leaks role sorter and quota role sorters.
    * [MESOS-5101] - Add CMake build to docker_build.sh
    * [MESOS-5117] - Enhance mesos-execute for specifying CNI networks
    * [MESOS-5124] - TASK_KILLING is not supported by mesos-execute.
    * [MESOS-5155] - Consolidate authorization actions for quota.
    * [MESOS-5168] - Benchmark overhead of authorization based filtering.
    * [MESOS-5169] - Introduce new Authorizer Actions for Authorized based filtering of endpoints.
    * [MESOS-5170] - Adapt json creation for authorization based endpoint filtering.
    * [MESOS-5174] - Update the balloon-framework to run on test clusters
    * [MESOS-5179] - Enhance the error message for Duration flag.
    * [MESOS-5212] - Allow any principal in ReservationInfo when HTTP authentication is off
    * [MESOS-5214] - Populate FrameworkInfo.principal for authenticated frameworks
    * [MESOS-5271] - Add alias support for Flags
    * [MESOS-5273] - Need support for Authorization information via HELP.
    * [MESOS-5286] - Add authorization to libprocess HTTP endpoints
    * [MESOS-5296] - Split Resource and Inverse offer protobufs for V1 API
    * [MESOS-5302] - Consider adding an Executor Shim/Adapter for the new/old API
    * [MESOS-5307] - Sandbox mounts should not be in the host mount namespace.
    * [MESOS-5316] - Authenticate the agent's '/containers' endpoint.
    * [MESOS-5317] - Authorize the agent's '/containers' endpoint.
    * [MESOS-5331] - Some cleanup in filesystem_isolator_tests.cpp
    * [MESOS-5335] - Add authorization to GET /weights.
    * [MESOS-5336] - Add authorization to GET /quota.
    * [MESOS-5338] - Add `user` to `Task` protobuf message.
    * [MESOS-5339] - Create Tests for testing fine-grained HTTP endpoint filtering.
    * [MESOS-5347] - Enhance the log message when launching mesos containerizer.
    * [MESOS-5348] - Enhance the log message when launching docker containerizer.
    * [MESOS-5350] - Add asynchronous hook for validating docker containerizer tasks
    * [MESOS-5356] - Add Windows support for StopWatch
    * [MESOS-5360] - Set death signal for dvdcli subprocess in docker volume isolator.
    * [MESOS-5370] - Add deprecation support for Flags
    * [MESOS-5372] - Add random() to os:: namespace
    * [MESOS-5373] - Remove `Zookeeper's` NTDDI_VERSION define
    * [MESOS-5374] - Add support for Console Ctrl handling in `slave.cpp`
    * [MESOS-5375] - Implement stout/os/windows/kill.hpp
    * [MESOS-5398] - Rewrite os::read() to be friendlier to reading binary files
    * [MESOS-5399] - Add utility for parsing ld.so.cache on linux.
    * [MESOS-5400] - Add preliminary support for parsing ELF files in stout.
    * [MESOS-5401] - Add ability to inject a Volume of Nvidia libraries/binaries into a docker-image container in mesos containerizer.
    * [MESOS-5404] - Allow `Task` to be authorized.
    * [MESOS-5420] - Implement os::exists for processes
    * [MESOS-5424] - Update the style of code under website folder to match other exist source code
    * [MESOS-5430] - Design the improvement of the home page of mesos.apache.org
    * [MESOS-5431] - Update the website generation and development workflows with docker.
    * [MESOS-5435] - Add default implementations to all Isolator virtual functions
    * [MESOS-5452] - Agent modules should be initialized before all components except firewall.
    * [MESOS-5456] - Master anonymous modules should initialized before any other components.
    * [MESOS-5457] - Create a small testing doc for the v1 Scheduler/Executor API
    * [MESOS-5459] - Update RUN_TASK_WITH_USER to use additional metadata
    * [MESOS-5519] - Refresh Mesos project website homepage
    * [MESOS-5532] - Maven build is too verbose for batch builds
    * [MESOS-5540] - Support building with non-GNU libc
    * [MESOS-5550] - Remove Nvidia GPU Isolator's link-time dependence on `libnvidia-ml`
    * [MESOS-5551] - Move the Nvidia GPU isolator from `cgroups/devices/gpu/nvidia` to `gpu/nvidia`
    * [MESOS-5552] - Bundle NVML headers for Nvidia GPU support.
    * [MESOS-5555] - Always provide access to NVIDIA control devices within containers (if GPU isolation is enabled).
    * [MESOS-5557] - Add `NvidiaGpuAllocator` component for cross-containerizer GPU allocation
    * [MESOS-5558] - Update `Containerizer::resources()` to use the `NvidiaGpuAllocator`
    * [MESOS-5559] - Integrate the `NvidiaGpuAllocator` into the `NvidiaGpuIsolator`
    * [MESOS-5562] - Add class to share Nvidia-specific components between containerizers
    * [MESOS-5563] - Rearrange Nvidia GPU files to cleanup semantics for header inclusion.
    * [MESOS-5572] - Change Operator API RPC handlers return type to http::Response
    * [MESOS-5576] - Masters may drop the first message they send between masters after a network partition
    * [MESOS-5581] - Guarantee ordering between Isolators
    * [MESOS-5592] - Pass NetworkInfo to CNI Plugins
    * [MESOS-5593] - Devolve v1 operator protos before using them in Master/Agent.
    * [MESOS-5617] - Mesos website preview incorrect in facebook
    * [MESOS-5618] - Added a metric indicating if replicated log for the registrar has recovered or not.
    * [MESOS-5630] - Change build to always enable Nvidia GPU support for Linux
    * [MESOS-5636] - Display allocated resources in the agent listing of the webui.
    * [MESOS-5666] - Deprecate camel case proto field in isolator ContainerConfig.
    * [MESOS-5697] - Support file volume in mesos containerizer.
    * [MESOS-5737] - Expose Executor PID in containers endpoint
    * [MESOS-5740] - Consider adding `relink` functionality to libprocess
    * [MESOS-5743] - Added a flag parser for hashset<std::string>.
    * [MESOS-5749] - Have maven run in batch mode
    * [MESOS-5753] - Command executor should use `mesos-containerizer launch` to launch user task.
    * [MESOS-5758] - Add ability to exclude resources from fair sharing.
    * [MESOS-5765] - Add 'systemGetDriverVersion' to NVML abstraction.
    * [MESOS-5767] - Add ELFIO as bundled Dependency to Mesos
    * [MESOS-5768] - Reimplement the stout ELF abstraction in terms of ELFIO
    * [MESOS-5769] - Add get_abi_version() to ELF abstraction in stout
    * [MESOS-5782] - Renamed 'commands' to 'pre_exec_commands' in ContainerLaunchInfo.
    * [MESOS-5787] - Add ability to set framework capabilities in 'mesos-execute'
    * [MESOS-5793] - Add ability to inject Nvidia devices into a container
    * [MESOS-5833] - Disable '--registry_strict' master flag

** Task
    * [MESOS-338] - Mesos 1.0
    * [MESOS-2257] - Version the Operator/Admin API
    * [MESOS-2408] - Slave should reclaim storage for destroyed persistent volumes.
    * [MESOS-2950] - Implement current mesos Authorizer in terms of generalized Authorizer interface
    * [MESOS-3063] - Add an example framework using dynamic reservation
    * [MESOS-3103] - Separate OS-specific code in the libprocess library
    * [MESOS-3214] - Replace boost foreach with range-based for
    * [MESOS-3368] - Add device support in cgroups abstraction
    * [MESOS-3371] - Implement process::subprocess on Windows
    * [MESOS-3436] - Port dynamiclibrary_test.cpp to Windows
    * [MESOS-3438] - Port gzip_test to Windows
    * [MESOS-3439] - Port ip_tests
    * [MESOS-3443] - Windows: Port protobuf_tests.hpp
    * [MESOS-3541] - Add CMakeLists that builds the Mesos master
    * [MESOS-3558] - Implement  HTTPCommandExecutor that uses the Executor Library
    * [MESOS-3559] - Make the Command Scheduler use the HTTP Scheduler Library
    * [MESOS-3609] - Port slave/gc.cpp
    * [MESOS-3610] - Port slave/flags.cpp to Windows
    * [MESOS-3611] - Port slave/http.cpp to Windows
    * [MESOS-3612] - Port slave/metrics.cpp to Windows
    * [MESOS-3614] - Port slave/slave.cpp to Windows
    * [MESOS-3616] - Port slave/status_update_manager.cpp to Windows
    * [MESOS-3617] - Port slave/containerizer/containerizer.cpp to Windows
    * [MESOS-3618] - Port slave/containerizer/fetcher.cpp
    * [MESOS-3619] - Port slave/containerizer/isolator.cpp to Windows
    * [MESOS-3620] - Create slave/containerizer/isolators/filesystem/windows.cpp
    * [MESOS-3622] - Port slave/containerizer/launcher.cpp to Windows
    * [MESOS-3623] - Port slave/containerizer/mesos/containerizer.cpp to Windows
    * [MESOS-3624] - Port slave/containerizer/mesos/launch.cpp to Windows
    * [MESOS-3634] - Port process/protobuf.hpp
    * [MESOS-3635] - Port process/defer.hpp to Windows
    * [MESOS-3636] - Port process/dispatch.hpp
    * [MESOS-3637] - Port process/process.hpp to Windows
    * [MESOS-3639] - Implement stout/os/windows/killtree.hpp
    * [MESOS-3641] - Implement stout/os/windows/read.hpp and write.hpp
    * [MESOS-3642] - Implement stout/os/windows/sendfile.hpp
    * [MESOS-3646] - Port process/clock.hpp to Windows
    * [MESOS-3647] - Port process/time.hpp to Windows
    * [MESOS-3648] - Port stout/duration.hpp to Windows
    * [MESOS-3649] - Port process/future.hpp to Windows
    * [MESOS-3650] - Port process/event.hpp to Windows
    * [MESOS-3651] - Port process/latch.hpp to Windows
    * [MESOS-3652] - Port process/http.hpp to Windows
    * [MESOS-3653] - Port process/message.hpp to Windows
    * [MESOS-3654] - Port process/filter.hpp to Windows
    * [MESOS-3657] - Port process/deferred.hpp to Windows
    * [MESOS-3661] - Port slave/metrics.hpp to Windows
    * [MESOS-3662] - Port slave/slave.hpp to Windows
    * [MESOS-3663] - Port process/metrics/gauge.hpp to Windows
    * [MESOS-3664] - Port process/metrics/metric.hpp to Windows
    * [MESOS-3666] - Port process/metrics/metrics.hpp to Windows
    * [MESOS-3668] - Port process/delay.hpp to Windows
    * [MESOS-3669] - Port process/clock.hpp to Windows
    * [MESOS-3670] - Port process/time.hpp to Windows
    * [MESOS-3671] - Port stout/duration.hpp to Windows
    * [MESOS-3672] - Port process/timer.hpp to Windows
    * [MESOS-3673] - Port process/timeout.hpp to Windows
    * [MESOS-3674] - Port process/async.hpp to Windows
    * [MESOS-3675] - Port process/check.hpp to Windows
    * [MESOS-3679] - Port slave/containerizer/containerizer.hpp to Windows
    * [MESOS-3680] - Port process/subprocess.hpp to Windows
    * [MESOS-3681] - Port slave/containerizer/fetcher.hpp to Windows
    * [MESOS-3682] - Port slave/containerizer/launcher.hpp to Windows
    * [MESOS-3683] - Port slave/containerizer/isolator.hpp to Windows
    * [MESOS-3685] - Port process/io.hpp to Windows
    * [MESOS-3779] - Slave/Agent Rename Phase I - Update terms in Web UI.
    * [MESOS-3781] - Replace Master/Slave Terminology Phase I - Rename flag names and deprecate old ones
    * [MESOS-3782] - Slave/Agent Rename Phase I - Add duplicate binaries (or create symlinks)
    * [MESOS-3783] - Replace Master/Slave Terminology Phase I - Update documentation
    * [MESOS-3784] - Replace Master/Slave Terminology Phase I - Update mesos-cli
    * [MESOS-3854] - Finalize design for generalized Authorizer interface
    * [MESOS-3945] - Add operator documentation for /weight endpoint
    * [MESOS-4033] - Add a commit hook for non-ascii characters.
    * [MESOS-4112] - Clean up libprocess gtest macros
    * [MESOS-4214] - Introduce HTTP endpoint /weights for updating weight
    * [MESOS-4316] - Support get non-default weights by /weights
    * [MESOS-4459] - Implement AuthN handling on the scheduler library
    * [MESOS-4623] - Add a stub Nvidia GPU isolator.
    * [MESOS-4624] - Add allocation metrics for "gpus" resources.
    * [MESOS-4625] - Implement Nvidia GPU isolation w/o filesystem isolation enabled.
    * [MESOS-4626] - Support Nvidia GPUs with filesystem isolation enabled in mesos containerizer.
    * [MESOS-4629] - Implement fault tolerance tests for the HTTP Scheduler API.
    * [MESOS-4704] - Enable zlib on Windows.
    * [MESOS-4758] - Add a 'name' field into NetworkInfo.
    * [MESOS-4759] - Add network/cni isolator for Mesos containerizer.
    * [MESOS-4761] - Add agent flags to allow operators to specify CNI plugin and config directories.
    * [MESOS-4764] - The network/cni isolator should report assigned IP address.
    * [MESOS-4771] - Document the network/cni isolator.
    * [MESOS-4788] - Mesos UI should show the role and principal of a framework
    * [MESOS-4797] - Add a couple of registrar tests for /weights endpoint
    * [MESOS-4813] - Implement base tests for unified container using local puller.
    * [MESOS-4818] - Add end to end testing for Appc images.
    * [MESOS-4840] - Remove internal usage of deprecated ShutdownFramework ACL
    * [MESOS-4844] - Add authentication to master endpoints
    * [MESOS-4849] - Add agent flags for HTTP authentication
    * [MESOS-4850] - Add authentication to agent endpoints /state and /flags
    * [MESOS-4858] - Make changes to executor v1 library around managing connections.
    * [MESOS-4860] - Add a script to install the Nvidia GDK on a host.
    * [MESOS-4861] - Add configure flags to build with Nvidia GPU support.
    * [MESOS-4863] - Add Nvidia GPU isolator tests.
    * [MESOS-4864] - Add flag to specify available Nvidia GPUs on an agent's command line.
    * [MESOS-4865] - Add GPUs as an explicit resource.
    * [MESOS-4881] - Rescind all outstanding offers after changing some weights.
    * [MESOS-4887] - Design doc for Slave/Agent rename
    * [MESOS-4889] - Implement runtime isolator tests.
    * [MESOS-4906] - Upgrade to clang-format-3.8.
    * [MESOS-4932] - Propose Design for Authorization based filtering for endpoints.
    * [MESOS-4933] - Registrar HTTP Authentication.
    * [MESOS-4934] - Enable HELP to include authentication status of endpoint.
    * [MESOS-4938] - Support docker registry authentication
    * [MESOS-4939] - Support specifying per-container docker registry.
    * [MESOS-4944] - Improve overlay backend so that it's writable
    * [MESOS-4962] - Support for Mesos releases
    * [MESOS-4982] - Update example long running to use v1 API.
    * [MESOS-4993] - FetcherTest.ExtractZipFile assumes `unzip` is installed
    * [MESOS-5050] - Design Linux capability support for Mesos containerizer
    * [MESOS-5055] - Slave/Agent Rename Phase I - Update strings in the log message and standard output
    * [MESOS-5057] - Slave/Agent Rename Phase I - Update strings in error messages and other strings
    * [MESOS-5065] - Support docker private registry default docker config.
    * [MESOS-5108] - Design a short-term solution for a typed error handling mechanism.
    * [MESOS-5109] - Capture the error code in `ErrnoError` and `WindowsError`.
    * [MESOS-5110] - Introduce an additional template parameter to `Try` for typed error.
    * [MESOS-5111] - Update `network::connect` to use the typed error state of `Try`.
    * [MESOS-5112] - Introduce `WindowsSocketError`.
    * [MESOS-5130] - Enable `newtork/cni` isolator in `MesosContainerizer` as the default `network` isolator.
    * [MESOS-5135] - Update existing documentation to Include references to GPUs as a first class resource.
    * [MESOS-5136] - Update the default JSON representation of a Resource to include GPUs
    * [MESOS-5137] - Remove 'dashboard.js' from the webui.
    * [MESOS-5152] - Add authentication to agent's /monitor/statistics endpoint
    * [MESOS-5157] - Update webui for GPU metrics
    * [MESOS-5159] - Add test to verify error when requesting fractional GPUs
    * [MESOS-5164] - Add authorization to agent's /monitor/statistics endpoint.
    * [MESOS-5167] - Add tests for `network/cni` isolator
    * [MESOS-5171] - Expose state/state.hpp to public headers
    * [MESOS-5173] - Allow master/agent to take multiple modules manifest files
    * [MESOS-5178] - Add logic to validate for non-fractional GPU requests in the master
    * [MESOS-5209] - Add a slave hook that runs after the fetching is done.
    * [MESOS-5222] - Create a benchmark for scale testing HTTP frameworks
    * [MESOS-5249] - Update CMake files to reflect reorganized 3rdparty
    * [MESOS-5250] - Move 3rdparty/libprocess/3rdparty/* to 3rdparty/
    * [MESOS-5256] - Add support for per-containerizer resource enumeration
    * [MESOS-5257] - Add autodiscovery for GPU resources
    * [MESOS-5272] - Support docker image labels.
    * [MESOS-5297] - Add authorization to the master's "/flags" endpoint.
    * [MESOS-5365] - Introduce a timeout for docker volume driver mount/unmount operation.
    * [MESOS-5394] - Rename isolator name 'xfs/disk' and 'posix/disk' to 'disk/xfs' and 'disk/du'
    * [MESOS-5474] - Implement GET_FLAGS Call in v1 master API.
    * [MESOS-5475] - Implement GET_FLAGS Call in v1 agent API.
    * [MESOS-5484] - Implement GET_METRICS Call in v1 master API.
    * [MESOS-5485] - Implement GET_LOGGING_LEVEL Call in v1 master API.
    * [MESOS-5486] - Implement SET_LOGGING_LEVEL Call in v1 master API.
    * [MESOS-5487] - Implement LIST_FILES Call in v1 master API.
    * [MESOS-5489] - Implement GET_STATE Call in v1 master API.
    * [MESOS-5491] - Implement GET_AGENTS Call in v1 master API.
    * [MESOS-5492] - Implement GET_FRAMEWORKS Call in v1 master API.
    * [MESOS-5493] - Implement GET_TASKS Call in v1 master API.
    * [MESOS-5494] - Implement GET_ROLES Call in v1 master API.
    * [MESOS-5495] - Implement GET_WEIGHTS Call in v1 master API.
    * [MESOS-5496] - Implement UPDATE_WEIGHTS Call in v1 master API.
    * [MESOS-5497] - Implement GET_MASTER Call in v1 master API.
    * [MESOS-5498] - Implement SUBSCRIBE Call in v1 master API.
    * [MESOS-5499] - Implement RESERVE_RESOURCES Call in v1 master API.
    * [MESOS-5500] - Implement UNRESERVE_RESOURCES Call in v1 master API.
    * [MESOS-5501] - Implement CREATE_VOLUMES Call in v1 master API.
    * [MESOS-5502] - Implement DESTROY_VOLUMES Call in v1 master API.
    * [MESOS-5503] - Implement GET_MAINTENANCE_STATUS Call in v1 master API.
    * [MESOS-5504] - Implement GET_MAINTENANCE_SCHEDULE Call in v1 master API.
    * [MESOS-5505] - Implement UPDATE_MAINTENANCE_SCHEDULE Call in v1 master API.
    * [MESOS-5506] - Implement START_MAINTENANCE Call in v1 master API.
    * [MESOS-5507] - Implement STOP_MAINTENANCE Call in v1 master API.
    * [MESOS-5508] - Implement GET_QUOTA Call in v1 master API.
    * [MESOS-5509] - Implement SET_QUOTA Call in v1 master API.
    * [MESOS-5510] - Implement REMOVE_QUOTA Call in v1 master API.
    * [MESOS-5511] - Implement GET_METRICS Call in v1 agent API.
    * [MESOS-5512] - Implement GET_LOGGING_LEVEL Call in v1 agent API.
    * [MESOS-5513] - Implement SET_LOGGING_LEVEL Call in v1 agent API.
    * [MESOS-5514] - Implement LIST_FILES Call in v1 agent API.
    * [MESOS-5517] - Implement GET_RESOURCE_STATISTICS Call in v1 agent API.
    * [MESOS-5518] - Implement GET_CONTAINERS Call in v1 agent API.
    * [MESOS-5549] - Document aufs provisioner backend.
    * [MESOS-5628] - `QuotaHandler` should only make one authorization request to the authorizer.
    * [MESOS-5634] - Add Framework Capability for GPU_RESOURCES
    * [MESOS-5639] - Add documentation about metadata for CNI plugins.
    * [MESOS-5641] - Update docker-volume.md to add some content for how to test
    * [MESOS-5663] - Remove hard dependence on libelf for Linux
    * [MESOS-5699] - Create new documentation for Mesos networking.
    * [MESOS-5704] - Fine-grained authorization on /frameworks
    * [MESOS-5705] - ZK credential is exposed in /flags and /state
    * [MESOS-5706] - GET_ENDPOINT_WITH_PATH authz doesn't make sense for /flags
    * [MESOS-5707] - LocalAuthorizer should error if passed a GET_ENDPOINT ACL with an unhandled path
    * [MESOS-5708] - Add authz to /files/debug
    * [MESOS-5709] - Authorization for /roles
    * [MESOS-5711] - Update AUTHORIZATION strings in endpoint help
    * [MESOS-5712] - Document exactly what is handled by GET_ENDPOINTS_WITH_PATH acl
    * [MESOS-5750] - Implement GET_EXECUTORS Call in v1 master API.
    * [MESOS-5764] - Whitelist the nvidia-uvm-tools device in the Nvidia GPU isolator.


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

All Issues:
** Bug
  * [MESOS-5571] - Scheduler JNI throws exception when the major versions of JAR and libmesos don't match.
  * [MESOS-5673] - Port mapping isolator may cause segfault if it bind mount root does not exist.
  * [MESOS-5330] - Agent should backoff before connecting to the master.
  * [MESOS-5543] - /dev/fd is missing in the Mesos containerizer environment.
  * [MESOS-5691] - SSL downgrade support will leak sockets in CLOSE_WAIT status.
  * [MESOS-5723] - SSL-enabled libprocess will leak incoming links to forks.
  * [MESOS-5748] - Potential segfault in `link` when linking to a remote process.
  * [MESOS-5763] - Task stuck in fetching is not cleaned up after --executor_registration_timeout.
  * [MESOS-5073] - Mesos allocator leaks role sorter and quota role sorters.
  * [MESOS-5698] - Quota sorter not updated for resource changes at agent.
  * [MESOS-5740] - Consider adding `relink` functionality to libprocess.
  * [MESOS-5576] - Masters may drop the first message they send between masters after a network partition.
  * [MESOS-5913] - Stale socket FD usage when using libevent + SSL.
  * [MESOS-5927] - Unable to run "scratch" Dockerfiles with Unified Containerizer.
  * [MESOS-5943] - Incremental http parsing of URLs leads to decoder error.
  * [MESOS-5986] - SSL Socket CHECK can fail after socket receives EOF.
  * [MESOS-6104] - Potential FD double close in libevent's implementation of `sendfile`.
  * [MESOS-6142] - Frameworks may RESERVE for an arbitrary role.
  * [MESOS-6152] - Resource leak in libevent_ssl_socket.cpp.
  * [MESOS-6233] - Master CHECK fails during recovery while relinking to other masters.
  * [MESOS-6234] - Potential socket leak during Zookeeper network changes.
  * [MESOS-6246] - Libprocess links will not generate an ExitedEvent if the socket creation fails.
  * [MESOS-6299] - Master doesn't remove task from pending when it is invalid.
  * [MESOS-6457] - Tasks shouldn't transition from TASK_KILLING to TASK_RUNNING.
  * [MESOS-6527] - Memory leak in the libprocess request decoder.


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

All Issues:
** Bug
  * [MESOS-4705] - Linux 'perf' parsing logic may fail when OS distribution has perf backports.
  * [MESOS-5239] - Persistent volume DockerContainerizer support assumes proper mount propagation setup on the host.
  * [MESOS-5253] - Isolator cleanup should not be invoked if they are not prepared yet.
  * [MESOS-5282] - Destroy container while provisioning volume images may lead to a race.
  * [MESOS-5312] - Env `MESOS_SANDBOX` is not set properly for command tasks that changes rootfs.
  * [MESOS-4885] - Unzip should force overwrite.
  * [MESOS-5449] - Memory leak in SchedulerProcess.declineOffer.
  * [MESOS-5380] - Killing a queued task can cause the corresponding command executor to never terminate.

** Improvement
  * [MESOS-5307] - Sandbox mounts should not be in the host mount namespace.


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

All Issues:
** Bug
  * [MESOS-4662] - PortMapping network isolator should not assume BIND_MOUNT_ROOT is a realpath.
  * [MESOS-4874] - overlayfs does not work with kernel 4.2.3
  * [MESOS-4877] - Mesos containerizer can't handle top level docker image like "alpine" (must use "library/alpine")
  * [MESOS-4878] - Task stuck in TASK_STAGING when docker fetcher failed to fetch the image
  * [MESOS-4964] - curl based docker fetcher fails to decode chunked encoding
  * [MESOS-4985] - Destroy a container while it's provisioning can lead to leaked provisioned directories.
  * [MESOS-5009] - local docker puller fails to find private registry repositories
  * [MESOS-5018] - FrameworkInfo Capability enum does not support upgrades.
  * [MESOS-5021] - Memory leak in subprocess when 'environment' argument is provided.
  * [MESOS-5023] - MesosContainerizerProvisionerTest.DestroyWhileProvisioning is flaky.
  * [MESOS-5114] - Flags::parse does not handle empty string correctly.


Release Notes - Mesos - Version 0.28.0
--------------------------------------
This release contains the following new features:
  * [MESOS-4343] - A new cgroups isolator for enabling the net_cls subsystem in
    Linux. The cgroups/net_cls isolator allows operators to provide network
    performance isolation and network segmentation for containers within a Mesos
    cluster. To enable the cgroups/net_cls isolator, append `cgroups/net_cls` to
    the `--isolation` flag when starting the slave. Please refer to
    docs/mesos-containerizer.md for more details.

  * [MESOS-4687] - The implementation of scalar resource values (e.g., "2.5
    CPUs") has changed. Mesos now reliably supports resources with up to three
    decimal digits of precision (e.g., "2.501 CPUs"); resources with more than
    three decimal digits of precision will be rounded. Internally, resource math
    is now done using a fixed-point format that supports three decimal digits of
    precision, and then converted to/from floating point for input and output,
    respectively. Frameworks that do their own resource math and manipulate
    fractional resources may observe differences in roundoff error and numerical
    precision.

  * [MESOS-4479] - Reserved resources can now optionally include "labels".
    Labels are a set of key-value pairs that can be used to associate metadata
    with a reserved resource. For example, frameworks can use this feature to
    distinguish between two reservations for the same role at the same agent
    that are intended for different purposes.

  * [MESOS-2840] - **Experimental** support for container images in Mesos
    containerizer (a.k.a. Unified Containerizer). This allows frameworks to
    launch Docker/Appc containers using Mesos containerizer without relying on
    docker daemon (engine) or rkt. The isolation of the containers is done using
    isolators. Please refer to docs/container-image.md for currently supported
    features and limitations.

  * [MESOS-4793] - **Experimental** support for v1 Executor HTTP API. This
    allows executors to send HTTP requests to the /api/v1/executor agent
    endpoint without the need for an executor driver. Please refer to
    docs/executor-http-api.md for more details.

  * [MESOS-4370] Added support for service discovery of Docker containers that
    use Docker Remote API v1.21.

Additional API Changes:
  * [MESOS-4066] - Agent should not return partial state when a request is made
    to /state endpoint during recovery.

  * [MESOS-4547] - Introduce TASK_KILLING state.

  * [MESOS-4712] - Remove 'force' field from the Subscribe Call in v1
    Scheduler API.

  * [MESOS-4591] - Change the object of ReserveResources and CreateVolume ACLs
    to `roles`.

  * [MESOS-3583] - Add stream IDs for HTTP schedulers.

  * [MESOS-4427] - Ensure ip_address in state.json (from NetworkInfo) is valid.

All Issues:
** Bug
  * [MESOS-1187] - precision errors with allocation calculations
  * [MESOS-1469] - No output from review bot on timeout
  * [MESOS-2007] - AllocatorTest/0.SlaveReregistersFirst is flaky
  * [MESOS-2017] - Segfault with "Pure virtual method called" when tests fail
  * [MESOS-3273] - EventCall Test Framework is flaky
  * [MESOS-3397] - sorter.cpp: Check failed: total.resources.contains(slaveId)
  * [MESOS-3413] - Docker containerizer does not symlink persistent volumes into sandbox
  * [MESOS-3570] - Make Scheduler Library use HTTP Pipelining Abstraction in Libprocess
  * [MESOS-3719] - Core dump on /teardown
  * [MESOS-3725] - shared library loading depends on environment variable updates
  * [MESOS-3833] - /help endpoints do not work for nested paths
  * [MESOS-3940] - /reserve and /unreserve should be permissive under a master without authentication.
  * [MESOS-4029] - ContentType/SchedulerTest is flaky.
  * [MESOS-4047] - MemoryPressureMesosTest.CGROUPS_ROOT_SlaveRecovery is flaky
  * [MESOS-4071] - Master crash during framework teardown ( Check failed: total.resources.contains(slaveId))
  * [MESOS-4249] - Mesos fetcher step skipped with MESOS_DOCKER_MESOS_IMAGE flag
  * [MESOS-4255] - Add mechanism for testing recovery of HTTP based executors
  * [MESOS-4285] - Mesos command task doesn't support volumes with image
  * [MESOS-4291] - fs::enter(rootfs) does not work if 'rootfs' is read only.
  * [MESOS-4298] - Sync up configuration.md and flags.cpp
  * [MESOS-4338] - Create utilities for common shell commands used.
  * [MESOS-4370] - NetworkSettings.IPAddress field is deprecated in Docker
  * [MESOS-4383] - Support docker runtime configuration env var from image.
  * [MESOS-4395] - Add persistent volume endpoint tests with no principal
  * [MESOS-4416] - Get the perf version function return fail
  * [MESOS-4427] - Ensure ip_address in state.json (from NetworkInfo) is valid
  * [MESOS-4454] - Create common sha512 compute utility function.
  * [MESOS-4478] - ReviewBot seemed to be crashing ReviewBoard server when posting large reviews
  * [MESOS-4484] - GMock warning in MasterTest.OrphanTasks
  * [MESOS-4495] - Delete `os::chown` on Windows
  * [MESOS-4496] - Replace `glob` on Windows with something more suited to the platform
  * [MESOS-4499] - Docker provisioner store should reuse existing layers in the cache.
  * [MESOS-4517] - Introduce docker runtime isolator.
  * [MESOS-4542] - MasterQuotaTest.AvailableResourcesAfterRescinding is flaky.
  * [MESOS-4546] - Mesos Agents needs to re-resolve hosts in zk string on leader change / failure to connect
  * [MESOS-4555] - Build broken with GCC 5.3.0
  * [MESOS-4556] - ShasumTest.SHA512SimpleFile failed on centos7.
  * [MESOS-4562] - Mesos UI shows wrong count for "started" tasks
  * [MESOS-4563] - Docker::Container::Create should handle NetworkSettings.IPAddress being an empty string.
  * [MESOS-4570] - DockerFetcherPluginTest.INTERNET_CURL_FetchImage seems flaky.
  * [MESOS-4573] - Design doc for scheduler HTTP Stream IDs
  * [MESOS-4583] - Rename `examples/event_call_framework.cpp` to `examples/test_http_framework.cpp`
  * [MESOS-4584] - Update Rakefile for mesos site generation
  * [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-4591] - `/reserve` and `/create-volumes` endpoints allow operations for any role
  * [MESOS-4597] - `freebsd.hpp` is missing from the release tarball
  * [MESOS-4598] - Logrotate ContainerLogger should not remove IP from environment.
  * [MESOS-4602] - Invalid usage of ATOMIC_FLAG_INIT in member initialization
  * [MESOS-4614] - SlaveRecoveryTest/0.CleanupHTTPExecutor is flaky
  * [MESOS-4615] - ContainerLoggerTest.DefaultToSandbox is flaky
  * [MESOS-4619] - Remove markdown files from doxygen pages
  * [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-4656] - strings::split behaves incorrectly when n=1
  * [MESOS-4661] - SlaveRecoveryTest/0.ReconnectHTTPExecutor is flaky
  * [MESOS-4669] - Add common compression utility
  * [MESOS-4670] - `cgroup_info` not being exposed in state.json when ComposingContainerizer is used.
  * [MESOS-4671] - Status updates from executor can be forwarded out of order by the Agent.
  * [MESOS-4674] - Linux filesystem isolator tests are flaky.
  * [MESOS-4675] - Cannot disable systemd support
  * [MESOS-4676] - ROOT_DOCKER_Logs is flaky.
  * [MESOS-4677] - LimitedCpuIsolatorTest.ROOT_CGROUPS_Pids_and_Tids is flaky.
  * [MESOS-4681] - Updated libnl3 download links
  * [MESOS-4683] - Document docker runtime isolator.
  * [MESOS-4693] - Variable shadowing in HookManager::slavePreLaunchDockerHook
  * [MESOS-4703] - Make Stout configuration modular and consumable by downstream (e.g., libprocess and agent)
  * [MESOS-4711] - Race condition in libevent poll implementation causes crash
  * [MESOS-4714] - "make DESTDIR=<path> install" broken
  * [MESOS-4743] - Mesos fetcher not working correctly on docker apps on CoreOS
  * [MESOS-4747] - ContainerLoggerTest.MesosContainerizerRecover cannot be executed in isolation
  * [MESOS-4768] - MasterMaintenanceTest.InverseOffers is flaky
  * [MESOS-4774] - Wrong symbolic link of some Mesos libraries
  * [MESOS-4784] - SlaveTest.MetricsSlaveLaunchErrors test relies on implicit blocking behavior hitting the global metrics endpoint
  * [MESOS-4806] - LevelDBStateTests write to the current directory
  * [MESOS-4824] - "filesystem/linux" isolator does not unmount orphaned persistent volumes
  * [MESOS-4825] - Master's slave reregister logic does not update version field
  * [MESOS-4830] - Bind docker runtime isolator with docker image provider.
  * [MESOS-4831] - Master sometimes sends two inverse offers after the agent goes into maintenance.
  * [MESOS-4832] - DockerContainerizerTest.ROOT_DOCKER_RecoverOrphanedPersistentVolumes exits when the /tmp directory is bind-mounted
  * [MESOS-4833] - Poor allocator performance with labeled resources and/or persistent volumes
  * [MESOS-4836] - Fix rmdir for windows
  * [MESOS-4866] - Added document for overlayfs backend.
  * [MESOS-4888] - Default cmd is executed as an incorrect command.
  * [MESOS-4903] - Allow multiple loads of module manifests

** Documentation
  * [MESOS-1471] - Document replicated log design/internals
  * [MESOS-3831] - Document operator HTTP endpoints
  * [MESOS-4376] - Document semantics of `slaveLost`
  * [MESOS-4377] - Document units associated with resource types
  * [MESOS-4452] - Improve documentation around roles, principals, authz, and reservations
  * [MESOS-4622] - Update configuration.md with `--cgroups_net_cls_primary_handle` agent flag.
  * [MESOS-4702] - Document default value of "offer_timeout"
  * [MESOS-4786] - Example in C++ style guide uses wrong indention for wrapped line
  * [MESOS-4854] - Update CHANGELOG with net_cls isolator
  * [MESOS-4873] - Add documentation about container image support.

** Epic
  * [MESOS-4343] - Introduce the ability to assign network handles to mesos containers
  * [MESOS-4793] - Executor API v1

** Improvement
  * [MESOS-197] - Executor sendStatusUpdate should ACK on slave checkpoint
  * [MESOS-2585] - Use full width for mesos div.container
  * [MESOS-2971] - Implement OverlayFS based provisioner backend
  * [MESOS-3608] - Optionally install test binaries.
  * [MESOS-4004] - Support default entrypoint and command runtime config in Mesos containerizer
  * [MESOS-4005] - Support workdir runtime configuration from image
  * [MESOS-4169] - MasterMaintenanceTest.InverseOffers is slow
  * [MESOS-4225] - Exposed docker/appc image manifest to mesos containerizer.
  * [MESOS-4261] - Remove docker auth server flag
  * [MESOS-4333] - Refactor Appc provisioner tests
  * [MESOS-4344] - Allow operators to assign net_cls major handles to mesos agents
  * [MESOS-4479] - Implement reservation labels
  * [MESOS-4486] - Speed up FetcherCacheTest.Local* test cases
  * [MESOS-4487] - Introduce status() interface in `Containerizer`
  * [MESOS-4488] - Define a CgroupInfo protobuf to expose cgroup isolator configuration.
  * [MESOS-4489] - The `cgroups/net_cls` isolator needs to expose handles in the ContainerStatus
  * [MESOS-4490] - Get container status information in slave.
  * [MESOS-4493] - Add ability to create symlink on Windows
  * [MESOS-4494] - Implement `size`, `usage`, and other disk metrics reporting on Windows.
  * [MESOS-4497] - Add ZK to the Windows agent build
  * [MESOS-4498] - Refactor os.hpp to be less monolithic, and more cross-platform compatible
  * [MESOS-4520] - Introduce a status() interface for isolators
  * [MESOS-4523] - Enable benchmark tests in ASF CI
  * [MESOS-4547] - Introduce TASK_KILLING state.
  * [MESOS-4551] - process::collect() and process::await only take a fixed number of arguments (when not using a list).
  * [MESOS-4552] - Help strings are not removed from the global help process upon process termination.
  * [MESOS-4564] - Separate Appc protobuf messages to its own file.
  * [MESOS-4566] - Avoid unnecessary temporary `std::string` constructions and copies in `jsonify`.
  * [MESOS-4571] - SlaveRecoveryTest.RecoverStatusUpdateManager is not consistent with its description
  * [MESOS-4575] - Fix Appc image caching to share with image fetcher
  * [MESOS-4588] - Set title for documentation webpages.
  * [MESOS-4618] - Speed up FetcherCacheTest.SimpleEviction
  * [MESOS-4628] - Speed up FetcherCache test cases by reduce allocation_interval.
  * [MESOS-4636] - Add parent hook to subprocess.
  * [MESOS-4657] - Add LOG(INFO) in `cgroups/net_cls` for debugging allocation of net_cls handles.
  * [MESOS-4667] - Expose persistent volume information in HTTP endpoints
  * [MESOS-4685] - Speed up FetcherCache test cases by disable framework checkpoint.
  * [MESOS-4710] - Add comment about labels caveats to mesos.proto
  * [MESOS-4731] - Update /frameworks to use jsonify
  * [MESOS-4776] - Libprocess metrics/snapshot endpoint rate limiting should be configurable.
  * [MESOS-4783] - Disable rate limiting of the global metrics endpoint for mesos-tests execution
  * [MESOS-4792] - Remove src/common/date_utils.{c,h}pp
  * [MESOS-4796] - Debug ability enhancement for unified container

** Task
  * [MESOS-1940] - Add Mesos-graced/hosted libraries to installation path
  * [MESOS-3339] - Implement filtering mechanism for (Scheduler API Events) Testing
  * [MESOS-3424] - Support fetching AppC images into the store
  * [MESOS-3525] - Figure out how to enforce 64-bit builds on Windows.
  * [MESOS-3583] - Introduce stream IDs in HTTP Scheduler API
  * [MESOS-3613] - Port slave/paths.cpp to Windows
  * [MESOS-3643] - Implement stout/os/windows/shell.hpp
  * [MESOS-3763] - Need for http::put request method
  * [MESOS-3929] - Automate the process of landing commits for committers
  * [MESOS-3943] - Support dynamic weight in allocator
  * [MESOS-4066] - Agent should not return partial state when a request is made to /state endpoint during recovery.
  * [MESOS-4200] - Test case(s) for weights + allocation behavior
  * [MESOS-4345] - Implement a network-handle manager for net_cls cgroup subsystem
  * [MESOS-4358] - Expose net_cls network handles in agent's state endpoint
  * [MESOS-4421] - Document that /reserve, /create-volumes endpoints can return misleading "success"
  * [MESOS-4433] - Implement a callback testing interface for the Executor Library
  * [MESOS-4435] - Update `Master::Http::stateSummary` to use `jsonify`.
  * [MESOS-4438] - Add 'dependency' message to 'AppcImageManifest' protobuf.
  * [MESOS-4439] - Fix appc CachedImage image validation
  * [MESOS-4457] - Implement tests for the new Executor library
  * [MESOS-4531] - Document multi-disk support.
  * [MESOS-4590] - Add test case for reservations with same role, different principals
  * [MESOS-4596] - Add common Appc spec utilities.
  * [MESOS-4660] - Document net_cls isolator in docs/mesos-containerizer.md.
  * [MESOS-4686] - Implement master failover tests for the scheduler library.
  * [MESOS-4691] - Add a HierarchicalAllocator benchmark with reservation labels.
  * [MESOS-4700] - Allow agent to configure net_cls handle minor range.
  * [MESOS-4707] - Add fs:supported() function for detecting whether a file system is supported
  * [MESOS-4712] - Remove 'force' field from the Subscribe Call in v1 Scheduler API
  * [MESOS-4713] - ReviewBot should not fail hard if there are circular dependencies in a review chain
  * [MESOS-4746] - CMake: Add leveldb library to 3rdparty external builds.
  * [MESOS-4748] - Add Appc image fetcher tests.
  * [MESOS-4780] - Remove `user` and `rootfs` flags in Windows launcher.
  * [MESOS-4798] - Make existing scheduler library tests use the callback interface.
  * [MESOS-4817] - Remove internal usage of deprecated *.json endpoints.
  * [MESOS-4822] - Add support for local image fetching in Appc provisioner.
  * [MESOS-4829] - Remove `grace_period_seconds` field from Shutdown event v1 protobuf.
  * [MESOS-4834] - Add 'file' fetcher plugin.


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

All Issues:
** Bug
  * [MESOS-5330] - Agent should backoff before connecting to the master.
  * [MESOS-5571] - Scheduler JNI throws exception when the major versions of JAR and libmesos don't match.
  * [MESOS-5691] - SSL downgrade support will leak sockets in CLOSE_WAIT status.
  * [MESOS-5723] - SSL-enabled libprocess will leak incoming links to forks.
  * [MESOS-5748] - Potential segfault in `link` when linking to a remote process.
  * [MESOS-5913] - Stale socket FD usage when using libevent + SSL.
  * [MESOS-5943] - Incremental http parsing of URLs leads to decoder error.
  * [MESOS-5986] - SSL Socket CHECK can fail after socket receives EOF.
  * [MESOS-6104] - Potential FD double close in libevent's implementation of `sendfile`.
  * [MESOS-6152] - Resource leak in libevent_ssl_socket.cpp.

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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.2
--------------------------------------
* This is a bug fix release.

All Issues:
** Bug
  * [MESOS-4705] - Linux 'perf' parsing logic may fail when OS distribution has perf backports.
  * [MESOS-5449] - Memory leak in SchedulerProcess.declineOffer.


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

** Bug
  * [MESOS-1187] - precision errors with allocation calculations.
  * [MESOS-3307] - Configurable size of completed task / framework history.
  * [MESOS-3397] - sorter.cpp: Check failed: total.resources.contains(slaveId).
  * [MESOS-3605] - hdfs.du() fails on os x due to lack of native-hadoop library.
  * [MESOS-3719] - Core dump on /teardown.
  * [MESOS-3773] - RegistryClientTest.SimpleGetBlob is flaky.
  * [MESOS-3834] - slave upgrade framework checkpoint incompatibility.
  * [MESOS-4031] - slave crashed in cgroupstatistics().
  * [MESOS-4069] - libevent_ssl_socket assertion fails.
  * [MESOS-4071] - Master crash during framework teardown (Check failed: total.resources.contains(slaveId)).
  * [MESOS-4283] - Accept 3-field version of HDFS du output.
  * [MESOS-4311] - Protobuf parse should pass error messages when parsing nested JSON.
  * [MESOS-4409] - MasterTest.MaxCompletedFrameworksFlag is flaky.
  * [MESOS-4449] - SegFault on agent during executor startup.
  * [MESOS-4518] - MasterTest.MaxCompletedTasksPerFrameworkFlag is flaky.
  * [MESOS-4582] - state.json serving duplicate "active" fields.
  * [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-4711] - Race condition in libevent poll implementation causes crash.
  * [MESOS-4754] - The "executors" field is exposed under a backwards incompatible schema.
  * [MESOS-4979] - os::rmdir does not handle special files (e.g., device, socket).
  * [MESOS-5021] - Memory leak in subprocess when 'environment' argument is provided.

** Improvement
  * [MESOS-920]  - Set GLOG_drop_log_memory=false in environment prior to logging initialization.
  * [MESOS-2353] - Improve performance of the state.json endpoint for large clusters.
  * [MESOS-4302] - Offer filter timeouts are ignored if the allocator is slow or backlogged.
  * [MESOS-4566] - Avoid unnecessary temporary `std::string` constructions and copies in `jsonify`.
  * [MESOS-4636] - Add parent hook to subprocess.
  * [MESOS-4687] - Implement reliable floating point for scalar resources.

** Task
  * [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-4435] - Update `Master::Http::stateSummary` to use `jsonify`.


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.

All Issues:
** 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.1
--------------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-1187] - precision errors with allocation calculations.
  * [MESOS-3030] - Build failure on OS 10.11 using Xcode 7.
  * [MESOS-3307] - Configurable size of completed task / framework history.
  * [MESOS-3397] - sorter.cpp: Check failed: total.resources.contains(slaveId).
  * [MESOS-3411] - ReservationEndpointsTest.AvailableResources appears to be faulty.
  * [MESOS-3560] - JSON-based credential files do not work correctly.
  * [MESOS-3602] - hdfs du fails due to prepended / on path.
  * [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-3719] - Core dump on /teardown.
  * [MESOS-3738] - Mesos health check is invoked incorrectly when Mesos slave is within the docker container.
  * [MESOS-3773] - RegistryClientTest.SimpleGetBlob is flaky.
  * [MESOS-3834] - slave upgrade framework checkpoint incompatibility.
  * [MESOS-4031] - slave crashed in cgroupstatistics().
  * [MESOS-4069] - libevent_ssl_socket assertion fails.
  * [MESOS-4071] - Master crash during framework teardown (Check failed: total.resources.contains(slaveId)).
  * [MESOS-4106] - The health checker may fail to inform the executor to kill an unhealthy task after max_consecutive_failures.
  * [MESOS-4283] - Accept 3-field version of HDFS du output.
  * [MESOS-4311] - Protobuf parse should pass error messages when parsing nested JSON.
  * [MESOS-4409] - MasterTest.MaxCompletedFrameworksFlag is flaky.
  * [MESOS-4518] - MasterTest.MaxCompletedTasksPerFrameworkFlag is flaky.
  * [MESOS-4582] - state.json serving duplicate "active" fields.
  * [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-4711] - Race condition in libevent poll implementation causes crash.
  * [MESOS-4754] - The "executors" field is exposed under a backwards incompatible schema.
  * [MESOS-4979] - os::rmdir does not handle special files (e.g., device, socket).
  * [MESOS-5021] - Memory leak in subprocess when 'environment' argument is provided.

** Improvement
  * [MESOS-920]  - Set GLOG_drop_log_memory=false in environment prior to logging initialization.
  * [MESOS-2353] - Improve performance of the state.json endpoint for large clusters.
  * [MESOS-4302] - Offer filter timeouts are ignored if the allocator is slow or backlogged.
  * [MESOS-4566] - Avoid unnecessary temporary `std::string` constructions and copies in `jsonify`.
  * [MESOS-4636] - Add parent hook to subprocess.
  * [MESOS-4687] - Implement reliable floating point for scalar resources.

** Task
  * [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-4435] - Update `Master::Http::stateSummary` to use `jsonify`.


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.

All Issues:
** 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.2
--------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-1187] - precision errors with allocation calculations.
  * [MESOS-3030] - Build failure on OS 10.11 using Xcode 7.
  * [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-3307] - Configurable size of completed task / framework history.
  * [MESOS-3397] - sorter.cpp: Check failed: total.resources.contains(slaveId).
  * [MESOS-3560] - JSON-based credential files do not work correctly.
  * [MESOS-3602] - hdfs du fails due to prepended / on path.
  * [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-3719] - Core dump on /teardown.
  * [MESOS-3738] - Mesos health check is invoked incorrectly when Mesos slave is within the docker container.
  * [MESOS-3773] - RegistryClientTest.SimpleGetBlob is flaky.
  * [MESOS-3834] - slave upgrade framework checkpoint incompatibility.
  * [MESOS-4031] - slave crashed in cgroupstatistics().
  * [MESOS-4069] - libevent_ssl_socket assertion fails.
  * [MESOS-4071] - Master crash during framework teardown (Check failed: total.resources.contains(slaveId)).
  * [MESOS-4106] - The health checker may fail to inform the executor to kill an unhealthy task after max_consecutive_failures.
  * [MESOS-4283] - Accept 3-field version of HDFS du output.
  * [MESOS-4311] - Protobuf parse should pass error messages when parsing nested JSON.
  * [MESOS-4409] - MasterTest.MaxCompletedFrameworksFlag is flaky.
  * [MESOS-4518] - MasterTest.MaxCompletedTasksPerFrameworkFlag is flaky.
  * [MESOS-4582] - state.json serving duplicate "active" fields.
  * [MESOS-4711] - Race condition in libevent poll implementation causes crash.
  * [MESOS-4754] - The "executors" field is exposed under a backwards incompatible schema.
  * [MESOS-4979] - os::rmdir does not handle special files (e.g., device, socket).
  * [MESOS-5021] - Memory leak in subprocess when 'environment' argument is provided.

** Improvement
  * [MESOS-920]  - Set GLOG_drop_log_memory=false in environment prior to logging initialization.
  * [MESOS-2353] - Improve performance of the state.json endpoint for large clusters.
  * [MESOS-4302] - Offer filter timeouts are ignored if the allocator is slow or backlogged.
  * [MESOS-4566] - Avoid unnecessary temporary `std::string` constructions and copies in `jsonify`.
  * [MESOS-4687] - Implement reliable floating point for scalar resources.

** Task
  * [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-4435] - Update `Master::Http::stateSummary` to use `jsonify`.


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

All Issues:
** 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.

Additional 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.

All Issues:
** 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.

All Issues:
** 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.

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.

All Issues:
** 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.

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


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

All Issues:
** 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.

All Issues:
** 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.

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


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

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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.

All Issues:
** 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).

All Issues:
** 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.

All Issues:
** 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).

All Issues:
** 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

All Issues:
** 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
--------------------------------------
All Issues:
** 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
