From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp50.i.mail.ru (smtp50.i.mail.ru [94.100.177.110]) (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 5898C42EF5C for ; Fri, 19 Jun 2020 20:53:57 +0300 (MSK) References: <16c9d1ffb9d09bb2b2f206a23973e2734616c345.1592482315.git.sergepetrenko@tarantool.org> From: Serge Petrenko Message-ID: <602ad0b8-41a7-077a-b9cc-c2f11a740195@tarantool.org> Date: Fri, 19 Jun 2020 20:53:56 +0300 MIME-Version: 1.0 In-Reply-To: <16c9d1ffb9d09bb2b2f206a23973e2734616c345.1592482315.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 4/4] txn_limbo: add ROLLBACK processing List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org, gorcunov@gmail.com Cc: tarantool-patches@dev.tarantool.org 18.06.2020 15:14, Serge Petrenko пишет: > Now txn_limbo writes a ROLLBACK entry to WAL when one of the limbo > entries fails to gather quorum during a txn_limbo_confirm_timeout. > All the limbo entries, starting with the failed one, are rolled back in > reverse order. > > Closes #4848 Added a new commit: commit c3c3d6739add2d26b45e6ba0fd571b502b125c57 Author: Serge Petrenko Date:   Fri Jun 19 08:30:43 2020 +0300     Fix ROLLBACK handling during recovery and in row encoding     [TO BE SQUASHED INTO THE PREVIOUS COMMIT] diff --git a/src/box/box.cc b/src/box/box.cc index 23c5aed95..8ba7ffafb 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -343,7 +343,7 @@ apply_wal_row(struct xstream *stream, struct xrow_header *row)  {         struct request request;         // TODO: process confirmation during recovery. -       if (row->type == IPROTO_CONFIRM) +       if (iproto_type_is_synchro_request(row->type))                 return;         xrow_decode_dml_xc(row, &request, dml_request_key_map(row->type));         if (request.type != IPROTO_NOP) { diff --git a/src/box/txn.c b/src/box/txn.c index 52e1c36dd..2360ecae3 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -83,10 +83,10 @@ txn_add_redo(struct txn *txn, struct txn_stmt *stmt, struct request *request)         struct space *space = stmt->space;         row->group_id = space != NULL ? space_group_id(space) : 0;         /* -        * IPROTO_CONFIRM entries are supplementary and aren't -        * valid dml requests. They're encoded manually. +        * Sychronous replication entries are supplementary and +        * aren't valid dml requests. They're encoded manually.          */ -       if (likely(row->type != IPROTO_CONFIRM)) +       if (likely(!iproto_type_is_synchro_request(row->type)))                 row->bodycnt = xrow_encode_dml(request, &txn->region, row->body);         if (row->bodycnt < 0)                 return -1; > * Return TRUE if limbo is empty. > */ -- Serge Petrenko