TokuDB に関するテストが mariadb-10.4.18 で FAIL する件
Vagrant Box bento/ubuntu-20.04 で Building MariaDB on Ubuntu
に従い MariaDB をビルドした(※)ところ、TokuDB に関連するテストが FAIL した。なお MariaDB のバージョンは mariadb-10.4.18 である。ここに解決方法を記しておく。
※ ただし、記事中の 10.3 をすべて 10.4 に置き換えて手順を実行した。
テストの実行結果から重要そうな部分のみ抜粋する。... は省略を表す。
> ./mysql-test/mtr --suite=tokudb --force
...
==============================================================================
TEST RESULT TIME (ms) or COMMENT
--------------------------------------------------------------------------
worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 16000..16019
tokudb.bf_create_select [ skipped ] Test needs --big-test
tokudb.bf_create_select_hash_part [ skipped ] Test needs --big-test
...
tokudb.type_temporal_upgrade [ disabled ]
tokudb.type_timestamp_explicit [ disabled ]
worker[1] mysql-test-run: WARNING: Process [mysqld.1 - pid: 393963, winpid: 393963, exit: 512] died after mysql-test-run waited 0.2 seconds for /home/vagrant/repo/mariadb-server/build/mysql-test/var/run/mysqld.1.pid to be created.
tokudb.type_varchar [ fail ]
Test ended at 2021-04-13 12:46:49
CURRENT_TEST: tokudb.type_varchar
Failed to start mysqld.1
mysqltest failed but provided no output
- saving '/home/vagrant/repo/mariadb-server/build/mysql-test/var/log/tokudb.type_varchar/' to '/home/vagrant/repo/mariadb-server/build/mysql-test/var/log/tokudb.type_varchar/'
***Warnings generated in error logs during shutdown after running tests: tokudb.type_varchar
2021-04-13 12:46:48 0 [ERROR] Couldn't load plugins from 'ha_tokudb.so'.
2021-04-13 12:46:48 0 [ERROR] /home/vagrant/repo/mariadb-server/build/sql/mysqld: unknown option '--tokudb'
2021-04-13 12:46:48 0 [ERROR] Aborting
...
Errors/warnings were found in logfiles during server shutdown after running the
following sequence(s) of tests:
tokudb.type_varchar
tokudb.ext_key_1_innodb
tokudb.ext_key_2_innodb
tokudb.simple_join_tokudb_innodb
tokudb.truncate_txn_rollback_innodb
tokudb.type_bit_innodb
tokudb.bug-1657908
tokudb.gap_lock_error
tokudb.dir-per-db-with-custom-data-dir
19 tests were skipped, 0 by the test itself.
mysql-test-run: *** ERROR: there were failing test cases
Couldn't load plugins from 'ha_tokudb.so'. と言われているので、ha_tokudb.so を探してみる。どうやらビルド自体はされていそうだ。
> pwd /home/vagrant/repo/mariadb-server/build > ag -g ha_tokudb storage/tokudb/CMakeFiles/tokudb.dir/ha_tokudb.cc.o storage/tokudb/ha_tokudb.so
よくわからないので、それっぽい issue がないか MariaDB の JIRA を漁ってみる。MDEV-16183 TokuDB tests fail on Fedora 28 がそれっぽい。
LD_PRELOAD を設定しろと書いてあるので、やってみると…通った!何故これで上手く行くのかは、上の issue に書かれているのでそちらを読んでほしい。
> LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 ./mysql-test/mtr --suite=tokudb ... ============================================================================== TEST WORKER RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 16000..16019 tokudb.bf_create_select [ skipped ] Test needs --big-test tokudb.bf_create_select_hash_part [ skipped ] Test needs --big-test ... tokudb.hotindex-del-fast w3 [ pass ] 61017 tokudb.hotindex-update-0 w5 [ pass ] 57358 -------------------------------------------------------------------------- The servers were restarted 9 times Spent 714.488 of 119 seconds executing testcases Completed: All 214 tests were successful. 27 tests were skipped, 7 by the test itself.
追記: MariaDB の 10.4 branch の HEAD (c03841ec0e2b7ac11711243d29821038b26e3edf) において、suite やテストを指定せずに mysql-test-run.pl を実行すると、途中で mysqld が死んでエラーになるという問題があったのだが、それも TokuDB が原因のようである。次のいずれかの方法で回避できる。
> LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 ./mysql-test/mtr
> ./mysql-test/mtr --skip-test=tokudb # TokuDB 関連のテストをスキップ