Проектная лаборатория
Собственный Redis
Этап 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 go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage my8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.