2013-07-10 58 views
1

我正在使用視圖將舊內容移動到另一個文件夾中。 (目錄搜索結束日期超過N個月前,通過ID的進入下面的命令:CopyError - OFS.CopySupport.manage_pasteObjects僅限於〜<160個對象?

target.manage_pasteObjects(source.manage_cutObjects(idsToArchive)) 

一,二年前,移動800,甚至更多的物體是沒有問題的 今天我需要限制的目錄。搜索到約80項,否則我得到一個

Module OFS.CopySupport, line 193, in manage_pasteObjects 
CopyError: 

The data in the clipboard could not be read, possibly due to cookie data being truncated by your web browser. Try copying fewer objects. 

運行的Plone 4.1.6/Zope2-2.13.15。

我已經嘗試停用燒杯會話數據管理器(依然在S ame問題)

回答

4

您安裝了最新的Plone修補程序20130618。它包括一個DDOS預防措施,將__cp Cookie數據的大小限制爲8kb(解壓縮)。

未來的Zope版本也將包含此修復程序。

要臨時解決此問題,唯一的選擇是增加最大大小默認值。這樣做允許其它線程使用更大的餅乾以及直到你恢復默認:

from OFS.CopySupport import _cb_decode 

_default_maxsize = _cb_decode.func_defaults[0] 

def _increase_maxsize(newsize): 
    # Patch the maxsize default 
    _cb_decode.func_defaults = (newsize,) 

def _restore_maxsize(newsize): 
    # Patch the maxsize default 
    _cb_decode.func_defaults = (_default_maxsize,) 

的cookie數據幾乎全部的對象路徑(絕對路徑元組)作爲marshall轉儲,你必須從中估算出合適的最大尺寸。

+1

感謝詳細的反應martijn。我估計每個大腦的平均大小通過使用源文件夾的路徑和長度爲50個字符的ID: avgSize = sys.getsizeof(marshal.dumps(list(source.getPhysicalPath())+ ['x'* 50 ])) 將avgSize乘以我們將傳遞給manage_cutObject et瞧的nr ids! – fRiSi

+1

@fRiSi:更好的解決方法;請注意'sys.getsizeof()'不是在這裏使用的最佳工具;只需在'marshall'輸出中使用'len()'。 –