Tarantool development patches archive
 help / color / mirror / Atom feed
From: Serge Petrenko via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>, gorcunov@gmail.com
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH v4 07/12] raft: filter rows based on known peer terms
Date: Mon, 19 Apr 2021 12:31:21 +0300	[thread overview]
Message-ID: <5a41ce31-dd82-dd0a-f13b-6a428e1a1964@tarantool.org> (raw)
In-Reply-To: <db8b1bdf-9480-8f6e-0f44-2c1fd2f4c79c@tarantool.org>



18.04.2021 18:44, Vladislav Shpilevoy пишет:
> I accidentally updated curl submodule (forgot to update the
> submodules before doing my amendments), we need to revert it back.

Yep. Fixed.

>
>> diff --git a/src/box/applier.cc b/src/box/applier.cc
>> index 61d53fdec..b0e8fbba7 100644
>> --- a/src/box/applier.cc
>> +++ b/src/box/applier.cc
>> @@ -967,6 +967,59 @@ apply_final_join_tx(struct stailq *rows)
>>   	return rc;
>>   }
>>   
>> +/*
> Also I forgot to make it /** instead of /*.

Thanks! Fixed as well.
Incremental diff's below.

>
>> + * When elections are enabled we must filter out synchronous rows coming
>> + * from an instance that fell behind the current leader. This includes
>> + * both synchronous tx rows and rows for txs following unconfirmed
>> + * synchronous transactions.
>> + * The rows are replaced with NOPs to preserve the vclock consistency.
>> + */

I've also fixed the issue we discussed verbally, about filtering by
row->replica_id rather than by applier->instance_id.
This is important because once new leader is elected, it may be
outdated until it sends us its promote request. But there may be
valid rows from the previous leader that we need to accept.
Old leader is not outdated until we receive the new leader's promote,
so we have to apply its rows.

================================================

diff --git a/src/box/applier.cc b/src/box/applier.cc
index b0e8fbba7..dc05c91d3 100644
--- a/src/box/applier.cc
+++ b/src/box/applier.cc
@@ -967,7 +967,7 @@ apply_final_join_tx(struct stailq *rows)
         return rc;
  }

-/*
+/**
   * When elections are enabled we must filter out synchronous rows coming
   * from an instance that fell behind the current leader. This includes
   * both synchronous tx rows and rows for txs following unconfirmed
@@ -975,7 +975,7 @@ apply_final_join_tx(struct stailq *rows)
   * The rows are replaced with NOPs to preserve the vclock consistency.
   */
  static void
