20 дек. 2019 г., в 15:07, Serge Petrenko <sergepetrenko@tarantool.org> написал(а):




18 дек. 2019 г., в 10:49, Georgy Kirichenko <georgy@tarantool.org> написал(а):

Hi!
Thank you for the patch set, good approach and overall it looks good to be
merged. And there alos some points I would like to point.
Please consider what should happen if any other instance tries to connect to
an anonymous replica. I think we could enable such replication if a connecting
replica is anonymous to, however, this should be an object of a different issue
so we could disable such behavior right now. At least we should handle
replica_id = 0 while replication.

The case with replcia_id = 0 is handled in relay_send_row()
Anonymous replica just doesn’t send the rows which have id = 0.

For now I just forbid replication from an anonymous instance.
Other anonymous instances may fetch this instances snapshot, 
and then they’ll get an error on subscribe:
«Replication does not support replicating from an anonymous instance»

I’ve also opened a ticket to allow anon replication from an anon instance
https://github.com/tarantool/tarantool/issues/4696
--
Serge Petrenko
sergepetrenko@tarantool.org

The last point I would like to mention is that a test with replication from an
anonymous replica could be included.


Hi! Thank you for review. I’ve added the test you requested and sent it as a follow-up
to 5th patch.

Vlad, could you do the second review?
--
Serge Petrenko
sergepetrenko@tarantool.org


On Sunday, 15 December 2019 23:56:14 MSK sergepetrenko wrote:
Serge Petrenko (3):
box: update comment describing join protocol
replication: do not decode replicaset uuid when processing a subscribe
applier: split join processing into two stages

sergepetrenko (2):
vclock: ignore 0th component in comparisons.
replication: introduce anonymous replica.

src/box/applier.cc              | 119 ++++++++++++--
src/box/applier.h               |   4 +
src/box/box.cc                  | 278 ++++++++++++++++++++++++++++++--
src/box/box.h                   |  11 +-
src/box/iproto.cc               |  16 +-
src/box/iproto_constants.h      |   6 +
src/box/lua/cfg.cc              |  14 +-
src/box/lua/info.c              |   4 +-
src/box/lua/load_cfg.lua        |   4 +
src/box/recovery.cc             |   7 +-
src/box/relay.cc                |  32 +++-
src/box/replication.cc          |  41 ++++-
src/box/replication.h           |  24 +++
src/box/vclock.h                |   7 +
src/box/wal.c                   |   4 +
src/box/xrow.c                  |  47 +++++-
src/box/xrow.h                  |  68 ++++++--
test/app-tap/init_script.result |  49 +++---
test/box/admin.result           |   2 +
test/box/cfg.result             |   4 +
test/replication/anon.lua       |  13 ++
test/replication/anon.result    | 259 +++++++++++++++++++++++++++++
test/replication/anon.test.lua  |  89 ++++++++++
test/replication/suite.cfg      |   1 +
test/unit/vclock.cc             |   8 +-
25 files changed, 1022 insertions(+), 89 deletions(-)
create mode 100644 test/replication/anon.lua
create mode 100644 test/replication/anon.result
create mode 100644 test/replication/anon.test.lua