почти от всех транзакций, но пара все равно есть и они нужны, они правда не падают как у автора выше, но скорее причина в том что продукт не в проде, а интеграционные и нагрузочные тесты этот момент не покрывают. По коду вижу, что теоретически ситуация как у автора выше -возможна. Обойтись без транзакции нельзя - если первое действие пройдет, а второе нет то получаем проблему, пример с балансом средств хорошо подходит.
В итоге какие есть варианты решения? Я с монго недавно начал работать, но тут есть люди с большим опытом, как вы решаете такие вещи? Ретраи, таймауты, логи, findAndUpdate?
все зависит от контекста задачи, гдето 3 ретрая, гдето просто сразу ошибка показывается юзеру, гдето надо заново все переобщитать, перезапустив таску. А гдето полное изменение структуры данных так чтобы обошлось одним идемпотентным апдейтом без всяких транзакций
Обсуждают сегодня