Влияние на транзакцию ActiveRecord / PostgreSQL, когда клиент прерывается через Ruby Timeout :: timeout - PullRequest
0 голосов
/ 08 июня 2019

Прежде чем мы начнем, да, я знаю, что использование Ruby's Timeout - ужасная идея. Но это скорее мысленный эксперимент.

Допустим, у меня есть некоторый Ruby-код, обернутый в блок Timeout::timeout, который выполняет целую кучу транзакций SQL (через ActiveRecord), от SELECT s, UPDATE s и INSERT s. Учитывая природу Timeout, мы можем прервать в процессе подготовки или ожидания завершения транзакции SQL.

Теоретически, если запрос к БД отправляется до прерывания тайм-аута Ruby, транзакция завершится на БД, но клиент просто не сможет ответить на завершение. И, конечно, в зависимости от контекста кода Ruby, данные могут в конечном итоге быть неполными, если последующие транзакции необходимы для того, чтобы моя модель считалась завершенной и стабильной, и любые другие возможные побочные эффекты из-за неполного завершения кода .

Существуют ли другие возможные опасности или побочные эффекты, о которых следует беспокоиться? Есть ли вероятность того, что транзакция может зависнуть или потерпеть неудачу каким-либо другим способом? Или нужно слишком много знаний на уровне контекста о данных и приложении, чтобы сказать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...