diff options
author | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2018-09-25 16:53:33 +0530 |
---|---|---|
committer | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2018-09-25 16:58:11 +0530 |
commit | 05415b616037b1a0844137500af9c73433ed2a5d (patch) | |
tree | bd8fa81e2c7f814dd00d622f4402663da5d10737 | |
parent | 2d3013e6056a05775cca3601b10473eeab44f88c (diff) | |
download | mariadb-git-bb-10.2-MDEV-14398.tar.gz |
MDEV-14398 When innodb_encryption_rotate_key_age=0 is set,bb-10.2-MDEV-14398
server won't encrypt tablespaces
- For unloaded tablespace, all columns except space id, name
in innodb_tablespaces_encryption table will show NULL value.
3 files changed, 37 insertions, 24 deletions
diff --git a/mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age.result b/mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age.result index 946dcb24455..036229a2700 100644 --- a/mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age.result +++ b/mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age.result @@ -16,14 +16,10 @@ test/t1 test/t2 # Restart the server with innodb_encryption_rotate_key_age= 0 create table t3 (f1 int not null)engine=innodb; -SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION is NULL; NAME -innodb_system -mysql/innodb_index_stats -mysql/innodb_table_stats test/t1 test/t2 -test/t3 # Wait until encryption threads have encrypted all tablespaces SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; NAME diff --git a/mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test b/mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test index c1c390d9190..2b0cda8f503 100644 --- a/mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test +++ b/mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test @@ -32,7 +32,7 @@ let $restart_parameters= --innodb_encryption_threads=1 --innodb_encryption_rotat create table t3 (f1 int not null)engine=innodb; -SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION is NULL; --echo # Wait until encryption threads have encrypted all tablespaces diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index 064e0e88113..3b09a4dccdf 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -8484,7 +8484,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8493,7 +8493,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8502,7 +8502,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8511,7 +8511,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8538,7 +8538,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8547,7 +8547,7 @@ static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = STRUCT_FLD(field_length, 1), STRUCT_FLD(field_type, MYSQL_TYPE_LONG), STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), STRUCT_FLD(old_name, ""), STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, @@ -8569,31 +8569,48 @@ i_s_dict_fill_tablespaces_encryption( TABLE* table_to_fill) { Field** fields; - struct fil_space_crypt_status_t status; DBUG_ENTER("i_s_dict_fill_tablespaces_encryption"); fields = table_to_fill->field; - fil_space_crypt_get_status(space, &status); - - /* If tablespace id does not match, we did not find - encryption information for this tablespace. */ - if (!space->crypt_data || space->id != status.space) { - goto skip; - } - OK(fields[TABLESPACES_ENCRYPTION_SPACE]->store(space->id, true)); OK(field_store_string(fields[TABLESPACES_ENCRYPTION_NAME], space->name)); + if (space->size == 0 && space->crypt_data == NULL) { + fields[TABLESPACES_ENCRYPTION_ENCRYPTION_SCHEME]->set_null(); + fields[TABLESPACES_ENCRYPTION_MIN_KEY_VERSION]->set_null(); + fields[TABLESPACES_ENCRYPTION_KEYSERVER_REQUESTS]->set_null(); + fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_VERSION]->set_null(); + fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_ID]->set_null(); + fields[TABLESPACES_ENCRYPTION_ROTATING_OR_FLUSHING]->set_null(); + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_PAGE_NUMBER] + ->set_null(); + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_MAX_PAGE_NUMBER] + ->set_null(); + goto fill; + } + + struct fil_space_crypt_status_t status; + + fil_space_crypt_get_status(space, &status); + + fields[TABLESPACES_ENCRYPTION_ENCRYPTION_SCHEME]->set_notnull(); + fields[TABLESPACES_ENCRYPTION_MIN_KEY_VERSION]->set_notnull(); + fields[TABLESPACES_ENCRYPTION_KEYSERVER_REQUESTS]->set_notnull(); + fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_VERSION]->set_notnull(); + fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_ID]->set_notnull(); + fields[TABLESPACES_ENCRYPTION_ROTATING_OR_FLUSHING]->set_notnull(); + + OK(fields[TABLESPACES_ENCRYPTION_MIN_KEY_VERSION]->store( + status.min_key_version, true)); + OK(fields[TABLESPACES_ENCRYPTION_ENCRYPTION_SCHEME]->store( status.scheme, true)); OK(fields[TABLESPACES_ENCRYPTION_KEYSERVER_REQUESTS]->store( status.keyserver_requests, true)); - OK(fields[TABLESPACES_ENCRYPTION_MIN_KEY_VERSION]->store( - status.min_key_version, true)); OK(fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_VERSION]->store( status.current_key_version, true)); OK(fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_ID]->store( @@ -8615,9 +8632,9 @@ i_s_dict_fill_tablespaces_encryption( ->set_null(); } +fill: OK(schema_table_store_record(thd, table_to_fill)); -skip: DBUG_RETURN(0); } /*******************************************************************//** |