-applier_synchro_filter_tx(struct applier *applier, struct stailq *rows)
+applier_synchro_filter_tx(struct stailq *rows)
  {
         /*
          * XXX: in case raft is disabled, synchronous replication still 
works
@@ -985,15 +985,18 @@ applier_synchro_filter_tx(struct applier *applier, 
struct stailq *rows)
          */
         if (!raft_is_enabled(box_raft()))
                 return;
-       if (!txn_limbo_is_replica_outdated(&txn_limbo, 
applier->instance_id))
+       struct xrow_header *row;
+       /*
+        * It  may happen that we receive the instance's rows via some third
+        * node, so cannot check for applier->instance_id here.
+        */
+       row = &stailq_first_entry(rows, struct applier_tx_row, next)->row;
+       if (!txn_limbo_is_replica_outdated(&txn_limbo, row->replica_id))
                 return;

-       struct xrow_header *row;
-       row = &stailq_last_entry(rows, struct applier_tx_row, next)->row;
-       if (row->wait_sync)
+       if (stailq_last_entry(rows, struct applier_tx_row, 
next)->row.wait_sync)
                 goto nopify;

-       row = &stailq_first_entry(rows, struct applier_tx_row, next)->row;
         /*
          * Not waiting for sync and not a synchro request - this make 
it already
          * NOP or an asynchronous transaction not depending on any 
synchronous
@@ -1079,7 +1082,7 @@ applier_apply_tx(struct applier *applier, struct 
stailq *rows)
                         }
                 }
         }
-       applier_synchro_filter_tx(applier, rows);
+       applier_synchro_filter_tx(rows);
         if (unlikely(iproto_type_is_synchro_request(first_row->type))) {
                 /*
                  * Synchro messages are not transactions, in terms
diff --git a/third_party/curl b/third_party/curl
index 12af024bc..3266b35bb 160000
--- a/third_party/curl
+++ b/third_party/curl
@@ -1 +1 @@
-Subproject commit 12af024bc85606b14ffc415413a7e86e6bbee7eb
+Subproject commit 3266b35bbe21c68dea0dc7ccd991eb028e6d360c

-- 
Serge Petrenko


  reply	other threads:[~2021-04-19  9:31 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-16 16:25 [Tarantool-patches] [PATCH v4 00/12] raft: introduce manual elections and fix a bug with re-applying rolled back transactions Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 01/12] wal: make wal_assign_lsn accept journal entry Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 02/12] xrow: enrich row's meta information with sync replication flags Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 03/12] xrow: introduce a PROMOTE entry Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 04/12] box: actualise iproto_key_type array Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 05/12] box: make clear_synchro_queue() write a PROMOTE entry instead of CONFIRM + ROLLBACK Serge Petrenko via Tarantool-patches
2021-04-16 22:12   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-18  8:24     ` Serge Petrenko via Tarantool-patches
2021-04-20 22:30   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-21  5:58     ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 06/12] box: write PROMOTE even for empty limbo Serge Petrenko via Tarantool-patches
2021-04-19 13:39   ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 07/12] raft: filter rows based on known peer terms Serge Petrenko via Tarantool-patches
2021-04-16 22:21   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-18  8:49     ` Serge Petrenko via Tarantool-patches
2021-04-18 15:44     ` Vladislav Shpilevoy via Tarantool-patches
2021-04-19  9:31       ` Serge Petrenko via Tarantool-patches [this message]
2021-04-18 16:27   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-19  9:30     ` Serge Petrenko via Tarantool-patches
2021-04-20 20:29   ` Serge Petrenko via Tarantool-patches
2021-04-20 20:31     ` Serge Petrenko via Tarantool-patches
2021-04-20 20:55       ` Serge Petrenko via Tarantool-patches
2021-04-20 22:30       ` Vladislav Shpilevoy via Tarantool-patches
2021-04-21  5:58         ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 08/12] election: introduce a new election mode: "manual" Serge Petrenko via Tarantool-patches
2021-04-19 22:34   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-20  9:25     ` Serge Petrenko via Tarantool-patches
2021-04-20 17:37       ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 09/12] raft: introduce raft_start/stop_candidate Serge Petrenko via Tarantool-patches
2021-04-16 22:23   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-18  8:59     ` Serge Petrenko via Tarantool-patches
2021-04-19 22:35       ` Vladislav Shpilevoy via Tarantool-patches
2021-04-20  9:28         ` Serge Petrenko via Tarantool-patches
2021-04-19 12:52   ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 10/12] election: support manual elections in clear_synchro_queue() Serge Petrenko via Tarantool-patches
2021-04-16 22:24   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-18  9:26     ` Serge Petrenko via Tarantool-patches
2021-04-18 16:07       ` Vladislav Shpilevoy via Tarantool-patches
2021-04-19  9:32         ` Serge Petrenko via Tarantool-patches
2021-04-19 12:47   ` Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 11/12] box: remove parameter from clear_synchro_queue Serge Petrenko via Tarantool-patches
2021-04-16 16:25 ` [Tarantool-patches] [PATCH v4 12/12] box.ctl: rename clear_synchro_queue to promote Serge Petrenko via Tarantool-patches
2021-04-19 22:35   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-20 10:22     ` Serge Petrenko via Tarantool-patches
2021-04-18 12:00 ` [Tarantool-patches] [PATCH v4 13/12] replication: send accumulated Raft messages after relay start Serge Petrenko via Tarantool-patches
2021-04-18 16:03   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-19 12:11     ` Serge Petrenko via Tarantool-patches
2021-04-19 22:36       ` Vladislav Shpilevoy via Tarantool-patches
2021-04-20 10:38         ` Serge Petrenko via Tarantool-patches
2021-04-20 22:31           ` Vladislav Shpilevoy via Tarantool-patches
2021-04-21  5:59             ` Serge Petrenko via Tarantool-patches
2021-04-19 22:37 ` [Tarantool-patches] [PATCH v4 00/12] raft: introduce manual elections and fix a bug with re-applying rolled back transactions Vladislav Shpilevoy via Tarantool-patches
2021-04-20 17:38 ` [Tarantool-patches] [PATCH v4 14/12] txn: make NOPs fully asynchronous Serge Petrenko via Tarantool-patches
2021-04-20 22:31   ` Vladislav Shpilevoy via Tarantool-patches
2021-04-21  5:59     ` Serge Petrenko via Tarantool-patches
2021-04-20 22:30 ` [Tarantool-patches] [PATCH v4 00/12] raft: introduce manual elections and fix a bug with re-applying rolled back transactions Vladislav Shpilevoy via Tarantool-patches
2021-04-21  6:01   ` Serge Petrenko via Tarantool-patches

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=5a41ce31-dd82-dd0a-f13b-6a428e1a1964@tarantool.org \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=gorcunov@gmail.com \
    --cc=sergepetrenko@tarantool.org \
    --cc=v.shpilevoy@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH v4 07/12] raft: filter rows based on known peer terms' \
    /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