Проектная лаборатория
Собственный Redis
Этап 30 · Репликация
Отправка рукопожатия (3/3)
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете третий шаг рукопожатия репликации.
Напоминание о рукопожатии
Рукопожатие состоит из трёх шагов:
- Реплика отправляет ведущему
PING(реализовано ранее). - Реплика дважды отправляет ведущему
REPLCONF(реализовано ранее). - Реплика отправляет ведущему
PSYNC.
Команда PSYNC
Получив ответ на вторую REPLCONF, реплика отправляет ведущему команду PSYNC.
Команда PSYNC синхронизирует состояние реплики с ведущим. Формат команды:
PSYNC <replication_id> <offset>Она принимает два аргумента: текущий идентификатор репликации ведущего и текущее смещение реплики.
При первом подключении реплики:
- Идентификатор репликации равен
?, поскольку идентификатор ведущего ещё неизвестен. - Смещение равно
-1, поскольку данных от ведущего ещё нет.
Итоговая команда — PSYNC ? -1, закодированная как массив RESP:
*3\r\n$5\r\nPSYNC\r\n$1\r\n?\r\n$2\r\n-1\r\nВедущий ответит простой строкой примерно такого вида:
+FULLRESYNC <REPL_ID> 0\r\nПока этот ответ можно игнорировать. Его обработка появится позже.
Тесты
Тестирующая программа запустит вашу программу так:
./your_program.sh --port <PORT> --replicaof "<MASTER_HOST> <MASTER_PORT>"Затем проверит, что реплика подключилась к ведущему и отправила команды:
PINGREPLCONFс аргументамиlistening-portи<PORT>.REPLCONFс аргументамиcapa psync2.PSYNCс аргументами? -1.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage ju6Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.