From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Vladimir Davydov Subject: [RFC PATCH 01/23] vinyl: do not turn REPLACE into INSERT when processing DML request Date: Sun, 8 Jul 2018 19:48:32 +0300 Message-Id: <8ed8a5469d848dd627a3da1ac378cece942b27e5.1531065648.git.vdavydov.dev@gmail.com> In-Reply-To: MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit References: To: kostja@tarantool.org Cc: tarantool-patches@freelists.org List-ID: Since in presence of secondary indexes we read the primary index when processing a REPLACE request anyway, we turn it into INSERT if no tuple matching the new tuple is found so that INSERT+DELETE gets annihilated on compaction. However, in the scope of #2129 we are planning to optimize the read out so that this transformation won't be possible anymore. So let's remove it now. Needed for #2129 --- src/box/vinyl.c | 8 -------- test/vinyl/layout.result | 20 ++++++++++---------- test/vinyl/write_iterator.result | 6 ------ test/vinyl/write_iterator.test.lua | 2 -- 4 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/box/vinyl.c b/src/box/vinyl.c index 6dd22884..f9c2843e 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -1540,14 +1540,6 @@ vy_replace_impl(struct vy_env *env, struct vy_tx *tx, struct space *space, new_stmt, &old_stmt) != 0) goto error; - if (old_stmt == NULL) { - /* - * We can turn REPLACE into INSERT if the new key - * does not have history. - */ - vy_stmt_set_type(new_stmt, IPROTO_INSERT); - } - /* * Replace in the primary index without explicit deletion * of the old tuple. diff --git a/test/vinyl/layout.result b/test/vinyl/layout.result index 49826302..1f928a8f 100644 --- a/test/vinyl/layout.result +++ b/test/vinyl/layout.result @@ -253,17 +253,17 @@ result - - 00000000000000000008.run - - HEADER: lsn: 10 - type: INSERT + type: REPLACE BODY: tuple: ['ёёё', null] - HEADER: lsn: 9 - type: INSERT + type: REPLACE BODY: tuple: ['эээ', null] - HEADER: lsn: 8 - type: INSERT + type: REPLACE BODY: tuple: ['ЭЭЭ', null] - HEADER: @@ -297,12 +297,12 @@ result tuple: ['ёёё', 123] - HEADER: lsn: 13 - type: INSERT + type: REPLACE BODY: tuple: ['ююю', 789] - HEADER: lsn: 12 - type: INSERT + type: REPLACE BODY: tuple: ['ЮЮЮ', 456] - HEADER: @@ -331,17 +331,17 @@ result - - 00000000000000000006.run - - HEADER: lsn: 10 - type: INSERT + type: REPLACE BODY: tuple: [null, 'ёёё'] - HEADER: lsn: 9 - type: INSERT + type: REPLACE BODY: tuple: [null, 'эээ'] - HEADER: lsn: 8 - type: INSERT + type: REPLACE BODY: tuple: [null, 'ЭЭЭ'] - HEADER: @@ -380,12 +380,12 @@ result tuple: [123, 'ёёё'] - HEADER: lsn: 12 - type: INSERT + type: REPLACE BODY: tuple: [456, 'ЮЮЮ'] - HEADER: lsn: 13 - type: INSERT + type: REPLACE BODY: tuple: [789, 'ююю'] - HEADER: diff --git a/test/vinyl/write_iterator.result b/test/vinyl/write_iterator.result index c38de5d3..162d8463 100644 --- a/test/vinyl/write_iterator.result +++ b/test/vinyl/write_iterator.result @@ -765,9 +765,6 @@ box.snapshot() _ = s:insert{1, 1} -- insert --- ... -_ = s:replace{2, 2} -- replace, no old tuple ---- -... _ = s:upsert({3, 3}, {{'!', 1, 1}}) -- upsert, no old tuple --- ... @@ -794,9 +791,6 @@ box.snapshot() s:delete{1} --- ... -s:delete{2} ---- -... s:delete{3} --- ... diff --git a/test/vinyl/write_iterator.test.lua b/test/vinyl/write_iterator.test.lua index 73c90c42..9a6cc480 100644 --- a/test/vinyl/write_iterator.test.lua +++ b/test/vinyl/write_iterator.test.lua @@ -326,7 +326,6 @@ for i = 1001, 1000 + PAD1 do s:replace{i, i} end box.snapshot() -- Generate some INSERT statements and dump them to disk. _ = s:insert{1, 1} -- insert -_ = s:replace{2, 2} -- replace, no old tuple _ = s:upsert({3, 3}, {{'!', 1, 1}}) -- upsert, no old tuple box.begin() s:insert{4, 4} s:delete(4) box.commit() box.begin() s:insert{5, 5} s:replace{5, 5, 5} box.commit() @@ -336,7 +335,6 @@ _ = s:insert{8, 8} box.snapshot() -- Delete the inserted tuples and trigger compaction. s:delete{1} -s:delete{2} s:delete{3} s:delete{4} s:delete{5} -- 2.11.0