3

在调查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方法似乎暗示持久映射上的元组和哈希键应该只有一对一的关系。

对元素的进一步研究表明,确实,如果您查看所有元素的widthheight属性,则只有 4 种不同的组合(来自元组本身的组合)。

因为每当修改时间变大时都会生成一个新的比例(参见上面指出的比例方法),并且plone.namedfield.scaling.ImageScaling.modified使用上下文作为修改的源,这意味着在对象的每一次更新中都会有一个新的规模会产生吗?

所以从前面产生了两个问题:

  • 我假设只有 4 个秤被真正使用,而其他 558 个又旧又没用是真的吗?

  • 之前的回答是肯定的,那他们不应该被清理吗?

4

1 回答 1

3

您可能是对的,但报告此问题的正确位置肯定是https://dev.plone.org/newticket

于 2013-10-29T16:38:10.890 回答