Исполняемый сценарий проверки · P49-C02

Запись на один слот: гонка двух заявок и повтор ответа

Три одновременно начатых запроса дают одну бронь, один конфликт и тот же ответ на повтор.

Задача и принятое решение

Слот 18:00 запрашивают Анна и Борис. Одновременно повторяется запрос Анны, а после сохранения имитируется потеря ответа. Без ключа запроса повтор выглядит новой записью.

Проверка ключа и занятие слота находятся в одном синхронном участке после общей асинхронной границы. Я отдельно запускаю три Promise и сохраняю фактический результат. В интерфейсе можно разобрать ту же последовательность событий.

Структура хранится в памяти одного процесса. Свойства PostgreSQL, нескольких серверов и сохранность после перезапуска не заявляются.

Проверить решение

Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.

1Сохраненных записей
1Конфликтов
КлючКлиентСлотСтатусПовтор
A1anna18:00ПодтвержденоНет
B1boris18:00КонфликтНет
A1anna18:00ПодтвержденоДа

Исходный набор

Авторский набор событий и полные тексты. Все решения выполняются локальным кодом, внешняя модель не вызывается.

Изменить входные строки
Посмотреть исходные строки
КлючКлиентСлот
A1anna18:00
B1boris18:00
A1anna18: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; сетевые обращения не выполняются.