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

** Bug
  * [MESOS-9609] - Master check failure when marking agent unreachable.
  * [MESOS-10126] - Docker volume isolator needs to clean up the `info` struct regardless the result of unmount operation
  * [MESOS-10169] - Reintroduce image fetch deduplication while keeping it possible to destroy UCR containers in PROVISIONING state.


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

  * Container resource bursting has been supported on Linux. Frameworks are
    now able to specify CPU and memory limits for tasks (separately from
    resource requests) and also the level of isolation they desire when
    launching task groups - CPU and memory may be isolated at the executor
    container level, or the task container level (MESOS-10001).

  * Executors can now use a Unix domain socket to connect to an agent, instead
    of connecting via TCP (MESOS-10034).

  * Existing reservations can now be modified via the RESERVE_RESOURCES
    master API call (MESOS-9981).

  * Performance of read-only V1 operator API calls has been improved by
    introducing direct serialization into JSON/protobuf and extending the
    batching mechanism to parallel processing of these calls by the master
    (similarly to `/state` endpoint). This brings V1 operator API performance
    on par with older HTTP endpoints (MESOS-10026, MESOS-9497).

  * **Breaking change** for authorizer modules: authorizers are now required
    to implement a method for returning `ObjectApprover`s that are valid
    throughout all of their lifetime. For framework and operator API subscriber
    principals the set of `ObjectAprover`s is now requested from the authorizer
    only once per subscription (MESOS-10056, MESOS-10057).

Additional API Changes:

  * Quota can now be set on the default `*` role.
  * Quota consumption metrics are now exposed by the allocator.

