Tarantool development patches archive
 help / color / mirror / Atom feed
From: Kirill Yukhin <kyukhin@tarantool.org>
To: tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH] vinyl: fix assertion failure in vy_tx_handle_deferred_delete
Date: Tue, 18 Jun 2019 16:45:34 +0300	[thread overview]
Message-ID: <20190618134534.tabkzomdbttpw74j@tarantool.org> (raw)
In-Reply-To: <a9d71e1b4d2a4613fe609f3fb4a0b6ba37f490fb.1560785297.git.vdavydov.dev@gmail.com>

Hello,

On 17 Jun 18:30, Vladimir Davydov wrote:
> vy_tx_handle_deferred_delete() expects (righteously) that in case a
> deferred DELETE overwrites a statement in a secondary index write set
> and the overwritten statement wasn't skipped on commit (i.e. doesn't
> have txv->is_overwritten flag set), both the old and the new statement
> must be REPLACEs (see the comment to the corresponding assertions for
> more details).
> 
> The problem is we don't set is_overwritten flag in case a statement
> doesn't have any effect (txv->is_nop is set), even if it was, in fact,
> overwritten in the primary index write set (see vy_tx_prepare). As
> a result, we get an assertion failure when we delete such statement
> in the same transaction, e.g.
> 
>   s = box.schema.space.create('test', {engine = 'vinyl'})
>   s:create_index('pk', {parts = {1, 'unsigned'}})
>   s:create_index('sk', {parts = {2, 'unsigned'}})
>   s:replace{1, 1, 1}
>   box.begin()
>   s:update(1, {{'+', 3, 1}}) -- adds no-op REPLACE to sk write set
>   s:delete(1)                -- produces deferred DELETE for sk
>   box.commit()
> 
> results in
> 
>   vy_tx_handle_deferred_delete: Assertion `vy_stmt_type(stmt) == IPROTO_REPLACE' failed.
> 
> Fix this by making sure we set is_overwritten for all overwritten
> statements in a secondary index write set.
> 
> Closes #4294
> ---
> https://github.com/tarantool/tarantool/issues/4294
> https://github.com/tarantool/tarantool/commits/dv/gh-4294-vy-assert-failure-fix

I've checked yout patch into 1.10, 2.1 and master branches.

--
Regards, Kirill Yukhin

      parent reply	other threads:[~2019-06-18 13:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-17 15:30 Vladimir Davydov
2019-06-18  5:45 ` [tarantool-patches] " Konstantin Osipov
2019-06-18 13:45 ` Kirill Yukhin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190618134534.tabkzomdbttpw74j@tarantool.org \
    --to=kyukhin@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH] vinyl: fix assertion failure in vy_tx_handle_deferred_delete' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox