mesos-reviews mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joseph Wu" <jos...@mesosphere.io>
Subject Re: Review Request 40266: Libprocess Reinitialization: Cleanup SocketManager along side ProcessManager.
Date Wed, 20 Jan 2016 19:29:26 GMT


> On Jan. 19, 2016, 6:29 p.m., haosdent huang wrote:
> > 3rdparty/libprocess/src/process.cpp, line 1306
> > <https://reviews.apache.org/r/40266/diff/2/?file=1151884#file1151884line1306>
> >
> >     Is it possible sockets not empty when exit this loop?

Definitely possible.  We currently do not track the futures from `socket->send()` (specifically
the calls in `internal::send(Encoder* encoder, Socket* socket)`).

i.e.
1) We call `ProcessBase::send` to a remote process.
2) Libprocess creates a socket and starts to write data.
3) We call `process::finalize` (+ this patch).
4) The main process exits, but does not necessarily clean up the socket created during `ProcessBase::send`.
5) SocketManager cleanup happens, which closes the socket, but doesn't finish sending first.

---

Seems like it would be fairly simple to track the futures from `internal::send(Encoder* encoder,
Socket* socket)` and wait for them to finish during finalization.
(As is required in MESOS-4111.)


- Joseph


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/40266/#review115322
-----------------------------------------------------------


On Dec. 2, 2015, 4:50 p.m., Joseph Wu wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/40266/
> -----------------------------------------------------------
> 
> (Updated Dec. 2, 2015, 4:50 p.m.)
> 
> 
> Review request for mesos, Artem Harutyunyan and Joris Van Remoortere.
> 
> 
> Bugs: MESOS-3910
>     https://issues.apache.org/jira/browse/MESOS-3910
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> The `SocketManager` and `ProcessManager` are highly inter-dependent, which requires some
untangling in `process::finalize`.
> 
> * Logic originally found in `~ProcessManager` has been split into `ProcessManager::finalize`
due to what happens during cleanup.
> * Some additional cleanup was added for dangling pointers.
> * The future from `__s__->accept()` must be explicitly discarded as libevent does
not detect a locally closed socket.
> 
> 
> Diffs
> -----
> 
>   3rdparty/libprocess/src/process.cpp a7af4671efa2f370137ed4a749e5247c91e6f95e 
> 
> Diff: https://reviews.apache.org/r/40266/diff/
> 
> 
> Testing
> -------
> 
> `make check` (libev)
> `make check` (--enable-libevent --enable-ssl)
> 
> 
> Thanks,
> 
> Joseph Wu
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message