Unresolved Critical Issues:

  * [MESOS-10066] - mesos-docker-executor process dies when agent stops. Recovery fails when agent returns
  * [MESOS-10011] - Operation feedback with stale agent ID crashes the master
  * [MESOS-9967] - Authorization header is missing when using a default registry
  * [MESOS-9609] - Master check failure when marking agent unreachable
  * [MESOS-9579] - ExecutorHttpApiTest.HeartbeatCalls is flaky.
  * [MESOS-9536] - Nested container launched with non-root user may not be able to write to its sandbox via the environment variable `MESOS_SANDBOX`
  * [MESOS-9500] - spark submit with docker image on mesos cluster fails.
  * [MESOS-9426] - ZK master detection can become forever pending.
  * [MESOS-9393] - Fetcher crashes extracting archives with non-ASCII filenames.
  * [MESOS-9365] - Windows - GET_CONTAINERS API call causes the Mesos agent to fail
  * [MESOS-9355] - Persistence volume does not unmount correctly with wrong artifact URI
  * [MESOS-9352] - Data in persistent volume deleted accidentally when using Docker container and Persistent volume
  * [MESOS-9053] - Network ports isolator can falsely trigger while destroying containers.
  * [MESOS-9006] - The agent's GET_AGENT leaks resource information when using authorization
  * [MESOS-8840] - `cpu.cfs_quota_us` may be accidentally set for command task using docker during agent recovery.
  * [MESOS-8803] - Libprocess deadlocks in a test.
  * [MESOS-8679] - "If the first KILL stuck in the default executor, all other KILLs will be ignored."
  * [MESOS-8608] - RmdirContinueOnErrorTest.RemoveWithContinueOnError fails.
  * [MESOS-8257] - "Unified Containerizer ""leaks"" a target container mount path to the host FS when the target resolves to an absolute path"
  * [MESOS-8256] - Libprocess can silently deadlock due to worker thread exhaustion.
  * [MESOS-8096] - Enqueueing events in MockHTTPScheduler can lead to segfaults.
  * [MESOS-8038] - Launching GPU task sporadically fails.
  * [MESOS-7971] - PersistentVolumeEndpointsTest.EndpointCreateThenOfferRemove test is flaky
  * [MESOS-7911] - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * [MESOS-7748] - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * [MESOS-7721] - Master's agent removal rate limit also applies to agent unreachability.
  * [MESOS-7566] - Master crash due to failed check in DRFSorter::remove
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed
  * [MESOS-6285] - Agents may OOM during recovery if there are too many tasks or executors
  * [MESOS-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.

All Resolved Issues:

** Bug
    * [MESOS-621] - `HierarchicalAllocatorProcess::removeSlave` doesn't properly handle framework allocations/resources
    * [MESOS-4996] - 'containerizer->update' will always fail after killing a docker container.
    * [MESOS-7217] - CgroupsIsolatorTest.ROOT_CGROUPS_CFS_EnableCfs is flaky.
    * [MESOS-7639] - Oversubscription could crash the master due to CHECK failure in the allocator
    * [MESOS-8537] - Default executor doesn't wait for status updates to be ack'd before shutting down
    * [MESOS-8877] - Docker container's resources will be wrongly enlarged in cgroups after agent recovery
    * [MESOS-9337] - Hook manager implementation is missing mutex acquisition in several places.
    * [MESOS-9847] - Docker executor doesn't wait for status updates to be ack'd before shutting down.
    * [MESOS-9889] - Master CPU high due to unexpected foreachkey behaviour in Master::__reregisterSlave.
    * [MESOS-9958] - New CLI is not included in distribution tarball
    * [MESOS-9965] - agent should not send `TASK_GONE_BY_OPERATOR` if the framework is not partition aware.
    * [MESOS-9968] - WWWAuthenticate header parsing fails when commas are in (quoted) realm
    * [MESOS-9971] - 'dist' and 'distcheck' cmake targets are implemented as shell scripts, so fail on Windows/MSVC.
    * [MESOS-9975] - Sorter may leak clients allocations.
    * [MESOS-9978] - Nvml isolator cannot be disabled which makes it impossible to exclude non-free code
    * [MESOS-9980] - HierarchicalAllocatorTest.MaintenanceInverseOffers is flaky
    * [MESOS-10007] - Command executor can miss exit status for short-lived commands due to double-reaping.
    * [MESOS-10008] - Very large quota values can crash master.
    * [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-10023] - Allocator method dispatches can be reordered (relative to scheduler API calls which triggered them).
    * [MESOS-10041] - Libprocess SSL verification can leak memory
    * [MESOS-10083] - Authorizing invalid operation can result in declined authorization.
    * [MESOS-10084] - Detecting whether executor is generated for command task should work when the launcher_dir changes
    * [MESOS-10090] - Mesos build on Windows appears to be broken.
    * [MESOS-10092] - Cannot pull image from docker registry which does not reply with 'scope'/'service' in WWW-Authenticate header
    * [MESOS-10094] - Master's agent draining VLOG prints incorrect task counts.
    * [MESOS-10096] - Reactivating a draining agent leaves the agent in draining state.
    * [MESOS-10097] - After HTTP framework disconnects, heartbeater idle-loops instead of being deleted.
    * [MESOS-10098] - Mesos agent fails to start on outdated systemd.
    * [MESOS-10100] - Recently introduced PathTest.Relative and PathTest.PathIteration fail on windows.
    * [MESOS-10102] - MasterAPITest.ReservationUpdate is flaky
    * [MESOS-10103] - MSVC build can segfault when composing authorization Action for updating reservation.
    * [MESOS-10107] - containeriser: failed to remove cgroup - EBUSY
    * [MESOS-10109] - After failover, master crashes on re-adding an agent with maintenance schedule set.
    * [MESOS-10110] - Libprocess ignores most protobuf (de)serialisation failure cases.
    * [MESOS-10111] - Failed check in libevent_ssl_socket.cpp: 'self->bev' Must be non NULL
    * [MESOS-10113] - OpenSSLSocketImpl with 'support_downgrade' waits for incoming bytes before accepting new connection.
    * [MESOS-10114] - OpenSSLSocketImpl with 'support_downgrade' can silently stop accepting sockets.
    * [MESOS-10116] - Attempt to reactivate disconnected agent crashes the master
    * [MESOS-10118] - Agent incorrectly handles draining when empty
    * [MESOS-10120] - Authorization for /logging/toggle and  /metrics/snapshot is skipped on Windows.
    * [MESOS-10123] - Windows overlapped IO discard handling can drop data.
    * [MESOS-10124] - OpenSSLSocketImpl on Windows with 'support_downgrade' is incorrectly polling for read readiness.
    * [MESOS-10125] - Web UI roles tree files are missing from automake install.
    * [MESOS-10128] - Performance regression in HierarchicalAllocations_BENCHMARK_Test.PersistentVolumes

** Epic
    * [MESOS-9981] - Introduce a Mesos API to update reservations
    * [MESOS-10001] - Resource Limits and Requests
    * [MESOS-10034] - Agent/executor domain socket communication

** Improvement
    * [MESOS-7245] - Add a Windows segfault handler for stacktraces
    * [MESOS-9123] - Expose quota consumption metrics.
    * [MESOS-9497] - Parallel reads for expensive master v1 read-only calls.
    * [MESOS-9914] - Refactor `MesosTest::StartSlave` in favour of builder style interface
    * [MESOS-9948] - master::Slave::hasExecutor occupies 37% of a 150 second perf sample.
    * [MESOS-9964] - Support destroying UCR containers in provisioning state
    * [MESOS-9972] - Update Names for TLS-related environment variables in libprocess.
    * [MESOS-10016] - Add a benchmark for HierarchicalAllocatorProcess::updateAllocation()
    * [MESOS-10017] - Log all reverse DNS lookup failures in 'legacy' TLS (SSL) hostname validation scheme.
    * [MESOS-10026] - Improve v1 operator API read performance.
    * [MESOS-10056] - Perform synchronous authorization for scheduler calls.
    * [MESOS-10057] - Perform synchronous authorization for outgoing events on event stream.
    * [MESOS-10095] - Agent draining logging makes it hard to tell which tasks did not terminate.
    * [MESOS-10112] - Log peer address during TLS handshake failures.

** Wish
    * [MESOS-9630] - Consider moving linter setup to pre-commit

** Task
    * [MESOS-3938] - Consider allowing setting quotas for the default '*' role.
    * [MESOS-6084] - Deprecate and remove the included MPI framework
    * [MESOS-8503] - Improve UI when displaying frameworks with many roles.
    * [MESOS-9843] - Implement tests for the `containerizer/debug` endpoint.
    * [MESOS-9949] - Track allocated/offered in the allocator's role tree.
    * [MESOS-9974] - Remove support/mesos-style.py transition script
    * [MESOS-9982] - Add a 'source' field to operator API ReserveResources protobuf
    * [MESOS-9983] - Intermediate rejection of Reserve operations with source set
    * [MESOS-9984] - Provide a function to compute a common "reservation ancestor" between two 'Resources'
    * [MESOS-9985] - Update validation of 'ReserveResources' for 'source'
    * [MESOS-9986] - Update 'getConsumedResources' and 'getResourceConversions' for 'source' in reservations
    * [MESOS-9987] - Update 'Master::Http::_reserve' to also require 'source' resources
    * [MESOS-9988] - Add 'source' field to scheduler reservation API
    * [MESOS-9989] - Update 'Master::Http::_reserve' to pass 'source' into generated operation
    * [MESOS-9990] - Consolidate 'Master::authorizeReserveResources' overloads
    * [MESOS-9991] - Update 'Master::authorizeReserveResources' for re-reservations
    * [MESOS-9992] - Add end-to-end test excercising re-reservation operator API
    * [MESOS-9993] - Update operator API documentation for re-reservations
    * [MESOS-10002] - Design doc for container bursting
    * [MESOS-10009] - Implement glue code for the Windows event loop and OpenSSL's basic I/O abstraction
    * [MESOS-10010] - Implement an SSL socket for Windows, using OpenSSL directly
    * [MESOS-10033] - Design per-task cgroup isolation
    * [MESOS-10035] - Implement `enable_http_executor_domain_sockets` agent flag
    * [MESOS-10036] - Implement agent code to create a domain socket on startup
    * [MESOS-10037] - Create code to bind-mount domain sockets into mesos-type executor containers
    * [MESOS-10038] - Implement agent code to listen on a domain socket
    * [MESOS-10039] - Let the default executor connect through a domain socket when available
    * [MESOS-10043] - Add resource limits into the protobuf message `TaskInfo`
    * [MESOS-10044] - Add a new capability `TASK_RESOURCE_LIMITS` into Mesos agent
    * [MESOS-10045] - Validate task's resources limits and the `share_cgroups` field
    * [MESOS-10046] - Launch executor container with resource limits
    * [MESOS-10047] - Update the CPU subsystem in the cgroup isolator to set container's CPU resource limits
    * [MESOS-10048] - Update the memory subsystem in the cgroup isolator to set container's memory resource limits and `oom_score_adj`
    * [MESOS-10049] - Add a new reason in `TaskStatus::Reason` for the case that a task is OOM-killed due to exceeding its memory request
    * [MESOS-10050] - Update the `update()` method of containerizer to handle container resource limits
    * [MESOS-10051] - Update the `LaunchContainer` agent API to support container resource limits
    * [MESOS-10053] - Update Docker executor to set Docker container's resource limits and `oom_score_adj`
    * [MESOS-10054] - Update Docker containerizer to set Docker container's resource limits and `oom_score_adj`
    * [MESOS-10055] - Update Mesos UI to display the resource limits of tasks
    * [MESOS-10061] - Implement chmod() support for stout
    * [MESOS-10062] - Implement relative path computation for stout
    * [MESOS-10063] - Update default executor to call `LAUNCH_CONTAINER` to launch nested containers
    * [MESOS-10064] - Accommodate the "Infinity" value in JSON
    * [MESOS-10065] - Update the `update()` method of isolator interface to handle container resource limits
    * [MESOS-10067] - Update the `update()` method of cgroups subsystem interface to handle container resource limits
    * [MESOS-10073] - Implement SSL downgrade on the native SSL socket
    * [MESOS-10074] - Adapt design for executor domain sockets for agent restarts
    * [MESOS-10075] - Add the `shared_cgroups` field into  the protobuf message `LinuxInfo`
    * [MESOS-10076] - Cgroups isolator: create nested cgroups
    * [MESOS-10077] - Cgroups isolator: allow updating and isolating resources for nested cgroups
    * [MESOS-10079] - Cgroups isolator: recover nested cgroups
    * [MESOS-10086] - Add support for systemd socket activation for mesos domain sockets
    * [MESOS-10087] - Update master & agent's HTTP endpoints for showing resource limits
    * [MESOS-10115] - Add documentation for task resource limits
    * [MESOS-10117] - Update the `usage()` method of containerizer to set resource limits in the `ResourceStatistics` protobuf message

** Documentation
    * [MESOS-9938] - Standalone container documentation
    * [MESOS-9979] - Add docs for FrameworkInfo updates and the UPDATE_FRAMEWORK call.

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

** Bug
  * [MESOS-9964] - Support destroying UCR containers in provisioning state.
  * [MESOS-9965] - Agent should not send `TASK_GONE_BY_OPERATOR` if the framework is not partition aware.
  * [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-9972] - Update Names for TLS-related environment variables in libprocess.
  * [MESOS-10007] - Command executor can miss exit status for short-lived commands due to double-reaping.
  * [MESOS-10008] - Very large quota values can crash master.
  * [MESOS-10015] - updateAllocation() can stall the allocator with a huge number of reservations on an agent.
  * [MESOS-10041] - Libprocess SSL verification can leak memory.
  * [MESOS-10094] - Master's agent draining VLOG prints incorrect task counts.
  * [MESOS-10096] - Reactivating a draining agent leaves the agent in draining state.
  * [MESOS-10118] - Agent incorrectly handles draining when empty.

** Improvement
  * [MESOS-9889] - Master CPU high due to unexpected foreachkey behaviour in Master::__reregisterSlave.
  * [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.
  * [MESOS-10095] - Agent draining logging makes it hard to tell which tasks did not terminate.
  * [MESOS-10112] - Log peer address during TLS handshake failures.


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

  * Maintenance:

    * Added new APIs to support automatic node draining via operator APIs.
      This serves as an alternative to framework-assisted draining using
      maintenance primitives. (MESOS-9753)

  * Resource Management:

    * Support for quota limits has been added. The existing quota guarantees
      are deprecated in favor of using limits (and in the future, priorities).

  * Security

    * A new libprocess flag `--hostname_validation_scheme` has been added.
      This allows users to enable a new RFC 6125-compliant hostname verification
      scheme based on primitives provided by OpenSSL. This will also improve
      performance by getting rid of all reverse DNS lookups. (MESOS-9784)

    * The use of anonymous cipher suites is now disallowed when TLS certificate
      verification is enabled. (MESOS-9810)

  * Containerization:

    * A new `--docker_ignore_runtime` flag has been added. This causes the agent
      to ignore any runtime configuration present in Docker images. (MESOS-9760)

    * Add no-new-privileges isolator. A new Linux isolator has been added to
      support enabling the no_new_privs process control flag. (MESOS-9770)

    * The Mesos containerizer now masks sensitive paths in `/proc` for
      containers that do not share the host's PID namespace. (MESOS-9771)

    * The Mesos containerizer now supports configurable IPC namespace and
      /dev/shm. Container can be configured to have a private IPC namespace
      and /dev/shm or share them from its parent, and the size of its private
      /dev/shm is also configurable. (MESOS-9795)

    * The Mesos containerizer now includes ephemeral overlayfs storage in the
      task disk quota as well as sandbox storage. (MESOS-9900)

    * A new `/containerizer/debug` HTTP endpoint has been added. This endpoint
      exposes debug information for the Mesos containerizer. At the moment, it
      returns a list of pending operations related to Isolators and Launchers.
      (MESOS-9756)

Additional API Changes:

  * Mesos components will now forego TLS certificate validation for incoming
    connections, unless `LIBPROCESS_SSL_REQUIRE_CERT` is set to true.

  * The `Socket::connect(const Address&)` member function will now abort the
    program when called on a `LibeventSSLSocket`. Instead, the new overload
    `Socket::connect(const Address&, const TLSClientConfig&)` must be used.

    NOTE: This new overload is only available when libprocess is compiled
    with `--enable-ssl`.

 Unresolved Critical Issues:
  * MESOS-9889 - Master CPU high due to unexpected foreachkey behaviour in Master::__reregisterSlave
  * MESOS-9697 - Release RPMs are not uploaded to bintray
  * MESOS-9579 - ExecutorHttpApiTest.HeartbeatCalls is flaky.
  * MESOS-9536 - Nested container launched with non-root user may not be able to write to its sandbox via the environment variable `MESOS_SANDBOX`
  * MESOS-9520 - IOTest.Read hangs on Windows
  * MESOS-9500 - spark submit with docker image on mesos cluster fails.
  * MESOS-9426 - ZK master detection can become forever pending.
  * MESOS-9393 - Fetcher crashes extracting archives with non-ASCII filenames.
  * MESOS-9365 - Windows - GET_CONTAINERS API call causes the Mesos agent to fail
  * MESOS-9355 - Persistence volume does not unmount correctly with wrong artifact URI
  * MESOS-9352 - Data in persistent volume deleted accidentally when using Docker container and Persistent volume
  * MESOS-9053 - Network ports isolator can falsely trigger while destroying containers.
  * MESOS-9006 - The agent's GET_AGENT leaks resource information when using authorization
  * MESOS-8877 - Docker container's resources will be wrongly enlarged in cgroups after agent recovery
  * MESOS-8840 - `cpu.cfs_quota_us` may be accidentally set for command task using docker during agent recovery.
  * MESOS-8803 - Libprocess deadlocks in a test.
  * MESOS-8679 - If the first KILL stuck in the default executor, all other KILLs will be ignored.
  * MESOS-8608 - RmdirContinueOnErrorTest.RemoveWithContinueOnError fails.
  * MESOS-8257 - Unified Containerizer "leaks" a target container mount path to the host FS when the target resolves to an absolute path
  * MESOS-8256 - Libprocess can silently deadlock due to worker thread exhaustion.
  * MESOS-8096 - Enqueueing events in MockHTTPScheduler can lead to segfaults.
  * MESOS-8038 - Launching GPU task sporadically fails.
  * MESOS-7971 - PersistentVolumeEndpointsTest.EndpointCreateThenOfferRemove test is flaky
  * MESOS-7911 - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * MESOS-7748 - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * MESOS-7721 - Master's agent removal rate limit also applies to agent unreachability.
  * MESOS-7566 - Master crash due to failed check in DRFSorter::remove
  * MESOS-7386 - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed
  * MESOS-6285 - Agents may OOM during recovery if there are too many tasks or executors
  * MESOS-5989 - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.

All Resolved Issues:

** Bug
  * [MESOS-2842] - Master crashes when framework changes principal on re-registration
  * [MESOS-5804] - ExamplesTest.DynamicReservationFramework is flaky
  * [MESOS-6382] - Add option to enable parallel test runner for cmake builds
  * [MESOS-6605] - configure looks for wrong header file for elfio
  * [MESOS-8968] - Wire `UPDATE_QUOTA` call.
  * [MESOS-9353] - libprocess triggers deprecation warnings when built against openssl 1.1.
  * [MESOS-9395] - Check failure on `StorageLocalResourceProviderProcess::applyCreateDisk`.
  * [MESOS-9482] - Resource provider manager can crash on invalid data from resource providers
  * [MESOS-9560] - ContentType/AgentAPITest.MarkResourceProviderGone/1 is flaky
  * [MESOS-9594] - Test `StorageLocalResourceProviderTest.RetryRpcWithExponentialBackoff` is flaky.
  * [MESOS-9609] - Master check failure when marking agent unreachable
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9667] - Check failure when executor for task using resource provider resources subscribes before agent is registered
  * [MESOS-9698] - DroppedOperationStatusUpdate test is flaky
  * [MESOS-9707] - Calling link::lo() may cause runtime error
  * [MESOS-9711] - Avoid shutting down executors registering before a required resource provider.
  * [MESOS-9712] - StorageLocalResourceProviderTest.CsiPluginRpcMetrics is flaky.
  * [MESOS-9719] - Test `AgentFailoverHTTPExecutorUsingResourceProviderResources` is flaky.
  * [MESOS-9727] - Heartbeat calls from executor to agent are reported as errors
  * [MESOS-9733] - Random sorter generates non-uniform result for hierarchical roles.
  * [MESOS-9750] - Agent V1 GET_STATE response may report a complete executor's tasks as non-terminal after a graceful agent shutdown
  * [MESOS-9765] - Test `ROOT_CreateDestroyPersistentMountVolumeWithReboot` is flaky.
  * [MESOS-9766] - /__processes__ endpoint can hang.
  * [MESOS-9779] - `UPDATE_RESOURCE_PROVIDER_CONFIG` agent call returns 404 ambiguously.
  * [MESOS-9782] - Random sorter fails to clear removed clients.
  * [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-9803] - Memory leak caused by an infinite chain of futures in `UriDiskProfileAdaptor`.
  * [MESOS-9808] - libprocess can deadlock on termination (cleanup() vs use() + terminate())
  * [MESOS-9811] - Don't use reverse DNS for hostname validation
  * [MESOS-9831] - Master should not report disconnected resource providers.
  * [MESOS-9835] - `QuotaRoleAllocateNonQuotaResource` is failing.
  * [MESOS-9836] - Docker containerizer overwrites `/mesos/slave` cgroups.
  * [MESOS-9852] - Slow memory growth in master due to deferred deletion of offer filters and timers.
  * [MESOS-9854] - /roles endpoint should return both guarantees and limits.
  * [MESOS-9856] - REVIVE call with specified role(s) clears filters for all roles of a framework.
  * [MESOS-9861] - Make PushGauges support floating point stats.
  * [MESOS-9870] - Simultaneous adding/removal of a role from framework's roles and its suppressed roles crashes the master.
  * [MESOS-9875] - Mesos did not respond correctly when operations should fail
  * [MESOS-9881] - StorageLocalResourceProviderTest.RetryOperationStatusUpdateAfterRecovery is flaky.
  * [MESOS-9882] - Mesos.UpdateFrameworkV0Test.SuppressedRoles is flaky.
  * [MESOS-9886] - RoleTest.RolesEndpointContainsConsumedQuota is flaky.
  * [MESOS-9887] - Race condition between two terminal task status updates for Docker/Command executor.
  * [MESOS-9888] - /roles and GET_ROLES do not expose roles with only static reservations
  * [MESOS-9890] - /roles and GET_ROLES does not always expose parent roles.
  * [MESOS-9893] - `volume/secret` isolator should cleanup the stored secret from runtime directory when the container is destroyed
  * [MESOS-9894] - Mesos failed to build due to fatal error C1083 on Windows using MSVC.
  * [MESOS-9895] - SlaveTest.DrainingAgentRejectLaunch is flaky
  * [MESOS-9901] - jsonify uses non-standard mapping for protobuf map fields.
  * [MESOS-9902] - Mesos failed to build due to error C2280 on windows with MSVC
  * [MESOS-9906] - Libprocess tests hangs on arm
  * [MESOS-9909] - Mesos agent crashes after recovery when there is nested container joins a CNI network
  * [MESOS-9922] - MasterQuotaTest.RescindOffersEnforcingLimits is flaky
  * [MESOS-9925] - Default executor takes a couple of seconds to start and subscribe Mesos agent
  * [MESOS-9930] - DRF sorter may omit clients in sorting after removing an inactive leaf node.
  * [MESOS-9934] - Master does not handle returning unreachable agents as draining/deactivated
  * [MESOS-9935] - The agent crashes after the disk du isolator supporting rootfs checks.
  * [MESOS-9952] - ExampleTest.DiskFullFramework is slow
  * [MESOS-9956] - CSI plugins reporting duplicated volumes will crash the agent.

** Epic
  * [MESOS-9534] - CSI Spec v1.0 Support.
  * [MESOS-9756] - Introduce a container debug endpoint.
  * [MESOS-9784] - Client side SSL certificate verification in Libprocess.
  * [MESOS-9795] - Support configurable /dev/shm and IPC namespace.

** Improvement
  * [MESOS-7258] - Provide scheduler calls to subscribe to additional roles and unsubscribe from roles.
  * [MESOS-8456] - Allocator should allow roles to burst above guarantees but below limits.
  * [MESOS-8789] - /roles and webui roles table should display distinct offered and allocated resources.
  * [MESOS-9254] - Make SLRP be able to update its volumes and storage pools.
  * [MESOS-9545] - Marking an unreachable agent as gone should transition the tasks to terminal state
  * [MESOS-9618] - Display quota consumption in the webui.
  * [MESOS-9640] - Add authorization support for `UPDATE_QUOTA` call.
  * [MESOS-9668] - Add authorization support for the new `GET_QUOTA` call.
  * [MESOS-9669] - Deprecate v0 quota calls.
  * [MESOS-9695] - Remove the duplicate pid check in Docker containerizer
  * [MESOS-9701] - Allocator's roles map should track reservations.
  * [MESOS-9724] - Flatten the weighted shuffling in the random sorter.
  * [MESOS-9758] - Take ports out of the GET_ROLES endpoints.
  * [MESOS-9759] - Log required quota headroom and available quota headroom in the allocator.
  * [MESOS-9760] - Decouple Docker runtime isolator manifest configuration from image provider
  * [MESOS-9769] - Add direct containerized support for filesystem operations.
  * [MESOS-9770] - Add no-new-privileges isolator.
  * [MESOS-9771] - Mask sensitive procfs paths.
  * [MESOS-9778] - Randomized the agents in the second allocation stage.
  * [MESOS-9787] - Log slow SSL (TLS) peer reverse DNS lookup.
  * [MESOS-9791] - Libprocess does not support server only SSL certificate verification.
  * [MESOS-9799] - Adopt container file operations in secrets volumes.
  * [MESOS-9802] - Remove quota role sorter in the allocator.
  * [MESOS-9805] - Run cgroup subsystems before moving the target PID.
  * [MESOS-9806] - Address allocator performance regression due to the addition of quota limits.
  * [MESOS-9807] - Introduce a `struct Quota` wrapper.
  * [MESOS-9812] - Add achievability validation for update quota call.
  * [MESOS-9820] - Add `updateQuota()` method to the allocator.
  * [MESOS-9833] - Introduce an agent flag for the default `/dev/shm` size
  * [MESOS-9876] - Use geteuid to determine subprocess' user when launching task.
  * [MESOS-9878] - Enable libprocess users to pass a custom SSL context when using Socket
  * [MESOS-9900] - Include overlayfs upperdir in disk quota accounting.
  * [MESOS-9908] - Introduce a new agent flag and support docker volume chown to task user.
  * [MESOS-9917] - Store a role tree in the allocator.
  * [MESOS-9932] - Removal of a role from the suppression list should be equivalent to REVIVE.

** Task
  * [MESOS-8486] - Webui should display role limits.
  * [MESOS-9485] - Unit test for master operation authorization.
  * [MESOS-9565] - Unit tests for creating and destroying persistent volumes in SLRP.
  * [MESOS-9598] - Update GET `/quota` to return both guarantees and limits.
  * [MESOS-9599] - Update `GET_QUOTA` to return both guarantees and limits.
  * [MESOS-9600] - Deprecate `SET_QUOTA` and `REMOVE_QUOTA` calls in favor of `UPDATE_QUOTA`.
  * [MESOS-9601] - Persist `QuotaConfig`s in the registry.
  * [MESOS-9602] - Provide backward compatibility for old quota configurations.
  * [MESOS-9603] - Add quota limits metrics.
  * [MESOS-9627] - Test CSI v1 in SLRP unit tests.
  * [MESOS-9699] - Pull in glog 0.4.0
  * [MESOS-9710] - Add tests to ensure random sorter performs correct weighted sorting.
  * [MESOS-9715] - Support specifying output file name for curl fetcher plugin
  * [MESOS-9754] - Design doc for agent draining
  * [MESOS-9757] - Design doc for container debug endpoint.
  * [MESOS-9775] - Design doc for UCR shared memory.
  * [MESOS-9788] - Configurable IPC namespace and shared memory in `namespaces/ipc` isolator
  * [MESOS-9793] - Implement UPDATE_FRAMEWORK call in V0 API for C++/Java
  * [MESOS-9809] - Use OpenSSL built-in functions for hostname validation
  * [MESOS-9810] - Reject certificate-less ciphers when certificate verification is enabled
  * [MESOS-9814] - Implement DrainAgent master/operator call with associated registry actions
  * [MESOS-9816] - Add draining state information to master state endpoints
  * [MESOS-9817] - Add minimum master capability for draining and deactivation states
  * [MESOS-9818] - Implement minimal agent-side draining handler
  * [MESOS-9821] - Agent kills all tasks when draining
  * [MESOS-9822] - Agent recovery code for task draining
  * [MESOS-9823] - Agent should modify status updates while draining
  * [MESOS-9825] - Introduce an agent flag to disallow sharing the IPC namespace from the host.
  * [MESOS-9826] - Set up `/dev/shm` in `filesystem/linux` isolator only when `namespaces/ipc` isolator is not enabled
  * [MESOS-9827] - Introduce the configurable shm protobuf API.
  * [MESOS-9828] - Document the IPC namespace and shm on UCR.
  * [MESOS-9829] - Implement the container debug endpoint on slave/http.cpp
  * [MESOS-9837] - Implement `FutureTracker` class along with helper functions.
  * [MESOS-9839] - Implement `IsolatorTracker` class.
  * [MESOS-9840] - Implement `LauncherTracker` class.
  * [MESOS-9841] - Integrate `IsolatorTracker` and `LinuxLauncher` with Mesos containerizer.
  * [MESOS-9842] - Implement tests for the `FutureTracker` class and for its helper functions.
  * [MESOS-9845] - Add docs for automatic agent draining
  * [MESOS-9846] - Update UI for agent draining
  * [MESOS-9849] - Add support for per-role REVIVE / SUPPRESS to V0 scheduler driver.
  * [MESOS-9853] - Update Docker executor to allow kill policy overrides
  * [MESOS-9860] - Agent should erase DrainInfo when draining complete
  * [MESOS-9862] - Agent should fail task launches while draining
  * [MESOS-9871] - Expose quota consumption in /roles endpoint.
  * [MESOS-9874] - Add environment variable `MESOS_ALLOCATION_ROLE` to the task/container.
  * [MESOS-9892] - Test various agent state transitions involving agent draining
  * [MESOS-9907] - Retain agent draining start time in master

** Documentation
  * [MESOS-9427] - Revisit quota documentation.


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

** Bug
  * [MESOS-9785] - Frameworks recovered from reregistered agents are not reported to master `/api/v1` subscribers.
  * [MESOS-9836] - Docker containerizer overwrites `/mesos/slave` cgroups.
  * [MESOS-9868] - NetworkInfo from the agent /state endpoint is not correct.
  * [MESOS-9887] - Race condition between two terminal task status updates for Docker/Command executor.
  * [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.

** Improvement
  * [MESOS-9889] - Master CPU high due to unexpected foreachkey behaviour in Master::__reregisterSlave.
  * [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.8.1
-------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-9395] - Check failure on `StorageLocalResourceProviderProcess::applyCreateDisk`.
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9730] - Executors cannot reconnect with agents using TLS1.3
  * [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-9779] - `UPDATE_RESOURCE_PROVIDER_CONFIG` agent call returns 404 ambiguously.
  * [MESOS-9782] - Random sorter fails to clear removed clients.
  * [MESOS-9786] - Race between two REMOVE_QUOTA calls crashes the master.
  * [MESOS-9803] - Memory leak caused by an infinite chain of futures in `UriDiskProfileAdaptor`.
  * [MESOS-9831] - Master should not report disconnected resource providers.
  * [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-9870] - Simultaneous adding/removal of a role from framework's roles and its suppressed roles crashes the master.

** Improvement
  * [MESOS-9695] - Remove the duplicate pid check in Docker containerizer
  * [MESOS-9759] - Log required quota headroom and available quota headroom in the allocator.
  * [MESOS-9787] - Log slow SSL (TLS) peer reverse DNS lookup.


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

  * Performance Improvements:

    * Frameworks can now specify the minimum resource quantities needed
      in an offer, which acts as an override of the global
      `--min_allocatable_resources` master flag. Updating schedulers to
      specify this field improves multi-scheduler scalability as it
      reduces the amount of offers declined from having insufficient
      resource quantities. Note that this feature currently requires that
      the scheduler re-subscribes each time it wants to mutate the
      minimum resource quantity offer filter information, see MESOS-7258.

    * The batching mechanism used for requests to the master's `/state`
      endpoint was extending to other read-only master endpoints like
      `/state-summary`, `/frameworks`, `/roles`, etc. (see MESOS-9158)
      In addition, responses for multiple concurrent requests to read-only master
      endpoints are now only computed once in cases where it can be guaranteed
      that all responses would be equal. (see MESOS-9224)
      This should significantly increase master responsiveness under
      heavy load.

    * Allocator cycle time is significantly decreased (around 40% for a
      small size cluster and up to 70% for larger clusters) when quota is
      used. This greatly narrows the allocator performance gap between
      quota and non-quota usage scenarios.

  * CLI

    * The new Mesos CLI now offers the task subcommand. The first
      command, attach, allows you to attach your terminal to a running
      task launched with a tty. The second command, exec, launches a
      new nested container inside a running task. To build the CLI,
      use the flag `--enable-new-cli` with Autotools and
      `-DENABLE_NEW_CLI=1` with CMake on MacOS or Linux.

  * Operation Feedback:

    * V1 schedulers can now receive operation feedback for operations on agent
      default resources, i.e. normal cpu, memory, and disk. This means that the
      v1 scheduler API's operation feedback feature can now be used for all
      non-task-launch operations (any offer operations except for LAUNCH and
      LAUNCH_GROUP) on any type of resources.

    * The experimental operation feedback API for v1 schedulers made a breaking
      change: the RECONCILE_OPERATIONS call no longer returns a 200 OK response
      with a body containing the full reconciliation results. Instead, a
      successful request now returns 202 Accepted, and a series of operation
      status updates are sent on the scheduler's event stream to satisfy the
      reconciliation request. This is similar to the way in which the master
      replies to requests for task status reconciliation.

  * Containerization:

    * [MESOS-9029] - New `linux/seccomp` isolator: Containers launched
      by Mesos containerizer can be sandboxed by enabling filtering of
      system calls using a configurable policy.

    * [MESOS-9675] - Support pulling docker images with docker manifest
      V2 Schema2 on Mesos Containerizer.

    * [MESOS-9133] - Support custom port range option to the `network/ports`
      isolator. Added the `--container_ports_isolated_range` flag to the
      `network/ports` isolator. This allows the operator to specify a custom
      port range to be protected by the isolator.

    * [MESOS-5158] - Support XFS quota for persistent volumes. Added
      persistent volume support to the `disk/xfs` isolator.

    * [MESOS-9009] - Support an option to create non-existing host
      paths for host path volume in Mesos Containerizer. Added a new
      agent flag `--host_path_volume_force_creation` for the
      `volume/host_path` isolator.

  * Container Storage Interface (CSI):

    * **Experimental** Supported the new CSI v1 API. Operators can deploy
      plugins that are compatible to either CSI v0 or v1 to create persistent
      volumes through storage local resource providers, and Mesos will
      automatically detect which CSI versions are supported by the plugins.

Additional API Changes:
  * [MESOS-9540] - Improved the experimental `DESTROY_DISK` operations so
    frameworks can now deprovision any unwanted pre-provisioned CSI volume
    directly, if they are authorized to perform `DESTROY_RAW_DISK` actions.

Unresolved Critical Issues:
  * [MESOS-9697] - Release RPMs are not uploaded to bintray
  * [MESOS-9672] - Docker containerizer should ignore pids of executors that do not pass the connection check.
  * [MESOS-9654] - `PUBLISH_RESOURCES` should fail if the resource version changes.
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9609] - Master check failure when marking agent unreachable
  * [MESOS-9579] - ExecutorHttpApiTest.HeartbeatCalls is flaky.
  * [MESOS-9560] - ContentType/AgentAPITest.MarkResourceProviderGone/1 is flaky
  * [MESOS-9536] - Nested container launched with non-root user may not be able to write to its sandbox via the environment variable
  * [MESOS-9520] - IOTest.Read hangs on Windows
  * [MESOS-9500] - spark submit with docker image on mesos cluster fails.
  * [MESOS-9426] - ZK master detection can become forever pending.
  * [MESOS-9393] - Fetcher crashes extracting archives with non-ASCII filenames.
  * [MESOS-9365] - Windows - GET_CONTAINERS API call causes the Mesos agent to fail
  * [MESOS-9355] - Persistence volume does not unmount correctly with wrong artifact URI
  * [MESOS-9352] - Data in persistent volume deleted accidentally when using Docker container and Persistent volume
  * [MESOS-9306] - Mesos containerizer can get stuck during cgroup cleanup
  * [MESOS-9180] - tasks get stuck in TASK_KILLING on the default executor
  * [MESOS-9053] - Network ports isolator can falsely trigger while destroying containers.
  * [MESOS-9006] - The agent's GET_AGENT leaks resource information when using authorization
  * [MESOS-8946] - CURL 7.58 causes Mesos to fail decoding raw responses.
  * [MESOS-8840] - `cpu.cfs_quota_us` may be accidentally set for command task using docker during agent recovery.
  * [MESOS-8803] - Libprocess deadlocks in a test.
  * [MESOS-8769] - Agent crashes when CNI config not defined
  * [MESOS-8679] - If the first KILL stuck in the default executor, all other KILLs will be ignored.
  * [MESOS-8608] - RmdirContinueOnErrorTest.RemoveWithContinueOnError fails.
  * [MESOS-8257] - Unified Containerizer "leaks" a target container mount path to the host FS when the target resolves to an absolute path
  * [MESOS-8256] - Libprocess can silently deadlock due to worker thread exhaustion.
  * [MESOS-8096] - Enqueueing events in MockHTTPScheduler can lead to segfaults.
  * [MESOS-8038] - Launching GPU task sporadically fails.
  * [MESOS-7971] - PersistentVolumeEndpointsTest.EndpointCreateThenOfferRemove test is flaky
  * [MESOS-7911] - Non-checkpointing framework's tasks should not be marked LOST when agent disconnects.
  * [MESOS-7748] - Slow subscribers of streaming APIs can lead to Mesos OOMing.
  * [MESOS-7721] - Master's agent removal rate limit also applies to agent unreachability.
  * [MESOS-7566] - Master crash due to failed check in DRFSorter::remove
  * [MESOS-7386] - Executor not cleaning up existing running docker containers if external logrotate/logger processes die/killed
  * [MESOS-5989] - Libevent SSL Socket downgrade code accesses uninitialized memory / assumes single peek is sufficient.
  * [MESOS-5754] - CommandInfo.user not honored in docker containerizer
  * [MESOS-2842] - Master crashes when framework changes principal on re-registration

