• Sage Weil's avatar
    libceph: resubmit linger ops when pg mapping changes · 6194ea89
    Sage Weil authored
    The linger op registration (i.e., watch) modifies the object state.  As
    such, the OSD will reply with success if it has already applied without
    doing the associated side-effects (setting up the watch session state).
    If we lose the ACK and resubmit, we will see success but the watch will not
    be correctly registered and we won't get notifies.
    
    To fix this, always resubmit the linger op with a new tid.  We accomplish
    this by re-registering as a linger (i.e., 'registered') if we are not yet
    registered.  Then the second loop will treat this just like a normal
    case of re-registering.
    
    This mirrors a similar fix on the userland ceph.git, commit 5dd68b95, and
    ceph bug #2796.
    Signed-off-by: default avatarSage Weil <sage@inktank.com>
    Reviewed-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarYehuda Sadeh <yehuda@inktank.com>
    6194ea89
osd_client.c 56.5 KB