Bug #115495 | "Unable to read page" crash on innodb.dblwr_encrypt_recover | ||
---|---|---|---|
Submitted: | 3 Jul 3:16 | Modified: | 31 Oct 0:05 |
Reporter: | Laurynas Biveinis (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S6 (Debug Builds) |
Version: | 8.4.3, 9.1.0 | OS: | MacOS (14.5) |
Assigned to: | CPU Architecture: | ARM |
[3 Jul 3:16]
Laurynas Biveinis
[3 Jul 9:10]
MySQL Verification Team
Hello Laurynas, Thank you for the report and feedback. I quickly tried to reproduce this issue on OL7 but not seeing any issues. I assume this needs to be verified on MacOS. I'll get back to you if I need anything further on this. Thank you -- -- 8.4.1 scl enable devtoolset-11 bash MYSQL_VERSION="Bug115495" TARGET=/export/home/tmp/ushastry/src/$MYSQL_VERSION rm -rf /export/home/tmp/ushastry/src/$MYSQL_VERSION rm -rf bld/ mkdir bld && cd bld rm -rf CMakeCache.txt /home/umshastr/work/binaries/utils/cmake-3.28.1/bin/cmake .. -DCMAKE_INSTALL_PREFIX=$TARGET \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DCMAKE_BUILD_TYPE=Debug \ -DWITH_DEBUG=ON \ -DMYSQL_MAINTAINER_MODE=ON \ -DWITH_SYSTEM_LIBS=ON \ -DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ -DFORCE_COLORED_OUTPUT=ON \ -DWITH_ZLIB=bundled \ -DWITH_ASAN=ON \ -DWITH_ASAN_SCOPE=ON \ -DWITH_UBSAN=ON \ -DWITH_PROTOBUF=bundled \ -DWITH_ICU=bundled make -j 16 make install - ./mtr innodb.dblwr_encrypt_recover Logging: ./mtr innodb.dblwr_encrypt_recover MySQL Version 8.4.1 Checking supported features - Binaries are debug compiled Using 'all' suites Collecting tests Removing old var directory Creating var directory '/export/home/tmp/ushastry/src/Bug115495/mysql-test/var' Installing system database Using parallel: 1 ============================================================================== TEST NAME RESULT TIME (ms) COMMENT ------------------------------------------------------------------------------ [ 50%] innodb.dblwr_encrypt_recover [ pass ] 16846 [100%] shutdown_report [ pass ] ------------------------------------------------------------------------------ The servers were restarted 0 times The servers were reinitialized 0 times Spent 16.846 of 54 seconds executing testcases Completed: All 2 tests were successful. regards, Umesh
[8 Jul 16:18]
MySQL Verification Team
Hello Laurynas, My apologies for the delay. I tried to reproduce on MacOS(14.5) with below options but still not able to reproduce. Am I missing here? Please let me know. Thank you. regards, Umesh ========= MYSQL_VERSION="Bug115495" TARGET=/Users/umshastr/Work/Src/$MYSQL_VERSION rm -rf /Users/umshastr/Work/Src/$MYSQL_VERSION rm -rf bld/ mkdir bld && cd bld rm -rf CMakeCache.txt cmake .. -DCMAKE_INSTALL_PREFIX=$TARGET -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DWITH_DEBUG=ON -DMYSQL_MAINTAINER_MODE=ON -DWITH_SYSTEM_LIBS=ON -DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF -DFORCE_COLORED_OUTPUT=ON -DWITH_ZLIB=bundled -DWITH_ASAN=ON -DWITH_ASAN_SCOPE=ON -DWITH_UBSAN=ON -DWITH_ICU=bundled make -j 4 make install cd $TARGET/mysql-test cat ../docs/INFO_SRC commit: c96c4ce00c73c09b99cf29bc194bedf8c0b8d830 date: 2024-06-03 10:42:06 +0200 build-date: 2024-06-03 11:40:52 +0000 short: c96c4ce00c7 branch: mysql-8.4.1-release MySQL source 8.4.1 MySQL release maturity LTS ===== Compiler flags used: ===== CMAKE_BUILD_TYPE: Debug Compiler: AppleClang 15.0.0.15000309 COMPILE_DEFINITIONS: HAVE_CONFIG_H;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;_USE_MATH_DEFINES;LZ4_DISABLE_DEPRECATE_WARNINGS;HAVE_TLSv13 CMAKE_C_FLAGS: -fno-omit-frame-pointer -ftls-model=initial-exec -fsanitize=address -O1 -fno-inline -fsanitize-address-use-after-scope -fsanitize=undefined -O1 -fno-inline -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Wwrite-strings -Wconditional-uninitialized -Wextra-semi -Wmissing-noreturn -Wunreachable-code-break -Wunreachable-code-return -Wstring-concatenation -Wdocumentation -Wno-documentation-deprecated-sync CMAKE_CXX_FLAGS: -std=c++20 -fno-omit-frame-pointer -ftls-model=initial-exec -fsanitize=address -O1 -fno-inline -fsanitize-address-use-after-scope -fsanitize=undefined -O1 -fno-inline -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Woverloaded-virtual -Wcast-qual -Wno-null-conversion -Wno-unused-private-field -Wconditional-uninitialized -Wdeprecated -Wno-deprecated-declarations -Wno-shorten-64-to-32 -Wextra-semi -Wheader-hygiene -Wnon-virtual-dtor -Wundefined-reinterpret-cast -Wrange-loop-analysis -Winconsistent-missing-destructor-override -Winconsistent-missing-override -Wshadow-field -Wstring-concatenation -Wdocumentation -Wno-documentation-deprecated-sync CMAKE_C_FLAGS_DEBUG: -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g CMAKE_CXX_FLAGS_DEBUG: -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g ===== EOF ===== sw_vers ProductName: macOS ProductVersion: 14.5 BuildVersion: 23F79 -- Apple M1 Pro clang --version Apple clang version 15.0.0 (clang-1500.3.9.4) Target: arm64-apple-darwin23.5.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin cmake --version cmake version 3.29.6 CMake suite maintained and supported by Kitware (kitware.com/cmake). ./mtr innodb.dblwr_encrypt_recover --debug-server Logging: ./mtr innodb.dblwr_encrypt_recover --debug-server MySQL Version 8.4.1 Checking supported features - Binaries are debug compiled Using 'all' suites Collecting tests Checking leftover processes Removing old var directory Creating var directory '/Users/umshastr/Work/Src/Bug115495/mysql-test/var' Installing system database Using parallel: 1 ============================================================================== TEST NAME RESULT TIME (ms) COMMENT ------------------------------------------------------------------------------ [ 50%] innodb.dblwr_encrypt_recover [ pass ] 8746 [100%] shutdown_report [ pass ] ------------------------------------------------------------------------------ The servers were restarted 0 times The servers were reinitialized 0 times Spent 8.746 of 25 seconds executing testcases Completed: All 2 tests were successful.
[8 Jul 16:33]
MySQL Verification Team
Pls ignore my earlier request :) Finally, able to reproduce: umshastr@umshastr-mac mysql-test % ./mtr innodb.dblwr_encrypt_recover --debug-server --repeat=10 Logging: ./mtr innodb.dblwr_encrypt_recover --debug-server --repeat=10 MySQL Version 8.4.1 Checking supported features - Binaries are debug compiled Using 'all' suites Collecting tests Checking leftover processes Removing old var directory Creating var directory '/Users/umshastr/Work/Src/Bug115495/mysql-test/var' Installing system database Using parallel: 1 ============================================================================== TEST NAME RESULT TIME (ms) COMMENT ------------------------------------------------------------------------------ [ 9%] innodb.dblwr_encrypt_recover [ pass ] 8543 [ 18%] innodb.dblwr_encrypt_recover [ pass ] 10574 [ 27%] innodb.dblwr_encrypt_recover [ pass ] 10489 [ 36%] innodb.dblwr_encrypt_recover [ pass ] 10786 [ 45%] innodb.dblwr_encrypt_recover [ pass ] 8745 [ 54%] innodb.dblwr_encrypt_recover [ fail ] Test ended at 2024-07-08 21:59:54 CURRENT_TEST: innodb.dblwr_encrypt_recover mysqltest: At line 89: Query 'CHECK TABLE t1' failed. ERROR 2013 (HY000): Lost connection to MySQL server during query The result from queries just before the failure was: # Find the on-disk page type of the given page. SET @cmd = CONCAT('find_ondisk_page_type ', @space_id, ' ', @page_no); SET SESSION innodb_interpreter = @cmd; SELECT @@session.innodb_interpreter_output INTO @page_type; SELECT @page_type; @page_type FIL_PAGE_ENCRYPTED SET SESSION innodb_interpreter = 'find_tablespace_file_name test/t1'; SELECT @@session.innodb_interpreter_output INTO @space_file_name; SET SESSION innodb_interpreter = 'find_tablespace_physical_page_size test/t1'; SELECT @@session.innodb_interpreter_output INTO @space_page_size; SET SESSION innodb_interpreter = 'destroy'; # Kill the server # Corrupt the root page of table t1 in the user tablespace. SET SESSION innodb_interpreter = 'init'; SET SESSION innodb_interpreter = 'print_dblwr_has_encrypted_pages'; SET SESSION innodb_interpreter = 'destroy'; Pattern "Double write file has encrypted pages" found Pattern "\[Note\] \[MY-\d+\] \[InnoDB\] Recovered page \[page id: space=\d+, page number=\d+\] from the doublewrite buffer" not found CHECK TABLE t1; safe_process[16476]: Child process: 16477, exit: 1 . . 2024-07-08T16:29:54.623805Z 8 [ERROR] [MY-013183] [InnoDB] Assertion failure: buf0buf.cc:4064:ib::fatal triggered thread 0x171293000 InnoDB: We intentionally generate a memory trap. InnoDB: Submit a detailed bug report to http://bugs.mysql.com. InnoDB: If you get repeated assertion failures or crashes, even InnoDB: immediately after the mysqld startup, there may be InnoDB: corruption in the InnoDB tablespace. Please refer to InnoDB: http://dev.mysql.com/doc/refman/8.4/en/forcing-innodb-recovery.html InnoDB: about forcing recovery. 2024-07-08T16:29:54Z UTC - mysqld got signal 6 ; Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware. Thread pointer: 0x159407100 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 171292e20 thread_stack 0x100000 0 mysqld 0x0000000105d39af8 my_print_stacktrace(unsigned char const*, unsigned long) + 236 1 mysqld 0x0000000102eb91b8 print_fatal_signal(int, __siginfo*) + 1252 2 mysqld 0x0000000102eb9ad0 my_server_abort() + 380 3 mysqld 0x0000000105d1a880 my_abort() + 20 4 mysqld 0x00000001074f4540 ut_dbg_assertion_failed(char const*, char const*, unsigned long long) + 1368 5 mysqld 0x000000010751d628 ib::fatal::~fatal() + 732 6 mysqld 0x000000010751d77c ib::fatal::~fatal() + 40 7 mysqld 0x00000001060bcff4 Buf_fetch<Buf_fetch_normal>::read_page() + 1092 8 mysqld 0x00000001060bbf54 Buf_fetch_normal::get(buf_block_t*&) + 612 9 mysqld 0x00000001060bf708 Buf_fetch<Buf_fetch_normal>::single_page() + 408 10 mysqld 0x00000001060bef98 buf_page_get_gen(page_id_t const&, page_size_t const&, unsigned long, buf_block_t*, Page_fetch, ut::Location, mtr_t*, bool) + 1336 11 mysqld 0x0000000105ffdc18 btr_block_get_func(page_id_t const&, page_size_t const&, unsigned long, ut::Location, dict_index_t const*, mtr_t*) + 56 12 mysqld 0x0000000105fd95ec btr_root_block_get(dict_index_t const*, unsigned long, mtr_t*) + 344 13 mysqld 0x0000000105fda1b0 btr_root_get(dict_index_t const*, mtr_t*) + 20 14 mysqld 0x0000000105ff62b8 btr_validate_index(dict_index_t*, trx_t const*, bool) + 676 15 mysqld 0x00000001069fa0a8 ha_innobase::check(THD*, HA_CHECK_OPT*) + 3548 16 mysqld 0x00000001020616f8 mysql_admin_table(THD*, Table_ref*, HA_CHECK_OPT*, char const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, Table_ref*, HA_CHECK_OPT*), int (handler::*)(THD*, HA_CHECK_OPT*), int, Alter_info*, bool) + 12788 17 mysqld 0x000000010206f5e0 Sql_cmd_check_table::execute(THD*) + 1112 18 mysqld 0x0000000102501298 mysql_execute_command(THD*, bool) + 16844 19 mysqld 0x00000001024f4c3c dispatch_sql_command(THD*, Parser_state*) + 9504 20 mysqld 0x00000001024e2584 dispatch_command(THD*, COM_DATA const*, enum_server_command) + 30812 21 mysqld 0x00000001024ece9c do_command(THD*) + 5040 22 mysqld 0x0000000102e336ec handle_connection(void*) + 1132 23 mysqld 0x0000000107864d44 pfs_spawn_thread(void*) + 548 24 libsystem_pthread.dylib 0x000000019d956f94 _pthread_start + 136 25 libsystem_pthread.dylib 0x000000019d951d34 thread_start + 8 Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (13799ac10): CHECK TABLE t1 Connection ID (thread ID): 8 Status: NOT_KILLED The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash. Writing a core file safe_process[16492]: Child process: 16493, killed by signal: 6 ----------SERVER LOG END-------------
[17 Oct 7:41]
Laurynas Biveinis
Same on 8.4.3
[17 Oct 12:03]
Laurynas Biveinis
Same on 9.1.0
[31 Oct 0:05]
Philip Olson
Posted by developer: This is fixed in the upcoming MySQL versions (8.0.41, 8.4.4, 9.2.0), thank you for the bug report. Release notes are not added for tests (which is the only change here) so status->closed.