[Tarantool-patches] [PATCH v4 3/4] gc: rely on minimal vclock components instead of signatures

Konstantin Osipov kostja.osipov at gmail.com
Sat Mar 28 09:03:52 MSK 2020


* Serge Petrenko <sergepetrenko at tarantool.org> [20/03/27 18:08]:
> +	struct vclock min_vclock;
> +	struct gc_consumer *consumer = gc_tree_first(&gc.consumers);

The code would be easier to follow if the entire vclock api used
would be ignore0:

> +	/*
> +	 * Vclock of the oldest WAL row to keep is a by-component
> +	 * minimum of all consumer vclocks and the oldest
> +	 * checkpoint vclock. This ensures that all rows needed by
> +	 * at least one consumer are kept.
> +	 */
> +	vclock_copy(&min_vclock, &checkpoint->vclock);

E.g. use vclock_copy_ignore0 here

> +	while (consumer != NULL) {
> +		/*
> +		 * Consumers will never need rows signed
> +		 * with a zero instance id (local rows).
> +		 */
> +		vclock_min_ignore0(&min_vclock, &consumer->vclock);
> +		consumer = gc_tree_next(&gc.consumers, consumer);
> +	}
> +
> +	if (vclock_sum(&min_vclock) > vclock_sum(&gc.vclock)) {

Please use vclock_sum_ignore0
> +		vclock_copy(&gc.vclock, &min_vclock);

Please use vclock_copy_ignore0

The goal is to switch as many places as possible to ignore0 api,
then see the few cases left where we don't, and flip around: 
rename ignore0 api to the default naming scheme, and no-ignore0 to
vlock_copy_local(), vclock_compare_local() vclock_copy_local().

This doesn't have to be part of your patch set, but 
would be nice to get to.

Ideally ignore0 vclock should be a distinct data type
with an explicit conversion to and from non-ignore0 vclock
and no implicit assignment (using vclock_copy already more
or less ensures that).

Other than that you seem to be on track with the patch.

-- 
Konstantin Osipov, Moscow, Russia


More information about the Tarantool-patches mailing list