[Tarantool-patches] [PATCH v3 2/3] vinyl: clean-up unprocessed read views in *_build_read_views()

Aleksandr Lyapunov alyapunov at tarantool.org
Thu May 7 11:44:36 MSK 2020


Thanks for the patch! Almost perfect, except some looking like a 
misprint, see my comments below.

On 5/7/20 3:29 AM, Nikita Pettik wrote:
>
> On the other hand clean-up provided by vy_read_view_stmt_destroy()
> is safe: it nullifies rv->tuple and rv->history so that next call
> of vy_read_view_stmt_destroy() will be no-op in fact.
> Anyway, I've refactored this code according to your plan, so
> vy_read_view_stmt_destroy() now unrefs only resulting tuple.
Yes, as I said your code was correct, but I'm talking about good structure
of the code that is easier to support and (I hope) leave less chances
to make a mistake or forget something like cleanup. Divide responsibility
between parts of code and conquer!
>
>> 2. The history must be destructed after call to
>> vy_write_iterator_build_history in any case,
>> whether an error occurred or not (comment about it?).
> But histories are used in vy_read_view_merge(). Do you mean destruct all
> histories after they are processed (i.e. before region_truncate())?
Exactly, in the end of vy_write_iterator_build_read_views.
>
> -       if (rc != 0) {
> -               for (int i = 0; i < stream->rv_count; ++i)
> -                       vy_read_view_stmt_destroy(&stream->read_views[i]);
> -       } else if (stream->is_last_level &&
> -                  stream->deferred_delete_stmt != NULL) {
> +       if (stream->is_last_level && stream->deferred_delete_stmt != NULL) {
>                  vy_stmt_unref_if_possible(stream->deferred_delete_stmt);
>                  stream->deferred_delete_stmt = NULL;
>          }
Originally it was:

if (rc == 0 && stream->is_last_level && stream->deferred_delete_stmt != NULL)

Are you sure you want to change it, or it was a misprint?.


More information about the Tarantool-patches mailing list