adamwill / 389-ds-base

Forked from 389-ds-base 4 years ago
Clone

4a6dead Ticket #47585 Replication Failures related to skipped entries due to cleaned rids

Authored and Committed by rmeggins 10 years ago
    Ticket #47585 Replication Failures related to skipped entries due to cleaned rids
    
    https://fedorahosted.org/389/ticket/47585
    Reviewed by: ???
    Branch: rhel-6.4
    Fix Description: If a change was found in the changelog buffer that is
    skipped due to having an unknown replica ID (rid), the entire buffer was
    marked as CLC_STATE_NEW_RID.  When the buffer is exhausted and the iterator
    code goes to read in the new buffer, it would not read in the new buffer
    because it only loads a new buffer if the current buffer state is
    CLC_STATE_READY.  I don't know why the entire buffer would be marked as
    CLC_STATE_NEW_RID and stop iteration.  It seems to me that just the update
    should be skipped, but new buffers should be loaded in order to keep sending
    non-skipped updates to the consumer.
    It is possible for a CSN with an unknown RID to get into the changelog if
    the server with that RID had been removed by cleanruv/cleanallruv.  In that
    case, the CSN should be skipped.  It is assumed that the change was already
    sent - cleanallruv is supposed to wait until all known changes have been
    seen before removing the RID from the RUV - so it is safe to skip it.
    Added additional debugging, so that we can better tell why changelog entries
    were skipped.
    Platforms tested: RHEL6 x86_64
    Flag Day: no
    Doc impact: no
    (cherry picked from commit 4c283aee3653010cc283c796817911811b5d2a9c)