You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2016/09/28 21:44:44 UTC

[1/8] mesos git commit: Added synchronization in link logic to prevent relinking races.

Repository: mesos
Updated Branches:
  refs/heads/0.28.x 91845ec22 -> d01e3f04c
  refs/heads/1.0.x c885b2697 -> d6d1406a9


Added synchronization in link logic to prevent relinking races.

There is a general pattern in the `SocketManager` in which most methods
will grab the mutex and then check if the socket to manage exists in
the `SocketManager`s mapping.  If the socket does not exist, the
`SocketManager` silently returns.

This adds similar logic inside two critical sections of the `link`
codepath.  If there are multiple calls to `link` in-flight at once,
this prevents sockets from being leaked into unmanaged callback loops.

Review: https://reviews.apache.org/r/52181/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5e4af878
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5e4af878
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5e4af878

Branch: refs/heads/1.0.x
Commit: 5e4af8789afd193749b9f58c1238f56e5a8eb470
Parents: be7d29a
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:32 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:22:16 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp | 43 ++++++++++++++++++++++++--------
 1 file changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/5e4af878/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index 7a750a0..8dc163f 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1497,16 +1497,26 @@ void SocketManager::link_connect(
     return;
   }
 
-  size_t size = 80 * 1024;
-  char* data = new char[size];
+  synchronized (mutex) {
+    // It is possible that a prior call to `link()` with `RECONNECT`
+    // semantics has swapped out this socket before we finished
+    // connecting. In this case, we simply stop here and allow the
+    // latest created socket to complete the link.
+    if (sockets.count(socket) <= 0) {
+      return;
+    }
 
-  socket.recv(data, size)
-    .onAny(lambda::bind(
-        &internal::ignore_recv_data,
-        lambda::_1,
-        socket,
-        data,
-        size));
+    size_t size = 80 * 1024;
+    char* data = new char[size];
+
+    socket.recv(data, size)
+      .onAny(lambda::bind(
+          &internal::ignore_recv_data,
+          lambda::_1,
+          socket,
+          data,
+          size));
+  }
 
   // In order to avoid a race condition where internal::send() is
   // called after SocketManager::link() but before the socket is
@@ -1603,11 +1613,22 @@ void SocketManager::link(
 
         // Update all the data structures that are mapped to the old
         // socket. They will now point to the new socket we are about
-        // to try to connect. The old socket should no longer have any
-        // references after the swap and should be closed.
+        // to try to connect.
         Socket existing(sockets.at(persists.at(to.address)));
         swap_implementing_socket(existing, socket.get());
 
+        // The `existing` socket could be a perfectly functional socket.
+        // In this case, the socket may be referenced in the callback
+        // loop of `internal::ignore_recv_data`. We shutdown the socket
+        // in order to interrupt this callback loop and thereby release
+        // the final socket reference. This will not result in an
+        // `ExitedEvent` because we have already removed the `existing`
+        // socket from the mapping of linkees and linkers.
+        Try<Nothing> shutdown = existing.shutdown();
+        if (shutdown.isError()) {
+          VLOG(1) << "Failed to shutdown old link: " << shutdown.error();
+        }
+
         connect = true;
       }
     }


[5/8] mesos git commit: Added ExitedEvents for links whose sockets fail on creation.

Posted by jo...@apache.org.
Added ExitedEvents for links whose sockets fail on creation.

When we try to link to a remote process, we will send the linkee an
`ExitedEvent` when the link is broken or if the connection fails.
This patch adds an `ExitedEvent` when the socket creation step fails.
This is logically equivalent to having the connection step fail.

Because this is an entirely unexpected case, the log level should be
a WARNING or higher.

Review: https://reviews.apache.org/r/52180/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/42e156c5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/42e156c5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/42e156c5

