Менеджер коллации
Менеджер коллации это компонент ноды, который оркестрирует выпуск блоков. Он принимает события из нескольких источников:
- DAG-мемпула с внешними сообщениями и якорями
- процесса коллации блоков
- процесса верификации мастер-блоков
- состояния сети, полученного по сетевому протоколу
На основе этих событий менеджер выбирает следующий детерминированный шаг, например форсированный выпуск мастер-блока или продолжение коллации рабочей цепочки.
Две цепочки
В Tycho менеджер ведет коллацию для двух цепочек.
- Рабочая цепочка. Здесь исполняются пользовательские сообщения и выпускаются блоки рабочей цепочки.
- Мастерчейн. Здесь формируется служебный блок с данными о последнем блоке рабочей цепочки, служебными данными и обновлениями конфигурации.
Менеджер хранит статусы по рабочей цепочке и по мастерчейну.
- Коллация: коллатор продолжает попытки собрать блок текущей цепочки и при необходимости импортирует следующий якорь.
- Ожидание мастер-блока: коллатор рабочей цепочки временно останавливает коллацию и ждет решения по выпуску мастер-блока.
- Ожидание блока рабочей цепочки: коллатор мастерчейна ждет готовность рабочей цепочки.
- Готовность к выпуску мастер-блока: рабочая цепочка уже готова перейти к коллации мастер-блока и больше не продолжает попытки коллации следующих блоков.
Цикл принятия решения
Менеджер коллации по детерминированным событиям определяет следующий шаг.
Менеджер коллации не импортирует якоря сам. Новое время цепочки и данные о результатах коллации он получает от коллаторов, после чего детерминированно обновляет свое внутреннее состояние.
На основании обновлённых данных он выбирает, какую коллацию запускать дальше: продолжать коллацию рабочей цепочки, запускать коллацию мастер-блока или оставить коллатор в ожидании до следующего события.
Импорт следующего якоря
Следующий якорь импортируется внутри коллатора по детерминированным условиям.
Импорт запускается, если выполняется хотя бы одно условие:
- в очередях нет ожидающих внутренних и внешних сообщений
- накопленная работа после последнего якоря строго больше порога работы для импорта следующего якоря
Если после импорта накопленная работа все еще не меньше порога, коллатор сразу импортирует следующий якорь в том же цикле.
Выпуск блока рабочей цепочки
Коллатор рабочей цепочки выпускает блок, если выполнено хотя бы одно условие:
- есть невыполненные внутренние сообщения
- есть внешние сообщения для этой рабочей цепочки
- достигнут интервал принудительного пустого блока рабочей цепочки
Если в текущем шаге блок рабочей цепочки не выпускается, коллатор отправляет менеджеру сигнал пропуска коллации и передает причину. После этого менеджер выбирает следующий шаг: продолжить попытки в рабочей цепочке или перейти к мастер-блоку.
Выпуск мастер-блока
Выпуск мастер-блока запускается по детерминированным причинам и интервалам.
Менеджер учитывает следующие причины форсирования выпуска мастер-блока:
- у мастерчейна есть невыполненные сообщения
- длина некоммиченной рабочей цепочки достигла лимита
- импорт следующего якоря был пропущен и время цепочки не продвигается
- после уже выпущенных блоков рабочей цепочки не осталось ожидающих сообщений
Также менеджер учитывает минимальный и максимальный интервалы выпуска мастер-блока.
- минимальный интервал выпуска мастер-блока разрешает ранний выпуск после достаточного прогресса
- максимальный интервал между мастер-блоками ограничивает максимальную паузу между выпусками
Для запуска коллации мастер-блока менеджер выбирает максимальное допустимое время цепочки и верхний блок рабочей цепочки, связанный с этим шагом.
Отмена коллации
Отмена коллации это остановка выпуска новых блоков и переход в режим синхронизации с сетью.
Одна из причин отмены это отставание ноды по скорости. Если по сетевому протоколу нода получила более свежий мастер-блок и отставание от него уже составляет несколько блоков, менеджер останавливает текущие попытки коллации и переходит в синхронизацию. В таком состоянии быстрее подтянуть актуальное состояние из сети, чем локально догонять цепочку выпуском пропущенных блоков.
Вторая группа причин это критические сбои, при которых продолжать коллацию нельзя. К таким случаям относятся повреждение данных очередей, несовпадение локального кандидата с полученным из сети блоком.