Hi,
We have to do a migration from a plone-2.0 site that sits on a
directorystorage zodb to plone-2.5 on filestorage plus
filesystemstorage. The site is fairly large, about 12Gb, so we would
like to perform a procedure that doesn't load the whole site into memory.
The initial strategy is to create a plone-2.5 site with all the
necessary configuration but with no content, mount the old zodb on that
instance, and do a routine on the old content of cut/paste/migration
recursively, over temporary folders, to their intended location in the
new instance. So, for example, if we want to migrate folder A that
contains items B1 and B2 and move it to folder C, we first create A_tmp
in folder C, move there B1 and B2, then move A, and finally move B1 and
B2 to A and delete A_tmp.
This can take a long time, (each content object will be moved 2**depth),
but that is not an issue.
If we want to save space and also if we want to be able to resume a
broken migration, we have to commit transactions on each recursion. And
here comes the problem, we get an InvalidObjectReference error on commit
and we cannot recover from that, the old zodb gets broken and cannot
resume the proccess.
The migration script (implemented as a zope3 view) can be seen here:
http://yaco.pastebin.com/m163588b6
And this is the traceback:
Traceback (innermost last):
Module ZPublisher.Publish, line 115, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 41, in call_object
Module Products.PloneWebUCA.browser.ucamove, line 33, in __call__
Module Products.PloneWebUCA.browser.ucamove, line 87, in move_recurse
Module Products.PloneWebUCA.browser.ucamove, line 87, in move_recurse
Module Products.PloneWebUCA.browser.ucamove, line 87, in move_recurse
Module Products.PloneWebUCA.browser.ucamove, line 87, in move_recurse
Module Products.PloneWebUCA.browser.ucamove, line 87, in move_recurse
Module Products.PloneWebUCA.browser.ucamove, line 118, in move_recurse
Module transaction._manager, line 96, in commit
Module transaction._transaction, line 380, in commit
Module transaction._transaction, line 378, in commit
Module transaction._transaction, line 433, in _commitResources
Module ZODB.Connection, line 484, in commit
Module ZODB.Connection, line 526, in _commit
Module ZODB.Connection, line 553, in _store_objects
Module ZODB.serialize, line 421, in serialize
Module ZODB.serialize, line 430, in _dump
Module ZODB.serialize, line 351, in persistent_id
InvalidObjectReference:
A new object is reachable from multiple databases.
Won't try to guess which one was correct!
--
Enrique Pérez Arnaud
Yaco Sistemas S.L.
_______________________________________________
Product-Developers mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/product-developers