Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2008 04:18:24

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

После каких-то изменений, сервер(pylons) начал периодически выдавать ошибку “The transaction is inactive due to a rollback in a subtransaction and should be closed”. Чаще всего при повторном обновлении страницы все снова нормально, но иногда приходится перезапускать сервер. Вроде бы когда долго сеанс неактивный и при его активации это выпадает. Не ясно…совсем…а так все без ошибок работает.



Офлайн

#2 Май 29, 2008 07:23:31

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Какая-то муть с транзакциями а алхимии

Когда-то я столкнулся с поблемой при работе с MySQL. Последний после обновления, по умолчанию, стал разрывать соединение по истечении 10 минут или вроде того. Возможно у тебя та же проблема? Тогда попробуй использовать pool_recycle в create_engine.

..bw



Офлайн

#3 Май 29, 2008 10:38:04

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

Странно. И эта фигня только при апаче. Если приложение из пастера запускать, то все нормал. Удалил весь код с сервера, заменил тестовым. Вроде работает пока. До этого при обновлении я не удалял а поверх писал. Может из-за этого.



Отредактировано (Май 29, 2008 10:45:25)

Офлайн

#4 Май 29, 2008 12:34:05

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

Ога. Кажется я понял. Один из скриптом очень долго работает. Видимо в этом причина. Надо будет иначе его продумать.



Офлайн

#5 Май 29, 2008 16:31:20

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

Все. Нашел в чем проблема. Оказывается все просто. Один скрипт который выполнялся по заданию глючил из-за того что ктото ввел неверный формат времени) Смысле он обрывался на commit и вешал всё приложение…



Офлайн

#6 Май 29, 2008 19:28:09

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

Опишу подробнее, может кто-то с этим столкнется.
Скрипт получал время в виде строки “часы:минуты” и не проверяя правильность(так как брал с другого сайта и там как думалось что данные хранят они в Time, но как оказалось это просто строка О_О) заносил в базу и вот на операции Session.commit() он обрывался, влияя каким-то образом на всё приложение. Интересно как это работает…



Офлайн

#7 Май 29, 2008 23:26:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Какая-то муть с транзакциями а алхимии

Так тебе же bw ясно написал: connection (а в ней transaction) отвалилась. (По таймауту или в силу других причин - не важно. Все может зависеть от конкретного dbapi драйвера). После этого connection без переподключения использовать невозможно.
По идее ошибку в Session.commit ты должен был видеть - и иметь возможность отреагировать соответственно.
В зависимости от того, как ты в Пилонах создаешь Session - может иметь различные побочные эффекты. Правильно пойманая ошибка помогает. pool_recycle позволяет избавится от проблемы через 5-10 минут после ее происхождения.



Офлайн

#8 Май 30, 2008 07:02:00

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Какая-то муть с транзакциями а алхимии

Naota
и вот на операции Session.commit() он обрывался
Кто он? Соединение? Странно, вроде соединение не должно разрываться при некорректном запросе, точнее при ошибке в запросе, в частности, как я понял, время передавалось в некорректном виде.

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

..bw



Офлайн

#9 Май 30, 2008 10:38:48

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Какая-то муть с транзакциями а алхимии

Грубо говоря код был такой:

try:
  ...
  Session.commit()
  ...
except:
  ...
  Session.update(obj)
  Session.commit()
Все дело в том, что этот скрипт - это функция в контроллере. И когда я ловил все эксепшены этой функции, включая из Session.commit(), то почемуто страдало все приложение(сайт). Если этот эксепшен не ловить, то сбоя не будет, но я тогда не узнаю, что ошибка произошла..короче не ясно как ловить это. Выход один, избежать эксепшена в Session.commit() всякими проверками.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version