[ZODB-Dev] problem with broken

Adam GROSZER agroszer at gmail.com
Wed Nov 5 07:15:58 EST 2008


Hello,

Thanks for the advices on the generation script, but I think the
problem lies in that the broken object is loaded fine but cannot be
written back again to ZODB.
Or do I misunderstand that broken is a sort of proxy for the missing
class that allows it to be around?

Wednesday, November 5, 2008, 11:31:21 AM, you wrote:

LR> Broken objects occur when the class for a pickled object cannot be 
LR> imported. To change the location of a class, you need to provide an 
LR> alias at the old location so that the object can be unpickled, i.e. 
LR> MyOldClassName = MyNewClassName. You can only remove MyOldClassName 
LR> after you have updated all of the pickles (with your code below).

LR> Laurence



LR> Adam GROSZER wrote:
>> Hello,
>> 
>> I'm having a problem with broken objects here.
>> It's coming when I'm trying to evolve generations and the generation
>> just touches all objects in the ZODB to store them again with the
>> non-deprecated classes.
>> 
>> The code is like this:
>>     storage = context.connection._storage
>> 
>>     next_oid = None
>>     n = 0
>>     while True:
>>         oid, tid, data, next_oid = storage.record_iternext(next_oid)
>> 
>>         obj = context.connection.get(oid)
>>         # Make sure that we tell all objects that they have been changed. Who
>>         # cares whether it is true! :-)
>>         obj._p_activate()
>>         obj._p_changed = True
>>         
>>         if next_oid is None:
>>             break
>> 
>> 
>> 2008-11-04T19:40:16 ERROR SiteError http://localhost:8080/++etc++process/@@generations.html
>> Traceback (most recent call last):
>>   File "F:\W\Zope3\src\zope\publisher\publish.py", line 133, in publish
>>     result = publication.callObject(request, obj)
>> ...
>>   File "F:\W\Zope3\src\zope\tal\talinterpreter.py", line 343, in interpret
>>     handlers[opcode](self, args)
>>   File "F:\W\Zope3\src\zope\tal\talinterpreter.py", line 583, in do_setLocal_tal
>>     self.engine.setLocal(name, self.engine.evaluateValue(expr))
>>   File "F:\W\Zope3\src\zope\tales\tales.py", line 696, in evaluate
>>     return expression(self)
>>   File "F:\W\Zope3\src\zope\tales\expressions.py", line 217, in __call__
>>     return self._eval(econtext)
>>   File "F:\W\Zope3\src\zope\tales\expressions.py", line 211, in _eval
>>     return ob()
>>   File "F:\W\Zope3\src\zope\app\generations\browser\managers.py", line 182, in evolve
>>     transaction.commit()
>>   File "F:\W\Zope3\src\transaction\_manager.py", line 93, in commit
>>     return self.get().commit()
>>   File "F:\W\Zope3\src\transaction\_transaction.py", line 322, in commit
>>     self._commitResources()
>>   File "F:\W\Zope3\src\transaction\_transaction.py", line 416, in _commitResources
>>     rm.commit(self)
>>   File "F:\W\Zope3\src\ZODB\Connection.py", line 541, in commit
>>     self._commit(transaction)
>>   File "F:\W\Zope3\src\ZODB\Connection.py", line 586, in _commit
>>     self._store_objects(ObjectWriter(obj), transaction)
>>   File "F:\W\Zope3\src\ZODB\Connection.py", line 620, in _store_objects
>>     p = writer.serialize(obj)  # This calls __getstate__ of obj
>>   File "F:\W\Zope3\src\ZODB\serialize.py", line 405, in serialize
>>     meta = klass, newargs()
>>   File "F:\W\Zope3\src\ZODB\broken.py", line 325, in __getnewargs__
>>     return self.__Broken_newargs__
>> AttributeError: 'VocabularyManager' object has no attribute '__Broken_newargs__'
>> 
>> 

LR> _______________________________________________
LR> For more information about ZODB, see the ZODB Wiki:
LR> http://www.zope.org/Wikis/ZODB/

LR> ZODB-Dev mailing list  -  ZODB-Dev at zope.org
LR> http://mail.zope.org/mailman/listinfo/zodb-dev


-- 
Best regards,
 Adam GROSZER                            mailto:agroszer at gmail.com
--
Quote of the day:
Every absurdity has a champion who will defend it.



More information about the ZODB-Dev mailing list