Branch: refs/heads/0.28.x
Commit: 42e156c575551dfed8d3ed488a88f7b8bd843331
Parents: 91845ec
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:28 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:25:54 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/42e156c5/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index 38e2568..9503197 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1451,7 +1451,13 @@ void SocketManager::link(
         // from SSL to POLL if enabled.
         Try<Socket> create = Socket::create(kind);
         if (create.isError()) {
-          VLOG(1) << "Failed to link, create socket: " << create.error();
+          LOG(WARNING) << "Failed to link, create socket: " << create.error();
+
+          // Failure to create a new socket should generate an `ExitedEvent`
+          // for the linkee. At this point, we have not passed ownership of
+          // this socket to the `SocketManager`, so there is only one possible
+          // linkee to notify.
+          process->enqueue(new ExitedEvent(to));
           return;
         }
         socket = create.get();
@@ -1475,7 +1481,13 @@ void SocketManager::link(
         // create a new socket anyway.
         Try<Socket> create = Socket::create(kind);
         if (create.isError()) {
-          VLOG(1) << "Failed to link, create socket: " << create.error();
+          LOG(WARNING) << "Failed to link, create socket: " << create.error();
+
+          // Failure to create a new socket should generate an `ExitedEvent`
+          // for the linkee. At this point, we have not passed ownership of
+          // this socket to the `SocketManager`, so there is only one possible
+          // linkee to notify.
+          process->enqueue(new ExitedEvent(to));
           return;
         }
 


[7/8] mesos git commit: Added synchronization in link logic to prevent relinking races.

Posted by jo...@apache.org.
Added synchronization in link logic to prevent relinking races.

There is a general pattern in the `SocketManager` in which most methods
will grab the mutex and then check if the socket to manage exists in
the `SocketManager`s mapping.  If the socket does not exist, the
`SocketManager` silently returns.

This adds similar logic inside two critical sections of the `link`
codepath.  If there are multiple calls to `link` in-flight at once,
this prevents sockets from being leaked into unmanaged callback loops.

Review: https://reviews.apache.org/r/52181/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d45e3870
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d45e3870
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d45e3870

Branch: refs/heads/0.28.x
Commit: d45e3870b6e76afc3c1c18eb8e80007a1323da73
Parents: 97dfd03
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:32 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:46:23 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp | 43 ++++++++++++++++++++++++--------
 1 file changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/d45e3870/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index da9cf17..afb1035 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1397,16 +1397,26 @@ void SocketManager::link_connect(
     return;
   }
 
-  size_t size = 80 * 1024;
-  char* data = new char[size];
+  synchronized (mutex) {
+    // It is possible that a prior call to `link()` with `RECONNECT`
+    // semantics has swapped out this socket before we finished
+    // connecting. In this case, we simply stop here and allow the
+    // latest created socket to complete the link.
+    if (sockets.count(*socket) <= 0) {
+      return;
+    }
 
-  socket->recv(data, size)
-    .onAny(lambda::bind(
-        &internal::ignore_recv_data,
-        lambda::_1,
-        new Socket(*socket),
-        data,
-        size));
+    size_t size = 80 * 1024;
+    char* data = new char[size];
+
+    socket->recv(data, size)
+      .onAny(lambda::bind(
+          &internal::ignore_recv_data,
+          lambda::_1,
+          new Socket(*socket),
+          data,
+          size));
+  }
 
   // In order to avoid a race condition where internal::send() is
   // called after SocketManager::link() but before the socket is
@@ -1508,10 +1518,21 @@ void SocketManager::link(
 
         // Update all the data structures that are mapped to the old
         // socket. They will now point to the new socket we are about
-        // to try to connect. The old socket should no longer have any
-        // references after the swap and should be closed.
+        // to try to connect.
         swap_implementing_socket(existing, new Socket(socket.get()));
 
+        // The `existing` socket could be a perfectly functional socket.
+        // In this case, the socket may be referenced in the callback
+        // loop of `internal::ignore_recv_data`. We shutdown the socket
+        // in order to interrupt this callback loop and thereby release
+        // the final socket reference. This will not result in an
+        // `ExitedEvent` because we have already removed the `existing`
+        // socket from the mapping of linkees and linkers.
+        Try<Nothing> shutdown = existing.shutdown();
+        if (shutdown.isError()) {
+          VLOG(1) << "Failed to shutdown old link: " << shutdown.error();
+        }
+
         connect = true;
       }
     }


[6/8] mesos git commit: Prevented a race when relinking with SSL downgrade enabled.

Posted by jo...@apache.org.
Prevented a race when relinking with SSL downgrade enabled.

If there are two or more actors, on the same OS process, that try to
relink at the same time, there is a potential CHECK failure when SSL
downgrade is also enabled.  The following interleaving is problematic:
|             Actor A             |             Actor B             |
|---------------------------------+---------------------------------|
|        Starts to relink.        |        Starts to relink.        |
|        Creates socket A.        |                                 |
|   Replaces link with Socket A.  |                                 |
| Tries to connect with Socket A. |                                 |
|                                 |        Creates socket B.        |
|  Connection fails due to SSL.   |   Replaces link with Socket B.  |
|     Attempts to downgrade.      |                                 |
|     Tries to replace link.      |                                 |
The last step in the interleaving fails because we assert that the
socket we are swapping out exists in the `SocketManager`s state.

Review: https://reviews.apache.org/r/52182/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/97dfd035
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/97dfd035
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/97dfd035

Branch: refs/heads/0.28.x
Commit: 97dfd035cf02d3faf8613f6c3e38fa7c69e58201
Parents: 42e156c
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:31 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:46:22 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/97dfd035/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index 9503197..da9cf17 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1349,6 +1349,14 @@ void SocketManager::link_connect(
     // POLL socket.
     if (attempt_downgrade) {
       synchronized (mutex) {
+        // It is possible that a prior call to `link()` with `RECONNECT`
+        // semantics has swapped out this socket before we finished
+        // connecting. In this case, we simply stop here and allow the
+        // latest created socket to complete the link.
+        if (sockets.count(*socket) <= 0) {
+          return;
+        }
+
         Try<Socket> create = Socket::create(Socket::POLL);
         if (create.isError()) {
           VLOG(1) << "Failed to link, create socket: " << create.error();


[2/8] mesos git commit: Prevented a race when relinking with SSL downgrade enabled.

Posted by jo...@apache.org.
Prevented a race when relinking with SSL downgrade enabled.

If there are two or more actors, on the same OS process, that try to
relink at the same time, there is a potential CHECK failure when SSL
downgrade is also enabled.  The following interleaving is problematic:
|             Actor A             |             Actor B             |
|---------------------------------+---------------------------------|
|        Starts to relink.        |        Starts to relink.        |
|        Creates socket A.        |                                 |
|   Replaces link with Socket A.  |                                 |
| Tries to connect with Socket A. |                                 |
|                                 |        Creates socket B.        |
|  Connection fails due to SSL.   |   Replaces link with Socket B.  |
|     Attempts to downgrade.      |                                 |
|     Tries to replace link.      |                                 |
The last step in the interleaving fails because we assert that the
socket we are swapping out exists in the `SocketManager`s state.

Review: https://reviews.apache.org/r/52182/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/be7d29a3
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/be7d29a3
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/be7d29a3

Branch: refs/heads/1.0.x
Commit: be7d29a3159d3e7d042a0e24476ed9d4a8cb5bcb
Parents: 152484b
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:31 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:22:16 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/be7d29a3/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index 5b7be3a..7a750a0 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1453,6 +1453,14 @@ void SocketManager::link_connect(
     // POLL socket.
     if (attempt_downgrade) {
       synchronized (mutex) {
+        // It is possible that a prior call to `link()` with `RECONNECT`
+        // semantics has swapped out this socket before we finished
+        // connecting. In this case, we simply stop here and allow the
+        // latest created socket to complete the link.
+        if (sockets.count(socket) <= 0) {
+          return;
+        }
+
         Try<Socket> create = Socket::create(Socket::POLL);
         if (create.isError()) {
           VLOG(1) << "Failed to link, create socket: " << create.error();


[3/8] mesos git commit: Added ExitedEvents for links whose sockets fail on creation.

Posted by jo...@apache.org.
Added ExitedEvents for links whose sockets fail on creation.

When we try to link to a remote process, we will send the linkee an
`ExitedEvent` when the link is broken or if the connection fails.
This patch adds an `ExitedEvent` when the socket creation step fails.
This is logically equivalent to having the connection step fail.

Because this is an entirely unexpected case, the log level should be
a WARNING or higher.

Review: https://reviews.apache.org/r/52180/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/152484ba
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/152484ba
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/152484ba

Branch: refs/heads/1.0.x
Commit: 152484bab6a31c027136f81b782173255d1c3be7
Parents: c885b26
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Sep 28 12:33:28 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:22:16 2016 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/process.cpp             | 16 +++++++--
 3rdparty/libprocess/src/tests/process_tests.cpp | 34 ++++++++++++++++++++
 2 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/152484ba/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index d0a7a40..5b7be3a 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -1549,7 +1549,13 @@ void SocketManager::link(
         // from SSL to POLL if enabled.
         Try<Socket> create = Socket::create(kind);
         if (create.isError()) {
-          VLOG(1) << "Failed to link, create socket: " << create.error();
+          LOG(WARNING) << "Failed to link, create socket: " << create.error();
+
+          // Failure to create a new socket should generate an `ExitedEvent`
+          // for the linkee. At this point, we have not passed ownership of
+          // this socket to the `SocketManager`, so there is only one possible
+          // linkee to notify.
+          process->enqueue(new ExitedEvent(to));
           return;
         }
         socket = create.get();
@@ -1575,7 +1581,13 @@ void SocketManager::link(
         // create a new socket anyway.
         Try<Socket> create = Socket::create(kind);
         if (create.isError()) {
-          VLOG(1) << "Failed to link, create socket: " << create.error();
+          LOG(WARNING) << "Failed to link, create socket: " << create.error();
+
+          // Failure to create a new socket should generate an `ExitedEvent`
+          // for the linkee. At this point, we have not passed ownership of
+          // this socket to the `SocketManager`, so there is only one possible
+          // linkee to notify.
+          process->enqueue(new ExitedEvent(to));
           return;
         }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/152484ba/3rdparty/libprocess/src/tests/process_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/tests/process_tests.cpp b/3rdparty/libprocess/src/tests/process_tests.cpp
index 54d9bbb..368930a 100644
--- a/3rdparty/libprocess/src/tests/process_tests.cpp
+++ b/3rdparty/libprocess/src/tests/process_tests.cpp
@@ -952,6 +952,40 @@ TEST_F(ProcessRemoteLinkTest, RemoteDoubleLinkRelink)
 }
 
 
+// Verifies that remote links will trigger an `ExitedEvent` if the link
+// fails during socket creation. The test instigates a socket creation
+// failure by hogging all available file descriptors.
+TEST_F(ProcessRemoteLinkTest, RemoteLinkLeak)
+{
+  RemoteLinkTestProcess relinker(pid);
+  Future<UPID> relinkerExitedPid;
+
+  EXPECT_CALL(relinker, exited(pid))
+    .WillOnce(FutureArg<0>(&relinkerExitedPid));
+
+  spawn(relinker);
+
+  // Open enough sockets to fill up all available FDs.
+  vector<Socket> fdHogs;
+  while (true) {
+    Try<Socket> hog = Socket::create();
+
+    if (hog.isError()) {
+      break;
+    }
+
+    fdHogs.push_back(hog.get());
+  }
+
+  relinker.linkup();
+
+  AWAIT_ASSERT_EQ(pid, relinkerExitedPid);
+
+  terminate(relinker);
+  wait(relinker);
+}
+
+
 namespace process {
 
 // Forward declare the `get_persistent_socket` function since we want


[4/8] mesos git commit: Backported MESOS-6233, MESOS-6234, MESOS-6246 to 1.0.2.

Posted by jo...@apache.org.
Backported MESOS-6233, MESOS-6234, MESOS-6246 to 1.0.2.


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d6d1406a
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d6d1406a
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d6d1406a

Branch: refs/heads/1.0.x
Commit: d6d1406a9d4bd86efeb48662c36c3a2fc79bfc15
Parents: 5e4af87
Author: Joseph Wu <jo...@apache.org>
Authored: Wed Sep 28 13:23:11 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:23:11 2016 -0700

----------------------------------------------------------------------
 CHANGELOG | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/d6d1406a/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index 3538fe5..48f8bab 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -13,6 +13,9 @@ All Issues:
     * [MESOS-6235] - Add 'os::spawn', 'argv' variant of 'os::system'.
     * [MESOS-6245] - Driver based schedulers using explicit acknowledgements
       cannot acknowledge updates from HTTP based executors.
+    * [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.
 
 
 Release Notes - Mesos - Version 1.0.1


[8/8] mesos git commit: Backported MESOS-6233, MESOS-6234, MESOS-6246 to 0.28.3.

Posted by jo...@apache.org.
Backported MESOS-6233, MESOS-6234, MESOS-6246 to 0.28.3.


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d01e3f04
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d01e3f04
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d01e3f04

Branch: refs/heads/0.28.x
Commit: d01e3f04c15d7dc559860240f6ed090c76edc2c1
Parents: d45e387
Author: Joseph Wu <jo...@apache.org>
Authored: Wed Sep 28 13:31:03 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Sep 28 13:46:24 2016 -0700

----------------------------------------------------------------------
 CHANGELOG | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/d01e3f04/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index 5295f6b..1aac857 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -23,6 +23,9 @@ All Issues:
   * [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.
+  * [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.
 
 
 Release Notes - Mesos - Version 0.28.2