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

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

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

Этап 64 · Транзакции

Ошибки внутри транзакций

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

На этом этапе вы добавите обработку ошибок внутри транзакции.

Ошибки внутри транзакций

Если при выполнении транзакции команда завершается ошибкой, ошибка сохраняется и включается в ответ EXEC. Остальные команды транзакции всё равно выполняются.

Подробнее об этом поведении — в официальной документации Redis.

Пример:

$ redis-cli
> MULTI
OK
> SET foo xyz
QUEUED
> INCR foo
QUEUED
> SET bar 7
> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK

Ошибка команды INCR возвращается вторым элементом массива. Третья команда (SET bar 7) всё равно успешно выполняется.

Тесты

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

$ ./your_program.sh

Затем подключится как клиент Redis и отправит несколько команд через одно соединение:

$ redis-cli
> SET foo abc
OK
> SET bar 41
OK
> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (error) ERR value is not an integer or out of range
2) (integer) 42

Ожидаемый ответ EXEC — массив RESP с ответами команд из очереди. Точные байты:

*2\r\n-ERR value is not an integer or out of range\r\n:42\r\n

Тест также проверит, что последняя команда успешно выполнена и ключ bar существует:

$ redis-cli
> GET foo (expecting "$3\r\nabc\r\n" as the response)
> GET bar (expecting "$2\r\n42\r\n" as the response)

Примечания

  • Некоторые ошибки команд, например синтаксические, приводят к полной отмене транзакции. В этом задании они не рассматриваются.

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

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

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

go / ЛОКАЛЬНО

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

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

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

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