Скрученные ошибки adbapi и log.err

Я отлаживаю ошибки «Сервер MySQL ушел». Существует предлагаемое решение, которое более или менее работает:

from twisted.enterprise import adbapi
from twisted.python import log
import MySQLdb

class ReconnectingConnectionPool(adbapi.ConnectionPool):
    """Reconnecting adbapi connection pool for MySQL.

    This class improves on the solution posted at
    http://www.gelens.org/2008/09/12/reinitializing-twisted-connectionpool/
    by checking exceptions by error code and only disconnecting the current
    connection instead of all of them.

    Also see:
    http://twistedmatrix.com/pipermail/twisted-python/2009-July/020007.html

    """
    def _runInteraction(self, interaction, *args, **kw):
        try:
            return adbapi.ConnectionPool._runInteraction(self, interaction, *args, **kw)
        except MySQLdb.OperationalError, e:
            if e[0] not in (2006, 2013):
                raise
            log.msg("RCP: got error %s, retrying operation" %(e))
            conn = self.connections.get(self.threadID())
            self.disconnect(conn)
            # try the interaction again
            return adbapi.ConnectionPool._runInteraction(self, interaction, *args, **kw)

Взято отсюда: http://www.gelens.org/2009/09/13/twisted-connectionpool-revisited/

Однако исключение ловится не только в нашем ReconnectingConnectionPool, но и в самом _runInteraction. И это запускает log.err, который (очевидно) делает две вещи:

  • вывести ошибку - хотя наше приложение работает нормально
  • что еще хуже, это приводит к провалу проб, поэтому тесты проваливаются. Я не совсем уверен, что это проблема log.err, но тем не менее это происходит.

Я мог бы взломать adbapi, но это, наверное, не лучшая идея. Есть ли лучшие способы справиться с этим?


person Ted Moravec    schedule 27.07.2012    source источник


Ответы (1)


Вы спрашиваете, как пройти модульный тест, даже если в журнале зарегистрирована ошибка? Попробуйте flushLoggedErrors. Если вы спрашиваете что-то еще, пожалуйста, уточните.

person Jean-Paul Calderone    schedule 28.07.2012
comment
Да, это именно то, что мне нужно. Благодарю вас! Было бы здорово, если бы он ничего не писал в лог, но с этим можно жить :-) - person Ted Moravec; 30.07.2012