summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2018-09-25 16:53:33 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2018-09-25 16:58:11 +0530
commit05415b616037b1a0844137500af9c73433ed2a5d (patch)
treebd8fa81e2c7f814dd00d622f4402663da5d10737
parent2d3013e6056a05775cca3601b10473eeab44f88c (diff)
downloadmariadb-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.
-rw-r--r--mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age.result6
-rw-r--r--mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test2
-rw-r--r--storage/innobase/handler/i_s.cc53
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);
}
/*******************************************************************//**