summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@skysql.com>2014-11-27 12:33:27 +0200
committerJan Lindström <jan.lindstrom@skysql.com>2014-11-27 12:33:27 +0200
commit7c0bf419da0a59590692e6079ad9e8c8a0c90b60 (patch)
treedc372e21dc93ed32397e9b481e83c37ac14ce898
parent5b7500ccb0e788eb1a56bb8abaf0114dacae3fed (diff)
downloadmariadb-git-bb-10.1-encryption.tar.gz
Fixed a bug on status variables and added basic tests for all newbb-10.1-encryption
configuration variables.
-rw-r--r--mysql-test/suite/innodb/r/innodb-page_encryption.result27
-rw-r--r--mysql-test/suite/innodb/r/innodb-page_encryption_compression.result86
-rw-r--r--mysql-test/suite/innodb/t/innodb-page_encryption.test14
-rw-r--r--mysql-test/suite/innodb/t/innodb-page_encryption_compression.test37
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_data_encryption_filekey_basic.result9
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_data_encryption_providername_basic.result9
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_data_encryption_providertype_basic.result11
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_data_encryption_providerurl_basic.result9
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_data_encryption_filekey_basic.test13
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_data_encryption_providername_basic.test13
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_data_encryption_providertype_basic.test15
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_data_encryption_providerurl_basic.test13
-rw-r--r--storage/xtradb/handler/ha_innodb.cc107
-rw-r--r--storage/xtradb/srv/srv0mon.cc15
14 files changed, 317 insertions, 61 deletions
diff --git a/mysql-test/suite/innodb/r/innodb-page_encryption.result b/mysql-test/suite/innodb/r/innodb-page_encryption.result
index 8a8bec34691..79902d0abe8 100644
--- a/mysql-test/suite/innodb/r/innodb-page_encryption.result
+++ b/mysql-test/suite/innodb/r/innodb-page_encryption.result
@@ -63,6 +63,15 @@ count(*)
select count(*) from innodb_redundant where c1 < 1500000;
count(*)
5000
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value >= 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value >= 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
update innodb_compact set c1 = c1 + 1;
@@ -81,6 +90,15 @@ count(*)
select count(*) from innodb_redundant where c1 < 1500000;
count(*)
5000
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value >= 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value >= 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT;
show create table innodb_compact;
Table Create Table
@@ -151,6 +169,15 @@ count(*)
select count(*) from innodb_redundant where c1 < 1500000;
count(*)
5000
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
drop procedure innodb_insert_proc;
drop table innodb_normal;
drop table innodb_compact;
diff --git a/mysql-test/suite/innodb/r/innodb-page_encryption_compression.result b/mysql-test/suite/innodb/r/innodb-page_encryption_compression.result
index 04e1175eeaa..a9494795814 100644
--- a/mysql-test/suite/innodb/r/innodb-page_encryption_compression.result
+++ b/mysql-test/suite/innodb/r/innodb-page_encryption_compression.result
@@ -1,9 +1,17 @@
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
set global innodb_compression_algorithm = 1;
-create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
+create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb page_compressed=1;
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact page_encryption=1 page_encryption_key=1 page_compressed=1;
-create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_encryption=1 page_encryption_key=2 page_compressed=1;
+create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_encryption=1 page_encryption_key=2 page_compressed=1;
+show warnings;
+Level Code Message
+show create table innodb_normal;
+Table Create Table
+innodb_normal CREATE TABLE `innodb_normal` (
+ `c1` bigint(20) NOT NULL,
+ `b` char(200) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1
show create table innodb_compact;
Table Create Table
innodb_compact CREATE TABLE `innodb_compact` (
@@ -32,26 +40,71 @@ commit;
set autocommit=1;
insert into innodb_compact select * from innodb_normal;
insert into innodb_dynamic select * from innodb_normal;
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
+count(*)
+5000
select count(*) from innodb_compact where c1 < 1500000;
count(*)
5000
select count(*) from innodb_dynamic where c1 < 1500000;
count(*)
5000
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value >= 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value >= 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+variable_value >= 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+variable_value >= 0
+1
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
-set global innodb_compression_algorithm = 0;
+set global innodb_compression_algorithm = 1;
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
+count(*)
+5000
select count(*) from innodb_compact where c1 < 1500000;
count(*)
5000
select count(*) from innodb_dynamic where c1 < 1500000;
count(*)
5000
-alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT page_compressed=DEFAULT ;
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value >= 0
+1
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value >= 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
+SELECT variable_value > 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+variable_value > 0
+0
+SELECT variable_value > 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+variable_value > 0
+1
+alter table innodb_normal engine=innodb page_compressed=DEFAULT;
+show create table innodb_normal;
+Table Create Table
+innodb_normal CREATE TABLE `innodb_normal` (
+ `c1` bigint(20) NOT NULL,
+ `b` char(200) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT page_compressed=DEFAULT;
show create table innodb_compact;
Table Create Table
innodb_compact CREATE TABLE `innodb_compact` (
@@ -67,6 +120,12 @@ innodb_dynamic CREATE TABLE `innodb_dynamic` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
+show create table innodb_normal;
+Table Create Table
+innodb_normal CREATE TABLE `innodb_normal` (
+ `c1` bigint(20) NOT NULL,
+ `b` char(200) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
show create table innodb_compact;
Table Create Table
innodb_compact CREATE TABLE `innodb_compact` (
@@ -79,14 +138,33 @@ innodb_dynamic CREATE TABLE `innodb_dynamic` (
`c1` bigint(20) NOT NULL,
`b` char(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
+count(*)
+5000
select count(*) from innodb_compact where c1 < 1500000;
count(*)
5000
select count(*) from innodb_dynamic where c1 < 1500000;
count(*)
5000
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+variable_value = 0
+1
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+variable_value = 0
+1
drop procedure innodb_insert_proc;
drop table innodb_normal;
drop table innodb_compact;
diff --git a/mysql-test/suite/innodb/t/innodb-page_encryption.test b/mysql-test/suite/innodb/t/innodb-page_encryption.test
index 4159f82af62..f2866e35dca 100644
--- a/mysql-test/suite/innodb/t/innodb-page_encryption.test
+++ b/mysql-test/suite/innodb/t/innodb-page_encryption.test
@@ -51,6 +51,11 @@ select count(*) from innodb_compressed where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
select count(*) from innodb_redundant where c1 < 1500000;
+# Note there that these variables are updated only when real I/O is done, thus they are not reliable
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+
--source include/restart_mysqld.inc
SET GLOBAL innodb_file_format = `Barracuda`;
@@ -65,6 +70,10 @@ select count(*) from innodb_compressed where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
select count(*) from innodb_redundant where c1 < 1500000;
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+
alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT;
show create table innodb_compact;
alter table innodb_compressed engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT;
@@ -93,6 +102,11 @@ select count(*) from innodb_compressed where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
select count(*) from innodb_redundant where c1 < 1500000;
+# After alter+restart these should be 0
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+
drop procedure innodb_insert_proc;
drop table innodb_normal;
drop table innodb_compact;
diff --git a/mysql-test/suite/innodb/t/innodb-page_encryption_compression.test b/mysql-test/suite/innodb/t/innodb-page_encryption_compression.test
index 967654066c6..b32c92c613c 100644
--- a/mysql-test/suite/innodb/t/innodb-page_encryption_compression.test
+++ b/mysql-test/suite/innodb/t/innodb-page_encryption_compression.test
@@ -11,10 +11,12 @@ SET GLOBAL innodb_file_per_table = ON;
# zlib
set global innodb_compression_algorithm = 1;
-create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
+create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb page_compressed=1;
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact page_encryption=1 page_encryption_key=1 page_compressed=1;
-create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_encryption=1 page_encryption_key=2 page_compressed=1;
+create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic page_encryption=1 page_encryption_key=2 page_compressed=1;
+show warnings;
+show create table innodb_normal;
show create table innodb_compact;
show create table innodb_dynamic;
@@ -39,24 +41,42 @@ set autocommit=1;
insert into innodb_compact select * from innodb_normal;
insert into innodb_dynamic select * from innodb_normal;
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+
--source include/restart_mysqld.inc
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
# zlib
-set global innodb_compression_algorithm = 0;
+set global innodb_compression_algorithm = 1;
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
-alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT page_compressed=DEFAULT ;
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value >= 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+SELECT variable_value > 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+SELECT variable_value > 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+
+alter table innodb_normal engine=innodb page_compressed=DEFAULT;
+show create table innodb_normal;
+alter table innodb_compact engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT page_compressed=DEFAULT;
show create table innodb_compact;
alter table innodb_dynamic engine=innodb page_encryption=DEFAULT page_encryption_key=DEFAULT page_compressed=DEFAULT;
show create table innodb_dynamic;
@@ -66,14 +86,23 @@ show create table innodb_dynamic;
SET GLOBAL innodb_file_format = `Barracuda`;
SET GLOBAL innodb_file_per_table = ON;
+show create table innodb_normal;
show create table innodb_compact;
show create table innodb_dynamic;
+update innodb_normal set c1 = c1 + 1;
update innodb_compact set c1 = c1 + 1;
update innodb_dynamic set c1 = c1 + 1;
+select count(*) from innodb_normal;
select count(*) from innodb_compact where c1 < 1500000;
select count(*) from innodb_dynamic where c1 < 1500000;
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decrypted';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_encryption_error';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_compressed';
+SELECT variable_value = 0 FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_num_pages_page_decompressed';
+
drop procedure innodb_insert_proc;
drop table innodb_normal;
drop table innodb_compact;
diff --git a/mysql-test/suite/sys_vars/r/innodb_data_encryption_filekey_basic.result b/mysql-test/suite/sys_vars/r/innodb_data_encryption_filekey_basic.result
new file mode 100644
index 00000000000..f7660620a2f
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_data_encryption_filekey_basic.result
@@ -0,0 +1,9 @@
+SELECT @start_data_encryption_filekey;
+@start_data_encryption_filekey
+NULL
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_filekey);
+COUNT(@@GLOBAL.innodb_data_encryption_filekey)
+0
+1 Expected
+SET @@GLOBAL.innodb_data_encryption_filekey='secret';
+ERROR HY000: Variable 'innodb_data_encryption_filekey' is a read only variable
diff --git a/mysql-test/suite/sys_vars/r/innodb_data_encryption_providername_basic.result b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providername_basic.result
new file mode 100644
index 00000000000..12b4407290b
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providername_basic.result
@@ -0,0 +1,9 @@
+SELECT @start_data_encryption_providername;
+@start_data_encryption_providername
+NULL
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providername);
+COUNT(@@GLOBAL.innodb_data_encryption_providername)
+0
+1 Expected
+SET @@GLOBAL.innodb_data_encryption_providername='key.txt';
+ERROR HY000: Variable 'innodb_data_encryption_providername' is a read only variable
diff --git a/mysql-test/suite/sys_vars/r/innodb_data_encryption_providertype_basic.result b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providertype_basic.result
new file mode 100644
index 00000000000..8a45857496e
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providertype_basic.result
@@ -0,0 +1,11 @@
+SELECT @start_data_encryption_providertype;
+@start_data_encryption_providertype
+NULL
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providertype);
+COUNT(@@GLOBAL.innodb_data_encryption_providertype)
+1
+1 Expected
+SET @@GLOBAL.innodb_data_encryption_providertype=1;
+ERROR HY000: Variable 'innodb_data_encryption_providertype' is a read only variable
+SET @@GLOBAL.innodb_data_encryption_providertype=k;
+ERROR HY000: Variable 'innodb_data_encryption_providertype' is a read only variable
diff --git a/mysql-test/suite/sys_vars/r/innodb_data_encryption_providerurl_basic.result b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providerurl_basic.result
new file mode 100644
index 00000000000..2a0fa74b347
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_data_encryption_providerurl_basic.result
@@ -0,0 +1,9 @@
+SELECT @start_data_encryption_providerurl;
+@start_data_encryption_providerurl
+NULL
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providerurl);
+COUNT(@@GLOBAL.innodb_data_encryption_providerurl)
+0
+1 Expected
+SET @@GLOBAL.innodb_data_encryption_providerurl='http://www.google.com';
+ERROR HY000: Variable 'innodb_data_encryption_providerurl' is a read only variable
diff --git a/mysql-test/suite/sys_vars/t/innodb_data_encryption_filekey_basic.test b/mysql-test/suite/sys_vars/t/innodb_data_encryption_filekey_basic.test
new file mode 100644
index 00000000000..569a948a2c7
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_data_encryption_filekey_basic.test
@@ -0,0 +1,13 @@
+--source include/have_xtradb.inc
+
+SELECT @start_data_encryption_filekey;
+
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_filekey);
+--echo 1 Expected
+
+# This variable is read only variable
+--error 1238
+SET @@GLOBAL.innodb_data_encryption_filekey='secret';
+
+
+
diff --git a/mysql-test/suite/sys_vars/t/innodb_data_encryption_providername_basic.test b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providername_basic.test
new file mode 100644
index 00000000000..688ceadc693
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providername_basic.test
@@ -0,0 +1,13 @@
+--source include/have_xtradb.inc
+
+SELECT @start_data_encryption_providername;
+
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providername);
+--echo 1 Expected
+
+# This variable is read only variable
+--error 1238
+SET @@GLOBAL.innodb_data_encryption_providername='key.txt';
+
+
+
diff --git a/mysql-test/suite/sys_vars/t/innodb_data_encryption_providertype_basic.test b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providertype_basic.test
new file mode 100644
index 00000000000..1d6c6249f05
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providertype_basic.test
@@ -0,0 +1,15 @@
+--source include/have_xtradb.inc
+
+SELECT @start_data_encryption_providertype;
+
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providertype);
+--echo 1 Expected
+
+# This variable is read only variable
+--error 1238
+SET @@GLOBAL.innodb_data_encryption_providertype=1;
+
+# This variable is read only variable
+--error 1238
+SET @@GLOBAL.innodb_data_encryption_providertype=k;
+
diff --git a/mysql-test/suite/sys_vars/t/innodb_data_encryption_providerurl_basic.test b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providerurl_basic.test
new file mode 100644
index 00000000000..c476b2180a9
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_data_encryption_providerurl_basic.test
@@ -0,0 +1,13 @@
+--source include/have_xtradb.inc
+
+SELECT @start_data_encryption_providerurl;
+
+SELECT COUNT(@@GLOBAL.innodb_data_encryption_providerurl);
+--echo 1 Expected
+
+# This variable is read only variable
+--error 1238
+SET @@GLOBAL.innodb_data_encryption_providerurl='http://www.google.com';
+
+
+
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index 2352e287573..0d6a3a840cb 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -3453,11 +3453,10 @@ innobase_init(
ut_a(DATA_MYSQL_TRUE_VARCHAR == (ulint)MYSQL_TYPE_VARCHAR);
-
KeySingleton::getInstance(
innobase_data_encryption_providername, innobase_data_encryption_providerurl,
innobase_data_encryption_providertype, innobase_data_encryption_filekey);
-
+
#ifndef DBUG_OFF
static const char test_filename[] = "-@";
char test_tablename[sizeof test_filename
@@ -11581,7 +11580,7 @@ innobase_table_flags(
modified by another thread while the table is being created. */
const ulint default_compression_level = page_zip_level;
- const ulint default_encryption_key = 1;
+ const ulint default_encryption_key = 1;
*flags = 0;
*flags2 = 0;
@@ -11781,11 +11780,12 @@ index_bad:
options->page_compressed,
(ulint)options->page_compression_level == ULINT_UNDEFINED ?
default_compression_level : options->page_compression_level,
- options->atomic_writes,
- options->page_encryption,
- (ulint)options->page_encryption_key == ULINT_UNDEFINED ?
- default_encryption_key : options->page_encryption_key);
- if (create_info->options & HA_LEX_CREATE_TMP_TABLE) {
+ options->atomic_writes,
+ options->page_encryption,
+ (ulint)options->page_encryption_key == ULINT_UNDEFINED ?
+ default_encryption_key : options->page_encryption_key);
+
+ if (create_info->options & HA_LEX_CREATE_TMP_TABLE) {
*flags2 |= DICT_TF2_TEMPORARY;
}
@@ -11819,24 +11819,26 @@ ha_innobase::check_table_options(
enum row_type row_format = table->s->row_type;;
ha_table_option_struct *options= table->s->option_struct;
atomic_writes_t awrites = (atomic_writes_t)options->atomic_writes;
- if (options->page_encryption) {
- if (!use_tablespace) {
- push_warning(
- thd, Sql_condition::WARN_LEVEL_WARN,
- HA_WRONG_CREATE_OPTION,
- "InnoDB: PAGE_ENCRYPTION requires"
- " innodb_file_per_table.");
- return "PAGE_ENCRYPTION";
- }
- if (!KeySingleton::getInstance().isAvailable()) {
- push_warning(
- thd, Sql_condition::WARN_LEVEL_WARN,
- HA_WRONG_CREATE_OPTION,
- "InnoDB: PAGE_ENCRYPTION needs a key provider"
- );
- return "PAGE_ENCRYPTION";
- }
- }
+
+ if (options->page_encryption) {
+ if (!use_tablespace) {
+ push_warning(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_WRONG_CREATE_OPTION,
+ "InnoDB: PAGE_ENCRYPTION requires"
+ " innodb_file_per_table.");
+ return "PAGE_ENCRYPTION";
+ }
+
+ if (!KeySingleton::getInstance().isAvailable()) {
+ push_warning(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_WRONG_CREATE_OPTION,
+ "InnoDB: PAGE_ENCRYPTION needs a key provider"
+ );
+ return "PAGE_ENCRYPTION";
+ }
+ }
/* Check page compression requirements */
if (options->page_compressed) {
@@ -11910,33 +11912,32 @@ ha_innobase::check_table_options(
}
}
- if ((ulint)options->page_encryption_key != ULINT_UNDEFINED) {
- if (options->page_encryption == false) {
+ if ((ulint)options->page_encryption_key != ULINT_UNDEFINED) {
+ if (options->page_encryption == false) {
/* ignore this to allow alter table without changing page_encryption_key ...*/
- }
-
- if (options->page_encryption_key < 1 || options->page_encryption_key > 255) {
- push_warning_printf(
- thd, Sql_condition::WARN_LEVEL_WARN,
- HA_WRONG_CREATE_OPTION,
- "InnoDB: invalid PAGE_ENCRYPTION_KEY = %lu."
- " Valid values are [1..255]",
- options->page_encryption_key);
- return "PAGE_ENCRYPTION_KEY";
- }
+ }
- if (!KeySingleton::getInstance().isAvailable() || KeySingleton::getInstance().getKeys(options->page_encryption_key)==NULL) {
- push_warning_printf(
- thd, Sql_condition::WARN_LEVEL_WARN,
- HA_WRONG_CREATE_OPTION,
- "InnoDB: PAGE_ENCRYPTION_KEY encryption key %lu not available",
- options->page_encryption_key
- );
- return "PAGE_ENCRYPTION_KEY";
+ if (options->page_encryption_key < 1 || options->page_encryption_key > 255) {
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_WRONG_CREATE_OPTION,
+ "InnoDB: invalid PAGE_ENCRYPTION_KEY = %lu."
+ " Valid values are [1..255]",
+ options->page_encryption_key);
+ return "PAGE_ENCRYPTION_KEY";
+ }
- }
- }
+ if (!KeySingleton::getInstance().isAvailable() || KeySingleton::getInstance().getKeys(options->page_encryption_key)==NULL) {
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_WARN,
+ HA_WRONG_CREATE_OPTION,
+ "InnoDB: PAGE_ENCRYPTION_KEY encryption key %lu not available",
+ options->page_encryption_key
+ );
+ return "PAGE_ENCRYPTION_KEY";
+ }
+ }
/* Check atomic writes requirements */
if (awrites == ATOMIC_WRITES_ON ||
@@ -20242,10 +20243,10 @@ static MYSQL_SYSVAR_STR(data_encryption_providerurl, innobase_data_encryption_pr
"Path or URL for keyfile or keyserver.",
NULL, NULL, NULL);
- static MYSQL_SYSVAR_STR(data_encryption_filekey, innobase_data_encryption_filekey,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
- "Key to encrypt / decrypt the keyfile.",
- NULL, NULL, NULL);
+static MYSQL_SYSVAR_STR(data_encryption_filekey, innobase_data_encryption_filekey,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ "Key to encrypt / decrypt the keyfile.",
+ NULL, NULL, NULL);
static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(log_block_size),
diff --git a/storage/xtradb/srv/srv0mon.cc b/storage/xtradb/srv/srv0mon.cc
index f62c6d2fcb0..5415cb5c972 100644
--- a/storage/xtradb/srv/srv0mon.cc
+++ b/storage/xtradb/srv/srv0mon.cc
@@ -985,6 +985,21 @@ static monitor_info_t innodb_counter_info[] =
MONITOR_NONE,
MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_PAGE_COMPRESSION_ERROR},
+ {"compress_pages_page_encrypted", "compression",
+ "Number of pages encrypted by page encryption",
+ MONITOR_NONE,
+ MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_PAGE_ENCRYPTED},
+
+ {"compress_pages_page_decrypted", "compression",
+ "Number of pages decrypted by page encryption",
+ MONITOR_NONE,
+ MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_PAGE_DECRYPTED},
+
+ {"compress_pages_page_encryption_error", "compression",
+ "Number of page encryption errors ",
+ MONITOR_NONE,
+ MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_PAGE_ENCRYPTION_ERROR},
+
/* ========== Counters for Index ========== */
{"module_index", "index", "Index Manager",
MONITOR_MODULE,