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 1587C30D48 for ; Wed, 19 Jun 2019 17:23:21 -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 txEb-of9Em8U for ; Wed, 19 Jun 2019 17:23:20 -0400 (EDT) Received: from smtp63.i.mail.ru (smtp63.i.mail.ru [217.69.128.43]) (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 53F3730CFD for ; Wed, 19 Jun 2019 17:23:20 -0400 (EDT) From: Georgy Kirichenko Subject: [tarantool-patches] [PATCH v4 1/9] txn: handle fiber stop event at transaction level Date: Thu, 20 Jun 2019 00:23:08 +0300 Message-Id: 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 Get rid of duplicated fiber on stop logic. Prerequisites: #1254 --- src/box/memtx_engine.c | 5 ----- src/box/txn.c | 4 ++++ src/box/vinyl.c | 8 -------- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c index f4312484a..cd763e547 100644 --- a/src/box/memtx_engine.c +++ b/src/box/memtx_engine.c @@ -94,15 +94,12 @@ memtx_init_txn(struct txn *txn) trigger_create(&txn->fiber_on_yield, txn_on_yield, NULL, NULL); - trigger_create(&txn->fiber_on_stop, txn_on_stop, - NULL, NULL); /* * Memtx doesn't allow yields between statements of * a transaction. Set a trigger which would roll * back the transaction if there is a yield. */ trigger_add(&fiber->on_yield, &txn->fiber_on_yield); - trigger_add(&fiber->on_stop, &txn->fiber_on_stop); /* * This serves as a marker that the triggers are * initialized. @@ -379,7 +376,6 @@ memtx_engine_prepare(struct engine *engine, struct txn *txn) * on calls to trigger_create/trigger_clear. */ trigger_clear(&txn->fiber_on_yield); - trigger_clear(&txn->fiber_on_stop); if (txn->is_aborted) { diag_set(ClientError, ER_TRANSACTION_YIELD); diag_log(); @@ -458,7 +454,6 @@ memtx_engine_rollback(struct engine *engine, struct txn *txn) { if (txn->engine_tx != NULL) { trigger_clear(&txn->fiber_on_yield); - trigger_clear(&txn->fiber_on_stop); } struct txn_stmt *stmt; stailq_reverse(&txn->stmts); diff --git a/src/box/txn.c b/src/box/txn.c index d4627b554..7a2c8cdaf 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -198,6 +198,8 @@ txn_begin(bool is_autocommit) txn->psql_txn = NULL; /* fiber_on_yield/fiber_on_stop initialized by engine on demand */ fiber_set_txn(fiber(), txn); + trigger_create(&txn->fiber_on_stop, txn_on_stop, NULL, NULL); + trigger_add(&fiber()->on_stop, &txn->fiber_on_stop); return txn; } @@ -421,6 +423,7 @@ txn_commit(struct txn *txn) if (engine_prepare(txn->engine, txn) != 0) goto fail; } + trigger_clear(&txn->fiber_on_stop); if (txn->n_new_rows + txn->n_applier_rows > 0) { txn->signature = txn_write_to_wal(txn); @@ -475,6 +478,7 @@ txn_rollback() struct txn *txn = in_txn(); if (txn == NULL) return; + trigger_clear(&txn->fiber_on_stop); if (txn->engine) engine_rollback(txn->engine, txn); /* Rollback triggers must not throw. */ diff --git a/src/box/vinyl.c b/src/box/vinyl.c index ecf197523..814325da5 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -2420,10 +2420,6 @@ vinyl_engine_begin(struct engine *engine, struct txn *txn) txn->engine_tx = vy_tx_begin(env->xm); if (txn->engine_tx == NULL) return -1; - if (!txn->is_autocommit) { - trigger_create(&txn->fiber_on_stop, txn_on_stop, NULL, NULL); - trigger_add(&fiber()->on_stop, &txn->fiber_on_stop); - } return 0; } @@ -2493,8 +2489,6 @@ vinyl_engine_commit(struct engine *engine, struct txn *txn) vy_regulator_check_dump_watermark(&env->regulator); txn->engine_tx = NULL; - if (!txn->is_autocommit) - trigger_clear(&txn->fiber_on_stop); } static void @@ -2508,8 +2502,6 @@ vinyl_engine_rollback(struct engine *engine, struct txn *txn) vy_tx_rollback(tx); txn->engine_tx = NULL; - if (!txn->is_autocommit) - trigger_clear(&txn->fiber_on_stop); } static int -- 2.22.0