All Resolved Issues:

** Bug
  * [MESOS-5048] - MesosContainerizerSlaveRecoveryTest.ResourceStatistics is flaky
  * [MESOS-5189] - SSLTest.ProtocolMismatch is slow
  * [MESOS-6874] - Agent silently ignores FS isolation when protobuf is malformed
  * [MESOS-6949] - SchedulerTest.MasterFailover is flaky
  * [MESOS-6990] - PartitionTest.TaskCompletedOnPartitionedAgent is flaky.
  * [MESOS-7042] - Send SIGKILL after SIGTERM to IOSwitchboard after container termination.
  * [MESOS-7076] - libprocess tests fail when using libevent 2.1.8
  * [MESOS-7474] - Mesos fetcher cache doesn't retry when missed.
  * [MESOS-7564] - Introduce a heartbeat mechanism for v1 HTTP executor <-> agent communication.
  * [MESOS-7883] - Quota heuristic check not accounting for mount volumes
  * [MESOS-8156] - Add a socketpair helper to the stout net API
  * [MESOS-8343] - SchedulerHttpApiTest.UpdatePidToHttpScheduler is flaky.
  * [MESOS-8467] - Destroyed executors might be used after `Slave::publishResource()`.
  * [MESOS-8470] - CHECK failure in DRFSorter due to invalid framework id.
  * [MESOS-8545] - AgentAPIStreamingTest.AttachInputToNestedContainerSession is flaky.
  * [MESOS-8547] - Mount devpts with compatible defaults.
  * [MESOS-8568] - Command checks should always call `WAIT_NESTED_CONTAINER` before `REMOVE_NESTED_CONTAINER`
  * [MESOS-8782] - Transition operations to OPERATION_GONE_BY_OPERATOR when marking an agent gone.
  * [MESOS-8783] - Transition pending operations to OPERATION_UNREACHABLE when an agent is removed.
  * [MESOS-8797] - Check failed in the default executor while running `MesosContainerizer/DefaultExecutorTest.TaskUsesExecutor/0` test.
  * [MESOS-8835] - mesos-tests takes a long time to execute no tests
  * [MESOS-8872] - OperationReconciliationTest.AgentPendingOperationAfterMasterFailover is flaky.
  * [MESOS-8887] - Unreachable tasks are not GC'ed when unreachable agent is GC'ed.
  * [MESOS-8907] - Docker image fetcher fails with HTTP/2.
  * [MESOS-8978] - Command executor calling setsid breaks the tty support.
  * [MESOS-9056] - mesos-style.py messaging is poor
  * [MESOS-9074] - Pylint is too noisy when using mesos-style.py
  * [MESOS-9079] - Test MasterTestPrePostReservationRefinement.LaunchGroup is flaky.
  * [MESOS-9089] - Test `PartitionTest.PartitionAwareTaskCompletedOnPartitionedAgent` is flaky.
  * [MESOS-9112] - mesos-style reports violations on a clean checkout
  * [MESOS-9124] - Agent reconfiguration can cause master to REVIVE on scheduler's behalf
  * [MESOS-9130] - Test `StorageLocalResourceProviderTest.ROOT_ContainerTerminationMetric` is flaky.
  * [MESOS-9131] - Health checks launching nested containers while a container is being destroyed lead to unkillable tasks.
  * [MESOS-9143] - MasterQuotaTest.RemoveSingleQuota is flaky.
  * [MESOS-9168] - Libprocess' http client does not encode the outgoing query.
  * [MESOS-9172] - Fetcher deadlock with duplicated URIs.
  * [MESOS-9179] - ./support/python3/mesos-gtest-runner.py --help crashes
  * [MESOS-9186] - Failed to build Mesos with Python 3.7 and new CLI enabled
  * [MESOS-9187] - Add allocator benchmark to allow multiple framework/agent profiles.
  * [MESOS-9190] - Test `StorageLocalResourceProviderTest.ROOT_CreateDestroyDiskRecovery` is flaky.
  * [MESOS-9193] - Mesos build fail with Clang 3.5.
  * [MESOS-9210] - Mesos v1 scheduler library does not properly handle SUBSCRIBE retries
  * [MESOS-9212] - Disable SIGCHLD handling in libev.
  * [MESOS-9214] - Stout.FsTest.Used fails on macOS
  * [MESOS-9217] - LongLivedDefaultExecutorRestart is flaky.
  * [MESOS-9222] - Linking libevent should be avoided.
  * [MESOS-9225] - Github's mesos/modules does not build.
  * [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-9232] - verify-reviews.py broken after enabling python3 support scripts
  * [MESOS-9240] - CSI protobuf build fails when dependency tracking is disabled.
  * [MESOS-9253] - Reviewbot is failing when posting a review
  * [MESOS-9266] - Whenever our packaging tasks trigger errors we run into permission problems.
  * [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-9300] - XFS isolator can mislabel project IDs on persistence volumes.
  * [MESOS-9302] - Mesos fails to build on Fedora 28
  * [MESOS-9308] - URI disk profile adaptor could deadlock.
  * [MESOS-9316] - FsTest.Used is flaky
  * [MESOS-9317] - Some master endpoints do not handle failed authorization properly.
  * [MESOS-9319] - Move root filesystem creation to the `filesystem/linux` isolator.
  * [MESOS-9324] - Resource fragmentation: frameworks may be starved of port resources in the presence of large number frameworks with quota.
  * [MESOS-9331] - Some library functions ignore failures from ::close which should probably be handled.
  * [MESOS-9334] - Container stuck at ISOLATING state due to libevent poll never returns.
  * [MESOS-9350] - CLI build step is broken with CMake due to missing file.
  * [MESOS-9354] - Automatically remount read-only bind mounts.
  * [MESOS-9357] - FetcherTest.DuplicateFileURI fails on macos
  * [MESOS-9358] - Test `SlaveRecoveryTest.AgentReconfigurationWithRunningTask` is flaky.
  * [MESOS-9362] - Test `CgroupsIsolatorTest.ROOT_CGROUPS_CreateRecursively` is flaky.
  * [MESOS-9366] - Test `HealthCheckTest.HealthyTaskNonShell` can hang.
  * [MESOS-9367] - GetContainers call crashes when using XFS disk isolation.
  * [MESOS-9370] - Unable to build new Mesos CLI with PyInstaller and Python 3.7.
  * [MESOS-9382] - mesos-gtest-runner doesn't work on systems without ulimit binary
  * [MESOS-9390] - Warnings in AdaptedOperation prevent clang build
  * [MESOS-9397] - PosixRLimitsIsolatorTest.UnsetLimits is broken on macOS 10.14.2 beta3.
  * [MESOS-9398] - post-reviews.py fails to update an existing chain.
  * [MESOS-9411] - Validation of JWT tokens using HS256 hashing algorithm is not thread safe.
  * [MESOS-9417] - User mesosphere made lots of incorrect ticket updates
  * [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-9434] - Completed framework update streams may retry forever
  * [MESOS-9459] - Reviewbot is not verifying reviews that need verification
  * [MESOS-9462] - Devices in a container are inaccessible due to `nodev` on `/var/run`.
  * [MESOS-9469] - Mesos does not validate framework-supplied FrameworkIDs
  * [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-9495] - Test `MasterTest.CreateVolumesV1AuthorizationFailure` is flaky.
  * [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-9507] - Agent could not recover due to empty docker volume checkpointed files.
  * [MESOS-9508] - Official 1.7.0 tarball can't be built on Ubuntu 16.04 LTS.
  * [MESOS-9514] - Reviewboard bot fails on verify-reviews.py.
  * [MESOS-9517] - SLRP should treat gRPC timeouts as non-terminal errors, instead of reporting OPERATION_FAILED.
  * [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.
  * [MESOS-9521] - MasterAPITest.OperationUpdatesUponAgentGone is flaky
  * [MESOS-9529] - `/proc` should be remounted even if a nested container set `share_pid_namespace` to true
  * [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-9542] - Hierarchical allocator check failure when an operation on a shutdown framework finishes
  * [MESOS-9544] - SLRP does not clean up destroyed persistent volumes.
  * [MESOS-9549] - nvidia/cuda 10 does not work on GPU isolator.
  * [MESOS-9554] - Allocator might skip allocations because a single framework is incapable of receiving certain resources.
  * [MESOS-9555] - Allocator CHECK failure: reservationScalarQuantities.contains(role).
  * [MESOS-9557] - Operations are leaked in Framework struct when agents are removed
  * [MESOS-9559] - OPERATION_UNREACHABLE and OPERATION_GONE_BY_OPERATOR updates don't include the agent/RP IDs
  * [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-9573] - Agent should not try to recover operation status update streams that haven't been created yet.
  * [MESOS-9574] - Operation status update streams are not properly garbage collected.
  * [MESOS-9582] - Reviewbot jenkins jobs stops validating any reviews as soon as it sees a patch which does not apply
  * [MESOS-9590] - Mesos CI sometimes, incorrectly, overwrites already-pushed mesos master nightly images with new images built from non-master branches.
  * [MESOS-9592] - Mesos Websitebot is flaky
  * [MESOS-9597] - Status update streams for operations affecting agent default resources should be stored under "meta/slaves/<slave_id>/operations/"
  * [MESOS-9605] - mesos/mesos-centos nightly docker image has to include the SHA of the build.
  * [MESOS-9607] - Removing a resource provider with consumers breaks resource publishing.
  * [MESOS-9610] - Fetcher vulnerability - escaping from sandbox
  * [MESOS-9612] - Resource provider manager assumes all operations are triggered by frameworks
  * [MESOS-9619] - Mesos Master Crashes with Launch Group when using Port Resources
  * [MESOS-9621] - Mesos failed to build due to error LNK2019 on Windows using MSVC.
  * [MESOS-9629] - Pylint reports cyclic dependencies in cli_new
  * [MESOS-9635] - OperationReconciliationTest.AgentPendingOperationAfterMasterFailover is flaky again (3x) due to orphan operations
  * [MESOS-9637] - Impossible to CREATE a volume on resource provider resources over the operator API
  * [MESOS-9661] - Agent crashes when SLRP recovers dropped operations.
  * [MESOS-9667] - Check failure when executor for task using resource provider resources subscribes before agent is registered.
  * [MESOS-9688] - Quota is not enforced properly when subroles have reservations.
  * [MESOS-9691] - Quota headroom calculation is off when subroles are involved.
  * [MESOS-9692] - Quota may be under allocated for disk resources.
  * [MESOS-9696] - Test MasterQuotaTest.AvailableResourcesSingleDisconnectedAgent is flaky
  * [MESOS-9707] - Calling link::lo() may cause runtime error
  * [MESOS-9667] - Check failure when executor for task using resource provider resources subscribes before agent is registered.
  * [MESOS-9711] - Avoid shutting down executors registering before a required resource provider.
  * [MESOS-9712] - StorageLocalResourceProviderTest.CsiPluginRpcMetrics is flaky.
  * [MESOS-9727] - Heartbeat calls from executor to agent are reported as errors.
  * [MESOS-9729] - Unpublishing a volume that is failed to publish crashes the agent with CSI v1.
  * [MESOS-9733] - Random sorter generates non-uniform result for hierarchical roles.
  * [MESOS-9740] - Invalid protobuf unions in ExecutorInfo::ContainerInfo will prevent agents from reregistering with 1.8+ masters

** Epic
  * [MESOS-8054] - Feedback for operations
  * [MESOS-8345] - Improve master responsiveness while serving state information.
  * [MESOS-9029] - Seccomp syscall filtering in Mesos containerizer
  * [MESOS-9211] - Make the new Mesos CLI production ready
  * [MESOS-9675] - Docker Manifest V2 Schema2 Support.

** Story
  * [MESOS-907] - Add Kerberos Authentication support

** Improvement
  * [MESOS-4036] - Install instructions for CentOS 6.6 lead to errors running `perf`.
  * [MESOS-4599] - ReviewBot should re-verify a review chain if any of the reviews is updated
  * [MESOS-5158] - Provide XFS quota support for persistent volumes.
  * [MESOS-6765] - Make the Resources wrapper "copy-on-write" to improve performance.
  * [MESOS-6934] - Support pulling Docker images with V2 Schema 2 image manifest
  * [MESOS-7124] - Replace monadic type get() functions with operator*
  * [MESOS-7947] - Add GC capability to nested containers
  * [MESOS-8025] - Update the master field in the new CLI config to accept a URL instead of an <ip:port>
  * [MESOS-8206] - Add the pip-requirements from other modules to the pylint virtual environment
  * [MESOS-8380] - Update WebUI to show local resource providers.
  * [MESOS-8403] - Add agent HTTP API operator call to mark local resource providers as gone
  * [MESOS-8880] - Add minimum capabilities in the master.
  * [MESOS-8999] - Add default bodies for libprocess HTTP error responses.
  * [MESOS-9133] - Make the range of ports protected by the network/ports isolator configurable.
  * [MESOS-9158] - Parallel serving of state-related read-only requests in the Master.
  * [MESOS-9194] - Extend request batching to '/roles' endpoint
  * [MESOS-9223] - Storage local provider does not sufficiently handle container launch failures or errors
  * [MESOS-9224] - De-duplicate read-only requests to master based on principal.
  * [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-9258] - Prevent subscribers to the master's event stream from leaking connections
  * [MESOS-9275] - Allow optional `profile` to be specified in `CREATE_DISK` offer operation.
  * [MESOS-9292] - Rejected quotas request error messages should specify which resources were overcommitted.
  * [MESOS-9301] - Add flag to disable per-framework metrics.
  * [MESOS-9305] - Create cgoup recursively to workaround systemd deleting cgroups_root.
  * [MESOS-9315] - Adding support for implicit allocation of mandatory custom resources in Mesos
  * [MESOS-9321] - Add an optional `vendor` field in `Resource.DiskInfo.Source`.
  * [MESOS-9340] - Log all socket errors in libprocess.
  * [MESOS-9384] - Resource providers reported by master should reflect connected resource providers
  * [MESOS-9406] - Allow for optionally unbundled leveldb from CMake builds.
  * [MESOS-9486] - Set up `object.value` for `CREATE_DISK` and `DESTROY_DISK` authorizations.
  * [MESOS-9504] - Use ResourceQuantities in the allocator and sorter to improve performance.
  * [MESOS-9510] - Disallowed nan, inf and so on in `Value::Scalar`.
  * [MESOS-9516] - Extend `min_allocatable_resources` flag to cover non-scalar resources.
  * [MESOS-9523] - Add per-framework allocatable resources matcher/filter.
  * [MESOS-9540] - Support `DESTROY_DISK` on preprovisioned CSI volumes.
  * [MESOS-9608] - Refactor and Improve `class ResourceQuantity`.
  * [MESOS-9613] - Support seccomp `unconfined` option for whitelisting.
  * [MESOS-9628] - Consider running tox as part of test suite, not as part of style checking
  * [MESOS-9642] - Avoid reading host mount table when allocating a gid in GIDManager.
  * [MESOS-9643] - Make setting volume ownership asynchronous in volume gid manager
  * [MESOS-9655] - Improving SLRP tests for preprovisioned volumes.
  * [MESOS-9704] - Support docker manifest v2s2 config GC.

** Task
  * [MESOS-4509] - Remove deprecated .json endpoints.
  * [MESOS-5827] - Add example framework for using inverse offers
  * [MESOS-6551] - Add attach/exec commands to the Mesos CLI
  * [MESOS-6630] - Add some benchmark test for quota allocation
  * [MESOS-6840] - Tests for quota capacity heuristic.
  * [MESOS-8241] - Add metrics for offer operation feedback
  * [MESOS-8528] - Design Doc for Storage External Resource Provider (SERP) support.
  * [MESOS-8770] - Use Python3 for Mesos support scripts
  * [MESOS-8810] - Grant non-root task user the permissions to access the SANDBOX_PATH volume of PARENT type
  * [MESOS-8813] - Support multiple tasks with different users can access a persistent volume.
  * [MESOS-8957] - Install Python 3 on Mesos CI instances
  * [MESOS-8975] - Problem and solution overview for the slow API issue.
  * [MESOS-9009] - Support for creation non-existing host paths in a whitelist as source paths
  * [MESOS-9032] - Update build scripts to support `seccomp-isolator` flag and `libseccomp` library
  * [MESOS-9033] - Add Seccomp-related protobufs
  * [MESOS-9034] - Implement a wrapper class for `libseccomp` API
  * [MESOS-9035] - Implement `linux/seccomp` isolator
  * [MESOS-9099] - Add allocator quota tests regarding reserve/unreserve already allocated resources.
  * [MESOS-9105] - Implement Docker Seccomp profile parser.
  * [MESOS-9106] - Add seccomp filter into containerizer launcher.
  * [MESOS-9229] - Install Python3 on ubuntu-16.04-arm docker image
  * [MESOS-9265] - Analyse and pinpoint libprocess SSL failures when using libevent 2.1.8.
  * [MESOS-9270] - Get rid of dependency on `net-tools` in network/cni isolator.
  * [MESOS-9278] - Add an operation status update manager to the agent
  * [MESOS-9318] - Consider providing better operation status updates while an RP is recovering
  * [MESOS-9333] - Document usage and build of new Mesos CLI
  * [MESOS-9356] - Make agent atomically checkpoint operations and resources
  * [MESOS-9392] - Implement tests for Seccomp parser
  * [MESOS-9396] - Use the built CLI binary when running new CLI integration tests in CI
  * [MESOS-9399] - Update 'mesos task list' to only list running tasks
  * [MESOS-9409] - Implement Seccomp isolator tests
  * [MESOS-9471] - Master should track operations on agent default resources.
  * [MESOS-9472] - Unblock operation feedback on agent default resources.
  * [MESOS-9473] - Add end to end tests for operations on agent default resources.
  * [MESOS-9477] - Documentation for operation feedback
  * [MESOS-9525] - Agent capability for operation feedback on default resources
  * [MESOS-9535] - Master should clean up operations from downgraded agents
  * [MESOS-9538] - Agent `ReconcileOperations` handler should handle operation affecting default resources
  * [MESOS-9578] - Document per framework minimal allocatable resources in framework development guides
  * [MESOS-9596] - Add a new `UPDATE_QUOTA` operator call.
  * [MESOS-9604] - Clean up `QuotaRequest` and `QuotaInfo`.
  * [MESOS-9615] - Example framework for feedback on agent default resources
  * [MESOS-9620] - Add metrics for volume gid manager
  * [MESOS-9622] - Refactor SLRP with a CSI volume manager.
  * [MESOS-9623] - Implement CSI volume manager with CSI v1.
  * [MESOS-9624] - Bundle CSI spec v1.0 in Mesos.
  * [MESOS-9625] - Make `DiskProfileAdaptor` agnostic to CSI spec version.
  * [MESOS-9626] - Make SLRP pick the appropriate CSI versions for plugins.
  * [MESOS-9632] - Refactor SLRP with a CSI service manager.
  * [MESOS-9639] - Make CSI plugin RPC metrics agnostic to CSI versions.
  * [MESOS-9648] - Make operation reconciliation send asynchronous updates
  * [MESOS-9651] - Design for docker registry v2 schema2 basic support.
  * [MESOS-9676] - Add prettyjws support for docker v2 s1 manifest.
  * [MESOS-9694] - Refactor UCR docker store to construct 'Image' protobuf at Puller.

** Documentation
  * [MESOS-9036] - Document `linux/seccomp` isolator


Release Notes - Mesos - Version 1.7.3 (WIP)
-------------------------------------------
* 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.3 (WIP)
-------------------------------------------
* This is a bug fix release.

** Bug
  * [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-9564] - Logrotate container logger lets tasks execute arbitrary commands in the Mesos agent's namespace.
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9619] - Mesos Master Crashes with Launch Group when using Port Resources
  * [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-9766] - /__processes__ endpoint can hang.
  * [MESOS-9786] - Race between two REMOVE_QUOTA calls crashes the master.
  * [MESOS-9787] - Log slow SSL (TLS) peer reverse DNS lookup.
  * [MESOS-9836] - Docker containerizer overwrites `/mesos/slave` cgroups.
  * [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-10007] - Command executor can miss exit status for short-lived commands due to double-reaping.

