Upgrading from Plone 3.0 to 5.x

If I get a Plone 3.0 site with NO add-ons installed: Will it be possible to upgrade to Plone 5.1 (or 5.2) directly… or will I need to do it in steps as 'normal' ?

No, in steps only. First to 3 latest, then 4 latest, then 5.

See the Plone Upgrade Guide for the different version starting with 3.

Consider also the possible switch to python3 with 5.2

I will need Mosaic, so I dont think that is an option.

Everything went OK, but I am stuck with 206 folder not migrating due to:

persistent broken Products.CMFDefault.DiscussionItem.DiscussionItemContainer 

      Module ZPublisher.Publish, line 138, in publish
      Module ZPublisher.mapply, line 77, in mapply
      Module ZPublisher.Publish, line 48, in call_object
      Module plone.z3cform.layout, line 66, in __call__
      Module plone.z3cform.layout, line 50, in update
      Module z3c.form.form, line 213, in update
      Module plone.app.z3cform.csrf, line 21, in execute
      Module z3c.form.action, line 98, in execute
      Module z3c.form.button, line 315, in __call__
      Module z3c.form.button, line 170, in __call__
      Module plone.app.contenttypes.migration.browser, line 384, in handle_migrate
      Module plone.app.contenttypes.migration.browser, line 219, in __call__
      Module plone.app.contenttypes.migration.migration, line 343, in migrate_folders
      Module plone.app.contenttypes.migration.migration, line 52, in migrate
      Module Products.contentmigration.basemigrator.walker, line 144, in go
      Module Products.contentmigration.basemigrator.walker, line 223, in migrate
    MigrationError: MigrationError for obj at /Plone/grupper (Folder -> Folder):
    Traceback (most recent call last):
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.contentmigration-2.1.11-py2.7.egg/Products/contentmigration/basemigrator/walker.py", line 192, in migrate
        migrator.migrate()
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.contentmigration-2.1.11-py2.7.egg/Products/contentmigration/basemigrator/migrator.py", line 220, in migrate
        method()
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.contentmigration-2.1.11-py2.7.egg/Products/contentmigration/basemigrator/migrator.py", line 577, in migrate_children
        self.new._setObject(id, obj, set_owner=0)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.BTreeFolder2-2.13.3-py2.7.egg/Products/BTreeFolder2/BTreeFolder2.py", line 455, in _setObject
        notify(ObjectAddedEvent(ob, self, id))
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.event-3.5.2-py2.7.egg/zope/event/__init__.py", line 31, in notify
        subscriber(event)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/event.py", line 24, in dispatch
        zope.component.subscribers(event, None)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/_api.py", line 136, in subscribers
        return sitemanager.subscribers(objects, interface)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/registry.py", line 321, in subscribers
        return self.adapters.subscribers(objects, provided)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/adapter.py", line 585, in subscribers
        subscription(*objects)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/event.py", line 32, in objectEventNotify
        zope.component.subscribers((event.object, event), None)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/_api.py", line 136, in subscribers
        return sitemanager.subscribers(objects, interface)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/registry.py", line 321, in subscribers
        return self.adapters.subscribers(objects, provided)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/adapter.py", line 585, in subscribers
        subscription(*objects)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Zope2-2.13.23-py2.7.egg/OFS/subscribers.py", line 113, in dispatchObjectMovedEvent
        dispatchToSublocations(ob, event)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.container-3.11.2-py2.7-linux-x86_64.egg/zope/container/contained.py", line 153, in dispatchToSublocations
        for ignored in zope.component.subscribers((sub, event), None):
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/_api.py", line 136, in subscribers
        return sitemanager.subscribers(objects, interface)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.component-3.9.5-py2.7.egg/zope/component/registry.py", line 321, in subscribers
        return self.adapters.subscribers(objects, provided)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/adapter.py", line 585, in subscribers
        subscription(*objects)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/plone.app.versioningbehavior-1.2.5-py2.7.egg/plone/app/versioningbehavior/subscribers.py", line 62, in create_version_on_save
        pr.save(obj=context, comment=changeNote)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.CMFEditions-2.2.15-py2.7.egg/Products/CMFEditions/CopyModifyMergeRepositoryTool.py", line 305, in save
        autoapply=self.autoapply)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.CMFEditions-2.2.15-py2.7.egg/Products/CMFEditions/CopyModifyMergeRepositoryTool.py", line 450, in _recursiveSave
        prep = portal_archivist.prepare(obj, app_metadata, sys_metadata)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.CMFEditions-2.2.15-py2.7.egg/Products/CMFEditions/ArchivistTool.py", line 267, in prepare
        self._cloneByPickle(obj)
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/Products.CMFEditions-2.2.15-py2.7.egg/Products/CMFEditions/ArchivistTool.py", line 221, in _cloneByPickle
        p.dump(aq_base(obj))
      File "/home/medialog/plone5/Plone50/buildout-cache/eggs/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/broken.py", line 321, in __reduce__
        raise BrokenModified(self)
    BrokenModified: <persistent broken Products.CMFDefault.DiscussionItem.DiscussionItemContainer instance '\x00\x00\x00\x00\x00\x00B\xd2'>

PS: Could not migrate them in 4.3 too

See:

I'd remove the old revisions before upgrading. You could use collective.revisionmanager for that.

Thanks a lot… that advice 'saved me'

I'm in the unfortunate position of having to try to fix this in a site that was upgraded a while ago... I guess I'll go take a look at that code to see if I can apply it to a post-migrated site.