From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp50.i.mail.ru (smtp50.i.mail.ru [94.100.177.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 60275445320 for ; Wed, 15 Jul 2020 19:49:36 +0300 (MSK) Date: Wed, 15 Jul 2020 16:49:34 +0000 From: Nikita Pettik Message-ID: <20200715164934.GH26087@tarantool.org> References: <1594821336-14468-1-git-send-email-alyapunov@tarantool.org> <1594821336-14468-8-git-send-email-alyapunov@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1594821336-14468-8-git-send-email-alyapunov@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v3 07/13] txm: save does_require_old_tuple flag in txn_stmt List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Aleksandr Lyapunov Cc: tarantool-patches@dev.tarantool.org On 15 Jul 16:55, Aleksandr Lyapunov wrote: > That flag is needed for transactional conflict manager - if any > other transaction replaces old_tuple before current one and the flag > is set - the current transaction will be aborted. > For example REPLACE just replaces a key, no matter what tuple > lays in the index and thus does_require_old_tuple = false. > In contrast, UPDATE makes new tuple using old_tuple and thus > the statement will require old_tuple (does_require_old_tuple = true). > INSERT also does_require_old_tuple = true because it requires > old_tuple to be NULL. > > Part of #4897 > --- > src/box/memtx_space.c | 17 +++++++++++++++++ > src/box/txn.c | 3 +++ > src/box/txn.h | 13 +++++++++++++ > 3 files changed, 33 insertions(+) > > diff --git a/src/box/memtx_space.c b/src/box/memtx_space.c > index 8452ab4..e48ed3a 100644 > --- a/src/box/memtx_space.c > +++ b/src/box/memtx_space.c > @@ -316,6 +316,10 @@ memtx_space_execute_replace(struct space *space, struct txn *txn, > if (stmt->new_tuple == NULL) > return -1; > tuple_ref(stmt->new_tuple); > + > + if (mode == DUP_INSERT) > + stmt->does_require_old_tuple = true; I'd prefer is_old_tuple_required name, but it's up to you. LGTM