[ZODB-Dev] database conflict fail

Claudiu Saftoiu csaftoiu at gmail.com
Thu Mar 22 20:13:34 UTC 2012


On Thu, Mar 22, 2012 at 2:45 PM, Vincent Pelletier <plr.vincent at gmail.com>wrote:

> Le jeudi 22 mars 2012 18:23:47, Claudiu Saftoiu a écrit :
> > Ahh, now that looks promising. Are there any particularly good places to
> > get documentation on that sort of thing? All I see when I google are
> > mailing list archives.
>
> See ZODB/ConflictResolution.txt . Disclaimer: I didn't read it. I read the
> code - but I expect the text file to be easier to assimilate :) .
> BTrees/Length.py:Length class implements a simple _p_resolveConflict (yours
> will be even simpler).
>

Thanks, I will take a look.


> There should be some details in the exceptoin itself. Like, oids, currently
> commited TID and the TID transaction started with. root()._p_jar[the_oid]
> will
> get you the object. Then the hard part starts: guess where in the object
> tree
> that object is. If you have varied classes, and significant data on your
> persistent instances, it will be easy.
>

Ok, I just got a ConflictError:

ConflictError: database conflict error (oid 0x139c35, class
BTrees.OOBTree.OOBucket, serial this txn started with 0x03954ed053c0ff88
2012-03-22 16:48:19.629820, serial currently committed 0x03954f996d61c944
2012-03-22 20:09:25.636401)

in my paster shell I do:

In [14]: root._p_jar[0x139c35]

However, this causes:

In [14]: root._p_jar[0x139c35]
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (85, 0))

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/tsa/sports/<ipython console> in <module>()

/home/tsa/env/lib/python2.6/site-packages/ZODB/Connection.pyc in get(self,
oid)
    246             return obj
    247
--> 248         p, serial = self._storage.load(oid, '')
    249         obj = self._reader.getGhost(p)
    250

/home/tsa/env/lib/python2.6/site-packages/ZEO/ClientStorage.pyc in
load(self, oid, version)
    813         self._lock.acquire()    # for atomic processing of
invalidations
    814         try:
--> 815             t = self._cache.load(oid)
    816             if t:
    817                 return t

/home/tsa/env/lib/python2.6/site-packages/ZEO/cache.pyc in call(*args, **kw)
    141             inst._lock.acquire()
    142             try:
--> 143                 return self.func(inst, *args, **kw)
    144             finally:
    145                 inst._lock.release()

/home/tsa/env/lib/python2.6/site-packages/ZEO/cache.pyc in load(self, oid)
    487     @locked
    488     def load(self, oid):
--> 489         ofs = self.current.get(oid)
    490         if ofs is None:
    491             self._trace(0x20, oid)

/home/tsa/env/lib/python2.6/site-packages/ZODB/fsIndex.pyc in get(self,
key, default)
    123
    124     def get(self, key, default=None):
--> 125         tree = self._data.get(key[:6], default)
    126         if tree is default:
    127             return default

TypeError: 'int' object is unsubscriptable

What am I doing wrong?

Thanks again,
- Claudiu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.zope.org/pipermail/zodb-dev/attachments/20120322/43c505c2/attachment.html>


More information about the ZODB-Dev mailing list