• Alex Elder's avatar
    libceph: start defining message data cursor · fe38a2b6
    Alex Elder authored
    This patch lays out the foundation for using generic routines to
    manage processing items of message data.
    
    For simplicity, we'll start with just the trail portion of a
    message, because it stands alone and is only present for outgoing
    data.
    
    First some basic concepts.  We'll use the term "data item" to
    represent one of the ceph_msg_data structures associated with a
    message.  There are currently four of those, with single-letter
    field names p, l, b, and t.  A data item is further broken into
    "pieces" which always lie in a single page.  A data item will
    include a "cursor" that will track state as the memory defined by
    the item is consumed by sending data from or receiving data into it.
    
    We define three routines to manipulate a data item's cursor: the
    "init" routine; the "next" routine; and the "advance" routine.  The
    "init" routine initializes the cursor so it points at the beginning
    of the first piece in the item.  The "next" routine returns the
    page, page offset, and length (limited by both the page and item
    size) of the next unconsumed piece in the item.  It also indicates
    to the caller whether the piece being returned is the last one in
    the data item.
    
    The "advance" routine consumes the requested number of bytes in the
    item (advancing the cursor).  This is used to record the number of
    bytes from the current piece that were actually sent or received by
    the network code.  It returns an indication of whether the result
    means the current piece has been fully consumed.  This is used by
    the message send code to determine whether it should calculate the
    CRC for the next piece processed.
    
    The trail of a message is implemented as a ceph pagelist.  The
    routines defined for it will be usable for non-trail pagelist data
    as well.
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    fe38a2b6
messenger.c 77 KB