** Improvement
  * [MESOS-8880] - Add minimum capabilities in the master.
  * [MESOS-9159] - Support Foreign URLs in docker registry puller.
  * [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.6.2
-------------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-7042] - Send SIGKILL after SIGTERM to IOSwitchboard after container termination.
  * [MESOS-7474] - Mesos fetcher cache doesn't retry when missed.
  * [MESOS-8128] - Make os::pipe file descriptors O_CLOEXEC.
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads.
  * [MESOS-8545] - AgentAPIStreamingTest.AttachInputToNestedContainerSession is flaky.
  * [MESOS-8568] - Command checks should always call `WAIT_NESTED_CONTAINER` before `REMOVE_NESTED_CONTAINER`
  * [MESOS-8887] - Unreachable tasks are not GC'ed when unreachable agent is GC'ed.
  * [MESOS-8907] - Docker image fetcher fails with HTTP/2.
  * [MESOS-8917] - Agent leaking file descriptors into forked processes
  * [MESOS-8921] - Autotools don't work with newer OpenJDK versions
  * [MESOS-8978] - Command executor calling setsid breaks the tty support.
  * [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-9131] - Health checks launching nested containers while a container is being destroyed lead to unkillable tasks.
  * [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-9151] - Container stuck at ISOLATING due to FD leak.
  * [MESOS-9152] - Close all file descriptors except whitelist_fds in posix/subprocess.
  * [MESOS-9164] - Subprocess should unset CLOEXEC on whitelisted file descriptors.
  * [MESOS-9170] - Zookeeper doesn't compile with newer gcc due to format error.
  * [MESOS-9196] - Removing rootfs mounts may fail with EBUSY.
  * [MESOS-9210] - Mesos v1 scheduler library does not properly handle SUBSCRIBE retries.
  * [MESOS-9231] - `docker inspect` may return an unexpected result to Docker executor due to a race condition.
  * [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-9283] - Docker containerizer actor can get backlogged with large number of containers.
  * [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-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-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-9518] - CNI_NETNS should not be set for orphan containers that do not have network namespace.
  * [MESOS-9531] - chown error handling is incorrect in createSandboxDirectory.
  * [MESOS-9532] - ResourceOffersTest.ResourceOfferWithMultipleSlaves is flaky.
  * [MESOS-9533] - CniIsolatorTest.ROOT_CleanupAfterReboot is flaky.
  * [MESOS-9555] - Allocator CHECK failure: reservationScalarQuantities.contains(role).

