From: "Serge Petrenko" <sergepetrenko@tarantool.org> To: "Konstantin Osipov" <kostja.osipov@gmail.com> Cc: kirichenkoga@gmail.com, tarantool-patches@dev.tarantool.org, v.shpilevoy@tarantool.org Subject: Re: [Tarantool-patches] [PATCH v4 4/4] replication: do not relay rows coming from a remote instance back to it Date: Wed, 26 Feb 2020 14:21:01 +0300 [thread overview] Message-ID: <1582716061.103393657@f179.i.mail.ru> (raw) In-Reply-To: <20200226102319.GB15433@atlas> [-- Attachment #1: Type: text/plain, Size: 2890 bytes --] >Среда, 26 февраля 2020, 13:23 +03:00 от Konstantin Osipov <kostja.osipov@gmail.com>: > >* sergepetrenko < sergepetrenko@tarantool.org > [20/02/26 13:00]: >> From: Serge Petrenko < sergepetrenko@tarantool.org > >> >> We have a mechanism for restoring rows originating from an instance that >> suffered a sudden power loss: remote masters resend the isntance's rows >> received before a certain point in time, defined by remote master vclock >> at the moment of subscribe. >> However, this is useful only on initial replication configuraiton, when >> an instance has just recovered, so that it can receive what it has >> relayed but haven't synced to disk. >> In other cases, when an instance is operating normally and master-master >> replication is configured, the mechanism described above may lead to >> instance re-applying instance's own rows, coming from a master it has just >> subscribed to. >> To fix the problem do not relay rows coming from a remote instance, if >> the instance has already recovered. >> > >A comment like this also belongs to the code. Usually the patch >that fixes a bug comes along with a test case for a bug, are you >sure you can't submit one? I don’t think I can. The test that comes with an issue is a stress test, relying on running it with multiple workers simultaneously. It reproduces the problem when ran with 4 workers on one of my PCs, and with 20 workers on the other. I think we don’t have the appropriate testing infrastructure to run the same test with multiple workers at the same time, and I couldn’t come up with a single test which would reproduce the same problem. > >> vclock_copy(&vclock, &replicaset.vclock); >> + unsigned int id_mask = box_is_orphan() ? 0 : 1 << instance_id; > >box_is_orphan() fits the bill, so it's good enough. > >I would explain, however, that what we are really looking for >here is whether or not the local WAL accepts writes. As soon as we >started allowing writes to the local WAL, we don't want to get >these writes from elsewhere. Ok. diff --git a/src/box/applier.cc b/src/box/applier.cc index 1a07d71a9..73ffc0d68 100644 --- a/src/box/applier.cc +++ b/src/box/applier.cc @@ -866,9 +866,13 @@ applier_subscribe(struct applier *applier) struct vclock vclock; vclock_create(&vclock); vclock_copy(&vclock, &replicaset.vclock); - unsigned int id_mask = box_is_orphan() ? 0 : 1 << instance_id; + /* + * Stop accepting local rows coming from a remote + * instance as soon as local WAL starts accepting writes. + */ + unsigned int id_filter = box_is_orphan() ? 0 : 1 << instance_id; xrow_encode_subscribe_xc(&row, &REPLICASET_UUID, &INSTANCE_UUID, - &vclock, replication_anon, id_mask); + &vclock, replication_anon, id_filter); coio_write_xrow(coio, &row); /* Read SUBSCRIBE response */ > >-- >Konstantin Osipov, Moscow, Russia -- Serge Petrenko [-- Attachment #2: Type: text/html, Size: 4179 bytes --]
next prev parent reply other threads:[~2020-02-26 11:21 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-26 10:00 [Tarantool-patches] [PATCH v4 0/4] replication: fix applying of rows originating from local instance sergepetrenko 2020-02-26 10:00 ` [Tarantool-patches] [PATCH v4 1/4] box: expose box_is_orphan method sergepetrenko 2020-02-26 10:00 ` [Tarantool-patches] [PATCH v4 2/4] wal: warn when trying to write a record with a broken lsn sergepetrenko 2020-02-26 10:00 ` [Tarantool-patches] [PATCH v4 3/4] replication: implement an instance id filter for relay sergepetrenko 2020-02-26 10:18 ` Konstantin Osipov 2020-02-26 11:16 ` Serge Petrenko 2020-02-26 23:54 ` Vladislav Shpilevoy 2020-02-27 6:48 ` Konstantin Osipov 2020-02-27 13:15 ` Serge Petrenko 2020-02-27 23:33 ` Vladislav Shpilevoy 2020-02-26 10:00 ` [Tarantool-patches] [PATCH v4 4/4] replication: do not relay rows coming from a remote instance back to it sergepetrenko 2020-02-26 10:23 ` Konstantin Osipov 2020-02-26 11:21 ` Serge Petrenko [this message] 2020-02-26 11:58 ` Konstantin Osipov 2020-02-26 15:58 ` Serge Petrenko 2020-02-26 16:40 ` Konstantin Osipov 2020-02-26 23:54 ` Vladislav Shpilevoy 2020-02-27 6:52 ` Konstantin Osipov 2020-02-27 14:13 ` Serge Petrenko 2020-02-27 21:17 ` Serge Petrenko 2020-02-27 23:22 ` Vladislav Shpilevoy 2020-02-28 8:03 ` Serge Petrenko 2020-02-26 23:54 ` [Tarantool-patches] [PATCH v4 0/4] replication: fix applying of rows originating from local instance Vladislav Shpilevoy 2020-02-27 21:24 ` Serge Petrenko 2020-02-27 23:24 ` Vladislav Shpilevoy
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=1582716061.103393657@f179.i.mail.ru \ --to=sergepetrenko@tarantool.org \ --cc=kirichenkoga@gmail.com \ --cc=kostja.osipov@gmail.com \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v4 4/4] replication: do not relay rows coming from a remote instance back to it' \ /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