41 lines
1.9 KiB
Markdown
41 lines
1.9 KiB
Markdown
# Graceful shutdown на 30 секунд
|
||
|
||
## Зачем
|
||
|
||
Чтобы при `restart` или `stop` сервер получал небольшой запас времени на завершение опасных операций:
|
||
|
||
- текущий `AddBlock`;
|
||
- full resync цепочки;
|
||
- очистку marker-file;
|
||
- дописывание временных файлов.
|
||
|
||
Это должно уменьшить число случаев, когда приходится потом добирать хвост recovery-логикой.
|
||
|
||
## Что сделать
|
||
|
||
1. На стороне `systemd` задать `TimeoutStopSec=30s`.
|
||
2. В коде добавить корректную обработку shutdown-сигнала:
|
||
- перестать принимать новые блоки и sync-задачи;
|
||
- дождаться текущих операций;
|
||
- выйти в пределах таймаута.
|
||
3. При необходимости закрывать текущие ресурсы аккуратно:
|
||
- сетевые соединения;
|
||
- фоновые executor-ы;
|
||
- временные marker-файлы.
|
||
|
||
## Что уже есть
|
||
|
||
- `BlockchainTmpRecoveryOnStartup` и `BlockchainResyncRecoveryOnStartup` уже умеют добирать незавершённые хвосты после старта.
|
||
- `AddBlock` уже стал crash-safe через `tmp_bch` / `write_check` / `write_pending`.
|
||
|
||
## Откуда продолжать
|
||
|
||
- начать с `systemd`-юнита и базового shutdown-hook в сервере;
|
||
- затем проверить, что текущие операции реально завершаются в отведённые 30 секунд.
|
||
|
||
## Какие документы потом обновить
|
||
|
||
- `Dev_Docs/deploy/`;
|
||
- `Dev_Docs/Blockchain/sync-between-servers.md`, если изменится поведение остановки/восстановления.
|
||
|