[ 
https://issues.apache.org/jira/browse/MESOS-9502?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gilbert Song reassigned MESOS-9502:
-----------------------------------

        Shepherd: Gilbert Song
        Assignee: Andrei Budnik
          Sprint: Containerization R9 Sprint 37
    Story Points: 8
          Labels: containerizer  (was: )

> IOswitchboard cleanup could get stuck.
> --------------------------------------
>
>                 Key: MESOS-9502
>                 URL: https://issues.apache.org/jira/browse/MESOS-9502
>             Project: Mesos
>          Issue Type: Bug
>          Components: containerization
>    Affects Versions: 1.7.0
>            Reporter: Meng Zhu
>            Assignee: Andrei Budnik
>            Priority: Critical
>              Labels: containerizer
>
> Our check container got stuck during destroy which in turned stucks the 
> parent container. It is blocked by the I/O switchboard cleanup:
> 1223 18:04:41.000000 16269 switchboard.cpp:814] Sending SIGTERM to I/O 
> switchboard server (pid: 62854) since container 
> 4d4074fa-bc87-471b-8659-08e519b68e13.16d02532-675a-4acb-964d-57459ecf6b67.check-e91521a3-bf72-4ac4-8ead-3950e31cf09e
>  is being destroyed
> ....
> 1227 04:45:38.000000  5189 switchboard.cpp:916] I/O switchboard server 
> process for container 
> 4d4074fa-bc87-471b-8659-08e519b68e13.16d02532-675a-4acb-964d-57459ecf6b67.check-e91521a3-bf72-4ac4-8ead-3950e31cf09e
>  has terminated (status=N/A)
> Note the timestamp.
> *Root Cause:*
> Fundamentally, this is caused by a race between *.discard()* triggered by 
> Check Container TIMEOUT and IOSB extracting ContainerIO object. This race 
> could be exposed by overloaded/slow agent process. Please see how this race 
> be triggered below:
> # Right after IOSB server process is running, Check container Timed out and 
> the checker process returns a failure, which would close the HTTP connection 
> with agent.
> # From the agent side, if the connection breaks, the handler will trigger a 
> discard on the returned future and that will result in 
> containerizer->launch()'s future transitioned to DISCARDED state.
> # In containerizer, the DISCARDED state will be propagated back to IOSB 
> prepare(), which stop its continuation on *extracting the containerIO* (it 
> implies the object being cleaned up and FDs(one end of pipes created in IOSB) 
> being closed in its destructor).
> # Agent starts to destroy the container due to its discarded launch result, 
> and asks IOSB to cleanup the container.
> # IOSB server is still running, so agent sends a SIGTERM.
> # SIGTERM handler unblocks the IOSB from redirecting (to redirect 
> stdout/stderr from container to logger before exiting).
> # io::redirect() calls io::splice() and reads the other end of those pipes 
> forever.
> This issue is *not easy to reproduce unless* on a busy agent, because the 
> timeout has to happen exactly *AFTER* IOSB server is running and *BEFORE* 
> IOSB extracts containerIO.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to