Tarantool development patches archive
 help / color / mirror / Atom feed
From: Yan Shtunder via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: tarantool-patches@dev.tarantool.org
Cc: Yan Shtunder <ya.shtunder@gmail.com>
Subject: [Tarantool-patches] [PATCH v2] replication: the truncate method called from within a transaction
Date: Wed,  6 Oct 2021 11:39:09 +0300	[thread overview]
Message-ID: <20211006083909.7750-1-ya.shtunder@gmail.com> (raw)

The truncate method could be called from within a transaction. The flag
of GROUP_LOCAL was set in truncate method after statement row had been
being checked on the GROUP_LOCAL. Accordingly, after a local transaction
NOP row was not appended.

Closes #6123
---
Issue: https://github.com/tarantool/tarantool/issues/6123
Patch: https://github.com/tarantool/tarantool/tree/yshtunder/gh-6123-truncate-is-local-transaction

 src/box/alter.cc                              | 10 +--
 test/replication-luatest/gh_6123_test.lua     |  2 -
 ...-6123-truncate-is-local-transaction.result | 90 -------------------
 ...123-truncate-is-local-transaction.test.lua | 36 --------
 4 files changed, 2 insertions(+), 136 deletions(-)
 delete mode 100644 test/replication/gh-6123-truncate-is-local-transaction.result
 delete mode 100644 test/replication/gh-6123-truncate-is-local-transaction.test.lua

diff --git a/src/box/alter.cc b/src/box/alter.cc
index 399dfe049..ff1404205 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -2902,14 +2902,8 @@ on_replace_dd_truncate(struct trigger * /* trigger */, void *event)
 	    space_group_id(old_space) == GROUP_LOCAL) {
 		stmt->row->group_id = GROUP_LOCAL;
 		/*
-		 * In order to append a dummy NOP statement
-		 * to preserve the tx replication boundaries,
-		 * it is necessary that the condition
-		 * txn->n_local_rows > 0 must be true.
-		 * Therefore it is necessary to increase the
-		 * value of n_local_rows, because the checking
-		 * on the flag of GROUP_LOCAL will occurs
-		 * before it is set.
+		 * The trigger is invoked after txn->n_local_rows
+		 * is counted, so don't forget to update it here.
 		 */
 		++txn->n_local_rows;
 	}
diff --git a/test/replication-luatest/gh_6123_test.lua b/test/replication-luatest/gh_6123_test.lua
index 7341ccc95..a19d1135b 100644
--- a/test/replication-luatest/gh_6123_test.lua
+++ b/test/replication-luatest/gh_6123_test.lua
@@ -12,7 +12,6 @@ g.before_all(function()
         command = './test/replication-luatest/instance_files/master.lua',
         workdir = fio.tempdir(),
         env = {TARANTOOL_REPLICA = '13302'},
-        http_port = 8081,
         net_box_port = 13301,
     })

@@ -21,7 +20,6 @@ g.before_all(function()
         command = './test/replication-luatest/instance_files/replica.lua',
         workdir = fio.tempdir(),
         env = {TARANTOOL_MASTER = '13301'},
-        http_port = 8082,
         net_box_port = 13302,
     })

diff --git a/test/replication/gh-6123-truncate-is-local-transaction.result b/test/replication/gh-6123-truncate-is-local-transaction.result
deleted file mode 100644
index db57d37d8..000000000
--- a/test/replication/gh-6123-truncate-is-local-transaction.result
+++ /dev/null
@@ -1,90 +0,0 @@
--- test-run result file version 2
-test_run = require('test_run').new()
- | ---
- | ...
-
-
--- Step 1
-box.schema.user.grant("guest", "replication")
- | ---
- | ...
-s = box.schema.space.create("temp", {temporary=true})
- | ---
- | ...
-_ = s:create_index('pk')
- | ---
- | ...
-s:insert{1,2}
- | ---
- | - [1, 2]
- | ...
-s:insert{4}
- | ---
- | - [4]
- | ...
-s:select()
- | ---
- | - - [1, 2]
- |   - [4]
- | ...
-
-
--- Step 2
-test_run:cmd('create server replica with rpl_master=default,\
-              script="replication/replica.lua"')
- | ---
- | - true
- | ...
-test_run:cmd('start server replica')
- | ---
- | - true
- | ...
-
-
--- Step 3
-box.begin() box.space._schema:replace{"smth"} s:truncate() box.commit()
- | ---
- | ...
-s:select()
- | ---
- | - []
- | ...
-box.space._schema:select{'smth'}
- | ---
- | - - ['smth']
- | ...
-
-
--- Step 4
--- Checking that replica has received the last transaction,
--- and that replication isn't broken.
-test_run:switch('replica')
- | ---
- | - true
- | ...
-box.space._schema:select{'smth'}
- | ---
- | - - ['smth']
- | ...
-box.info.replication[1].upstream.status
- | ---
- | - follow
- | ...
-
-
-test_run:switch('default')
- | ---
- | - true
- | ...
-test_run:cmd('stop server replica')
- | ---
- | - true
- | ...
-test_run:cmd('cleanup server replica')
- | ---
- | - true
- | ...
-test_run:cmd('delete server replica')
- | ---
- | - true
- | ...
diff --git a/test/replication/gh-6123-truncate-is-local-transaction.test.lua b/test/replication/gh-6123-truncate-is-local-transaction.test.lua
deleted file mode 100644
index 336c0c44d..000000000
--- a/test/replication/gh-6123-truncate-is-local-transaction.test.lua
+++ /dev/null
@@ -1,36 +0,0 @@
-test_run = require('test_run').new()
-
-
--- Step 1
-box.schema.user.grant("guest", "replication")
-s = box.schema.space.create("temp", {temporary=true})
-_ = s:create_index('pk')
-s:insert{1,2}
-s:insert{4}
-s:select()
-
-
--- Step 2
-test_run:cmd('create server replica with rpl_master=default,\
-              script="replication/replica.lua"')
-test_run:cmd('start server replica')
-
-
--- Step 3
-box.begin() box.space._schema:replace{"smth"} s:truncate() box.commit()
-s:select()
-box.space._schema:select{'smth'}
-
-
--- Step 4
--- Checking that replica has received the last transaction,
--- and that replication isn't broken.
-test_run:switch('replica')
-box.space._schema:select{'smth'}
-box.info.replication[1].upstream.status
-
-
-test_run:switch('default')
-test_run:cmd('stop server replica')
-test_run:cmd('cleanup server replica')
-test_run:cmd('delete server replica')
--
2.25.1


                 reply	other threads:[~2021-10-06  8:39 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20211006083909.7750-1-ya.shtunder@gmail.com \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=ya.shtunder@gmail.com \
    --subject='Re: [Tarantool-patches] [PATCH v2] replication: the truncate method called from within a transaction' \
    /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