在plone 4.1上进行长事务期间的ReadConflictError

时间:2013-11-28 01:45:44

标签: plone zope zodb

我们有一个很长的请求,它会进行目录搜索,然后计算一些信息,然后将其存储在另一个文档中。在商店之后进行调用以索引文档。

在日志中我们收到错误,例如INFO ZPublisher.Conflict ConflictError at / pooldb / csvExport / runAgent:数据库冲突错误(oid 0x017f1eae,类BTrees.IIBTree.IISet,串行此txn以0x03a30beb4659b266开始2013-11- 27 23:07:16.488370,serial目前已提交0x03a30c0d2ca5b9aa 2013-11-27 23:41:10.464226)(19个冲突(0未解决)自2013年11月25日星期一15:59:08启动) 并且交易中止并重新启动。

我读过的所有文档都说由于ZODB中的MVVC不再发生ReadConflicts。由于这是用RestrictedPython编写的,因此放入保存点并不是一个简单的选择(但可能是我猜的唯一选择)。

还有其他人可以避免这种冲突吗?如果我需要使用保存点,是否有人会想到为什么我不应该将保存点事务方法列入白名单以便在PythonScripts中使用?

1 个答案:

答案 0 :(得分:0)

答案是,当同一对象上同时存在其他小事务时,实际上无法执行涉及写入的大型事务。 BTrees应该有一些特殊的冲突处理代码,但它似乎不适用于我正在处理的情况。

我认为管理此问题的唯一方法就是this code which breaks the reindex into smaller transactions to reduce the chance of a conflict。确实应该有这样的内置zope / plone。