• A
    libceph: separate banner and connect writes · ab166d5a
    Alex Elder 提交于
    There are two phases in the process of linking together the two ends
    of a ceph connection.  The first involves exchanging a banner and
    IP addresses, and if that is successful a second phase exchanges
    some detail about each side's connection capabilities.
    
    When initiating a connection, the client side now queues to send
    its information for both phases of this process at the same time.
    This is probably a bit more efficient, but it is slightly messier
    from a layering perspective in the code.
    
    So rearrange things so that the client doesn't send the connection
    information until it has received and processed the response in the
    initial banner phase (in process_banner()).
    
    Move the code (in the (con->sock == NULL) case in try_write()) that
    prepares for writing the connection information, delaying doing that
    until the banner exchange has completed.  Move the code that begins
    the transition to this second "NEGOTIATING" phase out of
    process_banner() and into its caller, so preparing to write the
    connection information and preparing to read the response are
    adjacent to each other.
    
    Finally, preparing to write the connection information now requires
    the output kvec to be reset in all cases, so move that into the
    prepare_write_connect() and delete it from all callers.
    Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NSage Weil <sage@inktank.com>
    ab166d5a
messenger.c 67.0 KB