From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 9162F2A577 for ; Wed, 20 Mar 2019 16:31:46 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id oTciUFogFnXm for ; Wed, 20 Mar 2019 16:31:46 -0400 (EDT) Received: from smtp29.i.mail.ru (smtp29.i.mail.ru [94.100.177.89]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 463C82A246 for ; Wed, 20 Mar 2019 16:31:46 -0400 (EDT) From: Georgy Kirichenko Subject: [tarantool-patches] [PATCH 1/3] Abort vinyl index creation in case of truncation rollback Date: Wed, 20 Mar 2019 23:31:33 +0300 Message-Id: <9e71736be4cc6add4fc856ae8756fcc24b04f4e6.1553112720.git.georgy@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: tarantool-patches@freelists.org Cc: Georgy Kirichenko Abort index create if truncate couldn't be finished because of rollback or error. Without this vinyl will fail because of internal scheduler assertion. Needed for: 2798 --- src/box/alter.cc | 8 ++++++++ test/engine/errinj.result | 34 ++++++++++++++++++++++++++++++++++ test/engine/errinj.test.lua | 12 ++++++++++++ test/engine/suite.ini | 1 + 4 files changed, 55 insertions(+) create mode 100644 test/engine/errinj.result create mode 100644 test/engine/errinj.test.lua diff --git a/src/box/alter.cc b/src/box/alter.cc index 431da12da..84e74ee89 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -1312,6 +1312,7 @@ public: uint32_t iid; virtual void prepare(struct alter_space *alter); virtual void commit(struct alter_space *alter, int64_t signature); + virtual void rollback(struct alter_space *alter); }; void @@ -1349,6 +1350,13 @@ TruncateIndex::commit(struct alter_space *alter, int64_t signature) index_commit_create(new_index, signature); } +void +TruncateIndex::rollback(struct alter_space *alter) +{ + struct index *new_index = space_index(alter->new_space, iid); + index_abort_create(new_index); +} + /** * UpdateSchemaVersion - increment schema_version. Used on * in alter_space_do(), i.e. when creating or dropping diff --git a/test/engine/errinj.result b/test/engine/errinj.result new file mode 100644 index 000000000..37fc280b9 --- /dev/null +++ b/test/engine/errinj.result @@ -0,0 +1,34 @@ +test_run = require('test_run') +--- +... +inspector = test_run.new() +--- +... +engine = inspector:get_cfg('engine') +--- +... +errinj = box.error.injection +--- +... +-- test truncate rollback does not abort +s = box.schema.space.create('truncate_rollback', {engine = engine}) +--- +... +_ = s:create_index('pk') +--- +... +errinj.set('ERRINJ_WAL_IO', true) +--- +- ok +... +s:truncate() +--- +- error: Failed to write to disk +... +errinj.set('ERRINJ_WAL_IO', false) +--- +- ok +... +s:drop() +--- +... diff --git a/test/engine/errinj.test.lua b/test/engine/errinj.test.lua new file mode 100644 index 000000000..ee5e36361 --- /dev/null +++ b/test/engine/errinj.test.lua @@ -0,0 +1,12 @@ +test_run = require('test_run') +inspector = test_run.new() +engine = inspector:get_cfg('engine') +errinj = box.error.injection + +-- test truncate rollback does not abort +s = box.schema.space.create('truncate_rollback', {engine = engine}) +_ = s:create_index('pk') +errinj.set('ERRINJ_WAL_IO', true) +s:truncate() +errinj.set('ERRINJ_WAL_IO', false) +s:drop() diff --git a/test/engine/suite.ini b/test/engine/suite.ini index 3f82a1325..3db02ab6f 100644 --- a/test/engine/suite.ini +++ b/test/engine/suite.ini @@ -3,6 +3,7 @@ core = tarantool description = tarantool multiengine tests script = box.lua use_unix_sockets = True +release_disabled = errinj.test.lua config = engine.cfg #disabled = replica_join.test.lua lua_libs = conflict.lua ../box/lua/utils.lua ../box/lua/push.lua -- 2.21.0