Запись на один слот: гонка двух заявок и повтор ответа
Три одновременно начатых запроса дают одну бронь, один конфликт и тот же ответ на повтор.
Задача и принятое решение
Слот 18:00 запрашивают Анна и Борис. Одновременно повторяется запрос Анны, а после сохранения имитируется потеря ответа. Без ключа запроса повтор выглядит новой записью.
Проверка ключа и занятие слота находятся в одном синхронном участке после общей асинхронной границы. Я отдельно запускаю три Promise и сохраняю фактический результат. В интерфейсе можно разобрать ту же последовательность событий.
Структура хранится в памяти одного процесса. Свойства PostgreSQL, нескольких серверов и сохранность после перезапуска не заявляются.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Ключ | Клиент | Слот | Статус | Повтор |
|---|---|---|---|---|
| A1 | anna | 18:00 | Подтверждено | Нет |
| B1 | boris | 18:00 | Конфликт | Нет |
| A1 | anna | 18:00 | Подтверждено | Да |
Исходный набор
Авторский набор событий и полные тексты. Все решения выполняются локальным кодом, внешняя модель не вызывается.
Изменить входные строки
Посмотреть исходные строки
| Ключ | Клиент | Слот |
|---|---|---|
| A1 | anna | 18:00 |
| B1 | boris | 18:00 |
| A1 | anna | 18:00 |
Что получилось
Реально выполненный асинхронный прогон трех запросов сохранил одну бронь. Борис получил конфликт, повтор A1 — первоначальное подтверждение. Последующий повтор после потери ответа не создал новую запись.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Две личности и повтор не создают три брони | Пройдена |
| Другой слот допускает вторую запись | Пройдена |
| Повтор после потерянного ответа возвращает сохраненное решение | Пройдена |
Отчет concurrency-result.json относится к одному процессу. Для серверной записи понадобится отдельная проверка транзакционного ограничения.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css · concurrency-check.cjs · concurrency-result.json
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.