Восемь доставок дают три записи. Повтор после потерянного ответа сначала ищет результат по внешнему ключу.
О проекте
Цель
Не создавать вторую запись, если первая сохранена, но ответ о сохранении потерян.
Задача
Повторная доставка после неопределённого результата похожа на новую команду. Простая повторная запись создаёт дубль; бесконечный отказ теряет успешно выполненную операцию.
Решение
Внешний ключ сохраняется вместе с записью. При повторе обработчик сначала ищет результат и сравнивает содержимое; тот же ключ с другими данными получает отдельный конфликт.
Результат
Восемь доставок дают три записи. Повторы не добавляют строки, конфликт не перезаписывает данные, а запись после аварийного завершения находится при повторе.
Что передано заказчику
- Стенд восстановления.py
- Фактический прогон.json
- Доставки.json
Инструменты и подход
Инструменты
Навыки
Содержание 4
Открыть работу
Самый неудобный момент для остановки
Процесс завершается с кодом 73 сразу после фиксации третьей записи и до подтверждения доставки. Следующий запуск открывает базу заново и находит эту запись по внешнему ключу. Журнал содержит оба шага, поэтому восстановление можно отличить от повторного создания.
Повтор и конфликт — разные ветки
Одинаковый ключ и одинаковые данные возвращают уже имеющийся результат. Одинаковый ключ с новым содержимым оставляет исходную запись и фиксирует конфликт. Некорректная доставка не попадает в таблицу. Полный сценарий запускается стандартным Python.
Файлы результата
Вклад и команда
Написал локальный адаптер SQLite, воспроизвёл остановку процесса после фиксации записи и проверил восстановление при новой доставке.
Загружаем комментарии…