[Zope-dev] strange overflowerror "long int too large to convert"

Clemens Robbenhaar robbenhaar@espresto.com
Mon, 4 Nov 2002 20:08:21 +0100


Hi Tobias,

 > Hi,
 > 
 > we have a Zope-based (v2.5.0) editorial system running on a server of our
 > customer's; it uses a ZUserFolder to store eMail addresses of the top-level
 > users. Last week, an error turned up whenever the system tried to
 > automatically send a notification eMail, which said:
 > 
 > Error Type: OverflowError
 > Error Value: long int too large to convert
 > 
 > Poking around, I found that the error occurred as well when I tried to view
 > the ZUserFolder instance in the root directory. Here is the traceback:
 > 
 > >>
 > Traceback (innermost last):
 [snip some traceback parts]
 >     (Object: /opt/zope/var/Data.fs)
 >   File /data/opt/Zope-2.5.0-linux2-x86/lib/python/ZODB/FileStorage.py, line
 > 1902, in _loadBack
 > OverflowError: (see above)
 > <<
 > 
 > (Zope 2.5.0 (binary release, python 2.1, linux2-x86), python 2.1.2, linux2)
 > 
 > Since I can't find any relation to something we did:
 > 1. Is this error known to anyone, possibly related to a known bug of Zope
 > 2.5.0?
 > 2. Is it possible that the usage of ZClasses is the reason for the problem,
 > and that ZClasses tend to go berserk after a while? (our product contains
 > nested ZClasses, which is not how we'd do it today, but how we did it...
 > the user class used by ZUserFolder is not a nested one, though)
 > 3. Can anyone give me a hint where to search for the bug?

Hm, maybe looking at the source code? :-}

def _loadBack(file, oid, back):
    seek=file.seek
    read=file.read
    
    while 1:
        old=U64(back)
        if not old: raise KeyError, oid
        seek(old)                          <-- this seems to be line 1902
        h=read(42)
        doid,serial,prev,tloc,vlen,plen = unpack(">8s8s8s8sH8s", h)

        if vlen: seek(vlen+16,1)
        if plen != z64: return read(U64(plen)), serial
        back=read(8) # We got a back pointer!

Maybe You ZODB has grown too big, i.e. over the 2GB limit, and python is
not configured for having large file system support ... this should be
in the release notes, but I cannot find it there ...

By the way, You could try:

  utilities/ZODBTools/fstest.py

to check, if Your ZODB is corrupted for some reason.