2011-04-25 17:22:25 +02:00
|
|
|
set global aria_log_file_size=4294959104;
|
2008-12-05 22:11:46 +01:00
|
|
|
drop database if exists mysqltest;
|
|
|
|
create database mysqltest;
|
|
|
|
use mysqltest;
|
|
|
|
* shut down mysqld, removed logs, restarted it
|
|
|
|
* TEST of Checkpoint between writing the commit log record and committing in trnman
|
2010-09-12 18:40:01 +02:00
|
|
|
create table t1(a int primary key) engine=aria;
|
2008-12-05 22:11:46 +01:00
|
|
|
insert into t1 values(1);
|
|
|
|
flush table t1;
|
|
|
|
* copied t1 for comparison
|
2011-12-15 22:07:58 +01:00
|
|
|
set session debug_dbug="+d,maria_sleep_in_commit";
|
2008-12-05 22:11:46 +01:00
|
|
|
insert into t1 values(2);
|
2010-09-12 18:40:01 +02:00
|
|
|
set global aria_checkpoint_interval=1000;
|
2008-12-05 22:11:46 +01:00
|
|
|
delete from t1 where a=2;
|
2011-12-15 22:07:58 +01:00
|
|
|
SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash";
|
2008-12-05 22:11:46 +01:00
|
|
|
* crashing mysqld intentionally
|
2010-09-12 18:40:01 +02:00
|
|
|
set global aria_checkpoint_interval=1;
|
2008-12-05 22:11:46 +01:00
|
|
|
ERROR HY000: Lost connection to MySQL server during query
|
|
|
|
* recovery happens
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
|
|
|
mysqltest.t1 check status OK
|
|
|
|
* testing that checksum after recovery is as expected
|
|
|
|
Checksum-check
|
|
|
|
ok
|
|
|
|
use mysqltest;
|
|
|
|
drop table t1;
|
Fix for BUG#41493 "Maria: two recovery failures (wrong logging of BLOB pages)" and some more debugging
output related to this.
mysql-test/suite/maria/r/maria-recovery3.result:
result update
mysql-test/suite/maria/t/maria-recovery3.test:
Test for bug; before the fix, the "CHECK TABLE EXTENDED" would mention a bad bitmap, because the
REDO_INSERT_ROW_BLOBS was containing a page number which was actually the one of a tail, so execution of this
record would mark the tail page as full in bitmap (like if it were a blob page), though it wasn't full.
Also, the assertion added around ma_blockrec.c:6580 in the present revision fired.
storage/maria/ma_blockrec.c:
- fix for BUG#41493: if we found out that logging was not needed at this point (blob_length==0 i.e. tail page),
then we forgot to increment tmp_block, so in the second iteration (assuming two BLOB columns), we would log the
page range of the first iteration (i.e. the tail page's number) for this second BLOB, which would cause
Recovery to overwrite the tail page with the second BLOB.
- assert when marking the table corrupted during REDO phase; this catches some problems earlier
otherwise they get caught only when a later record wants to use the table.
- _ma_apply_redo_insert_row_blobs() now fills some synthetic info about the blobs and pages involved
in a REDO_INSERT_ROW_BLOBS record, for inclusion into maria_recovery.trace: number of blobs, of ranges,
first and last page (does not tell about any gaps in the middle, but good enough for now). It also asserts
that it's not overwriting a tail/head page (which happened in the bug).
storage/maria/ma_blockrec.h:
new prototype for _ma_apply_redo_insert_row_blobs
storage/maria/ma_recovery.c:
Print info got from _ma_apply_redo_insert_row_blobs() to maria_recovery.trace (so far this file had mentioned
what head and tail pages a record touched, but not blob pages).
2009-01-15 16:14:47 +01:00
|
|
|
* TEST of logging of BLOBs
|
|
|
|
CREATE TABLE `t1` (
|
|
|
|
`blob` blob,
|
|
|
|
`blob_key` blob
|
2010-09-12 18:40:01 +02:00
|
|
|
) ENGINE=aria ROW_FORMAT=page
|
Fix for BUG#41493 "Maria: two recovery failures (wrong logging of BLOB pages)" and some more debugging
output related to this.
mysql-test/suite/maria/r/maria-recovery3.result:
result update
mysql-test/suite/maria/t/maria-recovery3.test:
Test for bug; before the fix, the "CHECK TABLE EXTENDED" would mention a bad bitmap, because the
REDO_INSERT_ROW_BLOBS was containing a page number which was actually the one of a tail, so execution of this
record would mark the tail page as full in bitmap (like if it were a blob page), though it wasn't full.
Also, the assertion added around ma_blockrec.c:6580 in the present revision fired.
storage/maria/ma_blockrec.c:
- fix for BUG#41493: if we found out that logging was not needed at this point (blob_length==0 i.e. tail page),
then we forgot to increment tmp_block, so in the second iteration (assuming two BLOB columns), we would log the
page range of the first iteration (i.e. the tail page's number) for this second BLOB, which would cause
Recovery to overwrite the tail page with the second BLOB.
- assert when marking the table corrupted during REDO phase; this catches some problems earlier
otherwise they get caught only when a later record wants to use the table.
- _ma_apply_redo_insert_row_blobs() now fills some synthetic info about the blobs and pages involved
in a REDO_INSERT_ROW_BLOBS record, for inclusion into maria_recovery.trace: number of blobs, of ranges,
first and last page (does not tell about any gaps in the middle, but good enough for now). It also asserts
that it's not overwriting a tail/head page (which happened in the bug).
storage/maria/ma_blockrec.h:
new prototype for _ma_apply_redo_insert_row_blobs
storage/maria/ma_recovery.c:
Print info got from _ma_apply_redo_insert_row_blobs() to maria_recovery.trace (so far this file had mentioned
what head and tail pages a record touched, but not blob pages).
2009-01-15 16:14:47 +01:00
|
|
|
;
|
|
|
|
* copied t1 for feeding_recovery
|
|
|
|
* compared t1 to old version
|
2010-09-12 18:40:01 +02:00
|
|
|
set global aria_checkpoint_interval=0;
|
Fix for BUG#41493 "Maria: two recovery failures (wrong logging of BLOB pages)" and some more debugging
output related to this.
mysql-test/suite/maria/r/maria-recovery3.result:
result update
mysql-test/suite/maria/t/maria-recovery3.test:
Test for bug; before the fix, the "CHECK TABLE EXTENDED" would mention a bad bitmap, because the
REDO_INSERT_ROW_BLOBS was containing a page number which was actually the one of a tail, so execution of this
record would mark the tail page as full in bitmap (like if it were a blob page), though it wasn't full.
Also, the assertion added around ma_blockrec.c:6580 in the present revision fired.
storage/maria/ma_blockrec.c:
- fix for BUG#41493: if we found out that logging was not needed at this point (blob_length==0 i.e. tail page),
then we forgot to increment tmp_block, so in the second iteration (assuming two BLOB columns), we would log the
page range of the first iteration (i.e. the tail page's number) for this second BLOB, which would cause
Recovery to overwrite the tail page with the second BLOB.
- assert when marking the table corrupted during REDO phase; this catches some problems earlier
otherwise they get caught only when a later record wants to use the table.
- _ma_apply_redo_insert_row_blobs() now fills some synthetic info about the blobs and pages involved
in a REDO_INSERT_ROW_BLOBS record, for inclusion into maria_recovery.trace: number of blobs, of ranges,
first and last page (does not tell about any gaps in the middle, but good enough for now). It also asserts
that it's not overwriting a tail/head page (which happened in the bug).
storage/maria/ma_blockrec.h:
new prototype for _ma_apply_redo_insert_row_blobs
storage/maria/ma_recovery.c:
Print info got from _ma_apply_redo_insert_row_blobs() to maria_recovery.trace (so far this file had mentioned
what head and tail pages a record touched, but not blob pages).
2009-01-15 16:14:47 +01:00
|
|
|
INSERT INTO `t1` VALUES (NULL,repeat('A',5198));
|
|
|
|
INSERT INTO `t1` VALUES (NULL,repeat('B',65535));
|
|
|
|
INSERT INTO `t1` VALUES (repeat('K',5198),repeat('L',2325));
|
|
|
|
INSERT INTO `t1` VALUES (repeat('C',65535),NULL);
|
|
|
|
INSERT INTO `t1` VALUES (NULL,repeat('D',65535));
|
|
|
|
INSERT INTO `t1` VALUES (repeat('E',65535),repeat('F',16111));
|
|
|
|
INSERT INTO `t1` VALUES (repeat('G',65535),repeat('H',65535));
|
|
|
|
INSERT INTO `t1` VALUES (repeat('I',5198),repeat('J',65535));
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
|
|
|
mysqltest.t1 check status OK
|
|
|
|
flush table t1;
|
|
|
|
* copied t1 for comparison
|
|
|
|
* compared t1 to old version
|
2011-12-15 22:07:58 +01:00
|
|
|
SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash";
|
Fix for BUG#41493 "Maria: two recovery failures (wrong logging of BLOB pages)" and some more debugging
output related to this.
mysql-test/suite/maria/r/maria-recovery3.result:
result update
mysql-test/suite/maria/t/maria-recovery3.test:
Test for bug; before the fix, the "CHECK TABLE EXTENDED" would mention a bad bitmap, because the
REDO_INSERT_ROW_BLOBS was containing a page number which was actually the one of a tail, so execution of this
record would mark the tail page as full in bitmap (like if it were a blob page), though it wasn't full.
Also, the assertion added around ma_blockrec.c:6580 in the present revision fired.
storage/maria/ma_blockrec.c:
- fix for BUG#41493: if we found out that logging was not needed at this point (blob_length==0 i.e. tail page),
then we forgot to increment tmp_block, so in the second iteration (assuming two BLOB columns), we would log the
page range of the first iteration (i.e. the tail page's number) for this second BLOB, which would cause
Recovery to overwrite the tail page with the second BLOB.
- assert when marking the table corrupted during REDO phase; this catches some problems earlier
otherwise they get caught only when a later record wants to use the table.
- _ma_apply_redo_insert_row_blobs() now fills some synthetic info about the blobs and pages involved
in a REDO_INSERT_ROW_BLOBS record, for inclusion into maria_recovery.trace: number of blobs, of ranges,
first and last page (does not tell about any gaps in the middle, but good enough for now). It also asserts
that it's not overwriting a tail/head page (which happened in the bug).
storage/maria/ma_blockrec.h:
new prototype for _ma_apply_redo_insert_row_blobs
storage/maria/ma_recovery.c:
Print info got from _ma_apply_redo_insert_row_blobs() to maria_recovery.trace (so far this file had mentioned
what head and tail pages a record touched, but not blob pages).
2009-01-15 16:14:47 +01:00
|
|
|
* crashing mysqld intentionally
|
2010-09-12 18:40:01 +02:00
|
|
|
set global aria_checkpoint_interval=1;
|
Fix for BUG#41493 "Maria: two recovery failures (wrong logging of BLOB pages)" and some more debugging
output related to this.
mysql-test/suite/maria/r/maria-recovery3.result:
result update
mysql-test/suite/maria/t/maria-recovery3.test:
Test for bug; before the fix, the "CHECK TABLE EXTENDED" would mention a bad bitmap, because the
REDO_INSERT_ROW_BLOBS was containing a page number which was actually the one of a tail, so execution of this
record would mark the tail page as full in bitmap (like if it were a blob page), though it wasn't full.
Also, the assertion added around ma_blockrec.c:6580 in the present revision fired.
storage/maria/ma_blockrec.c:
- fix for BUG#41493: if we found out that logging was not needed at this point (blob_length==0 i.e. tail page),
then we forgot to increment tmp_block, so in the second iteration (assuming two BLOB columns), we would log the
page range of the first iteration (i.e. the tail page's number) for this second BLOB, which would cause
Recovery to overwrite the tail page with the second BLOB.
- assert when marking the table corrupted during REDO phase; this catches some problems earlier
otherwise they get caught only when a later record wants to use the table.
- _ma_apply_redo_insert_row_blobs() now fills some synthetic info about the blobs and pages involved
in a REDO_INSERT_ROW_BLOBS record, for inclusion into maria_recovery.trace: number of blobs, of ranges,
first and last page (does not tell about any gaps in the middle, but good enough for now). It also asserts
that it's not overwriting a tail/head page (which happened in the bug).
storage/maria/ma_blockrec.h:
new prototype for _ma_apply_redo_insert_row_blobs
storage/maria/ma_recovery.c:
Print info got from _ma_apply_redo_insert_row_blobs() to maria_recovery.trace (so far this file had mentioned
what head and tail pages a record touched, but not blob pages).
2009-01-15 16:14:47 +01:00
|
|
|
ERROR HY000: Lost connection to MySQL server during query
|
|
|
|
* copied t1 back for feeding_recovery
|
|
|
|
* recovery happens
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
|
|
|
mysqltest.t1 check status OK
|
|
|
|
* testing that checksum after recovery is as expected
|
|
|
|
Checksum-check
|
|
|
|
ok
|
|
|
|
* compared t1 to old version
|
|
|
|
use mysqltest;
|
|
|
|
drop table t1;
|
2010-09-12 18:40:01 +02:00
|
|
|
create table t1 engine=aria select 1;
|
2009-01-16 22:00:39 +01:00
|
|
|
* copied t1 for feeding_recovery
|
2010-09-12 18:40:01 +02:00
|
|
|
set global aria_checkpoint_interval=0;
|
2009-01-16 22:00:39 +01:00
|
|
|
insert into t1 values(2);
|
|
|
|
truncate table t1;
|
|
|
|
flush table t1;
|
|
|
|
* copied t1 for comparison
|
|
|
|
truncate table t1;
|
2011-12-15 22:07:58 +01:00
|
|
|
SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash_create_table";
|
2009-01-16 22:00:39 +01:00
|
|
|
* crashing mysqld intentionally
|
|
|
|
truncate table t1;
|
|
|
|
ERROR HY000: Lost connection to MySQL server during query
|
|
|
|
* recovery happens
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
2014-12-22 15:53:17 +01:00
|
|
|
mysqltest.t1 check warning Size of indexfile is: <SIZE> Expected: 8192
|
2009-01-16 22:00:39 +01:00
|
|
|
mysqltest.t1 check status OK
|
|
|
|
* testing that checksum after recovery is as expected
|
|
|
|
Checksum-check
|
|
|
|
ok
|
|
|
|
use mysqltest;
|
|
|
|
truncate table t1;
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
|
|
|
mysqltest.t1 check status OK
|
|
|
|
drop table t1;
|
2011-12-13 18:57:19 +01:00
|
|
|
CREATE TABLE t1 ( word VARCHAR(255) PRIMARY KEY ) ENGINE=Aria;
|
|
|
|
LOAD DATA INFILE '../../std_data/bug887051.txt' INTO TABLE t1;
|
|
|
|
SET AUTOCOMMIT=0;
|
|
|
|
DELETE FROM t1;
|
|
|
|
LOAD DATA INFILE '../../std_data/bug887051.txt' INTO TABLE t1 IGNORE 1 LINES;
|
|
|
|
COMMIT;
|
2012-01-13 15:50:02 +01:00
|
|
|
SET SESSION debug_dbug="+d,maria_flush_whole_log,maria_crash";
|
2011-12-13 18:57:19 +01:00
|
|
|
* crashing mysqld intentionally
|
|
|
|
set global aria_checkpoint_interval=1;
|
|
|
|
ERROR HY000: Lost connection to MySQL server during query
|
|
|
|
* recovery happens
|
|
|
|
check table t1 extended;
|
|
|
|
Table Op Msg_type Msg_text
|
|
|
|
mysqltest.t1 check status OK
|
|
|
|
* testing that checksum after recovery is as expected
|
|
|
|
Checksum-check
|
|
|
|
failure
|
|
|
|
use mysqltest;
|
|
|
|
select * from t1;
|
|
|
|
word
|
|
|
|
saved2
|
|
|
|
drop table t1;
|
2009-02-12 15:08:56 +01:00
|
|
|
drop database mysqltest_for_feeding_recovery;
|
2008-12-05 22:11:46 +01:00
|
|
|
drop database mysqltest_for_comparison;
|
|
|
|
drop database mysqltest;
|