AttributeError при перезапуске

Наша производственная система работает как кластер рабочих Zope, у которых есть сервер ZEO в качестве бэкэнда, что довольно обычно.

Поскольку у нас довольно много данных, наши экземпляры потребляют слишком много памяти, и у нас есть сторожевой таймер, который перезапускает их всякий раз, когда они превышают лимит. Код перезапуска в основном:

bin/supervisorctl reload

Всякий раз, когда это происходит, мы получаем довольно много писем от наших работников с трассировкой стека, например (и это полная трассировка стека):

Couldn't load state for 0x052aec
Traceback (most recent call last):
  File "/home/service/.buildout/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/Connection.py", line 860, in setstate
    self._setstate(obj)
  File "/home/service/.buildout/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/Connection.py", line 901, in _setstate
    p, serial = self._storage.load(obj._p_oid, '')
AttributeError: 'NoneType' object has no attribute 'load'

Я думал, что это нормально, пока не увидел этот вопрос, в котором указывалось, что это может произойти только с пользователями RelStorage, и мы не используем RelStorage. ...

Любая идея о том, указывает ли это на что-то, или мы можем (как мы уже делаем, хотя это беспокоит меня) просто автоматически помечать эти сообщения от наших работников как прочитанные в нашем почтовом клиенте?

Есть ли более приятный/мягкий способ сказать рабочему Zope о перезапуске? Что-то вроде "завершить запрос, с которым вы работаете, и перезапустить"


person gforcada    schedule 05.09.2015    source источник
comment
Можете ли вы воспроизвести эту ошибку в тестовой среде, и если да, то удаление супервизора и перезапуск сервера и клиентов вручную (перезагрузка ./bin/zeoserver; перезагрузка ./bin/client1; ...) позволяет исчезнуть ошибке?   -  person Ida    schedule 07.09.2015
comment
@IdaEbkes да, я могу, имея bin/zeo fg и bin/instance fg, а затем при выполнении запроса Ctrl+C'ing bin/instance также показывает эту трассировку   -  person gforcada    schedule 07.09.2015
comment
Это хорошо, с точки зрения исключения, это могла быть ошибка супервайзера :-) Если я правильно понял, ошибка воспроизводится в новом экземпляре? Это может стоить отчета об ошибке, тем более, что это касается не только rel-storage.   -  person Ida    schedule 07.09.2015
comment
Этот квест теперь упоминается на: github.com/zopefoundation/Zope/commit/   -  person Ida    schedule 07.09.2015