mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.1 into 10.2
This commit is contained in:
@ -8041,6 +8041,16 @@ end |
|
|||||||
ERROR 0A000: Not allowed to return a result set from a function
|
ERROR 0A000: Not allowed to return a result set from a function
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
# MDEV-11584: GRANT inside an SP does not work well on 2nd execution
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE sp1()
|
||||||
|
GRANT ALL PRIVILEGES ON *.* TO 'foo'@'%' IDENTIFIED BY 'pass';
|
||||||
|
CALL sp1();
|
||||||
|
CALL sp1();
|
||||||
|
drop user 'foo'@'%';
|
||||||
|
drop procedure sp1;
|
||||||
|
#End of 10.1 tests
|
||||||
|
#
|
||||||
# MDEV-11081: CURSOR for query with GROUP BY
|
# MDEV-11081: CURSOR for query with GROUP BY
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (name VARCHAR(10), value INT);
|
CREATE TABLE t1 (name VARCHAR(10), value INT);
|
||||||
@ -8079,12 +8089,3 @@ v_name v_total
|
|||||||
c 1
|
c 1
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
|
||||||
# MDEV-11584: GRANT inside an SP does not work well on 2nd execution
|
|
||||||
#
|
|
||||||
CREATE PROCEDURE sp1()
|
|
||||||
GRANT ALL PRIVILEGES ON *.* TO 'foo'@'%' IDENTIFIED BY 'pass';
|
|
||||||
CALL sp1();
|
|
||||||
CALL sp1();
|
|
||||||
drop user 'foo'@'%';
|
|
||||||
drop procedure sp1;
|
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
call mtr.add_suppression("InnoDB: Table .* tablespace is set as discarded");
|
||||||
|
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||||
|
SET GLOBAL innodb_file_per_table = ON;
|
||||||
|
SET GLOBAL innodb_compression_algorithm = 1;
|
||||||
|
create table t1(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=4;
|
||||||
|
create table t2(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=1;
|
||||||
|
create table t3(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes;
|
||||||
|
create table t4(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes encrypted=yes encryption_key_id=4;
|
||||||
|
create table t5(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb;
|
||||||
|
insert into t1 values (NULL, 'verysecretmessage');
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t2 select * from t1;
|
||||||
|
insert into t3 select * from t1;
|
||||||
|
insert into t4 select * from t1;
|
||||||
|
insert into t5 select * from t1;
|
||||||
|
FLUSH TABLE t1,t2,t3,t4,t5 FOR EXPORT;
|
||||||
|
backup: t1
|
||||||
|
backup: t2
|
||||||
|
backup: t3
|
||||||
|
backup: t4
|
||||||
|
backup: t5
|
||||||
|
t1.cfg
|
||||||
|
t1.frm
|
||||||
|
t1.ibd
|
||||||
|
t2.cfg
|
||||||
|
t2.frm
|
||||||
|
t2.ibd
|
||||||
|
t3.cfg
|
||||||
|
t3.frm
|
||||||
|
t3.ibd
|
||||||
|
t4.cfg
|
||||||
|
t4.frm
|
||||||
|
t4.ibd
|
||||||
|
t5.cfg
|
||||||
|
t5.frm
|
||||||
|
t5.ibd
|
||||||
|
UNLOCK TABLES;
|
||||||
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t3 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t4 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t5 DISCARD TABLESPACE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t3;
|
||||||
|
DROP TABLE t4;
|
||||||
|
DROP TABLE t5;
|
||||||
|
create table t6(a int) engine=innodb;
|
||||||
|
create table t5(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb;
|
||||||
|
create table t3(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes;
|
||||||
|
create table t1(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=4;
|
||||||
|
create table t4(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes encrypted=yes encryption_key_id=4;
|
||||||
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t3 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t4 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t5 DISCARD TABLESPACE;
|
||||||
|
restore: t1 .ibd and .cfg files
|
||||||
|
restore: t2 .ibd and .cfg files
|
||||||
|
restore: t3 .ibd and .cfg files
|
||||||
|
restore: t4 .ibd and .cfg files
|
||||||
|
restore: t5 .ibd and .cfg files
|
||||||
|
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`c1` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`b` char(200) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`c1`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=377 DEFAULT CHARSET=latin1 `encrypted`=yes `encryption_key_id`=4
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
COUNT(*)
|
||||||
|
256
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t2;
|
||||||
|
COUNT(*)
|
||||||
|
256
|
||||||
|
ALTER TABLE t3 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t3;
|
||||||
|
COUNT(*)
|
||||||
|
256
|
||||||
|
ALTER TABLE t4 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t4;
|
||||||
|
COUNT(*)
|
||||||
|
256
|
||||||
|
ALTER TABLE t5 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t5;
|
||||||
|
COUNT(*)
|
||||||
|
256
|
||||||
|
# t1 encrypted expecting NOT FOUND
|
||||||
|
NOT FOUND /verysecretmessage/ in t1.ibd
|
||||||
|
# t2 encrypted expecting NOT FOUND
|
||||||
|
NOT FOUND /verysecretmessage/ in t2.ibd
|
||||||
|
# t3 page compressed expecting NOT FOUND
|
||||||
|
NOT FOUND /verysecretmessage/ in t3.ibd
|
||||||
|
# t4 page compressed and encrypted expecting NOT FOUND
|
||||||
|
NOT FOUND /verysecretmessage/ in t4.ibd
|
||||||
|
# t5 normal expecting FOUND
|
||||||
|
FOUND /verysecretmessage/ in t5.ibd
|
||||||
|
DROP TABLE t1,t2,t3,t4,t5,t6;
|
131
mysql-test/suite/encryption/t/innodb-discard-import-change.test
Normal file
131
mysql-test/suite/encryption/t/innodb-discard-import-change.test
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
-- source include/have_innodb.inc
|
||||||
|
-- source include/have_file_key_management_plugin.inc
|
||||||
|
#
|
||||||
|
# MDEV-11656: 'Data structure corruption' IMPORT TABLESPACE doesn't work for encrypted InnoDB tables if space_id changed
|
||||||
|
#
|
||||||
|
|
||||||
|
call mtr.add_suppression("InnoDB: Table .* tablespace is set as discarded");
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
let $innodb_file_format_orig = `SELECT @@innodb_file_format`;
|
||||||
|
let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`;
|
||||||
|
let $innodb_compression_algo = `SELECT @@innodb_compression_algorithm`;
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||||
|
SET GLOBAL innodb_file_per_table = ON;
|
||||||
|
SET GLOBAL innodb_compression_algorithm = 1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
create table t1(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=4;
|
||||||
|
create table t2(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=1;
|
||||||
|
create table t3(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes;
|
||||||
|
create table t4(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes encrypted=yes encryption_key_id=4;
|
||||||
|
create table t5(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb;
|
||||||
|
|
||||||
|
insert into t1 values (NULL, 'verysecretmessage');
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t1(b) select b from t1;
|
||||||
|
insert into t2 select * from t1;
|
||||||
|
insert into t3 select * from t1;
|
||||||
|
insert into t4 select * from t1;
|
||||||
|
insert into t5 select * from t1;
|
||||||
|
|
||||||
|
let MYSQLD_DATADIR =`SELECT @@datadir`;
|
||||||
|
FLUSH TABLE t1,t2,t3,t4,t5 FOR EXPORT;
|
||||||
|
perl;
|
||||||
|
do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
|
||||||
|
ib_backup_tablespaces("test", "t1","t2","t3","t4","t5");
|
||||||
|
EOF
|
||||||
|
--list_files $MYSQLD_DATADIR/test
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t3 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t4 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t5 DISCARD TABLESPACE;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now intentionally change space_id for t1,t3,t4,t5
|
||||||
|
#
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t3;
|
||||||
|
DROP TABLE t4;
|
||||||
|
DROP TABLE t5;
|
||||||
|
|
||||||
|
create table t6(a int) engine=innodb;
|
||||||
|
create table t5(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb;
|
||||||
|
create table t3(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes;
|
||||||
|
create table t1(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb encrypted=yes encryption_key_id=4;
|
||||||
|
create table t4(c1 bigint not null primary key auto_increment, b char(200)) engine=innodb page_compressed=yes encrypted=yes encryption_key_id=4;
|
||||||
|
|
||||||
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t3 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t4 DISCARD TABLESPACE;
|
||||||
|
ALTER TABLE t5 DISCARD TABLESPACE;
|
||||||
|
|
||||||
|
perl;
|
||||||
|
do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
|
||||||
|
ib_discard_tablespaces("test", "t1","t2","t3","t4","t5");
|
||||||
|
ib_restore_tablespaces("test", "t1","t2","t3","t4","t5");
|
||||||
|
EOF
|
||||||
|
|
||||||
|
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SELECT COUNT(*) FROM t1;
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t2;
|
||||||
|
ALTER TABLE t3 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t3;
|
||||||
|
ALTER TABLE t4 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t4;
|
||||||
|
ALTER TABLE t5 IMPORT TABLESPACE;
|
||||||
|
SELECT COUNT(*) FROM t5;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Verify
|
||||||
|
#
|
||||||
|
--let $MYSQLD_TMPDIR = `SELECT @@tmpdir`
|
||||||
|
--let $MYSQLD_DATADIR = `SELECT @@datadir`
|
||||||
|
--let SEARCH_RANGE = 10000000
|
||||||
|
--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd
|
||||||
|
--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd
|
||||||
|
--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd
|
||||||
|
--let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd
|
||||||
|
--let t5_IBD = $MYSQLD_DATADIR/test/t5.ibd
|
||||||
|
--let SEARCH_PATTERN=verysecretmessage
|
||||||
|
--echo # t1 encrypted expecting NOT FOUND
|
||||||
|
-- let SEARCH_FILE=$t1_IBD
|
||||||
|
-- source include/search_pattern_in_file.inc
|
||||||
|
--echo # t2 encrypted expecting NOT FOUND
|
||||||
|
-- let SEARCH_FILE=$t2_IBD
|
||||||
|
-- source include/search_pattern_in_file.inc
|
||||||
|
--echo # t3 page compressed expecting NOT FOUND
|
||||||
|
-- let SEARCH_FILE=$t3_IBD
|
||||||
|
-- source include/search_pattern_in_file.inc
|
||||||
|
--echo # t4 page compressed and encrypted expecting NOT FOUND
|
||||||
|
-- let SEARCH_FILE=$t4_IBD
|
||||||
|
-- source include/search_pattern_in_file.inc
|
||||||
|
--echo # t5 normal expecting FOUND
|
||||||
|
-- let SEARCH_FILE=$t5_IBD
|
||||||
|
-- source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||||
|
|
||||||
|
# reset system
|
||||||
|
--disable_warnings
|
||||||
|
--disable_query_log
|
||||||
|
EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig;
|
||||||
|
EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig;
|
||||||
|
EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algo;
|
||||||
|
--enable_query_log
|
||||||
|
--enable_warnings
|
||||||
|
|
@ -9498,6 +9498,20 @@ end |
|
|||||||
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-11584: GRANT inside an SP does not work well on 2nd execution
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE PROCEDURE sp1()
|
||||||
|
GRANT ALL PRIVILEGES ON *.* TO 'foo'@'%' IDENTIFIED BY 'pass';
|
||||||
|
CALL sp1();
|
||||||
|
CALL sp1();
|
||||||
|
drop user 'foo'@'%';
|
||||||
|
drop procedure sp1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #End of 10.1 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-11081: CURSOR for query with GROUP BY
|
--echo # MDEV-11081: CURSOR for query with GROUP BY
|
||||||
--echo #
|
--echo #
|
||||||
@ -9534,15 +9548,3 @@ DELIMITER ;|
|
|||||||
CALL p1();
|
CALL p1();
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # MDEV-11584: GRANT inside an SP does not work well on 2nd execution
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
CREATE PROCEDURE sp1()
|
|
||||||
GRANT ALL PRIVILEGES ON *.* TO 'foo'@'%' IDENTIFIED BY 'pass';
|
|
||||||
CALL sp1();
|
|
||||||
CALL sp1();
|
|
||||||
drop user 'foo'@'%';
|
|
||||||
drop procedure sp1;
|
|
||||||
|
@ -113,10 +113,6 @@ handle_new_error:
|
|||||||
trx_rollback_for_mysql(trx);
|
trx_rollback_for_mysql(trx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DB_MUST_GET_MORE_FILE_SPACE:
|
|
||||||
|
|
||||||
ut_error;
|
|
||||||
|
|
||||||
case DB_CORRUPTION:
|
case DB_CORRUPTION:
|
||||||
case DB_FOREIGN_EXCEED_MAX_CASCADE:
|
case DB_FOREIGN_EXCEED_MAX_CASCADE:
|
||||||
break;
|
break;
|
||||||
|
@ -6330,11 +6330,13 @@ fil_iterate(
|
|||||||
|
|
||||||
for (offset = iter.start; offset < iter.end; offset += n_bytes) {
|
for (offset = iter.start; offset < iter.end; offset += n_bytes) {
|
||||||
|
|
||||||
byte* io_buffer = iter.io_buffer;
|
byte* io_buffer = iter.io_buffer;
|
||||||
|
const bool row_compressed
|
||||||
|
= callback.get_page_size().is_compressed();
|
||||||
|
|
||||||
block->frame = io_buffer;
|
block->frame = io_buffer;
|
||||||
|
|
||||||
if (callback.get_page_size().is_compressed()) {
|
if (row_compressed) {
|
||||||
page_zip_des_init(&block->page.zip);
|
page_zip_des_init(&block->page.zip);
|
||||||
page_zip_set_size(&block->page.zip, iter.page_size);
|
page_zip_set_size(&block->page.zip, iter.page_size);
|
||||||
|
|
||||||
@ -6406,9 +6408,11 @@ fil_iterate(
|
|||||||
bool decrypted = false;
|
bool decrypted = false;
|
||||||
|
|
||||||
for (ulint i = 0; i < n_pages_read; ++i) {
|
for (ulint i = 0; i < n_pages_read; ++i) {
|
||||||
ulint size = iter.page_size;
|
ulint size = iter.page_size;
|
||||||
byte* src = (readptr + (i * size));
|
dberr_t err = DB_SUCCESS;
|
||||||
byte* dst = (io_buffer + (i * size));
|
byte* src = readptr + (i * size);
|
||||||
|
byte* dst = io_buffer + (i * size);
|
||||||
|
bool frame_changed = false;
|
||||||
|
|
||||||
ulint page_type = mach_read_from_2(src+FIL_PAGE_TYPE);
|
ulint page_type = mach_read_from_2(src+FIL_PAGE_TYPE);
|
||||||
|
|
||||||
@ -6432,9 +6436,12 @@ fil_iterate(
|
|||||||
|
|
||||||
if (decrypted) {
|
if (decrypted) {
|
||||||
updated = true;
|
updated = true;
|
||||||
|
} else if (!page_compressed
|
||||||
|
&& !row_compressed) {
|
||||||
|
block->frame = src;
|
||||||
|
frame_changed = true;
|
||||||
} else {
|
} else {
|
||||||
/* TODO: remove unnecessary memcpy's */
|
memcpy(dst, src, size);
|
||||||
memcpy(dst, src, iter.page_size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6460,7 +6467,45 @@ fil_iterate(
|
|||||||
buf_block_set_state(block, BUF_BLOCK_NOT_USED);
|
buf_block_set_state(block, BUF_BLOCK_NOT_USED);
|
||||||
buf_block_set_state(block, BUF_BLOCK_READY_FOR_USE);
|
buf_block_set_state(block, BUF_BLOCK_READY_FOR_USE);
|
||||||
|
|
||||||
src = (io_buffer + (i * size));
|
/* If tablespace is encrypted we use additional
|
||||||
|
temporary scratch area where pages are read
|
||||||
|
for decrypting readptr == crypt_io_buffer != io_buffer.
|
||||||
|
|
||||||
|
Destination for decryption is a buffer pool block
|
||||||
|
block->frame == dst == io_buffer that is updated.
|
||||||
|
Pages that did not require decryption even when
|
||||||
|
tablespace is marked as encrypted are not copied
|
||||||
|
instead block->frame is set to src == readptr.
|
||||||
|
|
||||||
|
For encryption we again use temporary scratch area
|
||||||
|
writeptr != io_buffer == dst
|
||||||
|
that is then written to the tablespace
|
||||||
|
|
||||||
|
(1) For normal tables io_buffer == dst == writeptr
|
||||||
|
(2) For only page compressed tables
|
||||||
|
io_buffer == dst == writeptr
|
||||||
|
(3) For encrypted (and page compressed)
|
||||||
|
readptr != io_buffer == dst != writeptr
|
||||||
|
*/
|
||||||
|
|
||||||
|
ut_ad(!encrypted && !page_compressed ?
|
||||||
|
src == dst && dst == writeptr + (i * size):1);
|
||||||
|
ut_ad(page_compressed && !encrypted ?
|
||||||
|
src == dst && dst == writeptr + (i * size):1);
|
||||||
|
ut_ad(encrypted ?
|
||||||
|
src != dst && dst != writeptr + (i * size):1);
|
||||||
|
|
||||||
|
if (encrypted) {
|
||||||
|
memcpy(writeptr + (i * size),
|
||||||
|
row_compressed ? block->page.zip.data :
|
||||||
|
block->frame, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame_changed) {
|
||||||
|
block->frame = dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
src = io_buffer + (i * size);
|
||||||
|
|
||||||
if (page_compressed) {
|
if (page_compressed) {
|
||||||
ulint len = 0;
|
ulint len = 0;
|
||||||
@ -6481,7 +6526,7 @@ fil_iterate(
|
|||||||
write it back. Note that we should not encrypt the
|
write it back. Note that we should not encrypt the
|
||||||
buffer that is in buffer pool. */
|
buffer that is in buffer pool. */
|
||||||
if (decrypted && encrypted) {
|
if (decrypted && encrypted) {
|
||||||
unsigned char *dest = (writeptr + (i * size));
|
byte *dest = writeptr + (i * size);
|
||||||
ulint space = mach_read_from_4(
|
ulint space = mach_read_from_4(
|
||||||
src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
||||||
ulint offset = mach_read_from_4(src + FIL_PAGE_OFFSET);
|
ulint offset = mach_read_from_4(src + FIL_PAGE_OFFSET);
|
||||||
@ -6706,16 +6751,22 @@ fil_tablespace_iterate(
|
|||||||
iter.io_buffer = static_cast<byte*>(
|
iter.io_buffer = static_cast<byte*>(
|
||||||
ut_align(io_buffer, UNIV_PAGE_SIZE));
|
ut_align(io_buffer, UNIV_PAGE_SIZE));
|
||||||
|
|
||||||
iter.crypt_io_buffer = iter.crypt_data
|
void* crypt_io_buffer;
|
||||||
? static_cast<byte*>(
|
if (iter.crypt_data) {
|
||||||
ut_malloc_nokey(iter.n_io_buffers
|
crypt_io_buffer = static_cast<byte*>(
|
||||||
* UNIV_PAGE_SIZE))
|
ut_malloc_nokey((2 + iter.n_io_buffers)
|
||||||
: NULL;
|
* UNIV_PAGE_SIZE));
|
||||||
|
iter.crypt_io_buffer = static_cast<byte*>(
|
||||||
|
ut_align(crypt_io_buffer,
|
||||||
|
UNIV_PAGE_SIZE));
|
||||||
|
} else {
|
||||||
|
crypt_io_buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
err = fil_iterate(iter, block, callback);
|
err = fil_iterate(iter, block, callback);
|
||||||
|
|
||||||
ut_free(io_buffer);
|
ut_free(io_buffer);
|
||||||
ut_free(iter.crypt_io_buffer);
|
ut_free(crypt_io_buffer);
|
||||||
|
|
||||||
fil_space_destroy_crypt_data(&iter.crypt_data);
|
fil_space_destroy_crypt_data(&iter.crypt_data);
|
||||||
}
|
}
|
||||||
|
@ -955,10 +955,6 @@ void
|
|||||||
srv_purge_wakeup(void);
|
srv_purge_wakeup(void);
|
||||||
/*==================*/
|
/*==================*/
|
||||||
|
|
||||||
/** Call exit(3) */
|
|
||||||
void
|
|
||||||
srv_fatal_error();
|
|
||||||
|
|
||||||
/** Check if tablespace is being truncated.
|
/** Check if tablespace is being truncated.
|
||||||
(Ignore system-tablespace as we don't re-create the tablespace
|
(Ignore system-tablespace as we don't re-create the tablespace
|
||||||
and so some of the action that are suppressed by this function
|
and so some of the action that are suppressed by this function
|
||||||
|
@ -41,7 +41,7 @@ struct dict_table_t;
|
|||||||
fprintf(stderr, "innodb_force_recovery_crash=%lu\n", \
|
fprintf(stderr, "innodb_force_recovery_crash=%lu\n", \
|
||||||
srv_force_recovery_crash); \
|
srv_force_recovery_crash); \
|
||||||
fflush(stderr); \
|
fflush(stderr); \
|
||||||
_exit(3); \
|
abort(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif /* DBUG_OFF */
|
#endif /* DBUG_OFF */
|
||||||
|
@ -5910,22 +5910,18 @@ os_file_get_last_error(
|
|||||||
return(os_file_get_last_error_low(report_all_errors, false));
|
return(os_file_get_last_error_low(report_all_errors, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Does error handling when a file operation fails.
|
/** Handle errors for file operations.
|
||||||
Conditionally exits (calling srv_fatal_error()) based on should_exit value
|
|
||||||
and the error type, if should_exit is true then on_error_silent is ignored.
|
|
||||||
@param[in] name name of a file or NULL
|
@param[in] name name of a file or NULL
|
||||||
@param[in] operation operation
|
@param[in] operation operation
|
||||||
@param[in] should_exit call srv_fatal_error() on an unknown error,
|
@param[in] should_abort whether to abort on an unknown error
|
||||||
if this parameter is true
|
@param[in] on_error_silent whether to suppress reports of non-fatal errors
|
||||||
@param[in] on_error_silent if true then don't print any message to the log
|
|
||||||
iff it is an unknown non-fatal error
|
|
||||||
@return true if we should retry the operation */
|
@return true if we should retry the operation */
|
||||||
static MY_ATTRIBUTE((warn_unused_result))
|
static MY_ATTRIBUTE((warn_unused_result))
|
||||||
bool
|
bool
|
||||||
os_file_handle_error_cond_exit(
|
os_file_handle_error_cond_exit(
|
||||||
const char* name,
|
const char* name,
|
||||||
const char* operation,
|
const char* operation,
|
||||||
bool should_exit,
|
bool should_abort,
|
||||||
bool on_error_silent)
|
bool on_error_silent)
|
||||||
{
|
{
|
||||||
ulint err;
|
ulint err;
|
||||||
@ -5986,17 +5982,17 @@ os_file_handle_error_cond_exit(
|
|||||||
is better to ignore on_error_silent and print an error message
|
is better to ignore on_error_silent and print an error message
|
||||||
to the log. */
|
to the log. */
|
||||||
|
|
||||||
if (should_exit || !on_error_silent) {
|
if (should_abort || !on_error_silent) {
|
||||||
ib::error() << "File "
|
ib::error() << "File "
|
||||||
<< (name != NULL ? name : "(unknown)")
|
<< (name != NULL ? name : "(unknown)")
|
||||||
<< ": '" << operation << "'"
|
<< ": '" << operation << "'"
|
||||||
" returned OS error " << err << "."
|
" returned OS error " << err << "."
|
||||||
<< (should_exit
|
<< (should_abort
|
||||||
? " Cannot continue operation" : "");
|
? " Cannot continue operation" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should_exit) {
|
if (should_abort) {
|
||||||
srv_fatal_error();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,9 +153,7 @@ os_thread_create_func(
|
|||||||
|
|
||||||
int ret = pthread_create(&new_thread_id, &attr, func, arg);
|
int ret = pthread_create(&new_thread_id, &attr, func, arg);
|
||||||
|
|
||||||
if (ret != 0) {
|
ut_a(ret == 0);
|
||||||
ib::fatal() << "pthread_create returned " << ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
|
|
||||||
|
@ -3230,19 +3230,3 @@ srv_was_tablespace_truncated(const fil_space_t* space)
|
|||||||
|
|
||||||
return(truncate_t::was_tablespace_truncated(space->id));
|
return(truncate_t::was_tablespace_truncated(space->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Call exit(3) */
|
|
||||||
void
|
|
||||||
srv_fatal_error()
|
|
||||||
{
|
|
||||||
|
|
||||||
ib::error() << "Cannot continue operation.";
|
|
||||||
|
|
||||||
fflush(stderr);
|
|
||||||
|
|
||||||
ut_d(innodb_calling_exit = true);
|
|
||||||
|
|
||||||
srv_shutdown_all_bg_threads();
|
|
||||||
|
|
||||||
exit(3);
|
|
||||||
}
|
|
||||||
|
@ -2221,21 +2221,8 @@ files_checked:
|
|||||||
if (err == DB_SUCCESS) {
|
if (err == DB_SUCCESS) {
|
||||||
/* Initialize the change buffer. */
|
/* Initialize the change buffer. */
|
||||||
err = dict_boot();
|
err = dict_boot();
|
||||||
}
|
} else {
|
||||||
|
return(srv_init_abort(err));
|
||||||
if (err != DB_SUCCESS) {
|
|
||||||
|
|
||||||
/* A tablespace was not found during recovery. The
|
|
||||||
user must force recovery. */
|
|
||||||
|
|
||||||
if (err == DB_TABLESPACE_NOT_FOUND) {
|
|
||||||
|
|
||||||
srv_fatal_error();
|
|
||||||
|
|
||||||
ut_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
return(srv_init_abort(DB_ERROR));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
purge_queue = trx_sys_init_at_db_start();
|
purge_queue = trx_sys_init_at_db_start();
|
||||||
|
@ -184,10 +184,6 @@ handle_new_error:
|
|||||||
trx_rollback_for_mysql(trx);
|
trx_rollback_for_mysql(trx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DB_MUST_GET_MORE_FILE_SPACE:
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
case DB_CORRUPTION:
|
case DB_CORRUPTION:
|
||||||
case DB_FOREIGN_EXCEED_MAX_CASCADE:
|
case DB_FOREIGN_EXCEED_MAX_CASCADE:
|
||||||
break;
|
break;
|
||||||
|
@ -224,12 +224,10 @@ start_again:
|
|||||||
+ FSP_EXTENT_SIZE / 2 + 100)
|
+ FSP_EXTENT_SIZE / 2 + 100)
|
||||||
* UNIV_PAGE_SIZE)) {
|
* UNIV_PAGE_SIZE)) {
|
||||||
|
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"Cannot create doublewrite buffer: you must "
|
"Cannot create doublewrite buffer: you must "
|
||||||
"increase your buffer pool size. Cannot continue "
|
"increase your buffer pool size. Cannot continue "
|
||||||
"operation.");
|
"operation.");
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
block2 = fseg_create(TRX_SYS_SPACE, TRX_SYS_PAGE_NO,
|
block2 = fseg_create(TRX_SYS_SPACE, TRX_SYS_PAGE_NO,
|
||||||
@ -242,15 +240,10 @@ start_again:
|
|||||||
buf_block_dbg_add_level(block2, SYNC_NO_ORDER_CHECK);
|
buf_block_dbg_add_level(block2, SYNC_NO_ORDER_CHECK);
|
||||||
|
|
||||||
if (block2 == NULL) {
|
if (block2 == NULL) {
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"Cannot create doublewrite buffer: you must "
|
"Cannot create doublewrite buffer: you must "
|
||||||
"increase your tablespace size. "
|
"increase your tablespace size. "
|
||||||
"Cannot continue operation.");
|
"Cannot continue operation.");
|
||||||
|
|
||||||
/* We exit without committing the mtr to prevent
|
|
||||||
its modifications to the database getting to disk */
|
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fseg_header = doublewrite + TRX_SYS_DOUBLEWRITE_FSEG;
|
fseg_header = doublewrite + TRX_SYS_DOUBLEWRITE_FSEG;
|
||||||
@ -261,12 +254,10 @@ start_again:
|
|||||||
new_block = fseg_alloc_free_page(
|
new_block = fseg_alloc_free_page(
|
||||||
fseg_header, prev_page_no + 1, FSP_UP, &mtr);
|
fseg_header, prev_page_no + 1, FSP_UP, &mtr);
|
||||||
if (new_block == NULL) {
|
if (new_block == NULL) {
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"Cannot create doublewrite buffer: you must "
|
"Cannot create doublewrite buffer: you must "
|
||||||
"increase your tablespace size. "
|
"increase your tablespace size. "
|
||||||
"Cannot continue operation.");
|
"Cannot continue operation.");
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We read the allocated pages to the buffer pool;
|
/* We read the allocated pages to the buffer pool;
|
||||||
|
@ -4618,7 +4618,7 @@ will_not_choose:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(1);
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def.success && remote.success) {
|
if (def.success && remote.success) {
|
||||||
@ -6594,6 +6594,7 @@ fil_iterate(
|
|||||||
for (offset = iter.start; offset < iter.end; offset += n_bytes) {
|
for (offset = iter.start; offset < iter.end; offset += n_bytes) {
|
||||||
|
|
||||||
byte* io_buffer = iter.io_buffer;
|
byte* io_buffer = iter.io_buffer;
|
||||||
|
bool row_compressed = false;
|
||||||
|
|
||||||
block->frame = io_buffer;
|
block->frame = io_buffer;
|
||||||
|
|
||||||
@ -6606,6 +6607,7 @@ fil_iterate(
|
|||||||
|
|
||||||
/* Zip IO is done in the compressed page buffer. */
|
/* Zip IO is done in the compressed page buffer. */
|
||||||
io_buffer = block->page.zip.data;
|
io_buffer = block->page.zip.data;
|
||||||
|
row_compressed = true;
|
||||||
} else {
|
} else {
|
||||||
io_buffer = iter.io_buffer;
|
io_buffer = iter.io_buffer;
|
||||||
}
|
}
|
||||||
@ -6646,8 +6648,9 @@ fil_iterate(
|
|||||||
for (ulint i = 0; i < n_pages_read; ++i) {
|
for (ulint i = 0; i < n_pages_read; ++i) {
|
||||||
ulint size = iter.page_size;
|
ulint size = iter.page_size;
|
||||||
dberr_t err = DB_SUCCESS;
|
dberr_t err = DB_SUCCESS;
|
||||||
byte* src = (readptr + (i * size));
|
byte* src = readptr + (i * size);
|
||||||
byte* dst = (io_buffer + (i * size));
|
byte* dst = io_buffer + (i * size);
|
||||||
|
bool frame_changed = false;
|
||||||
|
|
||||||
ulint page_type = mach_read_from_2(src+FIL_PAGE_TYPE);
|
ulint page_type = mach_read_from_2(src+FIL_PAGE_TYPE);
|
||||||
|
|
||||||
@ -6671,8 +6674,12 @@ fil_iterate(
|
|||||||
if (decrypted) {
|
if (decrypted) {
|
||||||
updated = true;
|
updated = true;
|
||||||
} else {
|
} else {
|
||||||
/* TODO: remove unnecessary memcpy's */
|
if (!page_compressed && !row_compressed) {
|
||||||
memcpy(dst, src, size);
|
block->frame = src;
|
||||||
|
frame_changed = true;
|
||||||
|
} else {
|
||||||
|
memcpy(dst, src, size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6697,7 +6704,45 @@ fil_iterate(
|
|||||||
buf_block_set_state(block, BUF_BLOCK_NOT_USED);
|
buf_block_set_state(block, BUF_BLOCK_NOT_USED);
|
||||||
buf_block_set_state(block, BUF_BLOCK_READY_FOR_USE);
|
buf_block_set_state(block, BUF_BLOCK_READY_FOR_USE);
|
||||||
|
|
||||||
src = (io_buffer + (i * size));
|
/* If tablespace is encrypted we use additional
|
||||||
|
temporary scratch area where pages are read
|
||||||
|
for decrypting readptr == crypt_io_buffer != io_buffer.
|
||||||
|
|
||||||
|
Destination for decryption is a buffer pool block
|
||||||
|
block->frame == dst == io_buffer that is updated.
|
||||||
|
Pages that did not require decryption even when
|
||||||
|
tablespace is marked as encrypted are not copied
|
||||||
|
instead block->frame is set to src == readptr.
|
||||||
|
|
||||||
|
For encryption we again use temporary scratch area
|
||||||
|
writeptr != io_buffer == dst
|
||||||
|
that is then written to the tablespace
|
||||||
|
|
||||||
|
(1) For normal tables io_buffer == dst == writeptr
|
||||||
|
(2) For only page compressed tables
|
||||||
|
io_buffer == dst == writeptr
|
||||||
|
(3) For encrypted (and page compressed)
|
||||||
|
readptr != io_buffer == dst != writeptr
|
||||||
|
*/
|
||||||
|
|
||||||
|
ut_ad(!encrypted && !page_compressed ?
|
||||||
|
src == dst && dst == writeptr + (i * size):1);
|
||||||
|
ut_ad(page_compressed && !encrypted ?
|
||||||
|
src == dst && dst == writeptr + (i * size):1);
|
||||||
|
ut_ad(encrypted ?
|
||||||
|
src != dst && dst != writeptr + (i * size):1);
|
||||||
|
|
||||||
|
if (encrypted) {
|
||||||
|
memcpy(writeptr + (i * size),
|
||||||
|
row_compressed ? block->page.zip.data :
|
||||||
|
block->frame, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame_changed) {
|
||||||
|
block->frame = dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
src = io_buffer + (i * size);
|
||||||
|
|
||||||
if (page_compressed) {
|
if (page_compressed) {
|
||||||
ulint len = 0;
|
ulint len = 0;
|
||||||
@ -6718,7 +6763,7 @@ fil_iterate(
|
|||||||
write it back. Note that we should not encrypt the
|
write it back. Note that we should not encrypt the
|
||||||
buffer that is in buffer pool. */
|
buffer that is in buffer pool. */
|
||||||
if (decrypted && encrypted) {
|
if (decrypted && encrypted) {
|
||||||
unsigned char *dest = (writeptr + (i * size));
|
byte *dest = writeptr + (i * size);
|
||||||
ulint space = mach_read_from_4(
|
ulint space = mach_read_from_4(
|
||||||
src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
||||||
ulint offset = mach_read_from_4(src + FIL_PAGE_OFFSET);
|
ulint offset = mach_read_from_4(src + FIL_PAGE_OFFSET);
|
||||||
@ -6900,9 +6945,9 @@ fil_tablespace_iterate(
|
|||||||
void* crypt_io_buffer = NULL;
|
void* crypt_io_buffer = NULL;
|
||||||
if (iter.crypt_data != NULL) {
|
if (iter.crypt_data != NULL) {
|
||||||
crypt_io_buffer = mem_alloc(
|
crypt_io_buffer = mem_alloc(
|
||||||
iter.n_io_buffers * UNIV_PAGE_SIZE);
|
(2 + iter.n_io_buffers) * UNIV_PAGE_SIZE);
|
||||||
iter.crypt_io_buffer = static_cast<byte*>(
|
iter.crypt_io_buffer = static_cast<byte*>(
|
||||||
crypt_io_buffer);
|
ut_align(crypt_io_buffer, UNIV_PAGE_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
err = fil_iterate(iter, &block, callback);
|
err = fil_iterate(iter, &block, callback);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2016, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -29,6 +30,8 @@ Created 2007/03/16/03 Sunny Bains
|
|||||||
#include "mem0mem.h"
|
#include "mem0mem.h"
|
||||||
#include "ha_prototypes.h"
|
#include "ha_prototypes.h"
|
||||||
|
|
||||||
|
#define exit(x) abort()
|
||||||
|
|
||||||
/* The type of AST Node */
|
/* The type of AST Node */
|
||||||
enum fts_ast_type_t {
|
enum fts_ast_type_t {
|
||||||
FTS_AST_OPER, /*!< Operator */
|
FTS_AST_OPER, /*!< Operator */
|
||||||
|
@ -920,24 +920,10 @@ failure:
|
|||||||
mutex_exit(&(log_sys->mutex));
|
mutex_exit(&(log_sys->mutex));
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
fprintf(stderr,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"InnoDB: Error: ib_logfiles are too small"
|
"The combined size of ib_logfiles"
|
||||||
" for innodb_thread_concurrency %lu.\n"
|
|
||||||
"InnoDB: The combined size of ib_logfiles"
|
|
||||||
" should be bigger than\n"
|
" should be bigger than\n"
|
||||||
"InnoDB: 200 kB * innodb_thread_concurrency.\n"
|
"InnoDB: 200 kB * innodb_thread_concurrency.");
|
||||||
"InnoDB: To get mysqld to start up, set"
|
|
||||||
" innodb_thread_concurrency in my.cnf\n"
|
|
||||||
"InnoDB: to a lower value, for example, to 8."
|
|
||||||
" After an ERROR-FREE shutdown\n"
|
|
||||||
"InnoDB: of mysqld you can adjust the size of"
|
|
||||||
" ib_logfiles, as explained in\n"
|
|
||||||
"InnoDB: " REFMAN "adding-and-removing.html\n"
|
|
||||||
"InnoDB: Cannot continue operation."
|
|
||||||
" Calling exit(1).\n",
|
|
||||||
(ulong) srv_thread_concurrency);
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(success);
|
return(success);
|
||||||
@ -2861,15 +2847,9 @@ loop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
fprintf(stderr,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"InnoDB: Cannot create or open"
|
"InnoDB: Cannot create or open"
|
||||||
" archive log file %s.\n"
|
" archive log file %s.\n", name);
|
||||||
"InnoDB: Cannot continue operation.\n"
|
|
||||||
"InnoDB: Check that the log archive"
|
|
||||||
" directory exists,\n"
|
|
||||||
"InnoDB: you have access rights to it, and\n"
|
|
||||||
"InnoDB: there is space available.\n", name);
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2011-2012 Percona Inc. All Rights Reserved.
|
Copyright (c) 2011-2012 Percona Inc. All Rights Reserved.
|
||||||
|
Copyright (C) 2016, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -405,12 +406,11 @@ log_online_can_track_missing(
|
|||||||
last_tracked_lsn = ut_max(last_tracked_lsn, MIN_TRACKED_LSN);
|
last_tracked_lsn = ut_max(last_tracked_lsn, MIN_TRACKED_LSN);
|
||||||
|
|
||||||
if (last_tracked_lsn > tracking_start_lsn) {
|
if (last_tracked_lsn > tracking_start_lsn) {
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR,
|
ib_logf(IB_LOG_LEVEL_FATAL,
|
||||||
"last tracked LSN " LSN_PF " is ahead of tracking "
|
"last tracked LSN " LSN_PF " is ahead of tracking "
|
||||||
"start LSN " LSN_PF ". This can be caused by "
|
"start LSN " LSN_PF ". This can be caused by "
|
||||||
"mismatched bitmap files.",
|
"mismatched bitmap files.",
|
||||||
last_tracked_lsn, tracking_start_lsn);
|
last_tracked_lsn, tracking_start_lsn);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (last_tracked_lsn == tracking_start_lsn)
|
return (last_tracked_lsn == tracking_start_lsn)
|
||||||
@ -450,9 +450,7 @@ log_online_track_missing_on_startup(
|
|||||||
log_bmp_sys->start_lsn = ut_max(last_tracked_lsn,
|
log_bmp_sys->start_lsn = ut_max(last_tracked_lsn,
|
||||||
MIN_TRACKED_LSN);
|
MIN_TRACKED_LSN);
|
||||||
log_set_tracked_lsn(log_bmp_sys->start_lsn);
|
log_set_tracked_lsn(log_bmp_sys->start_lsn);
|
||||||
if (!log_online_follow_redo_log()) {
|
ut_a(log_online_follow_redo_log());
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
ut_ad(log_bmp_sys->end_lsn >= tracking_start_lsn);
|
ut_ad(log_bmp_sys->end_lsn >= tracking_start_lsn);
|
||||||
|
|
||||||
ib_logf(IB_LOG_LEVEL_INFO,
|
ib_logf(IB_LOG_LEVEL_INFO,
|
||||||
@ -677,9 +675,8 @@ log_online_read_init(void)
|
|||||||
|
|
||||||
if (os_file_closedir(bitmap_dir)) {
|
if (os_file_closedir(bitmap_dir)) {
|
||||||
os_file_get_last_error(TRUE);
|
os_file_get_last_error(TRUE);
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR, "cannot close \'%s\'",
|
ib_logf(IB_LOG_LEVEL_FATAL, "cannot close \'%s\'",
|
||||||
log_bmp_sys->bmp_file_home);
|
log_bmp_sys->bmp_file_home);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!log_bmp_sys->out_seq_num) {
|
if (!log_bmp_sys->out_seq_num) {
|
||||||
@ -699,9 +696,7 @@ log_online_read_init(void)
|
|||||||
if (!success) {
|
if (!success) {
|
||||||
|
|
||||||
/* New file, tracking from scratch */
|
/* New file, tracking from scratch */
|
||||||
if (!log_online_start_bitmap_file()) {
|
ut_a(log_online_start_bitmap_file());
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
@ -738,9 +733,7 @@ log_online_read_init(void)
|
|||||||
} else {
|
} else {
|
||||||
file_start_lsn = tracking_start_lsn;
|
file_start_lsn = tracking_start_lsn;
|
||||||
}
|
}
|
||||||
if (!log_online_rotate_bitmap_file(file_start_lsn)) {
|
ut_a(log_online_rotate_bitmap_file(file_start_lsn));
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last_tracked_lsn < tracking_start_lsn) {
|
if (last_tracked_lsn < tracking_start_lsn) {
|
||||||
|
|
||||||
|
@ -920,7 +920,7 @@ os_file_handle_error_cond_exit(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (should_exit) {
|
if (should_exit) {
|
||||||
exit(1);
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,11 +192,7 @@ os_thread_create_func(
|
|||||||
#else
|
#else
|
||||||
ret = pthread_create(&pthread, &attr, func, arg);
|
ret = pthread_create(&pthread, &attr, func, arg);
|
||||||
#endif
|
#endif
|
||||||
if (ret) {
|
ut_a(ret == 0);
|
||||||
fprintf(stderr,
|
|
||||||
"InnoDB: Error: pthread_create returned %d\n", ret);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef UNIV_HPUX10
|
#ifndef UNIV_HPUX10
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
|
@ -1196,9 +1196,7 @@ handle_new_error:
|
|||||||
"InnoDB: lack of space. You must add"
|
"InnoDB: lack of space. You must add"
|
||||||
" a new data file to\n"
|
" a new data file to\n"
|
||||||
"InnoDB: my.cnf and restart the database.\n", stderr);
|
"InnoDB: my.cnf and restart the database.\n", stderr);
|
||||||
|
abort();
|
||||||
ut_ad(0);
|
|
||||||
exit(1);
|
|
||||||
|
|
||||||
case DB_CORRUPTION:
|
case DB_CORRUPTION:
|
||||||
fputs("InnoDB: We detected index corruption"
|
fputs("InnoDB: We detected index corruption"
|
||||||
|
@ -363,8 +363,7 @@ row_undo_step(
|
|||||||
"InnoDB: Out of tablespace.\n"
|
"InnoDB: Out of tablespace.\n"
|
||||||
"InnoDB: Consider increasing"
|
"InnoDB: Consider increasing"
|
||||||
" your tablespace.\n");
|
" your tablespace.\n");
|
||||||
|
abort();
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_error;
|
ut_error;
|
||||||
|
@ -630,7 +630,7 @@ create_log_file(
|
|||||||
fprintf(stderr, "innodb_force_recovery_crash=%lu\n", \
|
fprintf(stderr, "innodb_force_recovery_crash=%lu\n", \
|
||||||
srv_force_recovery_crash); \
|
srv_force_recovery_crash); \
|
||||||
fflush(stderr); \
|
fflush(stderr); \
|
||||||
exit(3); \
|
abort(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
@ -2948,16 +2948,7 @@ files_checked:
|
|||||||
/* Check that os_fast_mutexes work as expected */
|
/* Check that os_fast_mutexes work as expected */
|
||||||
os_fast_mutex_init(PFS_NOT_INSTRUMENTED, &srv_os_test_mutex);
|
os_fast_mutex_init(PFS_NOT_INSTRUMENTED, &srv_os_test_mutex);
|
||||||
|
|
||||||
if (0 != os_fast_mutex_trylock(&srv_os_test_mutex)) {
|
ut_a(0 == os_fast_mutex_trylock(&srv_os_test_mutex));
|
||||||
ut_print_timestamp(stderr);
|
|
||||||
fprintf(stderr,
|
|
||||||
" InnoDB: Error: pthread_mutex_trylock returns"
|
|
||||||
" an unexpected value on\n");
|
|
||||||
ut_print_timestamp(stderr);
|
|
||||||
fprintf(stderr,
|
|
||||||
" InnoDB: success! Cannot continue.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
os_fast_mutex_unlock(&srv_os_test_mutex);
|
os_fast_mutex_unlock(&srv_os_test_mutex);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user