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!