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

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

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

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

WAIT без реплик

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

На этом этапе вы реализуете команду WAIT на ведущем сервере.

Команда WAIT

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

Формат команды:

WAIT <numreplicas> <timeout>

Значения аргументов:

  • <numreplicas>: минимальное число реплик, которые должны подтвердить все предыдущие команды записи.
  • <timeout>: максимальное время ожидания клиента в миллисекундах.

Например:

$ redis-cli WAIT 3 5000
(integer) 2

Здесь клиент просит ведущего дождаться 3 реплик с максимальным ожиданием 5000 мс. После истечения времени у ведущего подключены только 2 реплики, поэтому он сразу отвечает 2 в виде целого числа RESP.

Пока обработаем простейший случай: клиенту нужны 0 реплик, и у ведущего нет подключённых реплик. В этом случае WAIT должна немедленно вернуть 0.

Подсчёт реплик и соответствующие ответы появятся позже.

Тесты

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

./your_program.sh

Затем подключится к ведущему и отправит:

$ redis-cli WAIT 0 60000

Ожидается немедленный ответ 0 в виде целого числа RESP, поскольку реплики не подключены.

Проверка в вашей 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 my8

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

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

go / ЛОКАЛЬНО

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

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

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

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