Upgrade to Plone 4.0 from Plone 3.3.4 fails

Hi! I am in the process of migrating one site from plone 3.3.4 to 4.0. as a first step towards migration to 5.x.
I've copied data.fs to a new installation of plone 4. The ZMI home page guides me through the upgrade process saying "your site configuration is outdated and needs to be updated". When I click the upgrade button (both with and without dry run checkbox checked), the upgrade process prints the following error statements:

(I omitted the previous rows that appear not to show any errors)

migrating btree-based folders from <PloneSite at /Plone>:
Upgrade aborted. Error:
Traceback (most recent call last):
  File "/usr/local/Plone4/buildout-cache/eggs/Plone-4.0-py2.6.egg/Products/CMFPlone/MigrationTool.py", line 175, in upgrade
  File "/usr/local/Plone4/buildout-cache/eggs/Products.GenericSetup-1.6.1-py2.6.egg/Products/GenericSetup/upgrade.py", line 141, in doStep
  File "/usr/local/Plone4/buildout-cache/eggs/plone.app.upgrade-1.0-py2.6.egg/plone/app/upgrade/v40/alphas.py", line 444, in migrateFolders
    MigrationView(portal, None)()
  File "/usr/local/Plone4/buildout-cache/eggs/plone.app.folder-1.0.1-py2.6.egg/plone/app/folder/migration.py", line 71, in __call__
    if self.migrate(obj):
  File "/usr/local/Plone4/buildout-cache/eggs/plone.app.folder-1.0.1-py2.6.egg/plone/app/folder/migration.py", line 33, in migrate
    assert folder.getId()       # make sure the object is properly loaded
  File "/usr/local/Plone4/buildout-cache/eggs/ZODB3-3.9.5-py2.6-linux-i686.egg/ZODB/Connection.py", line 838, in setstate
  File "/usr/local/Plone4/buildout-cache/eggs/ZODB3-3.9.5-py2.6-linux-i686.egg/ZODB/Connection.py", line 906, in _setstate
    self._reader.setGhostState(obj, p)
  File "/usr/local/Plone4/buildout-cache/eggs/ZODB3-3.9.5-py2.6-linux-i686.egg/ZODB/serialize.py", line 629, in setGhostState
    state = self.getState(pickle)
  File "/usr/local/Plone4/buildout-cache/eggs/ZODB3-3.9.5-py2.6-linux-i686.egg/ZODB/serialize.py", line 622, in getState
    return unpickler.load()
  File "/usr/local/Plone4/buildout-cache/eggs/zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/declarations.py", line 753, in Provides
    spec = ProvidesClass(*interfaces)
  File "/usr/local/Plone4/buildout-cache/eggs/zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/declarations.py", line 656, in __init__
    Declaration.__init__(self, *(interfaces + (implementedBy(cls), )))
  File "/usr/local/Plone4/buildout-cache/eggs/zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/declarations.py", line 47, in __init__
    Specification.__init__(self, _normalizeargs(interfaces))
  File "/usr/local/Plone4/buildout-cache/eggs/zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/declarations.py", line 1372, in _normalizeargs
    _normalizeargs(v, output)
  File "/usr/local/Plone4/buildout-cache/eggs/zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/declarations.py", line 1371, in _normalizeargs
    for v in sequence:
TypeError: ("'ExtensionClass.ExtensionClass' object is not iterable", <function Provides at 0x9b1a304>, (<class 'Products.ATContentTypes.content.folder.ATFolder'>, <InterfaceClass Products.CMFPlone.interfaces.breadcrumbs.IHideFromBreadcrumbs>, <class 'plone.app.kss.interfaces.IPloneSiteRoot'>, <InterfaceClass Products.CMFPlone.interfaces.siteroot.IPloneSiteRoot>, <InterfaceClass plone.app.layout.navigation.interfaces.INavigationRoot>))
End of upgrade path, migration has finished
The upgrade path did NOT reach current version
Migration has failed
Dry run selected, transaction aborted

According to Exceptions and common tracebacks in the Plone 4 documentation the error message:
TypeError: 'ExtensionClass.ExtensionClass' object is not iterable
tends to happen after moving a Data.fs to a new instance that does not have the identical add-ons to the original instance.

I checked the addons in buildout and they are the same both in Plone 3.3.4. and 4.0 installations


I really don't understand the reason for this error.
Thanks for your help :slight_smile:

You indeed have some persistent object that does not have a counterpart in the Python code.

Try to see if this helps you:

@alert is right - it's often best to disable and then remove add-ons from your old site before trying to upgrade.

Have you looked at the upgrade guide? http://docs.plone.org/manage/upgrading/index.html

I managed to solve this problem by disabling the interfaces that had been added through the ZMI to the language specific home pages (www.mysite.it/it and www.mysite.it/en).
After disabling these interfaces, the migration completed smoothly.
Once in Plone 4 I restored the interfaces.
Thanks in any case for your replies.

1 Like