[MDEV-12042] Re-bootstrap the server if InnoDB options are incompatible (Make InnoDB tests run with all --mysqld=--innodb-page-size) Created: 2017-02-10 Updated: 2017-08-31 Resolved: 2017-06-15 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB, Tests |
| Fix Version/s: | 10.1.25, 10.0.32, 10.2.7 |
| Type: | Task | Priority: | Major |
| Reporter: | Marko Mäkelä | Assignee: | Elena Stepanova |
| Resolution: | Fixed | Votes: | 1 |
| Labels: | page_size, tests | ||
| Issue Links: |
|
||||||||||||
| Description |
|
Currently buildbot only runs the InnoDB tests with the default innodb_page_size=16k. We have 3 classes of test failures when running with non-default page size:
I did two test runs on 10.2 to see how many tests are affected. Not that many:
There could be some more failures with 8k or 32k, but I thought that it would be better to look at the extremes first: innodb_page_size=64k test failures encryption.innodb_encryption_tables innodb.innodb-64k encryption.innodb-log-encrypt encryption.innodb-page_encryption_log_encryption encryption.innodb_encryption_row_compressed innodb.innodb_uninstall innodb_zip.innodb_cmp_drop_table encryption.innochecksum encryption.innodb-discard-import encryption.create_or_replace innodb.innodb_defragment encryption.innodb-page_encryption encryption.innodb_encryption_discard_import encryption.innodb_page_encryption_key_change innodb.innodb_defrag_stats encryption.innodb_onlinealter_encryption innodb.innodb_simulate_comp_failures_small innodb_zip.innodb_bug36169 innodb.binlog_consistent innodb.innodb_defrag_concurrent innodb.innodb_simulate_comp_failures innodb.innodb_trx_weight innodb.innodb-page_compression_zip innodb.innodb-wl5522-debug innodb.temporary_table innodb.strict_mode innodb_zip.innodb_bug53591 innodb_zip.innodb-zip innodb_fts.innodb_fts_misc_1 innodb_zip.innodb_bug56680 innodb_zip.innodb_bug36172 innodb_zip.innodb_bug52745 innodb.innodb_defrag_binlog innodb_page_size=4k test failures innodb.innodb_mysql innodb.innodb_uninstall innodb_zip.innodb_cmp_drop_table innodb.innodb_defrag_concurrent innodb.innodb_defrag_stats innodb.innodb_simulate_comp_failures_small encryption.innodb_lotoftables innodb.innodb_defrag_stats_many_tables innodb.binlog_consistent innodb.innodb_simulate_comp_failures innodb.innodb_trx_weight innodb.innodb-change-buffer-recovery innodb_zip.4k innodb.innodb-page_compression_zip innodb.innodb-wl5522-debug innodb.innodb_prefix_index_restart_server innodb_zip.wl6501_crash_4 innodb.strict_mode innodb_zip.index_large_prefix_4k innodb.innodb_defrag_binlog innodb_gis.rt_precise |
| Comments |
| Comment by Elena Stepanova [ 2017-02-13 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
In theory, it would be nice to be able to run all MTR tests with an arbitrary set of non-default options and get clean results (there have been a discussion on a mailing list about it, too). The "clean results" part is important here. It is always possible to do such ad-hoc runs experimentally, to see that there are no crashes and that differences produced by tests look reasonable; but of course this distinction would have to be done by a human. If we want to automate these runs as suggested, they should actually produce the exact expected results, which not only means that existing tests should be modified, and they will inevitably lose some precision (often it's redundant precision, but it might not always be so), but, importantly, it also means that new tests will have to be developered with the consideration of these non-default runs, which can never happen (especially if they are not run per-push, and we can't afford running them per-push), thus new tests will be failing regularly on these runs, which makes maintenance more difficult. We have hundreds of server options, and if we want to adapt tests to all of them, tests will become meaningless. If there is a strong demand and a good excuse for regular running test suites with non-default values of some particular option, it can probably be done. But normally a more reasonable approach is to choose tests which are really important for testing this particular option, and make them run with the desired values of this option (e.g. via 'combinations' facility). Now, it is impossible to run combinations with innodb_page_size, because its non-default values are incompatible with normal MTR's bootstrap. MTR's bootstrap has already been made aware of --innodb* command-line options, which is why it is now possible to run tests with different innodb_page_size values provided via the command line (it hadn't always been so). But MTR still ignores options from opt files and combinations files, even although they also end up on mysqld command line (as opposed to options in cnf files which go to the config). So, I suggest to start by fixing this. Currently MTR bootstraps the server once, it creates and stores a clean datadir. Here is a proposed change in MTR (it's much smaller than the text above): And here is a test case with innodb_page_size combinations: It's a useless test only made as an example. It intentionally produces different results with different page sizes, to demonstrate how combinations and rdiff files work together. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2017-02-13 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Please check the suggestion above and the MTR change. If you are okay with doing it this way, let's stick to it for now. If you still want to run all suites with the option, please re-assign it back to me (and let me know whether you want the change in MTR anyway, or not). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Marko Mäkelä [ 2017-02-24 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
elenst, I like your approach. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2017-02-24 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Right. I don't remember why I didn't do it in the tree, but naturally at the end it should be innodb_page_size.inc and innodb_page_size.combinations, and any test which wants to be run with different page sizes should just include it (and possibly add rdiffs, if it has some output which is different for different page sizes, but it's not necessarily so). The combinations file will take care of additional options. Like this:
Here the new innodb_page_size.test demonstrates how it works when the output depends on innodb_page_size (rdiffs are needed), and the old innodb_fts.create test demonstrates how it works when the output is the same (no changes on the result side).
Please remember that even 5 combinations isn't cheap, especially with rebootstraps, and if a test uses orthogonal combinations (e.g. binlog_format ones), the number of test runs will multiply. Use it wisely. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Marko Mäkelä [ 2017-05-29 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Looks OK to me. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2017-06-02 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A suitable part of the change is pushed into 10.0: Please note that in this scope of this task only the facility to run tests with innodb_page_size configurations is provided; the tests themselves have not been modified.
Additional changes are required after merging to 10.1, since 10.0 part only adds combinations for page size 4/8/16K, while 10.1 also needs 32/64K. The task will remain open until the 10.1 part is done. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Comment by Elena Stepanova [ 2017-06-15 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko has added 32/64k combinations in 10.1 after the merge, so it can be closed now. |