From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (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 DD521469719 for ; Wed, 30 Sep 2020 01:11:41 +0300 (MSK) From: Vladislav Shpilevoy Date: Wed, 30 Sep 2020 00:11:21 +0200 Message-Id: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v3 00/10] Raft List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org, sergepetrenko@tarantool.org The patchset is a first approach to implementing Raft leader election. Synchronous replication is already implemented, and the leader election is supposed to complement it. Although this is still far being from production ready. Main purpose of the patch is to get Raft in 2.6.1 so as we could work on its stabilization and testing in 2.6.x releases, not making the users wait for 2.7. Branch: http://github.com/tarantool/tarantool/tree/gh-1146-raft Issue: https://github.com/tarantool/tarantool/issues/1146 @ChangeLog * Automated leader election via Raft algorithm (gh-1146). Changed from v2: - Lots of minor bugs fixed; - New naming in the public API - 'election' instead of 'raft'. Vladislav Shpilevoy (9): applier: store instance_id in struct applier box: introduce summary RO flag wal: don't touch box.cfg.wal_dir more than once replication: track registered replica count raft: introduce persistent raft state raft: introduce box.cfg.election_* options raft: introduce state machine raft: introduce box.info.election raft: add tests sergepetrenko (1): raft: relay status updates to followers src/box/CMakeLists.txt | 1 + src/box/applier.cc | 50 +- src/box/applier.h | 2 + src/box/box.cc | 185 +++- src/box/box.h | 9 + src/box/iproto_constants.h | 15 + src/box/lua/cfg.cc | 27 + src/box/lua/info.c | 17 + src/box/lua/load_cfg.lua | 15 + src/box/lua/misc.cc | 1 + src/box/memtx_engine.c | 36 + src/box/raft.c | 1009 ++++++++++++++++++++++ src/box/raft.h | 260 ++++++ src/box/relay.cc | 181 +++- src/box/relay.h | 7 + src/box/replication.cc | 4 +- src/box/replication.h | 7 + src/box/wal.c | 6 + src/box/wal.h | 7 + src/box/xrow.c | 115 +++ src/box/xrow.h | 15 + test/app-tap/init_script.result | 3 + test/box/admin.result | 6 + test/box/cfg.result | 12 + test/box/info.result | 1 + test/replication/election_basic.result | 278 ++++++ test/replication/election_basic.test.lua | 117 +++ test/replication/election_replica.lua | 30 + test/replication/election_replica1.lua | 1 + test/replication/election_replica2.lua | 1 + test/replication/election_replica3.lua | 1 + 31 files changed, 2383 insertions(+), 36 deletions(-) create mode 100644 src/box/raft.c create mode 100644 src/box/raft.h create mode 100644 test/replication/election_basic.result create mode 100644 test/replication/election_basic.test.lua create mode 100644 test/replication/election_replica.lua create mode 120000 test/replication/election_replica1.lua create mode 120000 test/replication/election_replica2.lua create mode 120000 test/replication/election_replica3.lua -- 2.21.1 (Apple Git-122.3)