Problem
If you are using MyISAM as default database driver and you try to install current 8.x it will fail with a WSOD.
For more information see origin issue: #2270693: Installing Drupal core 8.x causes WSOD after DB credentials.
Proposed resolution
Shorten collection column in the config table and add the limit to the ConfigCollectionInfo object.
Remaining tasks
Review patch.
Reproduce
Have a clean environment with drupal 8.x ready to install.
Open your mysql configuration (/etc/mysql/my.cnf)
and insert the following at [mysqld]
skip-external-locking
skip-innodb
default_storage_engine=MyISAM
restart mysql ($sudo service mysql restart)
Which forces the usage of MyISAM on installation.
Now try to install drupal.
Can currently be reproduced on simplytest.me:
http://simplytest.me/project/drupal/8.x
Comment | File | Size | Author |
---|---|---|---|
#23 | interdiff-21-23.txt | 1.94 KB | xjm |
#23 | config-2270917-23.patch | 6.45 KB | xjm |
#21 | interdiff-17-20.txt | 775 bytes | xjm |
#21 | config-2270917-20.patch | 6.45 KB | xjm |
#17 | interdiff-15-17.txt | 1.07 KB | xjm |
Comments
Comment #1
patrickd CreditAttribution: patrickd commentedComment #2
geerlingguy CreditAttribution: geerlingguy commentedUpdated acronym to be slightly more correct :)
Comment #3
olli CreditAttribution: olli commented#2262861: Add concept of collections to config storages added collection column (varchar 255) to config table primary key.
Comment #4
Eric_A CreditAttribution: Eric_A commentedWith #3 added simplytest.me now succeeds in installing 8.x, but admin/modules/install is broken. Don't know if this is related to MyISAM or if it's the same in HEAD with InnoDB.
Comment #5
xjmThis again.
Comment #6
xjmComment #7
alexpottSo lets encode this maximum length for collection names in the system.
Comment #8
alexpott@Eric_A admin/modules/install and admin/modules work with MyISAM for me - so that issue is something unrelated to MyISAM and this specific issue with config collection name length.
Comment #9
alexpottxpost
Comment #10
xjmA few cleanups. The config object name is capped at 250 characters, not 255, so shortened that column and increased the collections column to 80.
Comment #11
xjmGah.
Comment #13
olli CreditAttribution: olli commentedComment #14
Damien Tournoud CreditAttribution: Damien Tournoud commentedWhy would Drupal 8 want or need to support MyISAM?
Comment #15
xjm@Damien Tournoud, because there are certainly thousands of Drupal sites that use MyISAM, it's considered better/faster for some operations than InnoDB, and we support it for Drupal 7 and no one has otherwise filed an issue to remove support. We certainly get a bug report for D8 within a week or so every time we break it. Edit: Also http://simplytest.me/ uses MyISAM and TBH that's reason enough for me.
Attached is a silly doc standards fix, plus the test-only patch I meant to include last time.
Comment #17
xjmOne more docs improvement. Sorry bot.
Comment #18
webchickWould really love to get this in for the next alpha, if at all possible. Would highly suck for the alpha just before DrupalCon to not work on simplytest.me. :(
Comment #19
cordoval CreditAttribution: cordoval commentedremove one collection
Comment #20
cordoval CreditAttribution: cordoval commentedwhy there is no description of the unit test? sounds like the name should be equal to the description in most cases?
why not testAddCollection?
maybe use assertContains?
Comment #21
xjmNow with less collection collection. :)
BTW, the patch is pretty easy to test manually... try to install D8 HEAD on simplytest.me, see that it breaks. Click the simplytest.me dreditor button for the patch, see that Drupal installs. Internet is won. ;)
Comment #22
xjmRe: #20 point 1. I'm not sure redundancy is any better or worse than a blank string? HEAD does this all over the place for unit tests as far as I can see. For point 2, sure. For point 3, no, because it should be the only element in the list.
Comment #23
xjmComment #25
Damien Tournoud CreditAttribution: Damien Tournoud commentedDrupal doesn't support MyISAM for any decent definition of the term. Running Drupal on MyISAM (a non-transactional table engine) is going to result in all sorts of pain and data loss, even on relatively low traffic websites.
I understand the desire of making sure that Drupal works for the largest amount of people possible, but it is ill-minded in that case. We don't do people service by pretending that we support non-transactional table engines.
Comment #26
fgmSeconding DamZ here: MyISAM is a massive performance problem beyond single-user sites due to its table-level locking : if we don't want to remove it because it can be marginally faster on strict single-user workloads, it should probably be documented as never to be used outside this case, like SQLite.
Comment #27
xjmThis is all out of scope here. If you want to propose we remove MyISAM support from Drupal 8, please file a separate issue proposing that. For now, we need to fix this critical regression so hundreds of contributors can use http://simplytest.me to work with Drupal 8 at DrupalCon Austin. This is by no means the first schema we've tweaked for MyISAM.
Comment #28
patrickd CreditAttribution: patrickd commented(simplytest.me will switch to InnoDB before austin if necessary)
Comment #29
Damien Tournoud CreditAttribution: Damien Tournoud commentedMyISAM is not actually supported since at least Drupal 7, even if we never documented this. So yes, you should.
Comment #30
patrickd CreditAttribution: patrickd commentedWish somebody had told me that earlier ;)
I'll see what I can do; thanks everyone!
Comment #31
xjmThere are still plenty of people using it for D7 and D8, so we need an explicit issue to discuss officially dropping support if that's the case.
Comment #32
catchOpened #2275535: [policy, no patch] Drop support for non-transactional database engines (including MyISAM).
Comment #33
patrickd CreditAttribution: patrickd commented(BTW: simplytest.me now uses MariaDB with InnoDB as database driver - drupal 8.x can now be installed without issues)
Comment #34
webchickYay, that's great Patrick! Nevertheless, it'd be great to get this fixed.
Comment #35
xjmDiscussed with @alexpott. With #2275535: [policy, no patch] Drop support for non-transactional database engines (including MyISAM) this is now a wontfix. Thanks everyone.