From 55c79bd54e69b2110e3474346b09c1f0ff235232 Mon Sep 17 00:00:00 2001 From: Yaroslav Dynnikov <yaroslav.dynnikov@gmail.com> Date: Tue, 24 Jan 2023 18:23:00 +0300 Subject: [PATCH] doc: enhance clustering.md, review start_join --- docs/clustering.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/docs/clustering.md b/docs/clustering.md index 81cd32bccf..4d319f743a 100644 --- a/docs/clustering.md +++ b/docs/clustering.md @@ -121,18 +121,23 @@ discovery не будет, инÑÑ‚Ð°Ð½Ñ Ñразу перейдет к Ñта поÑтому на данном Ñтапе в БД нет ни Ð¼Ð¾Ð´ÑƒÐ»Ñ `box`, ни проÑтранÑтва хранениÑ. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ `start_join()` имеет проÑтое уÑтройÑтво: -ИнÑтанÑ-клиент отправлÑет Ð·Ð°Ð¿Ñ€Ð¾Ñ `raft_join` лидеру Raft-группы (он -извеÑтен поÑле discovery). ПоÑле доÑÑ‚Ð¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑенÑуÑа в Raft-группе -лидер приÑылает в ответе необходимую информацию: -- Идентификатор `raft_id` и данные таблицы `raft_group` — Ð´Ð»Ñ - инициализации Raft-узла; -- Идентификаторы `instance_uuid`, `replicaset_uuid` и параметры - `replication`, `read_only` — Ð´Ð»Ñ Ð¿ÐµÑ€Ð²Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ вызова `box.cfg()`. +ИнÑÑ‚Ð°Ð½Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»Ñет Ð·Ð°Ð¿Ñ€Ð¾Ñ [`rpc::join`](#rpcjoin) лидеру Raft-группы (он +извеÑтен поÑле discovery), который магичеÑким образом приÑылает в ответе +вÑÑŽ необходимую Ð´Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ð¸Ð¸ информацию: + +Ð”Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Raft-узла: +- идентификатор `raft_id`, +- данные таблицы `_picodata_peer_address`. + +Ð”Ð»Ñ Ð¿ÐµÑ€Ð²Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ вызова `box.cfg()`: +- идентификаторы `instance_uuid`, `replicaset_uuid`, +- `box.cfg.replication` — ÑпиÑок урлов Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸. Получив вÑе наÑтройки, инÑÑ‚Ð°Ð½Ñ Ð¸Ñпользует их в `box.cfg()` (Ñм. [`init_common()`](#fn-init_common)), и затем Ñоздает в БД группу -`raft_group` Ñ Ð°ÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ адреÑами других инÑтанÑов. Без Ñтого инÑÑ‚Ð°Ð½Ñ -не Ñможет отвечать на ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ других членов Raft-группы. +`_picodata_peer_address` Ñ Ð°ÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ адреÑами других инÑтанÑов. Без +Ñтого инÑÑ‚Ð°Ð½Ñ Ð½Ðµ Ñможет отвечать на ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ других членов +Raft-группы. По завершении Ñтих манипулÑций инÑÑ‚Ð°Ð½Ñ Ñ‚Ð°ÐºÐ¶Ðµ переходит к Ñтапу `postjoin()`. @@ -185,11 +190,12 @@ governor](#Topology-governor), также называемый `governor_loop`. ## Обработка запроÑов -### \#\[proc\] fn raft_join() +### rpc::join + +Ð—Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ вÑей логики по управлению топологией берет Ñвое +начало в хендлере запроÑа `rpc::join`. Его делает инÑÑ‚Ð°Ð½Ñ -Ð—Ð½Ð°Ñ‡Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ вÑей логики по управлению топологией находитÑÑ Ð² -хранимой процедуре `raft_join`. Ðргументом Ð´Ð»Ñ Ð½ÐµÐµ ÑвлÑетÑÑ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ -Ñтруктура: +Ðргументом Ð´Ð»Ñ Ð½ÐµÐµ ÑвлÑетÑÑ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтруктура: ```rust struct join::Request { -- GitLab