在调查ConflictError
(见上一个问题)时,我看到了很多persistent.mapping.PersistentMapping
冲突。
查看一个特定的结果,它原来是一个 PersistentMapping for plone.scale
.
原来只有一个图像的随机对象上有562个键,难怪它为什么会出现冲突错误......
包含此plone.scale
注释的对象的一些上下文: - 敏捷内容类型 - 其行为之一具有图像字段 ( plone.namedfile.field.NamedBlobImage
)
看到它的代码如下:
启动调试实例:./bin/instance debug
from ZODB.utils import p64
OID = 0x568428 # got from zeo client logs
mapping = app._p_jar[p64(OID)]
len(mapping) # that returns 562
神秘的部分是该持久映射上只有 4 个键是元组,而其他 558 个只是散列。
简要看一下plone.scale.storage.AnnotationStorage.scale方法似乎暗示持久映射上的元组和哈希键应该只有一对一的关系。
对元素的进一步研究表明,确实,如果您查看所有元素的width
和height
属性,则只有 4 种不同的组合(来自元组本身的组合)。
因为每当修改时间变大时都会生成一个新的比例(参见上面指出的比例方法),并且plone.namedfield.scaling.ImageScaling.modified使用上下文作为修改的源,这意味着在对象的每一次更新中都会有一个新的规模会产生吗?
所以从前面产生了两个问题:
我假设只有 4 个秤被真正使用,而其他 558 个又旧又没用是真的吗?
之前的回答是肯定的,那他们不应该被清理吗?