** Improvement
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads
  * [MESOS-9305] - Create cgoup recursively to workaround systemd deleting cgroups_root.
  * [MESOS-9340] - Log all socket errors in libprocess.
  * [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-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.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-7506] - Multiple tests leave orphan containers.
  * [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.4 (WIP)
-------------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-9124] - Agent reconfiguration can cause master to unsuppress on scheduler's behalf.
  * [MESOS-9418] - Add support for the `Discard` blkio operation type.
  * [MESOS-9529] - `/proc` should be remounted even if a nested container set `share_pid_namespace` to true.
  * [MESOS-9616] - `Filters.refuse_seconds` declines resources not in offers.
  * [MESOS-9619] - Mesos Master Crashes with Launch Group when using Port Resources
  * [MESOS-9695] - Remove the duplicate pid check in Docker containerizer
  * [MESOS-9707] - Calling link::lo() may cause runtime error
  * [MESOS-9766] - /__processes__ endpoint can hang.
  * [MESOS-9786] - Race between two REMOVE_QUOTA calls crashes the master.
  * [MESOS-9787] - Log slow SSL (TLS) peer reverse DNS lookup.
  * [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-9870] - Simultaneous adding/removal of a role from framework's roles and its suppressed roles crashes the master.
  * [MESOS-10007] - Command executor can miss exit status for short-lived commands due to double-reaping.

