Проектная лаборатория
Собственный Redis
Этап 29 · Репликация
Отправка рукопожатия (2/3)
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете второй шаг рукопожатия репликации.
Напоминание о рукопожатии
Рукопожатие состоит из трёх шагов:
- Реплика отправляет ведущему
PING(реализовано ранее). - Реплика дважды отправляет ведущему
REPLCONF. - Реплика отправляет ведущему
PSYNC.
На этом этапе вы реализуете второй шаг.
Команда REPLCONF
Команда REPLCONF настраивает подключённую реплику. Получив ответ на PING, реплика отправляет две команды REPLCONF по очереди, ожидая ответ после каждой.
REPLCONF listening-port <PORT>: сообщает ведущему порт, который слушает реплика. Он используется для мониторинга и журналирования, а не для самой репликации.REPLCONF capa psync2: сообщает ведущему о возможностях реплики.capa— сокращение от capabilities («возможности»). Следующий аргумент обозначает поддерживаемую функцию.psync2означает поддержку протокола PSYNC2 — улучшенной версии частичной синхронизации, используемой для повторной синхронизации реплики с ведущим.- Пока можно жёстко задать
capa psync2.
Обе команды отправляются как массивы RESP, поэтому байты будут выглядеть примерно так:
# REPLCONF listening-port <PORT>
*3\r\n$8\r\nREPLCONF\r\n$14\r\nlistening-port\r\n$4\r\n6380\r\n
# REPLCONF capa psync2
*3\r\n$8\r\nREPLCONF\r\n$4\r\ncapa\r\n$6\r\npsync2\r\nНа обе команды ведущий отвечает +OK\r\n: строкой OK, закодированной как простая строка. Реплика должна дождаться ответа, прежде чем отправлять следующую команду.
Тесты
Тестирующая программа запустит вашу программу так:
./your_program.sh --port <PORT> --replicaof "<MASTER_HOST> <MASTER_PORT>"Затем проверит, что реплика подключилась к ведущему и отправила:
- Команду
PING. - Команду
REPLCONFс аргументамиlistening-portи<PORT>. - Команду
REPLCONFс аргументамиcapa psync2.
Примечания
- Ответ на
REPLCONFвсегда будет+OK\r\n.
Проверка в вашей 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 eh4Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.