Bringing this topic back from the dead, as I have just completed a migration from IPB 4.something to XF 2.2.12 using this importer script.
IPB had around 700k posts from the past 17 years. For DB performance, it was set to automatically archive the posts from threads which were not active for more than 3 years. In effect, this would move the posts from the active posts table to a separate archive table, and make the threads read-only.
The XF importer imported all threads, but since it couldn't find the posts in the active posts table, it set the post ID to 0 and did not import the posts from the archive table. I could see all threads from the past 17 years, but any thread older than 3 years would return an error when opened.
As a result, I did:
- first migration, which moved all content to XF except archived posts;
- discovered the issue, forced IPB to move all archived posts back to the active posts table (normally does this with a cron entry moving 250 posts every 5 minutes, I changed that to run 50 times faster - 2500 posts every 1 minute; thankfully my web host didn't kick me out for straining their infrastructure for a couple hours);
- ran the import again and chose just the posts to be imported, but the importer re-imported all users, all forum nodes and all threads all over again, which after running for 3 hours resulted in duplicates of everything;
- deleted everything in the XF DB and started all over with the installation and import, which ran for another 5 hours.
I'm sure all of this can be avoided fairly easy by 1) also importing the posts in the archive table, 2) reusing the import log table to link already imported IDs in case an incremental import is executed, and 3) if the script is not modified, at least write a note that IPB users need to first disable the archiving feature and wait for a few hours/days for the background job to move all archived posts, before putting the forum in maintenance mode and doing the migration.