** Improvement
  * [MESOS-9159] - Support Foreign URLs in docker registry puller.
  * [MESOS-9675] - Docker Manifest V2 Schema2 Support.
  * [MESOS-9704] - Support docker manifest v2s2 config GC.
  * [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.5.3
-------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-7474] - Mesos fetcher cache doesn't retry when missed.
  * [MESOS-8887] - Unreachable tasks are not GC'ed when unreachable agent is GC'ed.
  * [MESOS-8907] - Docker image fetcher fails with HTTP/2.
  * [MESOS-9210] - Mesos v1 scheduler library does not properly handle SUBSCRIBE retries
  * [MESOS-9317] - Some master endpoints do not handle failed authorization properly.
  * [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-9492] - Persist CNI working directory across reboot.
  * [MESOS-9507] - Agent could not recover due to empty docker volume checkpointed files.
  * [MESOS-9518] - CNI_NETNS should not be set for orphan containers that do not have network namespace.
  * [MESOS-9532] - ResourceOffersTest.ResourceOfferWithMultipleSlaves is flaky.
  * [MESOS-9533] - CniIsolatorTest.ROOT_CleanupAfterReboot is flaky.
  * [MESOS-9555] - Allocator CHECK failure: reservationScalarQuantities.contains(role).
  * [MESOS-9581] - Mesos package naming appears to be undeterministic.

