2013-11-28 1 views
1

У нас есть длинный запрос, который выполняет поиск по каталогу, а затем вычисляет некоторую информацию, а затем сохраняет ее в другом документе. Выполняется вызов индексации документа после магазина.ReadConflictError во время длительной транзакции на plone 4.1

В журналах мы получаем такие ошибки, как INFO ZPublisher.Conflict ConflictError в/pooldb/csvExport/RunAgent: ошибка конфликта базы данных (OID 0x017f1eae, класс BTrees.IIBTree.IISet, серийный этот TXN начал с 0x03a30beb4659b266 2013-11 -27 23: 07: 16.488370, серийный номер в настоящий момент зафиксирован 0x03a30c0d2ca5b9aa 2013-11-27 23: 41: 10.464226) (19 конфликтов (0 неразрешенных) с момента запуска в понедельник 25 ноября 15:59:08 2013) и транзакция прерывается и перезапустили.

Вся документация, которую я прочитал, говорит, что из-за MVVC в ZODB ReadConflicts больше не происходит. Поскольку это написано в RestrictedPython, то размещение точки сохранения - это не простой вариант (но, скорее всего, мой единственный выбор, который я предполагаю).

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

+1

Является ли это ReadConflict? Разве это не значит, что переиндексация не удалась, потому что что-то еще было переиндексировано во время вычисления поиска +? –

+0

Вы правы. Это путалось с более ранним ReadConflictError. Мы все еще не уверены, что здесь пишет, но что-то очевидно – djay

ответ

0

Ответ: действительно, нет способа совершить крупную транзакцию, которая связана с записью, когда есть небольшие транзакции на одних и тех же объектах одновременно. Предполагается, что у BTrees есть специальный код обработки конфликтов, но он, похоже, не работает в тех случаях, с которыми я имею дело.

Единственный способ, которым я могу управлять, это что-то вроде this code which breaks the reindex into smaller transactions to reduce the chance of a conflict. Там действительно должно быть что-то вроде этого, встроенного в zope/plone.

Смежные вопросы