From e3784ef1fc7c01bb78dffed192b727596f4042ee Mon Sep 17 00:00:00 2001 From: "a.tolstoy" <a.tolstoy@picodata.io> Date: Mon, 23 May 2022 16:26:48 +0300 Subject: [PATCH] doc: update clustering image --- docs/clustering.md | 2 +- docs/clustering.svg | Bin 32713 -> 34416 bytes docs/clustering_curves.svg | Bin 124610 -> 112921 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/clustering.md b/docs/clustering.md index cb313212e4..4e3c558c70 100644 --- a/docs/clustering.md +++ b/docs/clustering.md @@ -32,7 +32,7 @@ picodata run --instance-id iN --listen iN --peer i1,i2 ### fn start_discover() -Дочерний процеÑÑ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ Ñвоё ÑущеÑтвование Ñ Ð·Ð°Ð¿ÑƒÑка Ð¼Ð¾Ð´ÑƒÐ»Ñ `box.cfg()` и вызова функции `start_discover`. Возможно, что при Ñтом из поÑтоÑнно хранимых данных будет ÑÑно, что bootstrap данного инÑтанÑа уже был произведён ранее и что Raft уже знает о вхождении Ñтого инÑтанÑа в клаÑтер - в таком Ñлучае никакого discovery не будет, инÑÑ‚Ð°Ð½Ñ Ñразу перейдёт к Ñтапу `postjoin()`. Ð’ противном Ñлучае, еÑли меÑто инÑтанÑа в клаÑтере ещё не извеÑтно, алгоритм discovery опредÑет значение флага `i_am_bootstrap_leader` и Ð°Ð´Ñ€ÐµÑ Ð»Ð¸Ð´ÐµÑ€Ð° Raft-группы. Далее вÑе инÑтанÑÑ‹ ÑбраÑывают Ñвоё ÑоÑтоÑние (Ñтап rebootstrap) чтобы повторно провеÑти инициализацию `box.cfg`, теперь уже Ñ Ð¸Ð·Ð²ÐµÑтными параметрами. Сам лидер (единÑтвенный Ñ `i_am_bootstrap_leader == true`) выполнÑет функцию `start_boot`. ОÑтальные инÑтанÑÑ‹ переходÑÑ‚ к функции `start_join`. +Дочерний процеÑÑ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ Ñвоё ÑущеÑтвование Ñ Ð·Ð°Ð¿ÑƒÑка Ð¼Ð¾Ð´ÑƒÐ»Ñ `box.cfg()` и вызова функции `start_discover`. Возможно, что при Ñтом из поÑтоÑнно хранимых данных будет ÑÑно, что bootstrap данного инÑтанÑа уже был произведён ранее и что Raft уже знает о вхождении Ñтого инÑтанÑа в клаÑтер - в таком Ñлучае никакого discovery не будет, инÑÑ‚Ð°Ð½Ñ Ñразу перейдёт к Ñтапу `postjoin()`. Ð’ противном Ñлучае, еÑли меÑто инÑтанÑа в клаÑтере ещё не извеÑтно, алгоритм discovery опредÑет значение флага `i_am_bootstrap_leader` и Ð°Ð´Ñ€ÐµÑ Ð»Ð¸Ð´ÐµÑ€Ð° Raft-группы. Далее вÑе инÑтанÑÑ‹ ÑбраÑывают Ñвоё ÑоÑтоÑние (Ñтап rebootstrap), чтобы повторно провеÑти инициализацию `box.cfg`, теперь уже Ñ Ð¸Ð·Ð²ÐµÑтными параметрами. Сам лидер (единÑтвенный Ñ `i_am_bootstrap_leader == true`) выполнÑет функцию `start_boot`. ОÑтальные инÑтанÑÑ‹ переходÑÑ‚ к функции `start_join`. ### fn start_boot() diff --git a/docs/clustering.svg b/docs/clustering.svg index fa205799db6c702f765b44815876c5b18c514c26..cdf2e9e9da954cfaa2c876431218e7c3bcabfb95 100644 GIT binary patch literal 34416 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 QOS@bYe|5Tk%MaE4KSqrEw*UYD delta 5616 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 diff --git a/docs/clustering_curves.svg b/docs/clustering_curves.svg index 69d7454948e1da6f52c89873740918ec5fb85a5b..b08865da3cc48d3934961b57bcea16a354c83e39 100644 GIT binary patch delta 15747 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 delta 17144 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 XDBsns&e~HKxq(Q;Xfx<LYXAQWKH}s~ -- GitLab