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

** Bug
  * [MESOS-10126] - Docker volume isolator needs to clean up the `info` struct regardless the result of unmount operation
  * [MESOS-10134] - Race between concurrent `javah` runs trying to create `java/jni` output directory.
  * [MESOS-10169] - Reintroduce image fetch deduplication while keeping it possible to destroy UCR containers in PROVISIONING state.


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

** Bug
  * [MESOS-8467] - Destroyed executors might be used after `Slave::publishResource()`.
  * [MESOS-8537] - Default executor doesn't wait for status updates to be ack'd before shutting down.
  * [MESOS-9124] - Agent reconfiguration can cause master to unsuppress on scheduler's behalf.
  * [MESOS-9507] - Agent could not recover due to empty docker volume checkpointed files.
  * [MESOS-9529] - `/proc` should be remounted even if a nested container set `share_pid_namespace` to true.
  * [MESOS-9549] - nvidia/cuda 10 does not work on GPU isolator.
  * [MESOS-9564] - Logrotate container logger lets tasks execute arbitrary commands in the Mesos agent's namespace.
  * [MESOS-9568] - SLRP does not clean up mount directories for destroyed MOUNT disks.
  * [MESOS-9581] - Mesos package naming appears to be undeterministic.
  * [MESOS-9590] - Mesos CI sometimes, incorrectly, overwrites already-pushed mesos master nightly images with new images built from non-master branches.
  * [MESOS-9607] - Removing a resource provider with consumers breaks resource publishing.
  * [MESOS-9610] - Fetcher vulnerability - escaping from sandbox.
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9619] - Mesos Master Crashes with Launch Group when using Port Resources
  * [MESOS-9661] - Agent crashes when SLRP recovers dropped operations.
  * [MESOS-9692] - Quota may be under allocated for disk resources.
  * [MESOS-9695] - Remove the duplicate pid check in Docker containerizer
  * [MESOS-9707] - Calling link::lo() may cause runtime error
  * [MESOS-9750] - Agent V1 GET_STATE response may report a complete executor's tasks as non-terminal after a graceful agent shutdown.
  * [MESOS-9766] - /__processes__ endpoint can hang.
  * [MESOS-9785] - Frameworks recovered from reregistered agents are not reported to master `/api/v1` subscribers.
  * [MESOS-9786] - Race between two REMOVE_QUOTA calls crashes the master.
  * [MESOS-9787] - Log slow SSL (TLS) peer reverse DNS lookup.
  * [MESOS-9803] - Memory leak caused by an infinite chain of futures in `UriDiskProfileAdaptor`.
  * [MESOS-9836] - Docker containerizer overwrites `/mesos/slave` cgroups.
  * [MESOS-9847] - Docker executor doesn't wait for status updates to be ack'd before shutting down.
  * [MESOS-9852] - Slow memory growth in master due to deferred deletion of offer filters and timers.
  * [MESOS-9856] - REVIVE call with specified role(s) clears filters for all roles of a framework.
  * [MESOS-9868] - NetworkInfo from the agent /state endpoint is not correct.
  * [MESOS-9870] - Simultaneous adding/removal of a role from framework's roles and its suppressed roles crashes the master.
  * [MESOS-9887] - Race condition between two terminal task status updates for Docker/Command executor.
  * [MESOS-9889] - Master CPU high due to unexpected foreachkey behaviour in Master::__reregisterSlave.
  * [MESOS-9893] - `volume/secret` isolator should cleanup the stored secret from runtime directory when the container is destroyed.
  * [MESOS-9925] - Default executor takes a couple of seconds to start and subscribe Mesos agent.
  * [MESOS-9964] - Support destroying UCR containers in provisioning state.
  * [MESOS-9966] - Agent crashes when trying to destroy orphaned nested container if root container is orphaned as well.
  * [MESOS-9968] - WWWAuthenticate header parsing fails when commas are in (quoted) realm.
  * [MESOS-10007] - Command executor can miss exit status for short-lived commands due to double-reaping.
  * [MESOS-10015] - updateAllocation() can stall the allocator with a huge number of reservations on an agent.
  * [MESOS-10018] - Duplicate tasks if agent partitioned during maintenance down.
  * [MESOS-10084] - Detecting whether executor is generated for command task should work when the launcher_dir changes.
  * [MESOS-10092] - Cannot pull image from docker registry which does not reply with 'scope'/'service' in WWW-Authenticate header.

** Improvements
  * [MESOS-8880] - Add minimum capabilities in the master.
  * [MESOS-9159] - Support Foreign URLs in docker registry puller.
  * [MESOS-9540] - Support `DESTROY_DISK` on preprovisioned CSI volumes.
  * [MESOS-9545] - Marking an unreachable agent as gone should transition the tasks to terminal state.
  * [MESOS-9675] - Docker Manifest V2 Schema2 Support.
  * [MESOS-9704] - Support docker manifest v2s2 config GC.
  * [MESOS-9759] - Log required quota headroom and available quota headroom in the allocator.
  * [MESOS-9948] - master::Slave::hasExecutor occupies 37% of a 150 second perf sample.
  * [MESOS-10017] - Log all reverse DNS lookup failures in 'legacy' TLS (SSL) hostname validation scheme.


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

** Bug
  * [MESOS-8887] - Unreachable tasks are not GC'ed when unreachable agent is GC'ed.
  * [MESOS-9210] - Mesos v1 scheduler library does not properly handle SUBSCRIBE retries.
  * [MESOS-9517] - SLRP should treat gRPC timeouts as non-terminal errors, instead of reporting OPERATION_FAILED.
  * [MESOS-9531] - chown error handling is incorrect in createSandboxDirectory.
  * [MESOS-9532] - ResourceOffersTest.ResourceOfferWithMultipleSlaves is flaky.
  * [MESOS-9533] - CniIsolatorTest.ROOT_CleanupAfterReboot is flaky.
  * [MESOS-9537] - SLRP sends inconsistent status updates for dropped operations.
  * [MESOS-9544] - SLRP does not clean up destroyed persistent volumes.
  * [MESOS-9554] - Allocator might skip allocations because a single framework is incapable of receiving certain resources.
  * [MESOS-9555] - Allocator CHECK failure: reservationScalarQuantities.contains(role).

** Improvement
  * [MESOS-9340] - Log all socket errors in libprocess.


Release Notes - Mesos - Version 1.7.1
-------------------------------------
* This is a bug fix release. Also includes performance and API
  improvements:

  * **Allocator**: Improved allocation cycle time substantially
    (see MESOS-9239 and MESOS-9249). These reduce the allocation
    cycle time in some benchmarks by 80%.

  * **Scheduler API**: Improved the experimental `CREATE_DISK` and
    `DESTROY_DISK` operations for CSI volume recovery (see MESOS-9275
    and MESOS-9321). Storage local resource providers now return disk
    resources with the `source.vendor` field set, so frameworks needs to
    upgrade the `Resource` protobuf definitions.

  * **Scheduler API**: Offer operation feedbacks now present their agent
    IDs and resource provider IDs (see MESOS-9293).

** Bug
  * [MESOS-7042] - Send SIGKILL after SIGTERM to IOSwitchboard after container termination.
  * [MESOS-7474] - Mesos fetcher cache doesn't retry when missed.
  * [MESOS-8545] - AgentAPIStreamingTest.AttachInputToNestedContainerSession is flaky.
  * [MESOS-8907] - Docker image fetcher fails with HTTP/2.
  * [MESOS-8978] - Command executor calling setsid breaks the tty support.
  * [MESOS-9131] - Health checks launching nested containers while a container is being destroyed lead to unkillable tasks.
  * [MESOS-9152] - Close all file descriptors except whitelist_fds in posix/subprocess.
  * [MESOS-9154] - MasterTest.TaskStateMetrics is flaky
  * [MESOS-9164] - Subprocess should unset CLOEXEC on whitelisted file descriptors.
  * [MESOS-9228] - SLRP does not clean up plugin containers after it is removed.
  * [MESOS-9231] - `docker inspect` may return an unexpected result to Docker executor due to a race condition.
  * [MESOS-9266] - Whenever our packaging tasks trigger errors we run into permission problems.
  * [MESOS-9267] - Mesos agent crashes when CNI network is not configured but used.
  * [MESOS-9274] - v1 JAVA scheduler library can drop TEARDOWN upon destruction.
  * [MESOS-9279] - Docker Containerizer 'usage' call might be expensive if mount table is big.
  * [MESOS-9281] - SLRP gets a stale checkpoint after system crash.
  * [MESOS-9283] - Docker containerizer actor can get backlogged with large number of containers.
  * [MESOS-9293] - If a framework looses operation information it cannot reconcile to acknowledge updates.
  * [MESOS-9295] - Nested container launch could fail if the agent upgrade with new cgroup subsystems.
  * [MESOS-9308] - URI disk profile adaptor could deadlock.
  * [MESOS-9317] - Some master endpoints do not handle failed authorization properly.
  * [MESOS-9324] - Resource fragmentation: frameworks may be starved of port resources in the presence of large number frameworks with quota.
  * [MESOS-9332] - Nested container should run as the same user of its parent container by default.
  * [MESOS-9334] - Container stuck at ISOLATING state due to libevent poll never returns.
  * [MESOS-9362] - Test `CgroupsIsolatorTest.ROOT_CGROUPS_CreateRecursively` is flaky.
  * [MESOS-9411] - Validation of JWT tokens using HS256 hashing algorithm is not thread safe.
  * [MESOS-9418] - Add support for the `Discard` blkio operation type.
  * [MESOS-9419] - Executor to framework message crashes master if framework has not re-registered.
  * [MESOS-9474] - Master does not respect authorization result for `CREATE_DISK` and `DESTROY_DISK`.
  * [MESOS-9479] - SLRP does not set RP ID in produced OperationStatus.
  * [MESOS-9480] - Master may skip processing authorization results for `LAUNCH_GROUP`.
  * [MESOS-9492] - Persist CNI working directory across reboot.
  * [MESOS-9501] - Mesos executor fails to terminate and gets stuck after agent host reboot.
  * [MESOS-9502] - IOswitchboard cleanup could get stuck due to FD leak from a race.
  * [MESOS-9505] - `make check` failed with linking errors when c-ares is installed.
  * [MESOS-9508] - Official 1.7.0 tarball can't be built on Ubuntu 16.04 LTS.
  * [MESOS-9518] - CNI_NETNS should not be set for orphan containers that do not have network namespace.
  * [MESOS-9519] - Unable to build Mesos with CMake on Ubuntu 14.04.

** Improvement
  * [MESOS-6765] - Make the Resources wrapper "copy-on-write" to improve performance.
  * [MESOS-9239] - Improve sorting performance in the DRF sorter.
  * [MESOS-9249] - Avoid dirtying the DRF sorter when allocating resources.
  * [MESOS-9255] - Use consistent "totals" across role / framework DRF.
  * [MESOS-9275] - Allow optional `profile` to be specified in `CREATE_DISK` offer operation.
  * [MESOS-9305] - Create cgoup recursively to workaround systemd deleting cgroups_root.
  * [MESOS-9321] - Add an optional `vendor` field in `Resource.DiskInfo.Source`.
  * [MESOS-9325] - Optimize `Resources::filter` operation.
  * [MESOS-9486] - Set up `object.value` for `CREATE_DISK` and `DESTROY_DISK` authorizations.
  * [MESOS-9510] - Disallowed nan, inf and so on in `Value::Scalar`.
  * [MESOS-9516] - Extend `min_allocatable_resources` flag to cover non-scalar resources.


Release Notes - Mesos - Version 1.7.0
-------------------------------------
This release contains the following highlights:

  * Performance Improvements:

    * **Master `/state` endpoint:** Adopted RapidJSON and reduced
      copying for a ~130% throughput improvement due to a ~55%
      decrease in latency (MESOS-9092). Also, added parallel
      processing of `/state` requests to reduce master backlogging
      / interference under high request load (MESOS-9122).

    * **Allocator:** Improved allocator cycle time significantly
      (MESOS-9087). This, together with the reduced master
      backlogging from `/state` improvements, reduces the
      end-to-end offer cycling time between Mesos and schedulers.

    * **Agent `/containers` endpoint:** Fixed a performance issue
      that caused high latency / cpu consumption when there are
      many containers on the agent (MESOS-8418).

    * **Agent container launching performance improvements**:
      The expensive `cgroups::verify()` calls were removed which
      provides a significant improvement to container launch /
      destroy throughput (MESOS-9081).

  * Containerization:

    * [MESOS-8794] - **Experimental** Supported docker image tarball
      fetching from HDFS through the `--docker_registry` agent flag.

    * [MESOS-7691] - Added a new option `cgroups/all` to the agent
      flag `--isolation`. This allows cgroups isolator to
      automatically load all the local enabled cgroups subsystems.
      If this option is specified in the agent flag `--isolation`
      along with other cgroups related options
      (e.g., `cgroups/cpu`), those options will be just ignored.

    * [MESOS-7947] - Added a new `--gc_non_executor_container_sandboxes`
      option which tells the agent to garbage collect sandboxes created
      via the LAUNCH_NESTED_CONTAINER API. The same flag will apply to
      standalone container sandboxes in future.

    * [MESOS-8327] - Added container-specific cgroups mounts under
      `/sys/fs/cgroup` to containers with image launched by Mesos
      containerizer.

    * [MESOS-5647] - Expose network statistics for containers on
      CNI network in the `network/cni` isolator.

    * [MESOS-8792] - Added a new `linux/devices` isolator that
      automatically populates containers with devices that have
      been whitelisted with the `--allowed_devices` agent flag.

    * [MESOS-8340] Added a new `--enforce_container_ports`
      option to toggle ports resource enforcement by the
      `network/ports` isolator.

    * [MESOS-6451] - Add timer and percentile metrics for docker
      pull latency distribution.

  * Windows:

    * [MESOS-8668] - Added support to libprocess for the Windows
      Thread Pool API, replacing libevent with the native Windows
      event and thread pool library. This can be enabled with
      `-DENABLE_LIBWINIO=ON` during CMake configuration. By
      utilizing I/O Completion Ports, this enables non-blocking
      asynchronous I/O on Windows for sockets, pipes, and files.

  * Multi-Framework Workloads:

    * [MESOS-8842] - **Experimental** Added per-framework metrics
      to the master. These new metrics provide detailed information
      about the behavior of each framework and can help with
      scalability testing, debugging, and fine grained monitoring.
      Please refer to docs/monitoring.md for more details.

    * [MESOS-8238] Documentation was added in the framework
      development guide to provide recommendations on how schedulers
      can behave co-operatively in a multi-framework setting, as
      well as how to operationally configure Mesos in such a setting.

    * [MESOS-8936] A new weighted random sorter was added as an
      alternative to the existing DRF sorter, this allows users
      that don't need DRF behavior to opt-out.

Additional API Changes:
  * [MESOS-9066] - Introduced `CREATE_DISK` and `DESTROY_DISK` offer
    operations to replace `CREATE_VOLUME`, `CREATE_BLOCK`,
    `DESTROY_VOLUME` and `DESTROY_BLOCK`.

  * Container logger module interface has been changed. The `prepare()` method
    now takes `ContainerID` and `ContainerConfig` instead.

  * `Isolator::recover` interface has been changed to take an `std::vector`
    instead of `std::list`.

  * JSON endpoints now use rapidjson to provide a performance improvement,
    this means that if a client has a JSON de-serializer that does not
    conform to the ECMA-404 spec for JSON, they may break. As an example,
    Mesos would previously serialize '/' as '\/', but the spec does not
    require the escaping and rapidjson does not escape '/'.

Changes to Dependencies:
  * [MESOS-8395] - Made gRPC a requirement for Mesos builds. The `--enable-grpc`
    Autotools option and the `-DENABLE_GRPC=ON` CMake option is now removed.

  * [MESOS-8064] - Mesos now requires libarchive to programmatically decode
    .zip, .tar, .gzip, and other common file compression schemes. Version 3.3.2
    is bundled in Mesos.

  * [MESOS-9092] - Adopt rapidjson for improved json serialization performance.
    Version 1.1.0 is bundled in Mesos.

