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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user