Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jewel: osd: Add heartbeat message for Jumbo Frames (MTU 9000) #16059

Merged
merged 5 commits into from
Aug 31, 2017

Commits on Jul 18, 2017

  1. osd: heartbeat with packets large enough to require working jumbo fra…

    …mes.
    
    We get periodic reports that users somehow misconfigure one of their switches
    so that it drops jumbo frames, yet the servers are still passing them along. In
    that case, MOSDOp messages generally don't get through because they are much
    larger than the 1500-byte non-jumbo limit, but the MOSDPing messages have kept
    going (as they are very small and dispatched independently, even when the
    server is willing to make jumbo frames). This means peer OSDs won't mark down
    the ones behind the broken switch, despite all IO hanging.
    Push the MOSDPing message size over the 1500-byte limit so that anybody in
    this scenario will see the OSDs stuck behind a bad switch get marked down.
    
    Fixes: http://tracker.ceph.com/issues/20087
    
    Signed-off-by: Greg Farnum <gfarnum@redhat.com>
    (cherry picked from commit 2096113)
    
     Conflicts:
    	src/messages/MOSDPing.h
             - Changed HEAD_VERSION to 3 and kept COMPAT_VERSION to 1.
             - In class MOSDPing removed following line:
                   if (header.version >= 2)
             - To keep ::decode(stamp, p) without condition because HEAD_Version
               is already 3 now and this condition is removed in the backport commit.
    gregsfortytwo authored and vumrao committed Jul 18, 2017
    Configuration menu
    Copy the full SHA
    7164560 View commit details
    Browse the repository at this point in the history
  2. messages/MOSDPing: initialize MOSDPing padding

    This memory must be initialized or else valgrind will be very unhappy.
    
    Avoid the cost of zeroing (or even allocating) the buffer for normal
    padding values by (re)using a static zero buffer.
    
    Fixes: http://tracker.ceph.com/issues/20323
    Signed-off-by: Sage Weil <sage@redhat.com>
    (cherry picked from commit 9beaf5e)
    liewegas authored and vumrao committed Jul 18, 2017
    Configuration menu
    Copy the full SHA
    f840864 View commit details
    Browse the repository at this point in the history
  3. OSD: mark two heartbeat config opts as observed

    "osd heartbeat min size" and "osd heartbeat interval" can be changed
    at runtime, because their values, when used, are always taken from
    global Ceph configuration. Mark them as observed, so the message
    the user sees once they're changed doesn't confuse them.
    
    Signed-off-by: Piotr Dałek <piotr.dalek@corp.ovh.com>
    (cherry picked from commit 44b7839)
    branch-predictor authored and vumrao committed Jul 18, 2017
    Configuration menu
    Copy the full SHA
    52f221b View commit details
    Browse the repository at this point in the history
  4. messages/MOSDPing: fix the inflation amount calculation

    If user specifies a min_message_size small enough (or zero to disable
    it altogether), OSDs will crash and burn while trying to allocate
    almost 4GB of payload (both min_message_size and payload.length() are
    unsigned, so it'll roll over back to 4GB and MAX(4GB, 0) will use 4GB).
    If the size of dummy payload is 0, don't bother constructing bufferptr
    and bufferlist, then encoding that.
    
    Signed-off-by: Piotr Dałek <piotr.dalek@corp.ovh.com>
    (cherry picked from commit d959735)
    branch-predictor authored and vumrao committed Jul 18, 2017
    Configuration menu
    Copy the full SHA
    8acfd71 View commit details
    Browse the repository at this point in the history
  5. messages/MOSDPing: optimize encode and decode of dummy payload

    The dummy payload doesn't need to be processed, we can just skip over
    it when decoding and we can use a single bufferptr instead of entire
    bufferlist to encode it.
    
    Signed-off-by: Piotr Dałek <piotr.dalek@corp.ovh.com>
    (cherry picked from commit 15ce077)
    branch-predictor authored and vumrao committed Jul 18, 2017
    Configuration menu
    Copy the full SHA
    e9e7850 View commit details
    Browse the repository at this point in the history