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/10/24 23:19:07 UTC
[3/8] mesos git commit: Libprocess Reinit: Moved HttpProxy
finalization and destruction.
Libprocess Reinit: Moved HttpProxy finalization and destruction.
Moves the destructor code in `HttpProxy` into the `Process::finalize`
function. And changes the `HttpProxy`s termination logic to
terminate via `UPID` which guards against double-termination.
Removes some unused initialization code, too.
Review: https://reviews.apache.org/r/50621/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0a64d7a4
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0a64d7a4
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0a64d7a4
Branch: refs/heads/master
Commit: 0a64d7a44296bc030581f3a0f8ca16fe0a5c06bb
Parents: b851894
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Mon Oct 24 15:06:34 2016 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Mon Oct 24 16:18:46 2016 -0700
----------------------------------------------------------------------
3rdparty/libprocess/src/process.cpp | 33 +++++++-------------------------
1 file changed, 7 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/0a64d7a4/3rdparty/libprocess/src/process.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp
index 15e80e6..2be8e84 100644
--- a/3rdparty/libprocess/src/process.cpp
+++ b/3rdparty/libprocess/src/process.cpp
@@ -188,7 +188,7 @@ class HttpProxy : public Process<HttpProxy>
{
public:
explicit HttpProxy(const Socket& _socket);
- virtual ~HttpProxy();
+ virtual ~HttpProxy() {};
// Enqueues the response to be sent once all previously enqueued
// responses have been processed (e.g., waited for and sent).
@@ -200,7 +200,7 @@ public:
void handle(const Future<Response>& future, const Request& request);
protected:
- void initialize() override;
+ void finalize() override;
private:
// Starts "waiting" on the next available future response.
@@ -233,15 +233,6 @@ private:
queue<Item*> items;
Option<http::Pipe::Reader> pipe; // Current pipe, if streaming.
-
- // We sequence the authentication results exposed to the caller
- // in order to satisfy HTTP pipelining.
- //
- // Note that this needs to be done explicitly here because
- // the authentication router does expose ordered completion
- // of its Futures (it doesn't have the knowledge of sockets
- // necessary to do it in a per-connection manner).
- Owned<Sequence> authentications;
};
@@ -1214,7 +1205,7 @@ HttpProxy::HttpProxy(const Socket& _socket)
socket(_socket) {}
-HttpProxy::~HttpProxy()
+void HttpProxy::finalize()
{
// Need to make sure response producers know not to continue to
// create a response (streaming or otherwise).
@@ -1253,16 +1244,6 @@ HttpProxy::~HttpProxy()
}
-void HttpProxy::initialize()
-{
- // We have to construct the sequence outside of the HttpProxy
- // constructor in order to prevent a deadlock between the
- // SocketManager and the ProcessManager (see the comment in
- // SocketManager::proxy).
- authentications.reset(new Sequence("__authentications__"));
-}
-
-
void HttpProxy::enqueue(const Response& response, const Request& request)
{
handle(Future<Response>(response), request);
@@ -2218,7 +2199,7 @@ Encoder* SocketManager::next(int s)
void SocketManager::close(int s)
{
- HttpProxy* proxy = nullptr; // Non-null if needs to be terminated.
+ Option<UPID> proxy; // Some if an `HttpProxy` needs to be terminated.
synchronized (mutex) {
// This socket might not be active if it was already asked to get
@@ -2255,7 +2236,7 @@ void SocketManager::close(int s)
// Clean up any proxy associated with this socket.
if (proxies.count(s) > 0) {
- proxy = proxies[s];
+ proxy = proxies.at(s)->self();
proxies.erase(s);
}
@@ -2288,8 +2269,8 @@ void SocketManager::close(int s)
// We terminate the proxy outside the synchronized block to avoid
// possible deadlock between the ProcessManager and SocketManager.
- if (proxy != nullptr) {
- terminate(proxy);
+ if (proxy.isSome()) {
+ terminate(proxy.get());
}
// Note that we don't actually: