Joseph's explanation quite detail.👍 On Feb 27, 2016 3:33 AM, "Joseph Wu" <[email protected]> wrote:
> Here's a brief(?) run-down: > > 1. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/src/master/master.cpp#L5739-L5748 > > <https://github.com/apache/mesos/blob/master/src/master/master.cpp#L5739-L5748> > When a new framework is added, the master opens a socket connection > with the framework. > - If this is a scheduler-driver-based framework, this is a plain > socket connection. > - If this is a new HTTP API framework, the master uses the > streaming HTTP connection instead. > 2. The HTTP API framework's exit logic is simpler to explain. When > the streaming connection closes, the master considers the framework to have > exited. In the above code, see this chunk of code: > http.closed() > .onAny(defer(self(), &Self::exited, framework->id(), http)); > 3. The scheduler-driver-based framework exit is a bit more involved: > 1. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/3rdparty/libprocess/src/process.cpp#L1326 > Libprocess has a SocketManager which, as the name suggests, managed > sockets. Linking the master <-> framework spawns a socket here. > 2. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/3rdparty/libprocess/src/process.cpp#L1394-L1400 > Linking will install a dispatch loop, which continually reads the > data from the socket until the socket closes. > 3. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/3rdparty/libprocess/src/process.cpp#L1300-L1312 > The dispatch loop calls "ignore_recv_data". This detects when the > socket closes and calls "SocketManager->close(s)". > 4. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/3rdparty/libprocess/src/process.cpp#L1928 > "SocketManager->close" will generate a libprocess "ExitedEvent". > 5. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/src/master/master.cpp#L1352 > Master has a listener for "ExitedEvent" which rate-limits these > events. > 6. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/src/master/master.cpp#L1161 > The "ExitedEvent" eventually gets propagated to that ^ method > (through a libprocess event visitor). > 7. > > https://github.com/apache/mesos/blob/4376803007446b949840d53945547d8a61b91339/src/master/master.cpp#L1165 > Finally, the framework gets removed. > > Hope that helps, > > ~Joseph > > On Fri, Feb 26, 2016 at 10:45 AM, Chong Chen <[email protected]> > wrote: > >> Hi, >> >> When a running framework was disconnected (manually terminated), the >> Mesos master will detect it immediately. The master::exited() function >> will be invoked with log info “framework disconnected”. >> >> I just wondering, how this disconnect detection was implemented in Mesos? >> I can’t find any place in mesos src directory where the Master::exit() >> function was called. >> >> >> >> Thanks! >> >> >> >> Best Regards, >> >> Chong >> > >