** Improvement:
  * [MESOS-9305] - Create cgoup recursively to workaround systemd deleting cgroups_root.


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

** Bug
  * [MESOS-3790] - ZooKeeper connection should retry on `EAI_NONAME`.
  * [MESOS-7474] - Mesos fetcher cache doesn't retry when missed.
  * [MESOS-8128] - Make os::pipe file descriptors O_CLOEXEC.
  * [MESOS-8418] - mesos-agent high cpu usage because of numerous /proc/mounts reads.
  * [MESOS-8545] - AgentAPIStreamingTest.AttachInputToNestedContainerSession is flaky.
  * [MESOS-8568] - Command checks should always call `WAIT_NESTED_CONTAINER` before `REMOVE_NESTED_CONTAINER`.
  * [MESOS-8620] - Containers stuck in FETCHING possibly due to unresponsive server.
  * [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-8907] - Docker image fetcher fails with HTTP/2.
  * [MESOS-8917] - Agent leaking file descriptors into forked processes.
  * [MESOS-8921] - Autotools don't work with newer OpenJDK versions.
  * [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-8978] - Command executor calling setsid breaks the tty support.
  * [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-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-9131] - Health checks launching nested containers while a container is being destroyed lead to unkillable tasks.
  * [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-9151] - Container stuck at ISOLATING due to FD leak.
  * [MESOS-9170] - Zookeeper doesn't compile with newer gcc due to format error.
  * [MESOS-9196] - Removing rootfs mounts may fail with EBUSY.
  * [MESOS-9231] - `docker inspect` may return an unexpected result to Docker executor due to a race condition.
  * [MESOS-9267] - Mesos agent crashes when CNI network is not configured but used.
  * [MESOS-9279] - Docker Containerizer 'usage' call might be expensive if mount table is big.
  * [MESOS-9283] - Docker containerizer actor can get backlogged with large number of containers.
  * [MESOS-9305] - Create cgoup recursively to workaround systemd deleting cgroups_root.
  * [MESOS-9308] - URI disk profile adaptor could deadlock.
  * [MESOS-9317] - Some master endpoints do not handle failed authorization properly.
  * [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-9411] - Validation of JWT tokens using HS256 hashing algorithm is not thread safe.
  * [MESOS-9419] - Executor to framework message crashes master if framework has not re-registered.
  * [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.

** Improvement:
  * [MESOS-9510] - Disallowed nan, inf and so on in `Value::Scalar`.
  * [MESOS-9516] - Extend `min_allocatable_resources` flag to cover non-scalar resources.
  * [MESOS-9518] - CNI_NETNS should not be set for orphan containers that do not have network namespace.


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.4 (WIP)
-------------------------------------------
* This is a bug fix release.

** Bug
  * [MESOS-9507] - Agent could not recover due to empty docker volume checkpointed files.
  * [MESOS-9695] - Remove the duplicate pid check in Docker containerizer

** Improvement:
  * [MESOS-9159] - Support Foreign URLs in docker registry puller.
  * [MESOS-9675] - Docker Manifest V2 Schema2 Support.


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

** Bug
  * [MESOS-8128] - Make os::pipe file descriptors O_CLOEXEC.
  * [MESOS-8568] - Command checks should always call `WAIT_NESTED_CONTAINER` before `REMOVE_NESTED_CONTAINER`
  * [MESOS-8620] - Containers stuck in FETCHING possibly due to unresponsive server.
  * [MESOS-8917] - Agent leaking file descriptors into forked processes.
  * [MESOS-8921] - Autotools don't work with newer OpenJDK versions
  * [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-9151] - Container stuck at ISOLATING due to FD leak.
  * [MESOS-9170] - Zookeeper doesn't compile with newer gcc due to format error.
  * [MESOS-9196] - Removing rootfs mounts may fail with EBUSY.
  * [MESOS-9221] - If some image layers are large, the image pulling may stuck due to the authorized token expired.
  * [MESOS-9231] - `docker inspect` may return an unexpected result to Docker executor due to a race condition.
  * [MESOS-9279] - Docker Containerizer 'usage' call might be expensive if mount table is big.
  * [MESOS-9283] - Docker containerizer actor can get backlogged with large number of containers.
  * [MESOS-9304] - Test `CGROUPS_ROOT_PidNamespaceForward` and `CGROUPS_ROOT_PidNamespaceBackward` fails on 1.4.x.
  * [MESOS-9334] - Container stuck at ISOLATING state due to libevent poll never returns.
  * [MESOS-9419] - Executor to framework message crashes master if framework has not re-registered.
  * [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-9518] - CNI_NETNS should not be set for orphan containers that do not have network namespace.
  * [MESOS-9532] - ResourceOffersTest.ResourceOfferWithMultipleSlaves is flaky.
  * [MESOS-9533] - CniIsolatorTest.ROOT_CleanupAfterReboot is flaky.

** Improvement:
  * [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.4.2
-------------------------------------
* 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) - cancelled
-------------------------------------------------------
* 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