Unresolved Critical Issues:
  * [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-3747] - HTTP Scheduler API no longer allows FrameworkInfo.user to be empty string
  * [MESOS-5396] - After failover, master does not remove agents with same UPID.
  * [MESOS-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.
  * [MESOS-5995] - Protobuf JSON deserialisation does not accept numbers formated as strings
  * [MESOS-6632] - ContainerLogger might leak FD if container launch fails.
  * [MESOS-7076] - libprocess tests fail when using libevent 2.1.8
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed
  * [MESOS-7566] - Master crash due to failed check in DRFSorter::remove
  * [MESOS-7622] - Agent can crash if a HTTP executor tries to retry subscription in running state.
  * [MESOS-7721] - Master's agent removal rate limit also applies to agent unreachability.
  * [MESOS-7748] - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * [MESOS-7911] - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * [MESOS-7991] - fatal, check failed !framework->recovered()
  * [MESOS-8038] - Launching GPU task sporadically fails.
  * [MESOS-8137] - Mesos agent can hang during startup.
  * [MESOS-8256] - Libprocess can silently deadlock due to worker thread exhaustion.
  * [MESOS-8257] - Unified Containerizer "leaks" a target container mount path to the host FS when the target resolves to an absolute path
  * [MESOS-8522] - `prepareMounts` in Mesos containerizer is flaky.
  * [MESOS-8623] - Crashed framework brings down the whole Mesos cluster
  * [MESOS-8679] - If the first KILL stuck in the default executor, all other KILLs will be ignored.
  * [MESOS-8703] - Mesos master can`t reconnect to zookeeper
  * [MESOS-8731] - mesos master APIs become latent
  * [MESOS-8769] - Agent crashes when CNI config not defined
  * [MESOS-8803] - Libprocess deadlocks in a test.
  * [MESOS-8840] - `cpu.cfs_quota_us` may be accidentally set for command task using docker during agent recovery.
  * [MESOS-8927] - Default executor cannot kill tasks if `LAUNCH_NESTED_CONTAINER` is stuck.
  * [MESOS-9006] - The agent's GET_AGENT leaks resource information when using authorization
  * [MESOS-9022] - Race condition in task updates could cause missing event in streaming
  * [MESOS-9049] - Agent GC could unmount a dangling persistent volume multiple times.
  * [MESOS-9053] - Network ports isolator can falsely trigger while destroying containers.
  * [MESOS-9109] - Windows agent uses reserved character :(colon) for file name and crashes when attempting to remove link
  * [MESOS-9131] - Health checks launching nested containers while a container is being destroyed lead to unkillable tasks
  * [MESOS-9157] - cannot pull docker image from dockerhub
  * [MESOS-9169] - docker image fetching fails

All Resolved Issues:

** Bug
  * [MESOS-2199] - Failing test: SlaveTest.ROOT_RunTaskWithCommandInfoWithUser
  * [MESOS-3202] - Avoid role/framework offer starvation in DRF allocator.
  * [MESOS-3475] - TestContainerizer should not modify global environment variables.
  * [MESOS-3790] - ZooKeeper connection should retry on EAI_NONAME
  * [MESOS-5371] - Implement `fcntl.hpp`
  * [MESOS-5904] - Process routes implementation seems to drop routes on Windows.
  * [MESOS-6092] - Docker containerizer launch command may access a "Container" struct after it has been destroyed
  * [MESOS-6622] - NvidiaGpuTest.ROOT_INTERNET_CURL_CGROUPS_NVIDIA_GPU_NvidiaDockerImage is flaky
  * [MESOS-6823] - bool/UserContainerLoggerTest.ROOT_LOGROTATE_RotateWithSwitchUserTrueOrFalse/0 is flaky
  * [MESOS-6985] - os::getenv() can segfault
  * [MESOS-7032] - Mesos fail NvidiaGpuTest.ROOT_INTERNET_CURL_CGROUPS_NVIDIA_GPU_NvidiaDockerImage
  * [MESOS-7168] - Agent should validate that the nested container ID does not exceed certain length.
  * [MESOS-7220] - 'EXPECT_SOME' and other asserts don't work with 'Try's that have a custom error state.
  * [MESOS-7342] - Port Docker tests
  * [MESOS-7397] - apply-reviews.py silently fails when using chain mode.
  * [MESOS-7658] - apply-reviews.py fails with Unicode characters
  * [MESOS-7966] - check for maintenance on agent causes fatal error
  * [MESOS-8128] - Make os::pipe file descriptors O_CLOEXEC.
  * [MESOS-8134] - SlaveTest.ContainersEndpoint is flaky due to getenv crash.
  * [MESOS-8429] - Clean up endpoint socket if the container daemon is destroyed while waiting.
  * [MESOS-8499] - Change docker health check image to the new nanoserver one
  * [MESOS-8567] - Test UriDiskProfileTest.FetchFromHTTP is flaky.
  * [MESOS-8568] - Command checks should always call `WAIT_NESTED_CONTAINER` before `REMOVE_NESTED_CONTAINER`
  * [MESOS-8613] - Test `MasterAllocatorTest/*.TaskFinished` is flaky.
  * [MESOS-8626] - The 'allocatable' check in the allocator is problematic with multi-role frameworks
  * [MESOS-8686] - Mesos build failed with /permissive- + MSVC on windows
  * [MESOS-8687] - Check failure in `ProcessBase::_consume()`.
  * [MESOS-8786] - CgroupIsolatorProcess accesses subsystem processes directly.
  * [MESOS-8830] - Agent gc on old slave sandboxes could empty persistent volume data
  * [MESOS-8838] - Consider validating that resubscribing resource providers do not change their name or type
  * [MESOS-8857] - Fix subprocess(flags) logic on Windows to handle arguments with quotes
  * [MESOS-8871] - Agent may fail to recover if the agent dies before image store cache checkpointed.
  * [MESOS-8873] - StorageLocalResourceProviderTest.ROOT_ZeroSizedDisk is flaky.
  * [MESOS-8875] - `leveldb::PosixEnv::DeleteFile()` can segfault.
  * [MESOS-8884] - Flaky `DockerContainerizerTest.ROOT_DOCKER_MaxCompletionTime`.
  * [MESOS-8892] - MasterSlaveReconciliationTest.ReconcileDroppedOperation is flaky
  * [MESOS-8897] - ROOT_XFS_QuotaTest.DiskUsageExceedsQuotaWithKill is flaky
  * [MESOS-8906] - `UriDiskProfileAdaptor` fails to update profile selectors.
  * [MESOS-8913] - Resource provider manager registry leaks file descriptors into executors.
  * [MESOS-8917] - Agent leaking file descriptors into forked processes
  * [MESOS-8921] - Autotools don't work with newer OpenJDK versions
  * [MESOS-8932] - Quota guarantee metric does not handle removal correctly.
  * [MESOS-8935] - Quota limit "chopping" can lead to cpu-only and memory-only offers.
  * [MESOS-8945] - Master check failure due to CHECK_SOME(providerId).
  * [MESOS-8952] - process::await/collect n^2 performance issue
  * [MESOS-8954] - python3/post-reviews.py errors due to TypeError.
  * [MESOS-8958] - LinuxDevicesIsolatorTest.ROOT_PopulateWhitelistedDevices fails on some boxes.
  * [MESOS-8963] - Executor crash trying to print container ID.
  * [MESOS-8970] - Tests relying on metrics segfault on some Linux distros.
  * [MESOS-8977] - BuildBot uses Docker with AUFS that has a max file length limit of 242 characters
  * [MESOS-8979] - python3/push-commits.py fails due to TypeError
  * [MESOS-8980] - mesos-slave can deadlock with docker pull
  * [MESOS-8985] - Posting to the operator api with 'accept recordio' header can crash the agent
  * [MESOS-8987] - Master asks agent to shutdown upon auth errors.
  * [MESOS-9000] - Operator API event stream can miss task status updates.
  * [MESOS-9007] - XFS disk isolator doesn't clean up project ID from symlinks
  * [MESOS-9008] - Fetcher fails to extract some archives containing hardlinks
  * [MESOS-9010] - `UPDATE_STATE` can race with `UPDATE_OPERATION_STATUS` for a resource provider.
  * [MESOS-9014] - MasterAPITest.SubscribersReceiveHealthUpdates is flaky
  * [MESOS-9025] - The container which joins CNI network and has checkpoint enabled will be mistakenly destroyed by agent
  * [MESOS-9027] - GPU Isolator still depends on cgroups/devices agent flag given cgrous/all is supported.
  * [MESOS-9037] - DefaultExecutorTest.SigkillExecutor is flaky
  * [MESOS-9038] - Archiver utility extracts links within subdirectories incorrectly
  * [MESOS-9039] - CNI isolator recovery should wait until unknown orphan cleanup is done
  * [MESOS-9051] - Move agent call validation into common validation library.
  * [MESOS-9065] - Apply the `override` keyword globally.
  * [MESOS-9073] - Tox doesn't run in the support virtualenv when using Python 3 mesos-style.py
  * [MESOS-9075] - Virtualenv management in support directory is buggy.
  * [MESOS-9094] - On macOS libprocess_tests fail to link when compiling with gRPC
  * [MESOS-9114] - cmake build is broken on macos
  * [MESOS-9115] - Stout depends on missing rapidjson headers.
  * [MESOS-9116] - Launch nested container session fails due to incorrect detection of `mnt` namespace of command executor's task.
  * [MESOS-9125] - Port mapper CNI plugin might fail with "Resource temporarily unavailable"
  * [MESOS-9127] - Port mapper CNI plugin might deadlock iptables on the agent.
  * [MESOS-9137] - GRPC build fails to pass compiler flags
  * [MESOS-9142] - CNI detach might fail due to missing network config file.
  * [MESOS-9144] - Master authentication handling leads to request amplification.
  * [MESOS-9145] - Master has a fragile burned-in 5s authentication timeout.
  * [MESOS-9146] - Agent has a fragile burn-in 5s authentication timeout.
  * [MESOS-9147] - Agent and scheduler driver authentication retry backoff time could overflow.
  * [MESOS-9149] - Failed to build gRPC on Linux without OpenSSL.
  * [MESOS-9151] - Container stuck at ISOLATING due to FD leak
  * [MESOS-9156] - StorageLocalResourceProviderProcess can deadlock
  * [MESOS-9160] - Failed to compile gRPC when the build path contains symlinks.
  * [MESOS-9163] - `UriDiskProfileAdaptor` should not update profiles when a poll returns a non-OK HTTP status.
  * [MESOS-9170] - Zookeeper doesn't compile with newer gcc due to format error
  * [MESOS-9171] - Mesos agent crashes in CNI isolator when usage is queried
  * [MESOS-9177] - Mesos master segfaults when responding to /state requests.
  * [MESOS-9185] - An attempt to remove or destroy container in composing containerizer leads to segfault.
  * [MESOS-9193] - Mesos build fail with Clang 3.5.
  * [MESOS-9196] - Removing rootfs mounts may fail with EBUSY.

** Epic
  * [MESOS-8564] - Port libprocess-tests suites to Windows
  * [MESOS-8668] - Transition libprocess on Windows to use the Thread Pool API
  * [MESOS-8705] - Composing containerizer improvements
  * [MESOS-8842] - Per Framework Metrics on Master
  * [MESOS-8916] - Allocation logic cleanup.
  * [MESOS-9013] - Support container Cgroup FS mount.

** Improvement
  * [MESOS-6451] - Add timer and percentile for docker pull latency distribution.
  * [MESOS-7691] - Support local enabled cgroups subsystems automatically.
  * [MESOS-7947] - Add GC capability to nested containers
  * [MESOS-8064] - Add capability so mesos can programmatically decode .zip, .tar, .gzip, and other common file compression schemes
  * [MESOS-8106] - Docker fetcher plugin unsupported scheme failure message is not accurate.
  * [MESOS-8340] - Add a no-enforce option to the `network/ports` isolator.
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads
  * [MESOS-8680] - Rename variable names in slave.hpp to be more explicit.
  * [MESOS-8788] - Add alg RS256 support for JWT generator and validator in libprocess
  * [MESOS-8792] - Automatically create whitelisted devices.
  * [MESOS-8798] - Build the "unsecure" gRPC libraries to remove SSL dependency.
  * [MESOS-8829] - Get rid of extra `containerizer->wait()` calls in tests.
  * [MESOS-8908] - Add -fno-omit-frame-pointer to improve debugging and profiling.
  * [MESOS-8911] - Add framework metrics benchmark test.
  * [MESOS-8919] - Per Framework SUBSCRIBE metrics.
  * [MESOS-8920] - Support per-container container logger configuration.
  * [MESOS-8924] - Refactor the libprocess gRPC warpper.
  * [MESOS-8955] - Manage Python2 and 3 in build steps
  * [MESOS-8986] - `slave.available()` in the allocator is expensive and drags down allocation performance.
  * [MESOS-8989] - Add a better benchmark for range type resources.
  * [MESOS-8998] - Allow for unbundled libevent in CMake builds to work around 2.1.x SSL issues.
  * [MESOS-9015] - Allow resources to be removed when updating the sorter.
  * [MESOS-9055] - Make gRPC call deadline configurable.
  * [MESOS-9067] - Improve performance of json parsing by avoiding conversion cost.
  * [MESOS-9081] - cgroups::verify is expensive and is done implicitly during cgroups operations.
  * [MESOS-9086] - Optimize range subtraction operation.
  * [MESOS-9092] - Adopt rapidjson for improved json serialization performance.
  * [MESOS-9104] - Refactor capability related logic in the allocator.
  * [MESOS-9110] - Add move support to the Resources / Resource_ wrappers.
  * [MESOS-9122] - Batch '/state' requests in the Master actor.
  * [MESOS-9129] - Port mapper CNI plugin should use '-n' option with 'iptables --list'
  * [MESOS-9213] - Avoid double copying of master->framework messages when incrementing metrics.

** Task
  * [MESOS-2633] - Move implementations of Framework struct functions out of master.hpp.
  * [MESOS-3442] - Port path_tests to Windows
  * [MESOS-3444] - Port sendfile_tests
  * [MESOS-5647] - Expose network statistics for containers on CNI network in the `network/cni` isolator.
  * [MESOS-5814] - Port libprocess http_tests.cpp
  * [MESOS-5817] - Port libprocess process_tests.cpp
  * [MESOS-5941] - RemoteLink tests fail on Windows
  * [MESOS-7329] - Authorize offer operations for converting disk resources
  * [MESOS-7527] - Enable ProcessTest.THREADSAFE_Http2 on Windows.
  * [MESOS-8314] - Add authorization to display of resource provider information in API calls and endpoints
  * [MESOS-8327] - Add container-specific CGroup FS mounts under /sys/fs/cgroup/* to Mesos containers
  * [MESOS-8383] - Add metrics for operations in Storage Local Resource Provider (SLRP).
  * [MESOS-8395] - Made gRPC a requirement for Mesos builds.
  * [MESOS-8473] - Authorize `GET_OPERATIONS` calls.
  * [MESOS-8670] - Implement `process::io::read/write` using Thread Pool API
  * [MESOS-8671] - Add EventLoop implementation using Thread Pool API
  * [MESOS-8672] - Replace  libprocess `PollSocketImpl` with IOCP and Thread Pool API
  * [MESOS-8674] - Fix os::pipe to work in overlapped mode
  * [MESOS-8681] - Clean up os::sendfile on Windows
  * [MESOS-8712] - Remove `destroyed` promise from `Container` struct
  * [MESOS-8713] - Synchronize result of `wait` and `destroy` composing c'zer methods
  * [MESOS-8714] - Cleanup `containers_` hashmap once container exits
  * [MESOS-8732] - Use composing containerizer in some agent tests.
  * [MESOS-8734] - Restore `WaitAfterDestroy` test to check termination status of a terminated nested container.
  * [MESOS-8736] - Implement a test which ensures that `wait` and `destroy` return the same result for a terminated nested container.
  * [MESOS-8737] - Update composing containerizer tests.
  * [MESOS-8774] - Authenticate and authorize calls to the resource provider manager's API
  * [MESOS-8794] - Support docker image tarball hdfs based fetching.
  * [MESOS-8814] - Mount the volume based on `Volume.mode`.
  * [MESOS-8825] - Remove storage pools associated with missing profiles.
  * [MESOS-8837] - Add test of resource provider manager recovery
  * [MESOS-8843] - Per Framework CALL metrics
  * [MESOS-8844] - Per Framework EVENT metrics
  * [MESOS-8845] - Per Framework Operation metrics
  * [MESOS-8846] - Per Framework state metrics
  * [MESOS-8847] - Per Framework task state metrics
  * [MESOS-8848] - Per Framework Offer metrics
  * [MESOS-8849] - Per Framework resource allocation metrics
  * [MESOS-8903] - Update the Python CLI to use Python 3
  * [MESOS-8912] - Per Framework terminal task state metrics
  * [MESOS-8931] - Add os::shell back to Windows
  * [MESOS-8934] - Update python.m4 to support Python 3
  * [MESOS-8936] - Implement a Random Sorter for offer allocations.
  * [MESOS-8940] - Per Framework Offer metrics with a specific resource type
  * [MESOS-8942] - Master streaming API does not send (health) check updates for tasks.
  * [MESOS-8943] - Add metrics about CSI calls.
  * [MESOS-8961] - Output of tasks gets corrupted if task defines the same environment variables as the executor container
  * [MESOS-8990] - Build failure of the google-test dependency on Windows using MSVC.
  * [MESOS-8995] - Add SLRP unit tests for missing profiles.
  * [MESOS-8997] - Consider dropping PATH disk support for CSI volumes.
  * [MESOS-9002] - GCC 8.1 build failure in os::Fork::Tree.
  * [MESOS-9043] - Move check validators to the common validation library.
  * [MESOS-9066] - Changing `CREATE_VOLUME` and `CREATE_BLOCK` to `CREATE_DISK`.
  * [MESOS-9068] - Add a metrics benchmark in libprocess.
  * [MESOS-9070] - Support systemd and freezer cgroup subsystems bind mount for container with rootfs.
  * [MESOS-9148] - Make cgroups destroy timeout configurable for Mesos containerizer

** Documentation
  * [MESOS-8740] - Update description of a Containerizer interface.
  * [MESOS-9020] - Seccomp design doc


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

** Bug
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads.
  * [MESOS-9125] - Port mapper CNI plugin might fail with "Resource temporarily unavailable"
  * [MESOS-9127] - Port mapper CNI plugin might deadlock iptables on the agent.


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

** Bug
  * [MESOS-3790] - ZooKeeper connection should retry on `EAI_NONAME`.
  * [MESOS-8106] - Docker fetcher plugin unsupported scheme failure message is not accurate.
  * [MESOS-8786] - CgroupIsolatorProcess accesses subsystem processes directly.
  * [MESOS-8830] - Agent gc on old slave sandboxes could empty persistent volume data
  * [MESOS-8871] - Agent may fail to recover if the agent dies before image store cache checkpointed.
  * [MESOS-8904] - Master crash when removing quota.
  * [MESOS-8906] - `UriDiskProfileAdaptor` fails to update profile selectors.
  * [MESOS-8935] - Quota limit "chopping" can lead to cpu-only and memory-only offers.
  * [MESOS-8936] - Implement a Random Sorter for offer allocations.
  * [MESOS-8942] - Master streaming API does not send (health) check updates for tasks.
  * [MESOS-8945] - Master check failure due to CHECK_SOME(providerId).
  * [MESOS-8947] - Improve the container preparing logging in IOSwitchboard and volume/secret isolator.
  * [MESOS-8952] - process::await/collect n^2 performance issue.
  * [MESOS-8963] - Executor crash trying to print container ID.
  * [MESOS-8980] - mesos-slave can deadlock with docker pull.
  * [MESOS-8986] - `slave.available()` in the allocator is expensive and drags down allocation performance.
  * [MESOS-8987] - Master asks agent to shutdown upon auth errors.
  * [MESOS-9002] - GCC 8.1 build failure in os::Fork::Tree.
  * [MESOS-9024] - Mesos master segfaults with stack overflow under load.
  * [MESOS-9025] - The container which joins CNI network and has checkpoint enabled will be mistakenly destroyed by agent.
  * [MESOS-9049] - Agent GC could unmount a dangling persistent volume multiple times.

** Improvement
  * [MESOS-8934] - Update python.m4 to support Python 3.


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

  * [MESOS-4965] - **Experimental** Persistent volumes can be resized
    through new offer operations and V1 operator API now.

  * [MESOS-6575] - Added a new `--xfs_kill_containers` flag to the
    Mesos agent. This causes the `disk/xfs` isolator to terminate
    containers that exceed their disk quota.

  * [MESOS-7944] - **Experimental** Added a new `MemoryProfiler` class to
    libprocess to aid in debugging memory issues.

  * [MESOS-8054] - **Experimental** Schedulers can now receive feedback about
    offer operations which operate on resources managed by resource providers.
    In the future, this feature will be extended to operations on agent default
    resources.

  * [MESOS-8534] - **Experimental** A nested container is now allowed
    to join a separate CNI network than its parent container.

  * [MESOS-8572] - Improvements to the Docker containerizer and executor
    to more gracefully handle situations in which the Docker CLI is
    unresponsive.

  * [MESOS-8607] - The `mesos-execute` tool has been ported to Windows.

  * [MESOS-8649] - **Experimental** Support for Container Storage Interface
    (CSI) version 0.2 in Mesos.

  * [MESOS-8659] - The Windows build now links the C runtime library
    dynamically instead of statically. This requires the Visual Studio
    redistributable to be available at runtime.

  * [MESOS-8682] - The use of the C runtime library's POSIX wrappers on
    Windows has been deprecated in favor of the native Windows APIs.

  * [MESOS-8725] - Added a new `max_completion_time` field to `TaskInfo`.
    Tasks which do not complete at the end of the specified duration will
    fail with a new reason `REASON_MAX_COMPLETION_TIME_REACHED`.

  * [MESOS-8801] - **Experimental** On Linux, Mesos can now be
    configured to use the jemalloc allocator by default via the
    `--enable-jemalloc-allocator` configuration option.

  * Agents now support the `--fetcher_stall_timeout` flag which allows container
    image and artifact fetchers to abort after the timeout when downloads stall.

Deprecations/Removals:
  * Support for CSI v0.1 is deprecated in favor of CSI v0.2.

Additional API Changes:
  * [MESOS-8306] - Authorization of resource reservation has been updated
    to allow the restriction of which agents can statically reserve
    resources for which roles.

  * [MESOS-8332] - Container sandbox permissions have been changed from
    0755 to 0750.

  * [MESOS-8388] - Local resource provider resources are now included in
    the responses to the GET_AGENTS and GET_RESOURCE_PROVIDER calls.

  * [MESOS-8534] - Nested containers within a task group can now specify
    separate network namespaces.

Changes to Dependencies:
  * Upgraded minimum required gRPC library to version 1.10+ for gRPC-enabled builds.

Unresolved Critical Issues:
  * [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-5396] - After failover, master does not remove agents with same UPID.
  * [MESOS-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.
  * [MESOS-5995] - Protobuf JSON deserialisation does not accept numbers formated as strings
  * [MESOS-6632] - ContainerLogger might leak FD if container launch fails.
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed
  * [MESOS-7566] - Master crash due to failed check in DRFSorter::remove
  * [MESOS-7622] - Agent can crash if a HTTP executor tries to retry subscription in running state.
  * [MESOS-7721] - Master's agent removal rate limit also applies to agent unreachability.
  * [MESOS-7748] - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * [MESOS-7911] - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * [MESOS-7966] - check for maintenance on agent causes fatal error
  * [MESOS-7991] - fatal, check failed !framework->recovered()
  * [MESOS-8137] - Mesos agent can hang during startup.
  * [MESOS-8256] - Libprocess can silently deadlock due to worker thread exhaustion.
  * [MESOS-8257] - Unified Containerizer "leaks" a target container mount path to the host FS when the target resolves to an absolute path
  * [MESOS-8522] - `prepareMounts` in Mesos containerizer is flaky.
  * [MESOS-8623] - Crashed framework brings down the whole Mesos cluster
  * [MESOS-8679] - If the first KILL stuck in the default executor, all other KILLs will be ignored.
  * [MESOS-8703] - Mesos master can`t reconnect to zookeeper
  * [MESOS-8731] - mesos master APIs become latent
  * [MESOS-8769] - Agent crashes when CNI config not defined
  * [MESOS-8803] - Libprocess deadlocks in a test.
  * [MESOS-8830] - Agent gc on old slave sandboxes could empty persistent volume data
  * [MESOS-8840] - `cpu.cfs_quota_us` may be accidentally set for command task using docker during agent recovery.

Feature Graduations:
  * [MESOS-4828] - XFS disk quota isolator.
  * [MESOS-6906] - Introduce a general non-interpreting task check.

All Experimental Features:
  * [MESOS-3094] - Mesos on Windows.
  * [MESOS-3421] - Support sharing of resources across task instances.
  * [MESOS-4312] - Porting Mesos on Power (ppc64le).
  * [MESOS-4355] - Implement isolator for Docker volume.
  * [MESOS-4965] - Persistent volume resizing.
  * [MESOS-5344] - Partition-aware Mesos frameworks.
  * [MESOS-5788] - Added JAVA API adapter for seamless transition to new scheduler API.
  * [MESOS-5931] - Support auto backend in Mesos Containerizer.
  * [MESOS-6014] - Added port mapping CNI plugin.
  * [MESOS-7944] - Libprocess `MemoryProfiler`.
  * [MESOS-8054] - Offer operation feedback.
  * [MESOS-8534] - Separate CNI networks for nested containers.
  * [MESOS-8649] - Support for Container Storage Interface version 0.2.
  * [MESOS-8801] - Linux support for jemalloc.

All Resolved Issues:

** Bug
    * [MESOS-1720] - Slave should send exited executor message when the executor is never launched.
    * [MESOS-3915] - Upgrade vendored Boost
    * [MESOS-4420] - Support read host physical link speed from virtio driver
    * [MESOS-5333] - GET /master/maintenance/schedule/ produces 404.
    * [MESOS-5820] - Port master to Windows
    * [MESOS-5882] - `os::cloexec` does not exist on Windows
    * [MESOS-5940] - `setPaths` doesn’t work on Windows
    * [MESOS-6555] - Namespace 'mnt' is not supported
    * [MESOS-6713] - Port `slave_recovery_tests.cpp`
    * [MESOS-6715] - Port `uri_fetcher_tests.cpp`
    * [MESOS-6822] - CNI reports confusing error message for failed interface setup.
    * [MESOS-6973] - Fix BOOST random generator initialization on Windows
    * [MESOS-7028] - NetSocketTest.EOFBeforeRecv is flaky.
    * [MESOS-7342] - Port Docker tests
    * [MESOS-7604] - SlaveTest.ExecutorReregistrationTimeoutFlag aborts on Windows
    * [MESOS-7699] - "stdlib.h: No such file or directory" when building with GCC 6 (Debian stable freshly released)
    * [MESOS-7742] - Race conditions in IOSwitchboard: listening on unix socket and premature closing of the connection.
    * [MESOS-7803] - fs::list drops path components on Windows
    * [MESOS-7944] - Implement jemalloc memory profiling support for Mesos
    * [MESOS-7979] - reviewboard's GUESS_FIELDS setting leads to redundant information in commit messages
    * [MESOS-8125] - Agent should properly handle recovering an executor when its pid is reused
    * [MESOS-8140] - Executors should clear their auth tokens
    * [MESOS-8232] - SlaveTest.RegisteredAgentReregisterAfterFailover is flaky.
    * [MESOS-8258] - Mesos.DockerContainerizerTest.ROOT_DOCKER_SlaveRecoveryTaskContainer is flaky.
    * [MESOS-8305] - DefaultExecutorTest.ROOT_MultiTaskgroupSharePidNamespace is flaky.
    * [MESOS-8308] - CommandExecutorCheckTest.CommandCheckTimeout is flaky on Windows
    * [MESOS-8334] - PartitionedSlaveReregistrationMasterFailover is flaky.
    * [MESOS-8336] - MasterTest.RegistryUpdateAfterReconfiguration is flaky
    * [MESOS-8348] - Enable function sections in the build.
    * [MESOS-8350] - Resource provider-capable agents not correctly synchronizing checkpointed agent resources on reregistration
    * [MESOS-8404] - Improve image puller error messages.
    * [MESOS-8411] - Killing a queued task can lead to the command executor never terminating.
    * [MESOS-8413] - Zookeeper configuration passwords are shown in clear text
    * [MESOS-8416] - CHECK failure if trying to recover nested containers but the framework checkpointing is not enabled.
    * [MESOS-8440] - `network/ports` isolator kills legitimate tasks on recovery.
    * [MESOS-8444] - GC failure causes agent miss to detach virtual paths for the executor's sandbox
    * [MESOS-8446] - Agent miss to detach `virtualLatestPath` for the executor's sandbox during recovery
    * [MESOS-8447] - Incomplete output of apply-reviews.py --dry-run
    * [MESOS-8453] - ExecutorAuthorizationTest.RunTaskGroup segfaults.
    * [MESOS-8463] - Test MasterAllocatorTest/1.SingleFramework is flaky
    * [MESOS-8468] - `LAUNCH_GROUP` failure tears down the default executor.
    * [MESOS-8474] - Test StorageLocalResourceProviderTest.ROOT_ConvertPreExistingVolume is flaky
    * [MESOS-8477] - Make clean fails without Python artifacts.
    * [MESOS-8480] - Mesos returns high resource usage when killing a Docker task.
    * [MESOS-8482] - Signed/Unsigned comparisons in tests
    * [MESOS-8483] - ExampleTests PythonFramework fails with sigabort.
    * [MESOS-8484] - stout test NumifyTest.HexNumberTest fails.
    * [MESOS-8485] - MasterTest.RegistryGcByCount is flaky
    * [MESOS-8489] - LinuxCapabilitiesIsolatorFlagsTest.ROOT_IsolatorFlags is flaky
    * [MESOS-8490] - UpdateSlaveMessageWithPendingOffers is flaky.
    * [MESOS-8497] - Docker parameter `name` does not work with Docker Containerizer.
    * [MESOS-8508] - Missing map header when compiling against unbundled protobuf
    * [MESOS-8510] - URI disk profile adaptor does not consider plugin type for a profile.
    * [MESOS-8512] - Fetcher doesn't log it's stdout/stderr properly to the log file
    * [MESOS-8513] - Noisy "transport endpoint is not connected" logs on closing sockets.
    * [MESOS-8519] - Fix recovery of job object isolated tasks
    * [MESOS-8530] - Default executor tasks can get stuck in KILLING state
    * [MESOS-8536] - Pending offer operations on resource provider resources not properly accounted for in allocator
    * [MESOS-8545] - AgentAPIStreamingTest.AttachInputToNestedContainerSession is flaky.
    * [MESOS-8546] - PythonFramework test fails with cache write failure.
    * [MESOS-8548] - Test StorageLocalResourceProviderTest.ROOT_Metrics is flaky
    * [MESOS-8550] - Bug in `Master::detected()` leads to coredump in `MasterZooKeeperTest.MasterInfoAddress`.
    * [MESOS-8552] - CGROUPS_ROOT_PidNamespaceForward and CGROUPS_ROOT_PidNamespaceBackward tests fail
    * [MESOS-8563] - Windows executors cannot re-register
    * [MESOS-8565] - Persistent volumes are not visible in Mesos UI when launching a pod using default executor.
    * [MESOS-8577] - Destroy nested container if `LAUNCH_NESTED_CONTAINER_SESSION` fails
    * [MESOS-8578] - UpgradeTest.UpgradeAgentIntoHierarchicalRoleForNonHierarchicalRole is flaky.
    * [MESOS-8585] - Agent crashes when starting a task with an unknown user.
    * [MESOS-8586] - apply-reviews.py silently does nothing when a review was submitted already.
    * [MESOS-8594] - Mesos master stack overflow in libprocess socket send loop.
    * [MESOS-8598] - Allow empty resource provider selector in `UriDiskProfileAdaptor`.
    * [MESOS-8601] - Master crashes during slave reregistration after failover.
    * [MESOS-8604] - Quota headroom tracking may be incorrect in the presence of hierarchical reservation.
    * [MESOS-8605] - Terminal task status update will not send if 'docker inspect' is hung
    * [MESOS-8610] - NsTest.SupportedNamespaces fails on CentOS7
    * [MESOS-8611] - SlaveTest.RemoveExecutorUponFailedLaunch is flaky.
    * [MESOS-8617] - Tests using default executor occasionally fail.
    * [MESOS-8618] - ReconciliationTest.ReconcileStatusUpdateTaskState is flaky.
    * [MESOS-8619] - Docker on Windows uses USERPROFILE instead of HOME for credentials
    * [MESOS-8620] - Containers stuck in FETCHING possibly due to unresponsive server.
    * [MESOS-8624] - Valid tasks may be explicitly dropped by agent due to race conditions
    * [MESOS-8631] - Agent should be able to start a task with every CPU on a Windows machine
    * [MESOS-8641] - Event stream could send heartbeat before subscribed
    * [MESOS-8642] - ballon-executor is hard to run as unprivileged user
    * [MESOS-8643] - `os::system` and `os::spawn` returns -1 on valid windows commands
    * [MESOS-8644] - W* macros wrong on Windows.
    * [MESOS-8646] - Agent should be able to resolve file names on open files.
    * [MESOS-8647] - Enable resource provider agent capability by default
    * [MESOS-8651] - Potential memory leaks in the `volume/sandbox_path` isolator
    * [MESOS-8654] - The `/proc/sys` mount point in Mesos containers should also include `nosuid,noexec,nodev` mount options.
    * [MESOS-8659] - Fix warning `cl : Command line warning D9025 : overriding '/MTd' with '/MDd'`
    * [MESOS-8664] - Perf sampler doesn't handle extra fields and nameless counters
    * [MESOS-8691] - Forward CXX_FLAGS to C++ projects and C_FLAGS to C projects in CMake
    * [MESOS-8711] - SlaveTest.ChangeDomain is disabled.
    * [MESOS-8719] - Mesos configured with `--enable-grpc` doesn't compile on non-Linux builds
    * [MESOS-8724] - G++ Warning about libc system macros `major` and `minor` prevents Mesos build
    * [MESOS-8733] - OversubscriptionTest.ForwardUpdateSlaveMessage is flaky
    * [MESOS-8741] - `Add` to sequence will not run if it races with sequence destruction
    * [MESOS-8742] - Agent resource provider config API calls should be idempotent.
    * [MESOS-8749] - CSI proto is always included in the build when using CMake
    * [MESOS-8761] - Default linker fails to link tests on FreeBSD
    * [MESOS-8781] - Mesos master shouldn't silently drop operations
    * [MESOS-8784] - OPERATION_DROPPED operation status updates should include the operation/framework IDs
    * [MESOS-8787] - RP-related API should be experimental.
    * [MESOS-8804] - Fix Ninja Release builds on Windows
    * [MESOS-8818] - VolumeSandboxPathIsolatorTest.SharedParentTypeVolume fails on macOS
    * [MESOS-8834] - Indirect recursion between `send` and `_send` in libprocess may cause stack overflow.
    * [MESOS-8865] - Suspicious enum value comparisons in scheduler Java bindings
    * [MESOS-8866] - CMake builds are missing byproduct declaration for jemalloc.
    * [MESOS-8868] - Some 'FsTest' test cases fail on macOS
    * [MESOS-8870] - Master does not correctly reconcile dropped operations after agent failover
    * [MESOS-8874] - ResourceProviderManagerHttpApiTest.ResubscribeResourceProvider is flaky.
    * [MESOS-8876] - Normal exit of Docker container using rexray volume results in TASK_FAILED.
    * [MESOS-8881] - Enable epoll backend in libevent integration.
    * [MESOS-8885] - Disable libevent debug mode.

** Improvement
    * [MESOS-2922] - Add move constructors / assignment to Future.
    * [MESOS-3022] - export additional metrics from scheduler driver
    * [MESOS-4965] - Support resizing of an existing persistent volume
    * [MESOS-5362] - Add authentication to example frameworks
    * [MESOS-6128] - Make "re-register" vs. "reregister" consistent in the master
    * [MESOS-7016] - Make default AWAIT_* duration configurable
    * [MESOS-7643] - The order of isolators provided in '--isolation' flag is not preserved and instead sorted alphabetically
    * [MESOS-7656] - Update the JSON <=> protobuf message conversion for map support
    * [MESOS-7881] - Building gRPC with CMake
    * [MESOS-7990] - Support systemd named hierarchy (name=systemd) for Mesos Containerizer.
    * [MESOS-8033] - Use more idiomatic CMake for compiler features
    * [MESOS-8240] - Add an option to build the new CLI and run unit tests.
    * [MESOS-8306] - Restrict which agents can statically reserve resources for which roles
    * [MESOS-8332] - Narrow the container sandbox permissions.
    * [MESOS-8357] - Example frameworks have an inconsistent UX.
    * [MESOS-8361] - Example frameworks to support launching mesos-local.
    * [MESOS-8389] - Notion of "removable" task in master code is inaccurate.
    * [MESOS-8390] - Notion of "transitioning" agents in the master is now inaccurate.
    * [MESOS-8402] - Resource provider manager should persist resource provider information
    * [MESOS-8426] - Speed up SLRP tests
    * [MESOS-8427] - Clean up residual CSI endpoints for SLRP tests.
    * [MESOS-8434] - Cleanup Authorization logic in master and agent
    * [MESOS-8454] - Add a download link for master and agent logs in WebUI
    * [MESOS-8471] - Allow revocable_resources capability for mesos-execute
    * [MESOS-8488] - Docker bug can cause unkillable tasks.
    * [MESOS-8506] - Add test coverage for `Resources::find` on revocable resources
    * [MESOS-8556] - Boost emits warning repeatedly
    * [MESOS-8573] - Container stuck in PULLING when Docker daemon hangs
    * [MESOS-8574] - Docker executor makes no progress when 'docker inspect' hangs
    * [MESOS-8575] - Improve discard handling for 'Docker::stop' and 'Docker::pull'.
    * [MESOS-8576] - Improve discard handling of 'Docker::inspect()'
    * [MESOS-8591] - Add infra to test a hung Docker daemon
    * [MESOS-8599] - Build with Ninja on Windows
    * [MESOS-8607] - Port mesos-execute to Windows
    * [MESOS-8609] - Create a metric to indicate how long agent takes to recover executors
    * [MESOS-8640] - Validate `DockerInfo` exists when container's type is `DOCKER`
    * [MESOS-8656] - Improve stout JSON -> protobuf message conversion to handle more valid JSONs
    * [MESOS-8658] - CMake build should use same compiler warnings as Autotools
    * [MESOS-8702] - Replace the manual parsing in Mesos code with the native protobuf map support
    * [MESOS-8725] - Support max_duration for tasks
    * [MESOS-8728] - Don't print full usage for invocation errors
    * [MESOS-8772] - Add slave recovery test for default executor.
    * [MESOS-8793] - Add more logging to agent recovery path.
    * [MESOS-8801] - Add jemalloc as optional third-party memory allocator
    * [MESOS-8851] - Introduce a push-based gauge.

** Task
    * [MESOS-3441] - Port os_tests to Windows
    * [MESOS-3445] - Port signals_tests to Windows
    * [MESOS-3644] - Implement stout/os/windows/signals.hpp
    * [MESOS-4176] - Support CMake build on FreeBSD
    * [MESOS-5726] - Benchmark the v1 Operator API
    * [MESOS-5850] - Add a test that runs the 'mesos-local' binary
    * [MESOS-6575] - Change `disk/xfs` isolator to terminate executor when it exceeds quota
    * [MESOS-7558] - Add resource provider validation
    * [MESOS-8184] - Implement master's AcknowledgeOfferOperationMessage handler.
    * [MESOS-8189] - Master’s OperationStatusUpdate handler should forward updates to the framework when OfferOperationID is set.
    * [MESOS-8190] - Update the master to accept OfferOperationIDs from frameworks.
    * [MESOS-8191] - Implement ReconcileOfferOperations handler in the master
    * [MESOS-8192] - Update the scheduler library to support request/response API calls.
    * [MESOS-8275] - Remove use of ::_stat on Windows
    * [MESOS-8284] - Add a ns::supported convenience API.
    * [MESOS-8362] - Verify end-to-end operation status update retry after RP failover
    * [MESOS-8363] - Verify that the master acknowledges operation status updates correctly
    * [MESOS-8373] - Test reconciliation after operation is dropped en route to agent
    * [MESOS-8382] - Master should bookkeep local resource providers.
    * [MESOS-8388] - Show LRP resources in master and agent endpoints.
    * [MESOS-8407] - Add SLRP unit tests for profile updates and corner cases.
    * [MESOS-8408] - Add an SLRP test for CSI plugin restart.
    * [MESOS-8409] - Add an SLRP test for agent registered with a new ID.
    * [MESOS-8415] - Add an SLRP test for agent  reboot.
    * [MESOS-8420] - Test that operation status updates are retried after being dropped en-route to the master.
    * [MESOS-8424] - Test that operations are correctly reported following a master failover
    * [MESOS-8442] - Source tree contains generated endpoint documentation
    * [MESOS-8445] - Test that `UPDATE_STATE` of a resource provider doesn't have unwanted side-effects in master or agent
    * [MESOS-8462] - Unit test for `Slave::detachFile` on removed frameworks.
    * [MESOS-8492] - Checkpoint profiles in storage local resource provider.
    * [MESOS-8527] - Add metrics about number of subscribed LRPs on the agent.
    * [MESOS-8534] - Allow nested containers in TaskGroups to have separate network namespaces
    * [MESOS-8539] - Add metrics about CSI plugin terminations.
    * [MESOS-8551] - Port libprocess HTTPTest.QueryEncodeDecode
    * [MESOS-8569] - Allow newline characters when decoding base64 strings in stout.
    * [MESOS-8650] - Bump CSI bundle to v0.2.
    * [MESOS-8653] - Make the CSI client to support CSI v0.2.
    * [MESOS-8657] - Build CSI proto in CMake.
    * [MESOS-8673] - Fix os::open to use HANDLEs
    * [MESOS-8675] - Remove FD_CRT from WindowsFD
    * [MESOS-8676] - Fix os::read and os::write to use HANDLES
    * [MESOS-8678] - Bump gRPC bundle to 1.10.0.
    * [MESOS-8683] - Remove _close from Windows close.hpp
    * [MESOS-8684] - Replace _dup with DuplicateHandle on Windows
    * [MESOS-8685] - Replace _lseek with SetFilePointer
    * [MESOS-8692] - Replace _chsize_s with SetEndOfFile on Windows
    * [MESOS-8697] - Make gRPC-related tests cross-platform.
    * [MESOS-8698] - Enable storage local resource provider in CMake.
    * [MESOS-8706] - Unify return type of `wait` and `destroy` containerizer methods
    * [MESOS-8710] - Update tests after changing return type of `wait` method
    * [MESOS-8717] - Support CSI v0.2 in SLRP.
    * [MESOS-8735] - Implement recovery for resource provider manager registrar
    * [MESOS-8747] - Support resizing persistent volume through operator API
    * [MESOS-8748] - Create ACL for grow and shrink volume
    * [MESOS-8750] - Check failed: !slaves.registered.contains(task->slave_id)
    * [MESOS-8777] - Support `STAGE_UNSTAGE_VOLUME` CSI capability in SLRP
    * [MESOS-8819] - mesos.pom file hardcodes developers
    * [MESOS-8833] - Port libprocess subprocess_tests.cpp

** Documentation
    * [MESOS-8291] - Add documentation about fault domains


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

** Bug
  * [MESOS-3790] - ZooKeeper connection should retry on `EAI_NONAME`.
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads.
  * [MESOS-8830] - Agent gc on old slave sandboxes could empty persistent volume data
  * [MESOS-8904] - Master crash when removing quota.
  * [MESOS-8906] - `UriDiskProfileAdaptor` fails to update profile selectors.
  * [MESOS-8935] - Quota limit "chopping" can lead to cpu-only and memory-only offers.
  * [MESOS-8936] - Implement a Random Sorter for offer allocations.
  * [MESOS-8942] - Master streaming API does not send (health) check updates for tasks.
  * [MESOS-8945] - Master check failure due to CHECK_SOME(providerId).
  * [MESOS-8947] - Improve the container preparing logging in IOSwitchboard and volume/secret isolator.
  * [MESOS-8952] - process::await/collect n^2 performance issue.
  * [MESOS-8963] - Executor crash trying to print container ID.
  * [MESOS-8980] - mesos-slave can deadlock with docker pull.
  * [MESOS-8986] - `slave.available()` in the allocator is expensive and drags down allocation performance.
  * [MESOS-8987] - Master asks agent to shutdown upon auth errors.
  * [MESOS-9024] - Mesos master segfaults with stack overflow under load.
  * [MESOS-9049] - Agent GC could unmount a dangling persistent volume multiple times.
  * [MESOS-9125] - Port mapper CNI plugin might fail with "Resource temporarily unavailable"
  * [MESOS-9127] - Port mapper CNI plugin might deadlock iptables on the agent.


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

** Bug
  * [MESOS-1720] - Slave should send exited executor message when the executor is never launched.
  * [MESOS-7742] - Race conditions in IOSwitchboard: listening on unix socket and premature closing of the connection.
  * [MESOS-8125] - Agent should properly handle recovering an executor when its pid is reused.
  * [MESOS-8411] - Killing a queued task can lead to the command executor never terminating.
  * [MESOS-8416] - CHECK failure if trying to recover nested containers but the framework checkpointing is not enabled.
  * [MESOS-8468] - `LAUNCH_GROUP` failure tears down the default executor.
  * [MESOS-8488] - Docker bug can cause unkillable tasks.
  * [MESOS-8510] - URI disk profile adaptor does not consider plugin type for a profile.
  * [MESOS-8536] - Pending offer operations on resource provider resources not properly accounted for in allocator.
  * [MESOS-8550] - Bug in `Master::detected()` leads to coredump in `MasterZooKeeperTest.MasterInfoAddress`.
  * [MESOS-8552] - CGROUPS_ROOT_PidNamespaceForward and CGROUPS_ROOT_PidNamespaceBackward tests fail.
  * [MESOS-8565] - Persistent volumes are not visible in Mesos UI when launching a pod using default executor.
  * [MESOS-8569] - Allow newline characters when decoding base64 strings in stout.
  * [MESOS-8574] - Docker executor makes no progress when 'docker inspect' hangs.
  * [MESOS-8575] - Improve discard handling for 'Docker::stop' and 'Docker::pull'.
  * [MESOS-8576] - Improve discard handling of 'Docker::inspect()'.
  * [MESOS-8577] - Destroy nested container if `LAUNCH_NESTED_CONTAINER_SESSION` fails.
  * [MESOS-8594] - Mesos master stack overflow in libprocess socket send loop.
  * [MESOS-8598] - Allow empty resource provider selector in `UriDiskProfileAdaptor`.
  * [MESOS-8601] - Master crashes during slave reregistration after failover.
  * [MESOS-8604] - Quota headroom tracking may be incorrect in the presence of hierarchical reservation.
  * [MESOS-8605] - Terminal task status update will not send if 'docker inspect' is hung.
  * [MESOS-8619] - Docker on Windows uses `USERPROFILE` instead of `HOME` for credentials.
  * [MESOS-8624] - Valid tasks may be explicitly dropped by agent due to race conditions.
  * [MESOS-8631] - Agent should be able to start a task with every CPU on a Windows machine.
  * [MESOS-8641] - Event stream could send heartbeat before subscribed.
  * [MESOS-8646] - Agent should be able to resolve file names on open files.
  * [MESOS-8651] - Potential memory leaks in the `volume/sandbox_path` isolator.
  * [MESOS-8741] - `Add` to sequence will not run if it races with sequence destruction.
  * [MESOS-8742] - Agent resource provider config API calls should be idempotent.
  * [MESOS-8786] - CgroupIsolatorProcess accesses subsystem processes directly.
  * [MESOS-8787] - RP-related API should be experimental.
  * [MESOS-8876] - Normal exit of Docker container using rexray volume results in TASK_FAILED.
  * [MESOS-8881] - Enable epoll backend in libevent integration.
  * [MESOS-8885] - Disable libevent debug mode.


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

  * [MESOS-1739] - **Experimental** Agents now support the
    `--reconfiguration_policy` flag which allows them to recover
    the agent ID and running tasks after configuration changes.
    See docs/agent-recovery.md for more details.

  * [MESOS-4945] - **Experimental** Agents now can automatically
    garbage collect unused Docker image layers used by Mesos
    Containerizer.

  * [MESOS-7289, MESOS-7235] - **Experimental** Support for the
    Container Storage Interface (CSI) to simplify storage management
    in Mesos, and allow 3rdparty vendors to plugin into Mesos very
    easily.

  * [MESOS-7302] - Support launching standalone containers on the
    agent using MesosContainerizer without a master or framework
    running.

  * [MESOS-7749] - **Experimental** Support for gRPC client in Mesos.
    The gRPC is bundled in Mesos and a gRPC client API is built is
    built into libprocess.

  * [MESOS-7973] - **Experimental** Non-leading replica is now allowed
    to catch-up missing log positions in the replicated log. This opens
    the door for implementing hot standby (by offloading some reading
    from a leader to standbys) and fast failover time (by keeping
    in-memory storage represented by the log “hot”).

  * Several improvements and fixes to the enforcement of quota
    guarantees have been made:
      * [MESOS-4527]: Previously a role could "game" the quota system
        by amassing reservations that it leaves unused. This is now
        prevented by accounting for reservations when allocating
        resources.
      * [MESOS-7099]: Resources are now allocated in a fine-grained
        manner to prevent roles from exceeding their quota.
      * [MESOS-8293]: There was a bug where a role may not receive its
        reservation when it does not have quota, this has been fixed.
      * [MESOS-8339]: When a role has more reservations than quota,
        there was a bug previously where an insufficient amount of
        quota headroom was held. This has been fixed.
      * [MESOS-8352]: When allocating to a role with quota, we
        previously included all other resources on the agent that the
        role does not have quota for. This made it possible to violate
        the quota guarantees of a different role. This has been fixed
        by taking into account the headroom that is needed when
        allocating the resources.

Deprecations/Removals:
  * [MESOS-7305] - Some nested container agent APIs `****_NESTED_CONTAINER`
    are deprecated in favor of the new generally named agent APIs
    `****_CONTAINER`.

  * Agent flag `--executor_secret_key` has been deprecated. Operators
    should use `--jwt_secret_key` instead.

Additional API Changes:
  * [MESOS-6406, MESOS-7215, MESOS-8337] Now when an agent is partitioned,
    the master tracks all noncompleted tasks regardless of partition-awareness
    so when the agent reregisters it can recover all of them and send their
    latest statuses to the scheduler. NOTE: The master now sends updates for
    tasks recovered from partitioned agents upon reregistration so the scheduler
    can get them before reconciliation. We also fixed the buggy semantics that
    exposes terminal unacknowledged tasks when partitioned as "completed" in the
    HTTP endpoints and the operator API, now they are shown as "unreachable". We
    plan to further improve the API on this in MESOS-8405.

  * [MESOS-7550] The fields `Resource.disk.source.path.root` and
    `Resource.disk.source.mount.root` can now be set to relative paths
    to an agent's work directory.

  * [MESOS-7660] `Filter::refuse_seconds` is now capped to 31536000
    seconds (365 days).

  * [MESOS-7941] Built-in executors will now send a TASK_STARTING
    status update when a task is starting.

  * [MESOS-7973] A new `catchup` method has been added to the
    `Log.Reader` interface (including Java binding).

  * [MESOS-8040] Return nested/standalone containers in `GET_CONTAINERS`
    API call.

  * [MESOS-8165] Master will now send TASK_GONE status for unknown
    tasks of PARTITION_AWARE frameworks belonging to registered agents
    during explicit reconciliation.

Changes to Dependencies:
  * Upgraded minimum required Protobuf library to version 3+.

Feature Graduations:
  * [MESOS-4791] - v1 Operator API is now considered stable. The performance has
    been improved so that when using protobuf it is faster than v0, and when
    using JSON it is slightly slower than v0.

  * [MESOS-5116] - Add support for accounting only mode in XFS isolator.

  * [MESOS-5275, MESOS-7476, MESOS-7477, MESOS-7671] - Add file-based and
    protobuf-based capabilities support for mesos containerizer. This
    includes the support for effective and bounding capabilities.

  * [MESOS-6077] - Added a default (task group) executor.
  * [MESOS-6402] - rlimit support for Mesos containerizer.
  * [MESOS-6460] - Container Attach/Exec.
  * [MESOS-6758] - Support docker registry that requires basic auth.
  * [MESOS-7088] - Support private registry credential per container.
  * [MESOS-7418] - Add support for file-based secrets.

Unresolved Critical Issues:
  * [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-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-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.
  * [MESOS-5995] - Protobuf JSON deserialisation does not accept numbers formated as strings.
  * [MESOS-6632] - ContainerLogger might leak FD if container launch fails.
  * [MESOS-6804] - Running 'tty' inside a debug container that has a tty reports "Not a tty".
  * [MESOS-6986] - abort in DRFSorter::add.
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed.
  * [MESOS-7566] - Master crash due to failed check in DRFSorter::remove.
  * [MESOS-7622] - Agent can crash if a HTTP executor tries to retry subscription in running state.
  * [MESOS-7721] - Master's agent removal rate limit also applies to agent unreachability.
  * [MESOS-7748] - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * [MESOS-7911] - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * [MESOS-7966] - check for maintenance on agent causes fatal error.
  * [MESOS-7991] - fatal, check failed !framework->recovered().
  * [MESOS-8038] - Launching GPU task sporadically fails.
  * [MESOS-8125] - Agent should properly handle recovering an executor when its pid is reused.
  * [MESOS-8137] - Mesos agent can hang during startup.
  * [MESOS-8256] - Libprocess can silently deadlock due to worker thread exhaustion.
  * [MESOS-8411] - Killing a queued task can lead to the command executor never terminating.
  * [MESOS-8468] - `LAUNCH_GROUP` failure tears down the default executor.

All Resolved Issues:

** Bug
  * [MESOS-1216] - Attributes comparator operator should allow multiple attributes of same name and type.
  * [MESOS-3576] - Audit CMake linking flags.
  * [MESOS-5455] - Transition away from temporary build variables.
  * [MESOS-5462] - Re-organize isolator hierarchy.
  * [MESOS-5656] - Incomplete modelling of 3rdparty dependencies in cmake build.
  * [MESOS-5881] - Semantics of `os::symlink` differ across POSIX and Windows.
  * [MESOS-5905] - Zookeeper tests do not work on CMake builds as directory structure changed.
  * [MESOS-6086] - PersistentVolumeEndpointsTest.EndpointCreateThenOfferRemove is flaky.
  * [MESOS-6187] - "double free or corruption" with Java 8.
  * [MESOS-6345] - ExamplesTest.PersistentVolumeFramework failing due to double free corruption on Ubuntu 14.04.
  * [MESOS-6406] - Send latest status for partition-aware tasks when agent reregisters.
  * [MESOS-6428] - Mesos containerizer helper function signalSafeWriteStatus is not AS-Safe.
  * [MESOS-6616] - Error: dereferencing type-punned pointer will break strict-aliasing rules.
  * [MESOS-6671] - External 3rdparty deps are not built with the configured compiler in cmake build.
  * [MESOS-6690] - Wire up resource control API to Windows Job objects API.
  * [MESOS-6697] - Port `authentication_tests.cpp`.
  * [MESOS-6703] - Port `credentials_tests.cpp`.
  * [MESOS-6705] - Port `fetcher_tests.cpp`.
  * [MESOS-6708] - Port `group_tests.cpp`.
  * [MESOS-6735] - `os::realpath` semantics differ between Windows and POSIX.
  * [MESOS-6784] - IOSwitchboardTest.KillSwitchboardContainerDestroyed is flaky.
  * [MESOS-6790] - Wrong task started time in webui.
  * [MESOS-6794] - Properly model header dependencies of cmake build components.
  * [MESOS-6816] - Allows frameworks to overwrite system environment variables.
  * [MESOS-6942] - CMake build with `-DENABLE_LIBEVENT=ON` requires system-installed `openssl`.
  * [MESOS-6949] - SchedulerTest.MasterFailover is flaky.
  * [MESOS-7007] - filesystem/shared and --default_container_info broken since 1.1.
  * [MESOS-7099] - Quota can be exceeded due to coarse-grained offer technique.
  * [MESOS-7130] - port_mapping isolator: executor hangs when running on EC2.
  * [MESOS-7160] - Parsing of perf version segfaults.
  * [MESOS-7215] - Race condition on re-registration of non-partition-aware frameworks.
  * [MESOS-7223] - Linux filesystem isolator cannot mount host volume /dev/log.
  * [MESOS-7296] - CMake 2.8.10 does not support TIMESTAMP.
  * [MESOS-7312] - Update Resource proto for storage resource providers.
  * [MESOS-7425] - ImageAlpine/ProvisionerDockerTest.ROOT_INTERNET_CURL_SimpleCommand/3 is flaky in some OS.
  * [MESOS-7440] - Various DefaultExecutorCheckTest* tests flaky on ASF CI.
  * [MESOS-7500] - Command checks via agent lead to flaky tests.
  * [MESOS-7504] - Parent's mount namespace cannot be determined when launching a nested container.
  * [MESOS-7509] - CniIsolatorPortMapperTest.ROOT_INTERNET_CURL_PortMapper fails on some Linux distros.
  * [MESOS-7511] - CniIsolatorTest.ROOT_DynamicAddDelofCniConfig is flaky.
  * [MESOS-7519] - OversubscriptionTest.RescindRevocableOfferWithIncreasedRevocable is flaky.
  * [MESOS-7541] - Cannot compile without pre-compiled headers on Windows.
  * [MESOS-7586] - Make use of cout/cerr and glog consistent.
  * [MESOS-7589] - CommandExecutorCheckTest.CommandCheckDeliveredAndReconciled is flaky.
  * [MESOS-7660] - HierarchicalAllocator uses the default filter instead of a very long one.
  * [MESOS-7661] - Libprocess timers with long durations trigger immediately.
  * [MESOS-7704] - Remove use of #pragma comment (lib, "IPHLPAPI.lib").
  * [MESOS-7726] - MasterTest.IgnoreOldAgentReregistration test is flaky.
  * [MESOS-7729] - ExamplesTest.DynamicReservationFramework is flaky.
  * [MESOS-7741] - SlaveRecoveryTest/0.MultipleSlaves has double free corruption.
  * [MESOS-7781] - Windows API GetVersionExW was declared deprecated.
  * [MESOS-7784] - MasterTestPrePostReservationRefinement.CreateAndDestroyVolumesV1 is flaky.
  * [MESOS-7791] - subprocess' childMain using ABORT when encountering user errors.
  * [MESOS-7811] - libprocess-tests depend on gtest but it's not setup.
  * [MESOS-7828] - Current approach to parse protobuf enum from JSON does not support upgrades.
  * [MESOS-7835] - CMake build does not support Marathon.
  * [MESOS-7851] - Master stores old resource format in the registry.
  * [MESOS-7867] - Master doesn't handle scheduler driver downgrade from HTTP based to PID based.
  * [MESOS-7873] - Expose `ExecutorInfo.ContainerInfo.NetworkInfo` in Mesos `state` endpoint.
  * [MESOS-7877] - Audit test code for undefined behavior in accessing container elements.
  * [MESOS-7917] - Docker statistics not reported on Windows.
  * [MESOS-7921] - ProcessManager::resume sometimes crashes accessing EventQueue.
  * [MESOS-7923] - Make args optional in mesos port mapper plugin.
  * [MESOS-7927] - The composing containerizer leaks memory in some scenarios.
  * [MESOS-7929] - `Metrics()` hangs on second call on Windows.
  * [MESOS-7945] - MasterAPITest.EventAuthorizationFiltering is flaky.
  * [MESOS-7963] - Task groups can lose the container limitation status.
  * [MESOS-7964] - Heavy-duty GC makes the agent unresponsive.
  * [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-7972] - SlaveTest.HTTPSchedulerSlaveRestart test is flaky.
  * [MESOS-7975] - The command/default/docker executor can incorrectly send a TASK_FINISHED update even when the task is killed.
  * [MESOS-7978] - Lint javascript files to enable linting.
  * [MESOS-7980] - Stout fails to compile with libc >= 2.26.
  * [MESOS-7988] - Mesos attempts to open handle for the system idle process.
  * [MESOS-7993] - Fix Windows header orderings.
  * [MESOS-7996] - ContentType/SchedulerTest.NoOffersWithAllRolesSuppressed is flaky.
  * [MESOS-7997] - ContentType/MasterAPITest.CreateAndDestroyVolumes is flaky.
  * [MESOS-7998] - PersistentVolumeEndpointsTest.UnreserveVolumeResources is flaky.
  * [MESOS-8000] - DefaultExecutorCniTest.ROOT_VerifyContainerIP is flaky.
  * [MESOS-8001] - PersistentVolumeEndpointsTest.NoAuthentication is flaky.
  * [MESOS-8003] - PersistentVolumeEndpointsTest.SlavesEndpointFullResources is flaky.
  * [MESOS-8010] - AfterTest.Loop is flaky.
  * [MESOS-8027] - os::open doesn't always atomically apply O_CLOEXEC.
  * [MESOS-8035] - Correct mesos-tests CMake build dependencies.
  * [MESOS-8039] - A broken connection during LaunchNestedContainer call might result in the nested container not being cleaned up.
  * [MESOS-8046] - MasterTestPrePostReservationRefinement.ReserveAndUnreserveResourcesV1 is flaky.
  * [MESOS-8048] - ReservationEndpointsTest.GoodReserveAndUnreserveACL is flaky.
  * [MESOS-8051] - Killing TASK_GROUP fail to kill some tasks.
  * [MESOS-8052] - "protoc" not found when running "make -j4 check" directly in stout.
  * [MESOS-8057] - Apply security patches to AngularJS and JQuery in the Mesos UI.
  * [MESOS-8058] - Agent and master can race when updating agent state.
  * [MESOS-8066] - Pylint report errors in apply-reviews.py on Ubuntu 14.04.
  * [MESOS-8070] - Bundled GRPC build does not build on Debian 8.
  * [MESOS-8076] - PersistentVolumeTest.SharedPersistentVolumeRescindOnDestroy is flaky.
  * [MESOS-8080] - The default executor does not propagate missing task exit status correctly.
  * [MESOS-8082] - updateAvailable races with a periodic allocation and leads to flaky tests.
  * [MESOS-8084] - Double free corruption in tests due to parallel manipulation of signal and control handlers.
  * [MESOS-8085] - No point in deallocate() for a framework for maintenance if it is deactivated.
  * [MESOS-8090] - Mesos 1.4.0 crashes with 1.3.x agent with oversubscription.
  * [MESOS-8093] - Some tests miss subscribed event because expectation is set after event fires.
  * [MESOS-8095] - ResourceProviderRegistrarTest.AgentRegistrar is flaky.
  * [MESOS-8116] - Fix off by-one error in Windows long path support.
  * [MESOS-8119] - ROOT_DOCKER_DockerHealthyTask segfaults in debian 8.
  * [MESOS-8121] - Unified Containerizer Auto backend should check xfs ftype for overlayfs backend.
  * [MESOS-8123] - GPU tests are failing due to TASK_STARTING.
  * [MESOS-8135] - Masters can lose track of tasks' executor IDs.
  * [MESOS-8136] - Update XFS isolator tests to handle TASK_STARTING.
  * [MESOS-8157] - Review #62775 broke the build.
  * [MESOS-8159] - ns::clone uses an async signal unsafe stack.
  * [MESOS-8165] - TASK_UNKNOWN status is ambiguous.
  * [MESOS-8169] - Incorrect master validation forces executor IDs to be globally unique.
  * [MESOS-8171] - Using a failoverTimeout of 0 with Mesos native scheduler client can result in infinite subscribe loop.
  * [MESOS-8173] - Improve fetcher exit status message.
  * [MESOS-8178] - UnreachableAgentReregisterAfterFailover is flaky.
  * [MESOS-8179] - Scheduler library has incorrect assumptions about connections.
  * [MESOS-8180] - Port mesos-fetcher to Windows.
  * [MESOS-8200] - Suppressed roles are not honoured for v1 scheduler subscribe requests.
  * [MESOS-8217] - Don't run linters on every commit.
  * [MESOS-8220] - Can't build with Visual Studio 15.5.
  * [MESOS-8223] - Master crashes when suppressed on subscribe is enabled.
  * [MESOS-8225] - Port os::which to Windows.
  * [MESOS-8237] - Strip (Offer|Resource).allocation_info for non-MULTI_ROLE schedulers.
  * [MESOS-8245] - SlaveRecoveryTest/0.ReconnectExecutor is flaky.
  * [MESOS-8249] - Support image prune in mesos containerizer and provisioner.
  * [MESOS-8263] - ResourceProviderManagerHttpApiTest.ConvertResources is flaky.
  * [MESOS-8267] - NestedMesosContainerizerTest.ROOT_CGROUPS_RecoverLauncherOrphans is flaky.
  * [MESOS-8272] - Fall back to bind mounting container devices.
  * [MESOS-8279] - Persistent volumes are not visible in Mesos UI using default executor on Linux.
  * [MESOS-8280] - Mesos Containerizer GC should set 'layers' after checkpointing layer ids in provisioner.
  * [MESOS-8282] - Take pending offer operations into account when calculating framework allocated resources.
  * [MESOS-8288] - SlaveTest.IgnoreV0ExecutorIfItReregistersWithoutReconnect is flaky.
  * [MESOS-8289] - ReservationTest.MasterFailover is flaky when run with `RESOURCE_PROVIDER` capability.
  * [MESOS-8293] - Reservation may not be allocated when the role has no quota.
  * [MESOS-8297] - Built-in driver-based executors ignore kill task if the task has not been launched.
  * [MESOS-8312] - Pass resource provider information to master as part of UpdateSlaveMessage.
  * [MESOS-8315] - ResourceProviderManagerHttpApiTest.ResubscribeResourceProvider is flaky.
  * [MESOS-8316] - Tests that fetch docker images might be flaky due to insufficient wait timeout.
  * [MESOS-8318] - OfferOperationStatusUpdateManagerTest tests fail on Windows.
  * [MESOS-8320] - Expose information about local resource providers in master.
  * [MESOS-8325] - Mesos containerizer does not properly handle old running containers.
  * [MESOS-8337] - Invalid state transition attempted when agent is lost.
  * [MESOS-8339] - Quota headroom may be insufficiently held when role has more reservation than quota.
  * [MESOS-8341] - Agent can become stuck in (re-)registering state during upgrades.
  * [MESOS-8344] - Improve JSON v1 operator API performance.
  * [MESOS-8346] - Resubscription of a resource provider will crash the agent if its HTTP connection isn't closed.
  * [MESOS-8349] - When a resource provider driver is disconnected, it fails to reconnect.
  * [MESOS-8350] - Resource provider-capable agents not correctly synchronizing checkpointed agent resources on reregistration.
  * [MESOS-8352] - Resources may get over allocated to some roles while fail to meet the quota of other roles.
  * [MESOS-8356] - Persistent volume ownership is set to root despite of sandbox owner (frameworkInfo.user) when docker executor is used.
  * [MESOS-8369] - CI build failure compiling volume_profile.proto.
  * [MESOS-8376] - Bundled GRPC does not build on Debian 9.
  * [MESOS-8377] - RecoverTest.CatchupTruncated is flaky.
  * [MESOS-8391] - Mesos agent doesn't notice that a pod task exits or crashes after the agent restart.
  * [MESOS-8393] - SLRP NewVolumeRecovery and LaunchTaskRecovery tests CHECK failures.
  * [MESOS-8410] - Reconfiguration policy fails to handle mount disk resources.
  * [MESOS-8417] - Mesos can get "stuck" when a Process throws an exception.
  * [MESOS-8419] - RP manager incorrectly setting framework ID leads to CHECK failure.
  * [MESOS-8422] - Master's UpdateSlave handler not correctly updating terminated operations.
  * [MESOS-8443] - Fix Docker Containerizer PATH on Windows so Docker is usable.
  * [MESOS-8444] - GC failure causes agent miss to detach virtual paths for the executor's sandbox.
  * [MESOS-8446] - Agent miss to detach `virtualLatestPath` for the executor's sandbox during recovery.
  * [MESOS-8460] - `Slave::detachFile` can segfault because it could use invalid Framework*.
  * [MESOS-8461] - SLRP should no assume a CSI plugin always has GetNodeID implemented.
  * [MESOS-8469] - Mesos master might drop some events in the operator API stream.
  * [MESOS-8480] - Mesos returns high resource usage when killing a Docker task.
  * [MESOS-8481] - Agent reboot during checkpointing may result in empty checkpoints.
  * [MESOS-8514] - SLRP failed to connect to CSI endpoint.

** Documentation
  * [MESOS-5078] - Document TaskStatus reasons.
  * [MESOS-7663] - Update the documentation to reflect the addition of reservation refinement.
  * [MESOS-8007] - Add documentation for MARK_AGENT_GONE call.
  * [MESOS-8303] - Add user doc for agent reconfiguration.
  * [MESOS-8304] - Update CHANGELOG to call out agent reconfiguration feature.
  * [MESOS-8310] - Document container image garbage collection.

** Epic
  * [MESOS-1739] - Allow slave reconfiguration on restart.
  * [MESOS-4945] - Garbage collect unused docker layers in the store.
  * [MESOS-7235] - Improve Storage Support using Resource Provider and CSI.
  * [MESOS-7289] - Support Container Storage Interface (CSI).
  * [MESOS-7302] - Support launching standalone containers.
  * [MESOS-7749] - Support gRPC client.

** Improvement
  * [MESOS-564] - Update Contribution Documentation.
  * [MESOS-5675] - Add support for master capabilities.
  * [MESOS-5771] - Add benchmark test for shared resources.
  * [MESOS-5902] - CMake should generate protobuf definitions for Java.
  * [MESOS-6350] - Raise minimum required cmake version.
  * [MESOS-6390] - Ensure Python support scripts are linted.
  * [MESOS-6971] - Use arena allocation to improve protobuf message passing performance.
  * [MESOS-7306] - Support mount propagation for host volumes.
  * [MESOS-7330] - Add resource provider to offer.
  * [MESOS-7361] - Command checks via agent pollute agent logs.
  * [MESOS-7370] - Fix create symlink code to use flag which enables non-admins to make symlinks.
  * [MESOS-7497] - Remove CMake anti-pattern of `set(x "${x} ..")`.
  * [MESOS-7616] - Consider supporting changes to agent's domain without full drain.
  * [MESOS-7675] - Isolate network ports.
  * [MESOS-7695] - Add heartbeats to master stream API.
  * [MESOS-7737] - Harden Mesos when building with cmake.
  * [MESOS-7785] - Pass Operator API subscription events through authorizer.
  * [MESOS-7795] - Remove "latest" symlink after agent reboot.
  * [MESOS-7798] - Improve libprocess message passing performance.
  * [MESOS-7837] - Propagate resource updates from local resource providers to master.
  * [MESOS-7840] - Add Mesos CLI command to list active tasks.
  * [MESOS-7842] - Basic sandbox GC metrics.
  * [MESOS-7861] - Include check output in the DefaultExecutor log.
  * [MESOS-7880] - Add an option to skip the Mesos style check when applying a review chain.
  * [MESOS-7889] - Avoid Multiple PROTOC invocations when generating Protobuf & GRPC code in libprocess.
  * [MESOS-7895] - ZK session timeout is unconfigurable in agent and scheduler drivers.
  * [MESOS-7916] - Improve the test coverage of the DefaultExecutor.
  * [MESOS-7924] - Add a javascript linter to the webui.
  * [MESOS-7941] - Send TASK_STARTING status from built-in executors.
  * [MESOS-7951] - Design Doc for Extended KillPolicy.
  * [MESOS-7961] - Display task health in the webui.
  * [MESOS-7962] - Display task state counters in the framework page of the webui.
  * [MESOS-7973] - Non-leading VOTING replica catch-up.
  * [MESOS-7987] - Initialize Google Mock rather than Google Test.
  * [MESOS-8012] - Support Znode paths for masters in the new CLI.
  * [MESOS-8015] - Design a scheduler (V1) HTTP API authenticatee mechanism.
  * [MESOS-8016] - Introduce modularized HTTP authenticatee.
  * [MESOS-8017] - Introduce a basic HTTP authenticatee.
  * [MESOS-8021] - Update HTTP scheduler library to allow for modularized authenticatee.
  * [MESOS-8034] - Remove LIBNAME_VERSION from EXTERNAL.
  * [MESOS-8040] - Return nested/standalone containers in `GET_CONTAINERS` API call.
  * [MESOS-8072] - Change Mesos common events verbose logs to use VLOG(2) instead of 1.
  * [MESOS-8074] - Change Libprocess actor state transitions verbose logs to use VLOG(3) instead of 2.
  * [MESOS-8078] - Some fields went missing with no replacement in api/v1.
  * [MESOS-8115] - Add a master flag to disallow agents that are not configured with fault domain.
  * [MESOS-8117] - Update Getting Started documentation.
  * [MESOS-8221] - Use protobuf reflection to simplify downgrading of resources.
  * [MESOS-8286] - Making bind mounts readonly fails with user namespaces.
  * [MESOS-8294] - Support container image basic auto gc.
  * [MESOS-8295] - Add excluded image parameter to containerizer::pruneImages() interface.
  * [MESOS-8301] - Support moving into defer/dispatch/install handlers.
  * [MESOS-8302] - Improve master failover performance.
  * [MESOS-8328] - Improve logs displayed after a slave failed recovery.
  * [MESOS-8358] - Create agent endpoints for pruning images.
  * [MESOS-8365] - Create AuthN support for prune images API.
  * [MESOS-8421] - Duration operators drop precision, even when used with integers.
  * [MESOS-8455] - Avoid unnecessary copying of protobuf in the v1 API.

** Task
  * [MESOS-3107] - Define CMake style guide.
  * [MESOS-3110] - Harden the CMake system-dependency-locating routines.
  * [MESOS-3384] - Include libsasl in Windows CMake build.
  * [MESOS-3437] - Port flags_tests.
  * [MESOS-4527] - Roles can exceed limit allocation via reservations.
  * [MESOS-6193] - Make the docker/volume isolator nesting aware.
  * [MESOS-6709] - Enable HTTP and TCP health checks on Windows.
  * [MESOS-6714] - Port `slave_tests.cpp`.
  * [MESOS-6733] - Windows: Enable authentication to the master.
  * [MESOS-6894] - Checkpoint 'ContainerConfig' in Mesos Containerizer.
  * [MESOS-7284] - Allow Mesos CLI to take masters IP.
  * [MESOS-7285] - Implement a plugin to list container's on a given agent.
  * [MESOS-7303] - Support Isolator capabilities.
  * [MESOS-7305] - Adjust the recover logic of MesosContainerizer to allow standalone containers.
  * [MESOS-7328] - Validate offer operations for converting disk resources.
  * [MESOS-7388] - Update allocator interfaces to support resource providers.
  * [MESOS-7443] - Add the MARK_AGENT_GONE call to the Operator v1 API protos.
  * [MESOS-7444] - Add support for storing gone agents to the master registry.
  * [MESOS-7445] - Implement the API handler on the master for marking agents as gone.
  * [MESOS-7446] - Add authorization for the MARK_AGENT_GONE call.
  * [MESOS-7448] - Add support for pruning the list of gone agents in the registry.
  * [MESOS-7469] - Add resource provider driver.
  * [MESOS-7491] - Build a CSI client to talk to a CSI plugin.
  * [MESOS-7533] - Add a function stub for resource provider re-registration.
  * [MESOS-7534] - Notify resource providers if they've been reregistered.
  * [MESOS-7535] - Distinguish between active and inactive resource providers in RP Manager.
  * [MESOS-7550] - Publish Local Resource Provider resources in the agent before container launch or update.
  * [MESOS-7555] - Add resource provider IDs to the registry.
  * [MESOS-7557] - Test that resource providers can reregister after agent fails over.
  * [MESOS-7561] - Add storage resource provider specific information in ResourceProviderInfo.
  * [MESOS-7578] - Write a proposal to make the I/O Switchboards optional.
  * [MESOS-7594] - Implement 'apply' for resource provider related operations.
  * [MESOS-7757] - Update master to handle updates to agent total resources.
  * [MESOS-7790] - Design hierarchical quota allocation.
  * [MESOS-7807] - Docker executor needs to return multiple IP addresses for the container.
  * [MESOS-7892] - Filter results of `/state` on agent by role.
  * [MESOS-7899] - Expose sandboxes using virtual paths and hide the agent work directory.
  * [MESOS-7936] - Move sandbox path volume logic to 'volume/sandbox_path' isolator.
  * [MESOS-7982] - Create Centos 6/7 RPM package.
  * [MESOS-7985] - Use ASF CI for automating RPM packaging and upload to bintray.
  * [MESOS-7992] - Enable OpenSSL build on Windows.
  * [MESOS-8013] - Add test for blkio statistics.
  * [MESOS-8032] - Launch CSI plugins in storage local resource provider.
  * [MESOS-8050] - Mesos HTTP/HTTPS health checks for IPv6 docker containers.
  * [MESOS-8060] - Introduce first class 'profile' for disk resources.
  * [MESOS-8071] - Add agent capability for resource provider.
  * [MESOS-8075] - Add ReadWriteLock to libprocess.
  * [MESOS-8079] - Checkpoint and recover layers used to provision rootfs in provisioner.
  * [MESOS-8086] - Update ACCEPT call handler in master for new operations.
  * [MESOS-8087] - Add operation status update handler in Master.
  * [MESOS-8088] - Introduce Lamport timestamp for offer operations.
  * [MESOS-8089] - Add messages to publish resources on a resource provider.
  * [MESOS-8097] - Add filesystem layout for local resource providers.
  * [MESOS-8098] - Benchmark Master failover performance.
  * [MESOS-8099] - Add protobuf for checkpointing resource provider states.
  * [MESOS-8100] - Authorize standalone container calls from local resource providers.
  * [MESOS-8101] - Import resources from CSI plugins in storage local resource provider.
  * [MESOS-8102] - Add a test CSI plugin for storage local resource provider.
  * [MESOS-8107] - Add a call to update total resources in the resource provider API.
  * [MESOS-8108] - Process offer operations in storage local resource provider.
  * [MESOS-8130] - Add placeholder handlers for offer operation feedback.
  * [MESOS-8131] - Add new protobuf messages for offer operation feedback.
  * [MESOS-8132] - Design a library to send offer operation status updates.
  * [MESOS-8139] - Upgrade protobuf to 3.5.x.
  * [MESOS-8141] - Add filesystem layout for storage resource providers.
  * [MESOS-8143] - Publish and unpublish storage local resources through CSI plugins.
  * [MESOS-8181] - Add tests that a failed offer operation on resource provider resources leads to a clock update.
  * [MESOS-8183] - Add a container daemon to monitor a long-running standalone container.
  * [MESOS-8186] - Implement the agent's AcknowledgeOfferOperationMessage handler.
  * [MESOS-8187] - Enable LRP to send operation status updates, checkpoint, and retry using the SUM.
  * [MESOS-8193] - Update master’s OfferOperationStatusUpdate handler to acknowledge updates to the agent if OfferOperationID is not set.
  * [MESOS-8195] - Implement explicit offer operation reconciliation between the master, agent and RPs.
  * [MESOS-8196] - Propagate failures from applying offer operations from resource providers.
  * [MESOS-8197] - Implement a library to send offer operation status updates.
  * [MESOS-8198] - Update the ReconcileOfferOperations protos.
  * [MESOS-8199] - Add plumbing for explicit offer operation reconciliation between master, agent, and RPs.
  * [MESOS-8207] - Reconcile offer operations between resource providers, agents, and master.
  * [MESOS-8211] - Handle agent local resources in offer operation handler.
  * [MESOS-8218] - Support `RESERVE`/`CREATE` operations with resource providers.
  * [MESOS-8222] - Add resource versions to RunTaskMessage.
  * [MESOS-8244] - Add operator API to reload local resource providers.
  * [MESOS-8251] - Introduce a way to resolve the "profile" for disk resources.
  * [MESOS-8265] - Add state recovery for storage local resource provider.
  * [MESOS-8269] - Support resource provider re-subscription in the resource provider manager.
  * [MESOS-8270] - Add an agent endpoint to list all active resource providers.
  * [MESOS-8309] - Introduce a UUID message type.
  * [MESOS-8375] - Use protobuf reflection to simplify upgrading of resources.
  * [MESOS-8394] - Bump CSI to 0.1.0.


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

** Bug
  * [MESOS-4527] - Roles can exceed limit allocation via reservations.
  * [MESOS-6616] - Error: dereferencing type-punned pointer will break strict-aliasing rules.
  * [MESOS-7099] - Quota can be exceeded due to coarse-grained offer technique.
  * [MESOS-7504] - Parent's mount namespace cannot be determined when launching a nested container.
  * [MESOS-7975] - The command/default/docker executor can incorrectly send a TASK_FINISHED update even when the task is killed.
  * [MESOS-8106] - Docker fetcher plugin unsupported scheme failure message is not accurate.
  * [MESOS-8125] - Agent should properly handle recovering an executor when its pid is reused.
  * [MESOS-8159] - ns::clone uses an async signal unsafe stack.
  * [MESOS-8171] - Using a failoverTimeout of 0 with Mesos native scheduler client can result in infinite subscribe loop.
  * [MESOS-8237] - Strip (Offer|Resource).allocation_info for non-MULTI_ROLE schedulers.
  * [MESOS-8253] - Mesos CI docker rmi conflict.
  * [MESOS-8293] - Reservation may not be allocated when the role has no quota.
  * [MESOS-8297] - Built-in driver-based executors ignore kill task if the task has not been launched.
  * [MESOS-8339] - Quota headroom may be insufficiently held when role has more reservation than quota.
  * [MESOS-8352] - Resources may get over allocated to some roles while fail to meet the quota of other roles.
  * [MESOS-8356] - Persistent volume ownership is set to root despite of sandbox owner (frameworkInfo.user) when docker executor is used.
  * [MESOS-8411] - Killing a queued task can lead to the command executor never terminating.
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads.
  * [MESOS-8480] - Mesos returns high resource usage when killing a Docker task.
  * [MESOS-8488] - Docker bug can cause unkillable tasks.
  * [MESOS-8550] - Bug in `Master::detected()` leads to coredump in `MasterZooKeeperTest.MasterInfoAddress`.
  * [MESOS-8552] - CGROUPS_ROOT_PidNamespaceForward and CGROUPS_ROOT_PidNamespaceBackward tests fail.
  * [MESOS-8569] - Allow newline characters when decoding base64 strings in stout.
  * [MESOS-8573] - Container stuck in PULLING when Docker daemon hangs
  * [MESOS-8574] - Docker executor makes no progress when 'docker inspect' hangs.
  * [MESOS-8575] - Improve discard handling for 'Docker::stop' and 'Docker::pull'.
  * [MESOS-8576] - Improve discard handling of 'Docker::inspect()'.
  * [MESOS-8604] - Quota headroom tracking may be incorrect in the presence of hierarchical reservation.
  * [MESOS-8605] - Terminal task status update will not send if 'docker inspect' is hung.
  * [MESOS-8626] - The 'allocatable' check in the allocator is problematic with multi-role frameworks.
  * [MESOS-8651] - Potential memory leaks in the `volume/sandbox_path` isolator.
  * [MESOS-8786] - CgroupIsolatorProcess accesses subsystem processes directly.
  * [MESOS-8830] - Agent gc on old slave sandboxes could empty persistent volume data
  * [MESOS-8871] - Agent may fail to recover if the agent dies before image store cache checkpointed.
  * [MESOS-8876] - Normal exit of Docker container using rexray volume results in TASK_FAILED.
  * [MESOS-8881] - Enable epoll backend in libevent integration.
  * [MESOS-8885] - Disable libevent debug mode.
  * [MESOS-8904] - Master crash when removing quota.
  * [MESOS-8934] - Update python.m4 to support Python 3.
  * [MESOS-8935] - Quota limit "chopping" can lead to cpu-only and memory-only offers.
  * [MESOS-8936] - Implement a Random Sorter for offer allocations.
  * [MESOS-8942] - Master streaming API does not send (health) check updates for tasks.
  * [MESOS-8945] - Master check failure due to CHECK_SOME(providerId).
  * [MESOS-8947] - Improve the container preparing logging in IOSwitchboard and volume/secret isolator.
  * [MESOS-8952] - process::await/collect n^2 performance issue.
  * [MESOS-8963] - Executor crash trying to print container ID.
  * [MESOS-8980] - mesos-slave can deadlock with docker pull.
  * [MESOS-8986] - `slave.available()` in the allocator is expensive and drags down allocation performance.
  * [MESOS-8987] - Master asks agent to shutdown upon auth errors.
  * [MESOS-9049] - Agent GC could unmount a dangling persistent volume multiple times.
  * [MESOS-9088] - `createStrippedScalarQuantity()` should clear all metadata fields.
  * [MESOS-9125] - Port mapper CNI plugin might fail with "Resource temporarily unavailable"
  * [MESOS-9127] - Port mapper CNI plugin might deadlock iptables on the agent.


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

** Bug
  * [MESOS-7873] - Expose `ExecutorInfo.ContainerInfo.NetworkInfo` in Mesos `state` endpoint.
  * [MESOS-7921] - ProcessManager::resume sometimes crashes accessing EventQueue.
  * [MESOS-7964] - Heavy-duty GC makes the agent unresponsive.
  * [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-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-8090] - Mesos 1.4.0 crashes with 1.3.x agent with oversubscription
  * [MESOS-8135] - Masters can lose track of tasks' executor IDs.
  * [MESOS-8169] - Incorrect master validation forces executor IDs to be globally unique.


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

  * [MESOS-5116] - The `disk/xfs` isolator now supports the
    `--enforce_container_disk_quota` flag to efficiently measure disk
    usage without enforcing usage constraints.

  * [MESOS-6223] - Agents are now allowed to recover the agent ID
    after a host reboot. See docs/upgrades.md for details.

  * [MESOS-6375] - **Experimental** Support for hierarchical resource
    allocation roles. Hierarchical roles allows delegation of resource
    allocation policies (i.e. fair sharing and quota) further down the
    hierarchy. For example, the "engineering" organization gets a 75%
    share of the resources, but it's up to the operators within the
    "engineering" organization to figure out how to fairly share between
    the "engineering/backend" team and the "engineering/frontend" team.
    The same delegation applies for quota. NOTE: There are known issues
    related to hierarchical roles (e.g. hierarchical quota allocation
    is not implemented and quota will be over-allocated if used with
    hierarchical roles, see: MESOS-7402) and thus it is not recommended
    for production usage at this time.

  * [MESOS-7418, MESOS-7088] - File-based secrets are now supported for Mesos
    and Universal containerizer. Image-pull secrets are supported for Docker
    registry credentials.

  * [MESOS-7477] - Linux ambient capabilites are now supported, so
    frameworks can run tasks that use ambient capabilites to grant
    limited additional privileged to tasks.

  * [MESOS-7476, MESOS-7671] - Support for frameworks and operators
    specifying Linux bounding capabilities in order to limit the
    maximum privileges that a task may acquire.

Deprecations/Removals:
  * [MESOS-7671] - LinuxInfo.capabilities is deprecated in favor
    of LinuxInfo.effective_capabilities.

  * [MESOS-7477] - The agent `--allowed_capabilities` flag is
    deprecated in favor of `--effective_capabilities`

Unresolved Critical Issues:
  * [MESOS-7643] - The order of isolators provided in '--isolation' flag is not preserved and instead sorted alphabetically
  * [MESOS-7402] - Quota is over-allocated when used with hierarchical roles.

Additional API Changes:
  * [MESOS-7755] The interpretation of the optional resource argument
    passed in `Allocator::updateSlave` was changed from the total
    amount of oversubscribed resources on the agent to the new total
    resources (both revocable and non-revocable) on the agent. Custom
    allocator implementation should be changed to interpretation of the
    passed value as a total before updating.

Feature Graduations:
  * [MESOS-2533] - Support HTTP checks in Mesos.
  * [MESOS-3567] - Support TCP checks in Mesos.

All Resolved Issues:

** Bug
  * [MESOS-1987] - Add support for SemVer build and prerelease labels to stout.
  * [MESOS-4210] - Investigate increasing protobuf protocol message size limit.
  * [MESOS-4331] - git commit-msg hook completely breaks fixup commits.
  * [MESOS-4467] - Implement `sleep` in Windows
  * [MESOS-4983] - Segfault in ProcessTest.Spawn with GCC 6
  * [MESOS-4992] - sandbox uri does not work outisde mesos http server
  * [MESOS-5187] - The filesystem/linux isolator does not set the permissions of the host_path.
  * [MESOS-5903] - `GTEST_IS_THREADSAFE` guards prevent many tests from being run on Windows.
  * [MESOS-5937] - `flags::parse` assumes the filesystem is rooted at '/'
  * [MESOS-5938] - `net::links` is not implemented on Windows.
  * [MESOS-6115] - Source tree contains compiled protobuf source
  * [MESOS-6539] - Compile warning in GMock: "binding dereferenced null pointer to reference"
  * [MESOS-6743] - Docker executor hangs forever if `docker stop` fails.
  * [MESOS-6814] - Make sure compilation configuration is propagated correctly to third party dependencies
  * [MESOS-6817] - Audit the use of UNICODE-related code paths
  * [MESOS-6916] - Improve health checks validation.
  * [MESOS-6950] - Launching two tasks with the same Docker image simultaneously may cause a staging dir never cleaned up
  * [MESOS-6961] - Executors don't use glog for logging.
  * [MESOS-7017] - HTTP API responses can crash the master.
  * [MESOS-7115] - Agent should prefer LOG(FATAL) over EXIT().
  * [MESOS-7173] - CMake does not define `GIT_SHA` etc. in build.cpp
  * [MESOS-7186] - Metrics about used/allocated shared resources are incorrect accounted.
  * [MESOS-7193] - Use of `GTEST_IS_THREADSAFE` in asserts is problematic.
  * [MESOS-7252] - Need to fix resource check in long-lived framework
  * [MESOS-7268] - CNI isolator should mount network related /etc/* files in readonly mode
  * [MESOS-7351] - CMake < 3.8.0 cannot find VS2017 tools
  * [MESOS-7373] - Remove thread_local workaround on OSX
  * [MESOS-7374] - Running DOCKER images in Mesos Container Runtime without `linux/filesystem` isolation enabled renders host unusable
  * [MESOS-7378] - Build failure with glibc 2.12.
  * [MESOS-7381] - Flaky tests in NestedMesosContainerizerTest
  * [MESOS-7389] - Mesos 1.2.0 crashes with pre-1.0 Mesos agents.
  * [MESOS-7403] - Resources::apply(const Offer::Operation&) should fail when a shared persistent volume can't be removed
  * [MESOS-7441] - RegisterSlaveValidationTest.DropInvalidRegistration is flaky
  * [MESOS-7457] - HierarchicalAllocatorTest.NestedRoleQuota is flaky
  * [MESOS-7458] - webui display of framework resources is confusing
  * [MESOS-7459] - Fix the duration.hpp warning
  * [MESOS-7462] - Flaky test HierarchicalAllocatorTest.NestedRoleDRF
  * [MESOS-7464] - Recent Docker versions cannot be parsed by stout.
  * [MESOS-7468] - Could not copy the sandbox path on WebUI
  * [MESOS-7471] - Provisioner recover should not always assume 'rootfses' dir exists.
  * [MESOS-7476] - Restrict capabilities to only the bounding set.
  * [MESOS-7484] - VersionTest.ParseInvalid aborts on Windows.
  * [MESOS-7496] - The /debug:fastlink linker option is not being respected
  * [MESOS-7498] - Remove need to set environment variable `PreferredToolArchitecture`
  * [MESOS-7502] - Build error on Windows when using "int" for a file descriptor
  * [MESOS-7507] - Add a metric for the network size of replicas for the registry.
  * [MESOS-7515] - MasterAllocatorTest/0.ResourcesUnused is flaky
  * [MESOS-7524] - Basic fetcher success metrics
  * [MESOS-7545] - Volume secret isolator breaks Windows build
  * [MESOS-7552] - MasterAllocatorTest/0.FrameworkExited is flaky
  * [MESOS-7569] - Allow "old" executors with half-open connections to be preserved during agent upgrade / restart.
  * [MESOS-7581] - Specifying an unbundled dependency can cause build to pick up wrong Boost version
  * [MESOS-7584] - ASF Jenkins build errors out on missing 'python-six' dependency
  * [MESOS-7597] - libprocess build is broken
  * [MESOS-7618] - CMake files incompatible with multi-configuration generators
  * [MESOS-7627] - Mesos slave stucks
  * [MESOS-7638] - The command `false` does not exist on Windows
  * [MESOS-7640] - Docker containerizer fails to set sandbox logs ownership correctly.
  * [MESOS-7652] - Docker image with universal containerizer does not work if WORKDIR is missing in the rootfs.
  * [MESOS-7655] - Reservation Refinement: Update the resources logic.
  * [MESOS-7662] - Documentation regarding TASK_LOST is misleading
  * [MESOS-7666] - Update the agent to use the new resource format
  * [MESOS-7667] - Update the master to use the new resource format.
  * [MESOS-7669] - Update the test utilities to produce the resources in the new format
  * [MESOS-7671] - Let frameworks specify the task bounding capabilities.
  * [MESOS-7674] - Update the generic Protobuf to JSON facility to not output deprecated fields
  * [MESOS-7679] - V1 Operator API update for reservation refinement.
  * [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-7700] - Prevent reserve/create operations with refined reservations on non-capable agents.
  * [MESOS-7703] - Mesos fails to exec a custom executor when no shell is used
  * [MESOS-7711] - Master updates registry for reregistering agents even when they haven't been unreachable
  * [MESOS-7714] - Fix agent downgrade for reservation refinement
  * [MESOS-7716] - Mesos 1.2.0 agent crashes Mesos 1.4.0 master
  * [MESOS-7725] - PersistentVolumeEndpointsTest.ReserveAndSlaveRemoval test is flaky
  * [MESOS-7728] - Java HTTP adapter crashes JVM when leading master disconnects.
  * [MESOS-7735] - The master crashes when state endpoint is hit during a task authorization.
  * [MESOS-7744] - Mesos Agent Sends TASK_KILL status update to Master, and still launches task
  * [MESOS-7751] - Mesos failed to build on Windows due to error C2039: 'parse': is not a member of 'mesos::internal::protobuf'
  * [MESOS-7753] - `log.LearnedMessage` could be rejected due to being sent from '@0.0.0.0:0'
  * [MESOS-7758] - Stout doesn't build standalone.
  * [MESOS-7761] - Website ruby deps do not bundle on macOS
  * [MESOS-7765] - MasterTest.KillUnknownTask is failling due to a bug in `net::IPv4::ANY()`
  * [MESOS-7769] - libprocess initializes to bind to random port if --ip is not specified
  * [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-7772] - Copy-n-paste error in slave/main.cpp
  * [MESOS-7775] - Eliminate extra process abort in a subprocess watchdog
  * [MESOS-7777] - Agent failed to recover due to mount namespace leakage in Docker 1.12/1.13
  * [MESOS-7778] - Hide per-platform subprocess headers.
  * [MESOS-7783] - Framework might not receive status update when a just launched task is killed immediately
  * [MESOS-7794] - Mesos failed with error c2102 when build in conformance mode (/permissive-)
  * [MESOS-7796] - LIBPROCESS_IP isn't passed on to the fetcher
  * [MESOS-7797] - Hard-coded forward slash breaks windows docker container task in DC/OS
  * [MESOS-7805] - mesos-execute has incorrect example TaskInfo in help string
  * [MESOS-7817] - CreateProcess wrapper's error message is bad
  * [MESOS-7821] - Resource refinement does downgrade task.executor.resources in LAUNCH_GROUP handler.
  * [MESOS-7830] - Sandbox_path volume does not have ownership set correctly.
  * [MESOS-7831] - Resource refinement is not applied to tasks in completed_frameworks.
  * [MESOS-7849] - The rlimits and linux/capabilities isolators should support nested containers
  * [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-7869] - Build fails with `--disable-zlib` or `--with-zlib=DIR`
  * [MESOS-7871] - Agent fails assertion during request to '/state'
  * [MESOS-7872] - Scheduler hang when registration fails.
  * [MESOS-7888] - Track fetcher task success and failures
  * [MESOS-7909] - Ordering dependency between 'linux/capabilities' and 'docker/runtime' isolator.
  * [MESOS-7912] - Master WebUI not working in Chrome.
  * [MESOS-7921] - process::EventQueue sometimes crashes
  * [MESOS-7922] - Fix communication between old masters and new agents.
  * [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.

** Documentation
  * [MESOS-7246] - Add documentation for AGENT_ADDED/AGENT_REMOVED events.
  * [MESOS-7349] - Document Mesos "check" feature.
  * [MESOS-7501] - Change legacy --with-network-isolator to --with-port-mapping-isolator

** Epic
  * [MESOS-6975] - Prevent pre-1.0 agents from registering with 1.3+ master.
  * [MESOS-7088] - Support private registry credential per container.
  * [MESOS-7623] - Automatically publish website through CI

** Improvement
  * [MESOS-5116] - Add support for accounting only mode in XFS isolator.
  * [MESOS-5417] - define WSTRINGIFY behaviour on Windows
  * [MESOS-6053] - Combine test helpers into one single binary.
  * [MESOS-6223] - Allow agents to reregister post a host reboot
  * [MESOS-6535] - The default executor should support kill policies
  * [MESOS-6549] - Asynchronous dir removal in agent GC
  * [MESOS-6782] - Inherit Environment from parent container when launching DEBUG container.
  * [MESOS-6905] - Task status updates caused by task health update do not set appropriate reason.
  * [MESOS-6976] - Disallow (re-)registration attempts by old agents.
  * [MESOS-6977] - Cleanup tech debt in master for old agents
  * [MESOS-6978] - Update webui to remove orphan tasks
  * [MESOS-7006] - Launch docker containers with --cpus instead of cpu-shares
  * [MESOS-7015] - Frameworks should be able to (re)register in suppressed state
  * [MESOS-7092] - Health checker duplicates a lot of checker's functionality.
  * [MESOS-7228] - Upgrade Mesos to build with proto3.
  * [MESOS-7327] - Add a test with multiple tasks and checks for the default executor.
  * [MESOS-7343] - Add a ReviewBot for testing patches on Windows
  * [MESOS-7355] - Set MESOS_SANDBOX in debug containers.
  * [MESOS-7364] - Upgrade vendored GMock / GTest
  * [MESOS-7401] - Optionally reject messages when UPIDs does not match IP.
  * [MESOS-7418] - Add support for file-based secrets
  * [MESOS-7429] - Allow isolators to inject task-specific environment variables.
  * [MESOS-7451] - Expose MOUNT volumes of an agent in master's v0 HTTP API
  * [MESOS-7477] - Support ambient capabilities.
  * [MESOS-7540] - Add an agent flag for executor re-registration timeout.
  * [MESOS-7542] - Add executor reconnection retry logic to the agent
  * [MESOS-7572] - Attach latest symlink when executor is registered.
  * [MESOS-7585] - Added 'mesos config show' command to the new Mesos CLI.
  * [MESOS-7608] - Protobuf definitions for domains
  * [MESOS-7609] - Protobuf definitions for region-aware framework capability
  * [MESOS-7610] - Support domains in master and agent
  * [MESOS-7611] - Prevent master from joining mixed-region cluster
  * [MESOS-7612] - Prevent agent with misconfigured domain from registering
  * [MESOS-7614] - Only offer resources on remote agents to region-aware frameworks
  * [MESOS-7630] - Add simple filtering to unversioned operator API
  * [MESOS-7644] - Add DomainInfo to offers
  * [MESOS-7782] - Add fetcher cache size metrics.
  * [MESOS-7792] - Add support for ECDH ciphers
  * [MESOS-7808] - Bundling gRPC into 3rdparty
  * [MESOS-7809] - Building gRPC with Autotools
  * [MESOS-7810] - gRPC support in libprocess
  * [MESOS-7814] - Improve the test frameworks.
  * [MESOS-7862] - Get rid of timestamp and date in generated javadoc files
  * [MESOS-7870] - Refactor libssl and libcrypto checks for building gRPC
  * [MESOS-7881] - Building gRPC with CMake

** Task
  * [MESOS-6101] - Add Framwork events to master's operator API
  * [MESOS-6162] - Add support for cgroups blkio subsystem blkio statistics.
  * [MESOS-6441] - Display reservations in the agent page in the webui.
  * [MESOS-7149] - Support reservations for role subtrees
  * [MESOS-7283] - Add ability to initialize a test cluster for Mesos CLI unit-test infrastructure
  * [MESOS-7304] - Fetcher should not depend on SlaveID.
  * [MESOS-7315] - Design doc for resource provider and storage integration.
  * [MESOS-7414] - Enable authorization for master's logging API calls: GET_LOGGING_LEVEL  and SET_LOGGING_LEVEL
  * [MESOS-7415] - Add authorization to master's operator maintenance API in v0 and v1
  * [MESOS-7416] - Filter results of `/master/slaves` and the v1 call GET_AGENTS
  * [MESOS-7417] - Design doc for file-based secrets.
  * [MESOS-7433] - Set working directory in DEBUG containers.
  * [MESOS-7449] - Refactor containerizers to not depend on TaskInfo or ExecutorInfo
  * [MESOS-7488] - Add `--ip6` and `--ip6_discovery_command` flag to Mesos agent
  * [MESOS-7505] - Enable hierarchical roles
  * [MESOS-7560] - Add 'type' and 'name' to ResourceProviderInfo.
  * [MESOS-7571] - Add `--resource_provider_config_dir` flag to the agent.
  * [MESOS-7576] - Add master flag `--filter-gpu-resources={true|false}`
  * [MESOS-7582] - Add Config class to manage the Mesos CLI config file.
  * [MESOS-7591] - Update master to use resource provider IDs instead of agent ID in allocator calls.
  * [MESOS-7593] - Update offer handling in the master to consider local resource providers
  * [MESOS-7624] - Move website from svn to git
  * [MESOS-7625] - Create script to automate publishing website
  * [MESOS-7626] - Create a CI job to publish the website
  * [MESOS-7631] - DefautlExecutor needs to inform tasks about IP addresses
  * [MESOS-7632] - Add `HIERARCHICAL_ROLE` agent capability
  * [MESOS-7633] - Prevent hierarchical roles from being allocated resources from non-HIERARCHICAL_ROLE agents.
  * [MESOS-7665] - V0 Operator API update for reservation refinement.
  * [MESOS-7668] - Update authorization to handle reservation refinement.
  * [MESOS-7696] - Update resource provider design in the master
  * [MESOS-7709] - Add --default_container_dns flag to the agent.
  * [MESOS-7713] - Optimize number of copies made in dispatch/defer mechanism
  * [MESOS-7755] - Update allocator to support updating agent total resources
  * [MESOS-7757] - Update master to handle updates to agent total resources
  * [MESOS-7767] - Make `net::IP` fields protected to allow for inheritance
  * [MESOS-7780] - Add `SUBSCRIBE` call handling to the resource provider manager
  * [MESOS-7806] - Add copy assignment operator to `net::IP::Network`
  * [MESOS-7853] - Support shared PID namespace.
  * [MESOS-7879] - The kill nested container call should provide ability to specify a signal.


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

All Issues:
** Bug
  * [MESOS-8125] - Agent should properly handle recovering an executor when its pid is reused.
  * [MESOS-8171] - Using a failoverTimeout of 0 with Mesos native scheduler client can result in infinite subscribe loop.
  * [MESOS-8411] - Killing a queued task can lead to the command executor never terminating.
  * [MESOS-8480] - Mesos returns high resource usage when killing a Docker task.
  * [MESOS-8488] - Docker bug can cause unkillable tasks.
  * [MESOS-8552] - CGROUPS_ROOT_PidNamespaceForward and CGROUPS_ROOT_PidNamespaceBackward tests fail.
  * [MESOS-8574] - Docker executor makes no progress when 'docker inspect' hangs.
  * [MESOS-8575] - Improve discard handling for 'Docker::stop' and 'Docker::pull'.
  * [MESOS-8576] - Improve discard handling of 'Docker::inspect()'.
  * [MESOS-8605] - Terminal task status update will not send if 'docker inspect' is hung.
  * [MESOS-8651] - Potential memory leaks in the `volume/sandbox_path` isolator.
  * [MESOS-8786] - CgroupIsolatorProcess accesses subsystem processes directly.
  * [MESOS-8876] - Normal exit of Docker container using rexray volume results in TASK_FAILED.
  * [MESOS-8881] - Enable epoll backend in libevent integration.
  * [MESOS-8885] - Disable libevent debug mode.
  * [MESOS-8904] - Master crash when removing quota.


Release Notes - Mesos - Version 1.3.2
-------------------------------------
* 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-7652] - Docker image with universal containerizer does not work if WORKDIR is missing in the rootfs.
  * [MESOS-7674] - Update the generic Protobuf to JSON facility to not output deprecated fields.
  * [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-7912] - Master WebUI not working in Chrome.
  * [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-8135] - Masters can lose track of tasks' executor IDs.
  * [MESOS-8237] - Strip (Offer|Resource).allocation_info for non-MULTI_ROLE schedulers.
  * [MESOS-8356] - Persistent volume ownership is set to root despite of sandbox owner (frameworkInfo.user) when docker executor is used.


Release Notes - Mesos - Version 1.3.1
-------------------------------------
* 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-7429] - Allow isolators to inject task-specific environment variables.
  * [MESOS-7540] - Add an agent flag for executor re-registration timeout.
  * [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-7692] - Default environment variables defined in Docker image are not available in Mesos containerizer.
  * [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.


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

  * [MESOS-1763] - Support for frameworks to receive resources for multiple
    roles. This allows "multi-user" frameworks to leverage the role-based
    resource allocation in mesos. Prior to this support, one had to run
    multiple instances of a single-user framework to achieve multi-user
    resource allocation, or implement multi-user resource allocation in
    the framework.

  * [MESOS-6365] - Authentication and authorization support for HTTP executors.
    A new `--authenticate_http_executors` agent flag enables required
    authentication on the HTTP executor API. A new `--executor_secret_key` flag
    sets a key file to be used when generating and authenticating default tokens
    that are passed to HTTP executors. Note that enabling these flags after
    upgrade is disruptive to HTTP executors that were launched before the
    upgrade; see 'docs/authentication.md' for more information on these flags
    and the recommended upgrade procedure. Implicit authorization rules have
    been added which allow an authenticated executor to make executor API calls
    as that executor and make operator API calls which affect that executor's
    container. See 'docs/authorization.md' for more information on these
    implicit authorization rules.

  * [MESOS-6627] - Support for frameworks to modify the role(s) they are
    subscribed to. This is essential to supporting "multi-user" frameworks
    (see MESOS-1763) in that roles are expected to come and go over time
    (e.g. new employees join, new teams are formed, employees leave, teams
    are disbanded, etc).

**NOTE**: In Mesos 1.3.0, 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.

Deprecations/Removals:
  * [MESOS-7259] - Remove deprecated ACLs `SetQuota` and `RemoveQuota`.
    This change is only applicable to the local authorizer since internally
    these acls were being translated to the `UPDATE_QUOTA` action.

  * [MESOS-7320] - Remove deprecated ACL `ShutdownFramework`.
    This change is only applicable to the local authorizer since internally
    these acls were being translated to the `TEARDOWN_FRAMEWORK` action.

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-5995] - Protobuf JSON deserialisation does not accept numbers formated as strings.
  * [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-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-7082] - ROOT_DOCKER_DockerAndMesosContainerizers/DefaultExecutorTest.KillTask/0 is flaky.
  * [MESOS-7099] - Quota can be exceeded due to coarse-grained offer technique.
  * [MESOS-7215] - Race condition on re-registration of non-partition-aware frameworks.
  * [MESOS-7298] - Fetcher caches files with world-readable permissions.
  * [MESOS-7362] - GPU support can't work when run spark.
  * [MESOS-7374] - Running DOCKER images in Mesos Container Runtime without `linux/filesystem` isolation enabled renders host unusable.
  * [MESOS-7381] - Flaky tests in NestedMesosContainerizerTest.
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed.

Feature Graduations:
  * [MESOS-2449] - Support group of tasks (Pod) constructs and API in Mesos.
  * [MESOS-4641] - Support Container Network Interface (CNI).
  * [MESOS-6419] - Teardown unregistered frameworks.

All Experimental Features:
  * [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-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] - Support auto backend in Mesos Containerizer.
  * [MESOS-6014] - Added port mapping CNI plugin.
  * [MESOS-6077] - Added a default (task group) executor.
  * [MESOS-6402] - rlimit support for Mesos containerizer.
  * [MESOS-6460] - Container Attach/Exec.
  * [MESOS-6758] - Support docker registry that requires basic auth.
  * [MESOS-6906] - Introduce a general non-interpreting task check.

All Resolved Issues:

** Bug
  * [MESOS-1987] - Add support for SemVer build and prerelease labels to stout.
  * [MESOS-4245] - Add `dist` target to CMake solution.
  * [MESOS-4263] - Report volume usage through ResourceStatistics.
  * [MESOS-5028] - Copy provisioner cannot replace directory with symlink.
  * [MESOS-5172] - Registry puller cannot fetch blobs correctly from http Redirect 3xx urls.
  * [MESOS-5288] - Update leveldb patch file to suport s390x.
  * [MESOS-5880] - Semantics of `environment` differ across Windows and POSIX.
  * [MESOS-6134] - Port CFS quota support to Docker Containerizer using command executor.
  * [MESOS-6138] - Add 'syntax=proto2' to all .proto files in Mesos.
  * [MESOS-6327] - Large docker images causes container launch failures: Too many levels of symbolic links.
  * [MESOS-6560] - The default stout stringify always copies its argument.
  * [MESOS-6606] - Reject optimized builds with libcxx before 3.9.
  * [MESOS-6720] - Check that `PreferredToolArchitecture` is set to `x64` on Windows before building.
  * [MESOS-6730] - Reserve operation should validate reserved resource role against resource allocationInfo role.
  * [MESOS-6731] - Create a test filter for stout tests that use `symlink` on Windows, as they will fail if not run as admin.
  * [MESOS-6732] - XFS disk isolator should check whether quotas are enabled.
  * [MESOS-6742] - Adding support for s390x architecture.
  * [MESOS-6815] - Enable glog stack traces when we call things like `ABORT` on Windows.
  * [MESOS-6858] - network/cni isolator generates incomplete resolv.conf.
  * [MESOS-6868] - Transition Windows away from `os::killtree`.
  * [MESOS-6892] - Reconsider process creation primitives on Windows.
  * [MESOS-6907] - FutureTest.After3 is flaky.
  * [MESOS-6951] - Docker containerizer: mangled environment when env value contains LF byte.
  * [MESOS-6953] - A compromised mesos-master node can execute code as root on agents.
  * [MESOS-6976] - Disallow (re-)registration attempts by old agents.
  * [MESOS-6982] - PerfTest.Version fails on recent Arch Linux.
  * [MESOS-7022] - Update framework authorization to support multiple roles.
  * [MESOS-7029] - FaultToleranceTest.FrameworkReregister is flaky.
  * [MESOS-7035] - Add test for framework upgrading to MULTI_ROLE with tasks running.
  * [MESOS-7049] - CgroupsAnyHierarchyWithPerfEventTest.ROOT_CGROUPS_PERF_PerfTest is broken on Fedora 25.
  * [MESOS-7097] - Framework credentials can be used to register as an agent.
  * [MESOS-7133] - mesos-fetcher fails with openssl-related output.
  * [MESOS-7135] - Outstanding offers to a dropped framework role should be rescinded.
  * [MESOS-7146] - OSX broken due to wrong configuration of LevelDB after update.
  * [MESOS-7158] - Add `role` to task/executor to indicate allocation role of their resources.
  * [MESOS-7165] - Agents should be able to upgrade to be MULTI_ROLE capable.
  * [MESOS-7172] - CMake does not incrementally recompile.
  * [MESOS-7182] - Couple of MULTI_ROLE related tests are flaky.
  * [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-7225] - Tasks launched via the default executor cannot access disk resource volumes.
  * [MESOS-7236] - Base64 encoding/decoding (via stout) behaves differently on Windows.
  * [MESOS-7237] - Enabling cgroups_limit_swap can lead to "invalid argument" error.
  * [MESOS-7248] - RemoveNestedContainer returns unsupported.
  * [MESOS-7255] - New mesos-style.py linter behavior breaks commiting when virtualenv is not installed.
  * [MESOS-7259] - Remove deprecated ACLs `SetQuota` and `RemoveQuota`.
  * [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-7270] - Java V1 Framwork Test failed on macOS.
  * [MESOS-7272] - Unified containerizer does not support docker registry version < 2.3.
  * [MESOS-7280] - Unified containerizer provisions docker image error with COPY backend.
  * [MESOS-7281] - Backwards incompatible UpdateFrameworkMessage handling.
  * [MESOS-7287] - Fix post-reviews.py to find `rbt.cmd` on Windows.
  * [MESOS-7300] - Mesos failed to build on Windows due to error C2440: 'return': cannot convert from 'Error' to 'bool'.
  * [MESOS-7311] - CopyFetcherPluginTest.FetchExistingFile.
  * [MESOS-7316] - Upgrading Mesos to 1.2.0 results in some information missing from the `/flags` endpoint.
  * [MESOS-7323] - Framework role tracking in allocator results in framework treated as active incorrectly.
  * [MESOS-7340] - Log HTTP accesses to the /files endpoint.
  * [MESOS-7346] - Agent crashes if the task name is too long.
  * [MESOS-7348] - Network isolator crashes agent on startup when network interface cannot be found.
  * [MESOS-7350] - Failed to pull image from Nexus Registry due to signature missing.
  * [MESOS-7363] - Improver master robustness against duplicate UPIDs.
  * [MESOS-7365] - Compile error with recent glibc.
  * [MESOS-7372] - Improve agent re-registration robustness.
  * [MESOS-7378] - Build failure with glibc 2.12.
  * [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-7430] - Per-role Suppress call implementation is broken.
  * [MESOS-7431] - Registry puller cannot fetch manifests from Google GCR: 403 Forbidden.
  * [MESOS-7453] - glyphicons-halflings-regular.woff2 is missing in WebUI.
  * [MESOS-7456] - Compilation error on recent glibc in cgroups device subsystem.
  * [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.
  * [MESOS-7521] - Major performance regression in DRF sorter.
  * [MESOS-7538] - Don't validate re-registrations that are going to be dropped.

** Documentation
  * [MESOS-7005] - Add executor authentication documentation.
  * [MESOS-7324] - Update documentation to reflect the addition of multi-role framework support.

** Epic
  * [MESOS-1763] - Add support for frameworks to receive resources for multiple roles.
  * [MESOS-6365] - Executor authentication.
  * [MESOS-6627] - Allow frameworks to modify the role(s) they are subscribed to.

** Improvement
  * [MESOS-970] - Upgrade bundled leveldb to 1.19.
  * [MESOS-5186] - mesos.interface: Allow using protobuf 3.x.
  * [MESOS-5992] - Complete the list of API Calls on the Operator HTTP API Doc.
  * [MESOS-6280] - Task group executor should support command health checks.
  * [MESOS-6304] - Add authentication support to the default executor.
  * [MESOS-6523] - Agent cgroup assignment should precede agent initialization.
  * [MESOS-6906] - Introduce a general non-interpreting task check.
  * [MESOS-7021] - Consistent symlink behavior for os::stat accessors.
  * [MESOS-7074] - port_mapping isolator: do not depend on /sys/class/net/<ifname>/speed.
  * [MESOS-7101] - ExamplesTest.PersistentVolumeFramework failed on ASF CI.
  * [MESOS-7120] - Add an Agent API call to cleanup nested container artifacts.
  * [MESOS-7226] - Introduce precompiled headers (on Windows).
  * [MESOS-7249] - Default executor does not support general checks.
  * [MESOS-7256] - Replace Boost Type Traits leftovers with STL.
  * [MESOS-7274] - Health checker does not support pause / resume.
  * [MESOS-7275] - General checker does not support TCP checks.
  * [MESOS-7276] - General checker does not support pause / resume.
  * [MESOS-7277] - General checker does not support command checks via agent.
  * [MESOS-7376] - Reduce copying of the Registry to improve Registrar performance.
  * [MESOS-7387] - ZK master contender and detector don't respect zk_session_timeout option.

** Task
  * [MESOS-3139] - Incorporate CMake into standard documentation.
  * [MESOS-5418] - Test case: Escape containerizer command line on Windows.
  * [MESOS-6022] - unit-test for port-mapper CNI plugin.
  * [MESOS-6032] - Add infrastructure for unit tests in the new python-based CLI.
  * [MESOS-6123] - Implement GET_AGENT call in v1 agent API.
  * [MESOS-6447] - Display role weight / role quota information in the webui.
  * [MESOS-6636] - Validate that tasks / executors / reservations / volumes do not mix Resource.allocation_info.roles.
  * [MESOS-6637] - Validate that schedulers cannot perform operations on offers with different allocation roles.
  * [MESOS-6657] - Update the webui to reflect that frameworks have multiple roles.
  * [MESOS-6691] - Enable SSL in Mesos builds.
  * [MESOS-6762] - Update release notes for multi-role changes.
  * [MESOS-6791] - Allow to specific the device whitelist entries in cgroup devices subsystem.
  * [MESOS-6808] - Refactor Docker::run to only take docker cli parameters.
  * [MESOS-6855] - Add `role` section to response of /state endpoint.
  * [MESOS-6886] - Add authorization tests for debug API handlers.
  * [MESOS-6940] - Do not send offers to MULTI_ROLE schedulers if agent does not have MULTI_ROLE capability.
  * [MESOS-6967] - Ensure offer operations can be applied for MULTI_ROLE and non-MULTI_ROLE frameworks.
  * [MESOS-6992] - Remove validation against "/" characters in roles to support hierarchical roles.
  * [MESOS-6995] - Update the webui to reflect hierarchical roles.
  * [MESOS-6996] - Add a 'Secret' protobuf message.
  * [MESOS-6997] - Add the SecretGenerator module interface.
  * [MESOS-6998] - Add authentication support to agent's '/v1/executor' endpoint.
  * [MESOS-6999] - Add agent support for generating and passing executor secrets.
  * [MESOS-7000] - Implement a JWT SecretGenerator.
  * [MESOS-7001] - Implement a JWT authenticator.
  * [MESOS-7003] - Introduce a 'Principal' type.
  * [MESOS-7004] - Enable multiple HTTP authenticator modules.
  * [MESOS-7009] - Add a 'secret' field to the 'Environment' message.
  * [MESOS-7011] - Add an '--executor_secret_key' flag to the agent.
  * [MESOS-7013] - Update the authorizer interface for executor authentication.
  * [MESOS-7014] - Add implicit executor authorization to local authorizer.
  * [MESOS-7024] - Update the allocator to handle hierarchical roles.
  * [MESOS-7026] - Update authorization / authorization-filtering to handle hierarchical roles.
  * [MESOS-7037] - Prevent setting quota on nested roles not contained by parent role quota.
  * [MESOS-7038] - Update quota cluster capacity heuristic for hierarchical roles.
  * [MESOS-7039] - Prevent quota removal that violates parent role-child role quota containment.
  * [MESOS-7047] - Update agent for hierarchical roles.
  * [MESOS-7048] - Remove adjustment code within Resources::apply.
  * [MESOS-7061] - Re-persist tasks/executors with allocation info during agent recovery.
  * [MESOS-7063] - Add a test for a MULTI_ROLE master reregistering an old agent.
  * [MESOS-7269] - Migrate setting in config.py to a TOML file.
  * [MESOS-7282] - Create a table abstraction for the Mesos CLI.
  * [MESOS-7320] - Remove deprecated ACL `ShutdownFramework`.
  * [MESOS-7336] - Add resource provider API protobuf.
  * [MESOS-7339] - Add authorization to agent executor API.
  * [MESOS-7377] - Add authentication to the checker and health checker libraries.
  * [MESOS-7391] - Add deprecation warning for Visual Studio 14 2015.
  * [MESOS-7395] - Benchmark performance of hierarchical roles.
  * [MESOS-7439] - Bump the default timeout value for docker volume driver unmount operation.


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 reregisters 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 reregisters
    * [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.3
-------------------------------------
* 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-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-7540] - Add an agent flag for executor re-registration timeout.
  * [MESOS-7569] - Allow "old" executors with half-open connections to be preserved during agent upgrade / restart.
  * [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-7581] - Fix interference of external Boost installations when using some unbundled dependencies.
  * [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.
  * [MESOS-7863] - Agent may drop pending kill task status updates.
  * [MESOS-7865] - Agent may process a kill task and still launch the task.


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

All Issues:
** Bug
  * [MESOS-2537] - AC_ARG_ENABLED checks are broken.
  * [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-7057] - Consider using the relink functionality of libprocess in the executor driver.
  * [MESOS-7119] - Mesos master crash while accepting inverse offer.
  * [MESOS-7152] - The agent may be flapping after the machine reboots due to provisioner recover.
  * [MESOS-7197] - Requesting tiny amount of CPU crashes master.
  * [MESOS-7210] - HTTP health check doesn't work when mesos runs with --docker_mesos_image.
  * [MESOS-7237] - Enabling cgroups_limit_swap can lead to "invalid argument" error.
  * [MESOS-7265] - Containerizer startup may cause sensitive data to leak into sandbox logs.
  * [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-7383] - Docker executor logs possibly sensitive parameters.
  * [MESOS-7422] - Docker containerizer should not leak possibly sensitive data to agent log.
  * [MESOS-7471] - Provisioner recover should not always assume 'rootfses' dir exists.
  * [MESOS-7482] - #elif does not match #ifdef when checking the platform.


Release Notes - Mesos - Version 1.1.1
-------------------------------------
* 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-6606] - Reject optimized builds with libcxx before 3.9.
  * [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.
  * [MESOS-7133] - mesos-fetcher fails with openssl-related output.


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 container'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.4
-------------------------------------
* This is a bug fix release.

All Issues:
** Bug
    * [MESOS-2537] - AC_ARG_ENABLED checks are broken
    * [MESOS-6606] - Reject optimized builds with libcxx before 3.9
    * [MESOS-7008] - Quota not recovered from registry in empty cluster.
    * [MESOS-7265] - Containerizer startup may cause sensitive data to leak into sandbox logs.
    * [MESOS-7366] - Agent sandbox gc could accidentally delete the entire persistent volume content.
    * [MESOS-7383] - Docker executor logs possibly sensitive parameters.
    * [MESOS-7422] - Docker containerizer should not leak possibly sensitive data to agent log.


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.


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 reregistering 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-5582] - Create a `cgroups/devices` isolator.
    * [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
    reregistering 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 reregister 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 reregistering 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 reregistering 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 reregistered 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 reregister 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 reregister 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
