mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
MDEV-11835: InnoDB: Failing assertion: free_slot != NULL on
restarting server with encryption and read-only buf0buf.cc: Temporary slots used in encryption was calculated by read_threads * write_threads. However, in read-only mode write_threads is zero. Correct way is to calculate (read_threads + write_threads) * max pending IO requests.
This commit is contained in:
parent
a14638581b
commit
dc557ca817
5 changed files with 42 additions and 2 deletions
3
mysql-test/suite/encryption/r/innodb-read-only.result
Normal file
3
mysql-test/suite/encryption/r/innodb-read-only.result
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
# Success!
|
||||
# All done
|
3
mysql-test/suite/encryption/t/innodb-read-only.opt
Normal file
3
mysql-test/suite/encryption/t/innodb-read-only.opt
Normal file
|
@ -0,0 +1,3 @@
|
|||
--innodb-encrypt-tables=1
|
||||
--innodb-encryption-threads=4
|
||||
--innodb-tablespaces-encryption
|
34
mysql-test/suite/encryption/t/innodb-read-only.test
Normal file
34
mysql-test/suite/encryption/t/innodb-read-only.test
Normal file
|
@ -0,0 +1,34 @@
|
|||
--source suite/encryption/include/have_file_key_management_plugin.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
let $cnt=600;
|
||||
while ($cnt)
|
||||
{
|
||||
let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`;
|
||||
if ($success)
|
||||
{
|
||||
let $cnt=0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 1;
|
||||
dec $cnt;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION;
|
||||
SHOW STATUS LIKE 'innodb_encryption%';
|
||||
-- die Timeout waiting for encryption threads
|
||||
}
|
||||
--echo # Success!
|
||||
|
||||
#
|
||||
# MDEV-11835: InnoDB: Failing assertion: free_slot != NULL on
|
||||
# restarting server with encryption and read-only
|
||||
#
|
||||
--let $restart_parameters= --innodb-read-only=1 --innodb-encrypt-tables=1
|
||||
--source include/restart_mysqld.inc
|
||||
--echo # All done
|
|
@ -1508,7 +1508,7 @@ buf_pool_init_instance(
|
|||
|
||||
/* Initialize the temporal memory array and slots */
|
||||
buf_pool->tmp_arr = (buf_tmp_array_t *)mem_zalloc(sizeof(buf_tmp_array_t));
|
||||
ulint n_slots = srv_n_read_io_threads * srv_n_write_io_threads * (8 * OS_AIO_N_PENDING_IOS_PER_THREAD);
|
||||
ulint n_slots = (srv_n_read_io_threads + srv_n_write_io_threads) * (8 * OS_AIO_N_PENDING_IOS_PER_THREAD);
|
||||
buf_pool->tmp_arr->n_slots = n_slots;
|
||||
buf_pool->tmp_arr->slots = (buf_tmp_buffer_t*)mem_zalloc(sizeof(buf_tmp_buffer_t) * n_slots);
|
||||
|
||||
|
|
|
@ -1571,7 +1571,7 @@ buf_pool_init_instance(
|
|||
|
||||
/* Initialize the temporal memory array and slots */
|
||||
buf_pool->tmp_arr = (buf_tmp_array_t *)mem_zalloc(sizeof(buf_tmp_array_t));
|
||||
ulint n_slots = srv_n_read_io_threads * srv_n_write_io_threads * (8 * OS_AIO_N_PENDING_IOS_PER_THREAD);
|
||||
ulint n_slots = (srv_n_read_io_threads + srv_n_write_io_threads) * (8 * OS_AIO_N_PENDING_IOS_PER_THREAD);
|
||||
buf_pool->tmp_arr->n_slots = n_slots;
|
||||
buf_pool->tmp_arr->slots = (buf_tmp_buffer_t*)mem_zalloc(sizeof(buf_tmp_buffer_t) * n_slots);
|
||||
|
||||
|
|
Loading…
Reference in a new issue