• Alex Elder's avatar
    libceph: start tracking connection socket state · ce2c8903
    Alex Elder authored
    Start explicitly keeping track of the state of a ceph connection's
    socket, separate from the state of the connection itself.  Create
    placeholder functions to encapsulate the state transitions.
    
        --------
        | NEW* |  transient initial state
        --------
            | con_sock_state_init()
            v
        ----------
        | CLOSED |  initialized, but no socket (and no
        ----------  TCP connection)
         ^      \
         |       \ con_sock_state_connecting()
         |        ----------------------
         |                              \
         + con_sock_state_closed()       \
         |\                               \
         | \                               \
         |  -----------                     \
         |  | CLOSING |  socket event;       \
         |  -----------  await close          \
         |       ^                            |
         |       |                            |
         |       + con_sock_state_closing()   |
         |      / \                           |
         |     /   ---------------            |
         |    /                   \           v
         |   /                    --------------
         |  /    -----------------| CONNECTING |  socket created, TCP
         |  |   /                 --------------  connect initiated
         |  |   | con_sock_state_connected()
         |  |   v
        -------------
        | CONNECTED |  TCP connection established
        -------------
    
    Make the socket state an atomic variable, reinforcing that it's a
    distinct transtion with no possible "intermediate/both" states.
    This is almost certainly overkill at this point, though the
    transitions into CONNECTED and CLOSING state do get called via
    socket callback (the rest of the transitions occur with the
    connection mutex held).  We can back out the atomicity later.
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: Sage Weil<sage@inktank.com>
    ce2c8903
messenger.c 65 KB