Найти - Пользователи
Полная версия: Какая-то муть с транзакциями а алхимии
Начало » Базы данных » Какая-то муть с транзакциями а алхимии
1
Naota
После каких-то изменений, сервер(pylons) начал периодически выдавать ошибку “The transaction is inactive due to a rollback in a subtransaction and should be closed”. Чаще всего при повторном обновлении страницы все снова нормально, но иногда приходится перезапускать сервер. Вроде бы когда долго сеанс неактивный и при его активации это выпадает. Не ясно…совсем…а так все без ошибок работает.
bw
Когда-то я столкнулся с поблемой при работе с MySQL. Последний после обновления, по умолчанию, стал разрывать соединение по истечении 10 минут или вроде того. Возможно у тебя та же проблема? Тогда попробуй использовать pool_recycle в create_engine.

..bw
Naota
Странно. И эта фигня только при апаче. Если приложение из пастера запускать, то все нормал. Удалил весь код с сервера, заменил тестовым. Вроде работает пока. До этого при обновлении я не удалял а поверх писал. Может из-за этого.
Naota
Ога. Кажется я понял. Один из скриптом очень долго работает. Видимо в этом причина. Надо будет иначе его продумать.
Naota
Все. Нашел в чем проблема. Оказывается все просто. Один скрипт который выполнялся по заданию глючил из-за того что ктото ввел неверный формат времени) Смысле он обрывался на commit и вешал всё приложение…
Naota
Опишу подробнее, может кто-то с этим столкнется.
Скрипт получал время в виде строки “часы:минуты” и не проверяя правильность(так как брал с другого сайта и там как думалось что данные хранят они в Time, но как оказалось это просто строка О_О) заносил в базу и вот на операции Session.commit() он обрывался, влияя каким-то образом на всё приложение. Интересно как это работает…
Андрей Светлов
Так тебе же bw ясно написал: connection (а в ней transaction) отвалилась. (По таймауту или в силу других причин - не важно. Все может зависеть от конкретного dbapi драйвера). После этого connection без переподключения использовать невозможно.
По идее ошибку в Session.commit ты должен был видеть - и иметь возможность отреагировать соответственно.
В зависимости от того, как ты в Пилонах создаешь Session - может иметь различные побочные эффекты. Правильно пойманая ошибка помогает. pool_recycle позволяет избавится от проблемы через 5-10 минут после ее происхождения.
bw
Naota
и вот на операции Session.commit() он обрывался
Кто он? Соединение? Странно, вроде соединение не должно разрываться при некорректном запросе, точнее при ошибке в запросе, в частности, как я понял, время передавалось в некорректном виде.

То что обравается именно соединение, по сообщению об ошибке в транзакции, довольно логично предположить. Только не понятно в какой момент это сообщение выдается? Видимо уже после её начала (begin), тогда как она без соединения вообще могла быть начата? pool_recycle служит совершенно определенным целям, а не для решения проблемы, причины которой даже неизвестны.

..bw
Naota
Грубо говоря код был такой:
try:
  ...
  Session.commit()
  ...
except:
  ...
  Session.update(obj)
  Session.commit()
Все дело в том, что этот скрипт - это функция в контроллере. И когда я ловил все эксепшены этой функции, включая из Session.commit(), то почемуто страдало все приложение(сайт). Если этот эксепшен не ловить, то сбоя не будет, но я тогда не узнаю, что ошибка произошла..короче не ясно как ловить это. Выход один, избежать эксепшена в Session.commit() всякими проверками.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB