Проектная лаборатория

Собственный Redis

0 / 124этапов пройдено

Этап 40 · Репликация

WAIT без команд

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы расширите WAIT для случая, когда реплики подключены, но команды ещё не отправлялись.

WAIT с подключёнными репликами

Ранее мы обработали случай без подключённых реплик, когда ведущий мог вернуть 0.

Теперь рассмотрим несколько подключённых реплик. Каждая завершила рукопожатие и получила пустой RDB. Поскольку команды записи ещё не отправлялись, смещение репликации по-прежнему равно 0.

В этой ситуации ведущий возвращает число подключённых реплик, поскольку знает, что все они синхронизированы на смещении 0:

$ redis-cli WAIT 3 500
(integer) 7
$ redis-cli WAIT 7 500
(integer) 7
$ redis-cli WAIT 9 500
(integer) 7

В примере подключены 7 реплик. Сколько бы реплик ни запросил клиент, ведущий вернёт число подключённых реплик (7).

На этом этапе можно игнорировать оба аргумента (<numreplicas> <timeout>) и просто возвращать число подключённых реплик.

Тесты

Тестирующая программа запустит вашу программу как ведущий сервер так:

./your_program.sh

Затем запустит несколько реплик, которые подключатся к серверу. Каждая выполнит рукопожатие и будет ожидать пустой RDB.

После этого тест подключится к ведущему как клиент и отправит команды вида:

$ redis-cli WAIT 3 500 # (expecting 7 back)
$ redis-cli WAIT 7 500 # (expecting 7 back)
$ redis-cli WAIT 9 500 # (expecting 7 back)

Ответ на каждую команду должен быть целым числом RESP, то есть :7\r\n.

Примечания

  • Даже если в WAIT указано меньше реплик, чем подключено, ведущий должен вернуть количество подключённых реплик.
  • Число реплик в тесте случайное, поэтому нельзя задать фиксированный ответ 7 из примера.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go

2. Откройте папку в IDE

cd ./my-redis

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage tu8

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста