1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-08 00:28:29 +03:00

MDEV-37299: Fix crash when server read-only and encrption ON

Modified srv_start to call fil_crypt_threads_init() only
when srv_read_only_mode is not set.

Modified encryption.innodb-read-only to capture number of
encryption threads created for both scenarios when
server is not read only as well as when server is read only.
This commit is contained in:
mariadb-satishkumar
2025-09-17 10:26:58 +00:00
parent 62b21714d0
commit 1454d28cf8
3 changed files with 29 additions and 0 deletions

View File

@@ -1,4 +1,16 @@
# Wait max 10 min for key encryption threads to encrypt all spaces # Wait max 10 min for key encryption threads to encrypt all spaces
# Success! # Success!
SET GLOBAL innodb_encryption_threads=4;
SELECT COUNT(*) AS encrypt_threads_running
FROM performance_schema.threads
WHERE NAME LIKE '%encrypt%';
encrypt_threads_running
4
# restart: --innodb-read-only=1 --innodb-encrypt-tables=1 # restart: --innodb-read-only=1 --innodb-encrypt-tables=1
SET GLOBAL innodb_encryption_threads=4;
SELECT COUNT(*) AS encrypt_threads_running
FROM performance_schema.threads
WHERE NAME LIKE '%encrypt%';
encrypt_threads_running
0
# All done # All done

View File

@@ -25,10 +25,22 @@ if (!$success)
} }
--echo # Success! --echo # Success!
# Server in normal mode
SET GLOBAL innodb_encryption_threads=4;
SELECT COUNT(*) AS encrypt_threads_running
FROM performance_schema.threads
WHERE NAME LIKE '%encrypt%';
# #
# MDEV-11835: InnoDB: Failing assertion: free_slot != NULL on # MDEV-11835: InnoDB: Failing assertion: free_slot != NULL on
# restarting server with encryption and read-only # restarting server with encryption and read-only
# #
--let $restart_parameters= --innodb-read-only=1 --innodb-encrypt-tables=1 --let $restart_parameters= --innodb-read-only=1 --innodb-encrypt-tables=1
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
# Server read-only mode
SET GLOBAL innodb_encryption_threads=4;
SELECT COUNT(*) AS encrypt_threads_running
FROM performance_schema.threads
WHERE NAME LIKE '%encrypt%';
--echo # All done --echo # All done

View File

@@ -2108,6 +2108,9 @@ Adjust thread count for key rotation
@param[in] enw_cnt Number of threads to be used */ @param[in] enw_cnt Number of threads to be used */
void fil_crypt_set_thread_cnt(const uint new_cnt) void fil_crypt_set_thread_cnt(const uint new_cnt)
{ {
if (srv_read_only_mode)
return;
if (!fil_crypt_threads_inited) { if (!fil_crypt_threads_inited) {
if (srv_shutdown_state != SRV_SHUTDOWN_NONE) if (srv_shutdown_state != SRV_SHUTDOWN_NONE)
return; return;
@@ -2261,6 +2264,8 @@ void fil_crypt_set_encrypt_tables(ulong val)
Init threads for key rotation */ Init threads for key rotation */
void fil_crypt_threads_init() void fil_crypt_threads_init()
{ {
ut_ad(!srv_read_only_mode);
if (!fil_crypt_threads_inited) { if (!fil_crypt_threads_inited) {
pthread_cond_init(&fil_crypt_cond, nullptr); pthread_cond_init(&fil_crypt_cond, nullptr);
pthread_cond_init(&fil_crypt_threads_cond, nullptr); pthread_cond_init(&fil_crypt_threads_cond, nullptr);