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

Reply via email to