From: Georgy Kirichenko <georgy@tarantool.org> To: tarantool-patches@freelists.org Cc: Georgy Kirichenko <georgy@tarantool.org> Subject: [tarantool-patches] [PATCH v3 01/14] txn: Fire a trigger after a transaction finalization Date: Sun, 9 Jun 2019 23:44:30 +0300 [thread overview] Message-ID: <eec0b04fe38dbaf1f1460de2ef2b3e87e14b04da.1560112747.git.georgy@tarantool.org> (raw) In-Reply-To: <cover.1560112747.git.georgy@tarantool.org> Fire transaction trigger after a transaction finalization. This allows to not to view the transaction dismissed changes in case of rollback. Fixes: #4276 --- src/box/txn.c | 16 ++++++++-------- test/box/ddl.result | 37 +++++++++++++++++++++++++++++++++++++ test/box/ddl.test.lua | 15 +++++++++++++++ 3 files changed, 60 insertions(+), 8 deletions(-) diff --git a/src/box/txn.c b/src/box/txn.c index da749d7cc..1d8271e51 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -410,6 +410,12 @@ txn_commit(struct txn *txn) if (txn->signature < 0) goto fail; } + /* + * Engine can be NULL if transaction contains IPROTO_NOP + * statements only. + */ + if (txn->engine != NULL) + engine_commit(txn->engine, txn); /* * The transaction is in the binary log. No action below * may throw. In case an error has happened, there is @@ -421,12 +427,6 @@ txn_commit(struct txn *txn) unreachable(); panic("commit trigger failed"); } - /* - * Engine can be NULL if transaction contains IPROTO_NOP - * statements only. - */ - if (txn->engine != NULL) - engine_commit(txn->engine, txn); struct txn_stmt *stmt; stailq_foreach_entry(stmt, &txn->stmts, next) @@ -458,6 +458,8 @@ txn_rollback() struct txn *txn = in_txn(); if (txn == NULL) return; + if (txn->engine) + engine_rollback(txn->engine, txn); /* Rollback triggers must not throw. */ if (txn->has_triggers && trigger_run(&txn->on_rollback, txn) != 0) { @@ -465,8 +467,6 @@ txn_rollback() unreachable(); panic("rollback trigger failed"); } - if (txn->engine) - engine_rollback(txn->engine, txn); struct txn_stmt *stmt; stailq_foreach_entry(stmt, &txn->stmts, next) diff --git a/test/box/ddl.result b/test/box/ddl.result index b995b1493..9c82ce2b2 100644 --- a/test/box/ddl.result +++ b/test/box/ddl.result @@ -1208,3 +1208,40 @@ _ = c:get() test_latch:drop() -- this is where everything stops --- ... +-- gh-4276 - check grant privilege rollback +_ = box.schema.user.create('testg') +--- +... +_ = box.schema.space.create('testg'):create_index('pk') +--- +... +box.error.injection.set('ERRINJ_WAL_IO', true) +--- +- ok +... +-- the grant operation above fails and test hasn't any space test permissions +box.schema.user.grant('testg', 'read,write', 'space', 'testg') +--- +- error: Failed to write to disk +... +-- switch user and check they couldn't select +box.session.su('testg') +--- +... +box.space.testg:select() +--- +- error: Read access to space 'testg' is denied for user 'testg' +... +box.session.su('admin') +--- +... +box.error.injection.set('ERRINJ_WAL_IO', false) +--- +- ok +... +box.schema.user.drop('testg') +--- +... +box.space.testg:drop() +--- +... diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua index 101bc6f9b..301f7e6c1 100644 --- a/test/box/ddl.test.lua +++ b/test/box/ddl.test.lua @@ -270,3 +270,18 @@ box.rollback() _ = c:get() test_latch:drop() -- this is where everything stops + +-- gh-4276 - check grant privilege rollback +_ = box.schema.user.create('testg') +_ = box.schema.space.create('testg'):create_index('pk') + +box.error.injection.set('ERRINJ_WAL_IO', true) +-- the grant operation above fails and test hasn't any space test permissions +box.schema.user.grant('testg', 'read,write', 'space', 'testg') +-- switch user and check they couldn't select +box.session.su('testg') +box.space.testg:select() +box.session.su('admin') +box.error.injection.set('ERRINJ_WAL_IO', false) +box.schema.user.drop('testg') +box.space.testg:drop() -- 2.21.0
next prev parent reply other threads:[~2019-06-09 20:44 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-09 20:44 [tarantool-patches] [PATCH v3 00/14] Parallel applier Georgy Kirichenko 2019-06-09 20:44 ` Georgy Kirichenko [this message] 2019-06-09 21:59 ` [tarantool-patches] Re: [PATCH v3 01/14] txn: Fire a trigger after a transaction finalization Konstantin Osipov 2019-06-11 11:42 ` [tarantool-patches] " Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 02/14] ddl: synchronize privileges cache with actual data state Georgy Kirichenko 2019-06-11 13:13 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 03/14] txn: transaction memory allocation Georgy Kirichenko 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 04/14] ddl: place alter structures onto a txn memory region Georgy Kirichenko 2019-06-11 14:14 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 05/14] txn: get rid of autocommit from a txn structure Georgy Kirichenko 2019-06-13 14:11 ` Vladimir Davydov 2019-06-16 16:20 ` [tarantool-patches] " Konstantin Osipov 2019-06-16 16:14 ` Konstantin Osipov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 06/14] txn: get rid of fiber_gc from txn_rollback Georgy Kirichenko 2019-06-13 14:12 ` Vladimir Davydov 2019-06-13 19:28 ` Георгий Кириченко 2019-06-14 9:21 ` Vladimir Davydov 2019-06-16 16:38 ` [tarantool-patches] " Konstantin Osipov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 07/14] wal: remove fiber from a journal_entry structure Georgy Kirichenko 2019-06-13 14:17 ` Vladimir Davydov 2019-06-13 19:33 ` Георгий Кириченко 2019-06-14 8:05 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 08/14] wal: enable asyncronous wal writes Georgy Kirichenko 2019-06-13 14:21 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 09/14] wal: a dedicated wal scheduling fiber Georgy Kirichenko 2019-06-13 14:24 ` Vladimir Davydov 2019-06-13 19:36 ` Георгий Кириченко 2019-06-14 9:20 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 10/14] core: latch_unlock_external routine Georgy Kirichenko 2019-06-13 14:27 ` Vladimir Davydov 2019-06-13 19:38 ` Георгий Кириченко 2019-06-14 8:10 ` Vladimir Davydov 2019-06-14 9:18 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 11/14] txn: introduce asynchronous txn commit Georgy Kirichenko 2019-06-13 14:34 ` Vladimir Davydov 2019-06-13 19:45 ` Георгий Кириченко 2019-06-14 7:58 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 12/14] txn: handle fiber stop event at transaction level Georgy Kirichenko 2019-06-13 14:36 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 13/14] applier: apply transaction in parallel Georgy Kirichenko 2019-06-13 15:17 ` Vladimir Davydov 2019-06-09 20:44 ` [tarantool-patches] [PATCH v3 14/14] test: fix flaky test Georgy Kirichenko
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=eec0b04fe38dbaf1f1460de2ef2b3e87e14b04da.1560112747.git.georgy@tarantool.org \ --to=georgy@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [tarantool-patches] [PATCH v3 01/14] txn: Fire a trigger after a transaction finalization' \ /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