From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp41.i.mail.ru (smtp41.i.mail.ru [94.100.177.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id D292C41C5DA for ; Tue, 23 Jun 2020 11:34:47 +0300 (MSK) References: <3210e1e6f867cfd1c1f65e05f28a32deae63c172.1591701695.git.sergepetrenko@tarantool.org> From: Serge Petrenko Message-ID: <7c490fda-2562-68b4-4638-6760d4fe07f0@tarantool.org> Date: Tue, 23 Jun 2020 11:34:46 +0300 MIME-Version: 1.0 In-Reply-To: <3210e1e6f867cfd1c1f65e05f28a32deae63c172.1591701695.git.sergepetrenko@tarantool.org> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Content-Language: en-GB Subject: Re: [Tarantool-patches] [PATCH 8/8] replication: write and read CONFIRM entries List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org, sergos@tarantool.org, gorcunov@gmail.com Cc: tarantool-patches@dev.tarantool.org 09.06.2020 15:20, Serge Petrenko пишет: > Make txn_limbo write a CONFIRM entry as soon as a batch of entries > receive their acks. CONFIRM entry is written to WAL and later replicated > to all the replicas. > > Now replicas put synchronous transactions into txn_limbo and wait for > corresponding confirmation entries to arrive and end up in their WAL > before committing the transactions. > > Part-of #4847 New commit: commit c3f2ad52947a894a3028aac5f4b974577419af3f Author: Serge Petrenko Date:   Mon Jun 22 21:04:48 2020 +0300     fix for 'replication: write and read CONFIRM entries'     Rename on_confirm trigger to on_confirm_written to look similar to     on_rollback_written trigger, introduced later.     Make txn_limbo_on_rollback trigger respect the newly-introduced rollback     reasons in txn->signature. (Now there's no need to clear the trigger     after WAL write success).     Fix use of wrong parameters inside both triggers.     [TO BE SQUASHED INTO THE PREVIOUS COMMIT] diff --git a/src/box/applier.cc b/src/box/applier.cc index 009962d3b..5703a0698 100644 --- a/src/box/applier.cc +++ b/src/box/applier.cc @@ -260,10 +260,10 @@ process_nop(struct request *request)   * Confirms some of the txns waiting in txn_limbo.   */  static int -applier_on_confirm(struct trigger *trig, void *data) +applier_on_confirm_written(struct trigger *trig, void *event)  { -    (void) trig; -    int64_t lsn = *(int64_t *)data; +    (void) event; +    int64_t lsn = *(int64_t *)trig->data;      txn_limbo_read_confirm(&txn_limbo, lsn);      return 0;  } @@ -308,7 +308,7 @@ process_confirm(struct request *request)          diag_set(OutOfMemory, size, "region_alloc_object", "trig");          return -1;      } -    trigger_create(trig, applier_on_confirm, lsn, NULL); +    trigger_create(trig, applier_on_confirm_written, lsn, NULL);      if (txn_begin_stmt(txn, NULL) != 0)          return -1; diff --git a/src/box/txn.c b/src/box/txn.c index a50dfeaf1..bf17fd749 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -611,10 +611,14 @@ txn_commit_nop(struct txn *txn)   * when tx is waiting for confirmation.   */  static int -txn_limbo_on_rollback(struct trigger *trig, void *data) +txn_limbo_on_rollback(struct trigger *trig, void *event)  { -    (void) trig; -    struct txn_limbo_entry *entry = (struct txn_limbo_entry *) data; +    (void) event; +    struct txn *txn = (struct txn *) event; +    /* Check whether limbo has performed the cleanup. */ +    if (txn->signature != TXN_SIGNATURE_ROLLBACK) +        return 0; +    struct txn_limbo_entry *entry = (struct txn_limbo_entry *) trig->data;      txn_limbo_abort(&txn_limbo, entry);      return 0;  } -- Serge Petrenko