Rich Megginson wrote:
The problem comes from the method we use to check if the changelog
not match the database in replica_check_for_data_reload(). The RUV in
the database contains obsolete elements from replicas that are no longer
in use. replica_check_for_data_reload() uses ruv_covers_ruv() to see if
all of the max csns in the database ruv are in the changelog maxruv, and
vice versa. It fails because the database ruv contains these obsolete
elements not found in the changelog maxruv.
My question is - why do we care? Isn't it sufficient to check that the
replicageneration in the changelog is the same as the replicageneration
in the database ruv? The replicageneration is supposed to be the unique
identifier of the "starting point" of the replicated data.
If the data
is reloaded (e.g. from an ldif not created with db2ldif -r), a new
replicageneration will be created, and the data will mismatch.
And the problem is the database RUV never be updated once
the data is reloaded from such an ldif file? Then, the server recreates
the changelog every time the server is restarted? You mentioned "remove
them" in the proposed warning. Is it the only way to adjust the
Or, alternately, leave the check for all of the ruv elements in, but
just warn if the database contains ruv elements not in the cl maxruv
e.g. something like
"WARNING: The database RUV contains these elements not present in the
changelog max ruv:
These elements may be obsolete, in which case you should remove them.
If they are not obsolete, you should check those servers to make sure
replication is occurring."
If the database RUV is not used at all, I think
there is no benefit to
maintain it... Warning would rather confuse users, wouldn't it?