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 47EC42E1B7 for ; Sun, 9 Jun 2019 16:44:59 -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 4uOXdrDY2H8h for ; Sun, 9 Jun 2019 16:44:59 -0400 (EDT) Received: from smtp39.i.mail.ru (smtp39.i.mail.ru [94.100.177.99]) (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 083AE2E26D for ; Sun, 9 Jun 2019 16:44:59 -0400 (EDT) From: Georgy Kirichenko Subject: [tarantool-patches] [PATCH v3 12/14] txn: handle fiber stop event at transaction level Date: Sun, 9 Jun 2019 23:44:41 +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 | 5 ++++- src/box/vinyl.c | 4 ---- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/box/memtx_engine.c b/src/box/memtx_engine.c index 918885318..f371d147f 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. @@ -386,7 +383,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(); @@ -465,7 +461,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 815d635fe..5ceae0da1 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -202,6 +202,8 @@ txn_begin() txn->entry = 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; } @@ -462,7 +464,7 @@ txn_write(struct txn *txn) { if (txn_prepare(txn) != 0) goto fail; - + trigger_clear(&txn->fiber_on_stop); txn->start_tm = ev_monotonic_now(loop()); if (txn->n_new_rows + txn->n_applier_rows == 0) { /* Nothing to do. */ @@ -528,6 +530,7 @@ txn_rollback_stmt(struct txn *txn) void txn_rollback(struct txn *txn) { + trigger_clear(&txn->fiber_on_stop); txn->signature = -1; txn_complete(txn); txn_free(txn); diff --git a/src/box/vinyl.c b/src/box/vinyl.c index c61f9477e..96c1ab1c8 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -2414,8 +2414,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; - trigger_create(&txn->fiber_on_stop, txn_on_stop, NULL, NULL); - trigger_add(&fiber()->on_stop, &txn->fiber_on_stop); return 0; } @@ -2485,7 +2483,6 @@ vinyl_engine_commit(struct engine *engine, struct txn *txn) vy_regulator_check_dump_watermark(&env->regulator); txn->engine_tx = NULL; - trigger_clear(&txn->fiber_on_stop); } static void @@ -2499,7 +2496,6 @@ vinyl_engine_rollback(struct engine *engine, struct txn *txn) vy_tx_rollback(tx); txn->engine_tx = NULL; - trigger_clear(&txn->fiber_on_stop); } static int -- 2.21.0