mayorga / 389-ds-base

Forked from 389-ds-base 7 years ago
Clone

23c5c1b Bug 621008 - parsing purge RUV from changelog at startup fails

Authored and Committed by nkinder 13 years ago
    Bug 621008 - parsing purge RUV from changelog at startup fails
    
    The purge RUV contains a single CSN per vector representing the
    last change trimmed from the changelog from each master.  At
    shutdown this RUV is flushed to the changelog to a special entry
    and it's read and deleted from the changelog at startup.
    _cl5ReadRUV() calls ruv_init_from_bervals() which uses
    get_ruvelement_from_berval() on each berval that was read from the
    changelog's purge RUV.
    
    The problem is that get_ruvelement_from_berval() rejects any
    vector that doesn't have two CSNs, a minimum and a maximum.  Thus,
    a replica that starts up is always missing a purge vector until
    the next time trimming occurs and the in-memory purge vector is
    updated.  This can cause replication to continue when changes that
    still need to be sent to a consumer have been trimmed from the
    changelog.
    
    This patch sets a dummy CSN in the purge RUV, which is parsed
    correctly.  This will cause replication to halt instead of skipping
    changes that have been trimmed from the changelog, which is the
    proper thing to do.  Thanks to Ulf for contributing this patch!