mirror of
https://github.com/MariaDB/server.git
synced 2025-08-30 11:22:14 +03:00
This commit fixed the problems with S3 after the "DROP TABLE FORCE" changes. It also fixes all failing replication S3 tests. A slave is delayed if it is trying to execute replicated queries on a table that is already converted to S3 by the master later in the binlog. Fixes for replication events on S3 tables for delayed slaves: - INSERT and INSERT ... SELECT and CREATE TABLE are ignored but written to the binary log. UPDATE & DELETE will be fixed in a future commit. Other things: - On slaves with --s3-slave-ignore-updates set, allow S3 tables to be opened in read-write mode. This was done to be able to ignore-but-replicate queries like insert. Without this change any open of an S3 table failed with 'Table is read only' which is too early to be able to replicate the original query. - Errors are now printed if handler::extra() call fails in wait_while_tables_are_used(). - Error message for row changes are changed from HA_ERR_WRONG_COMMAND to HA_ERR_TABLE_READONLY. - Disable some maria_extra() calls for S3 tables. This could cause S3 tables to fail in some cases. - Added missing thr_lock_delete() to ma_open() in case of failure. - Removed from mysql_prepare_insert() the not needed argument 'table'.
166 lines
4.5 KiB
Plaintext
166 lines
4.5 KiB
Plaintext
# Test for COALESCE PARTITION, ALTER TABLE and ADD PARTITIONS
|
|
# for tables with HASH partitions
|
|
CREATE TABLE t1 (
|
|
c1 INT DEFAULT NULL
|
|
) ENGINE=Aria
|
|
PARTITION BY HASH (c1)
|
|
PARTITIONS 3;
|
|
INSERT INTO t1 VALUE (1), (2), (101), (102), (201), (202);
|
|
ALTER TABLE t1 ENGINE=S3;
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
6
|
|
SHOW TABLES;
|
|
Tables_in_s3
|
|
t1
|
|
ALTER TABLE t1 COALESCE PARTITION 2;
|
|
ERROR 42000: Table 't1' uses an extension that doesn't exist in this MariaDB version
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
Error 1112 Table 't1' uses an extension that doesn't exist in this MariaDB version
|
|
Error 6 Error on delete of './s3/t1#P#p0#TMP#.MAI' (Errcode: 2 "No such file or directory")
|
|
Error 6 Error on delete of './s3/t1#P#p0#TMP#.MAD' (Errcode: 2 "No such file or directory")
|
|
ALTER TABLE t1 ADD PARTITION PARTITIONS 6;
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
6
|
|
ALTER TABLE t1 ADD COLUMN c INT;
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
6
|
|
DROP TABLE t1;
|
|
# Test for simple change engine to S3
|
|
CREATE TABLE t1 (
|
|
c1 int DEFAULT NULL,
|
|
c2 int DEFAULT NULL
|
|
) ENGINE=Aria
|
|
PARTITION BY RANGE (c1)
|
|
SUBPARTITION BY HASH(c2)
|
|
SUBPARTITIONS 2
|
|
(PARTITION p0 VALUES LESS THAN (100),
|
|
PARTITION p1 VALUES LESS THAN (200),
|
|
PARTITION p3 VALUES LESS THAN (300));
|
|
INSERT INTO t1 VALUE (1,1), (2,2), (101,101), (102,102), (201,201), (202,202);
|
|
ALTER TABLE t1 ENGINE=S3;
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
6
|
|
# Test for rename table
|
|
RENAME TABLE t1 TO t2;
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
6
|
|
# Test for TRUNCATE, ANALYZE, CHECK, REBUILD, OPTIMIZE, REPAIR,
|
|
# ADD, DROP, REORGANIZE partition
|
|
ALTER TABLE t2 TRUNCATE PARTITION p3;
|
|
ERROR HY000: Table 't2' is read only
|
|
ALTER TABLE t2 ANALYZE PARTITION p3;
|
|
Table Op Msg_type Msg_text
|
|
s3.t2 analyze error Table 's3.t2' is read only
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
6
|
|
ALTER TABLE t2 CHECK PARTITION p3;
|
|
Table Op Msg_type Msg_text
|
|
s3.t2 check error Subpartition p3sp0 returned error
|
|
s3.t2 check error Unknown - internal error 165 during operation
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
6
|
|
ALTER TABLE t2 REBUILD PARTITION p0, p1;
|
|
ERROR 42000: Table 't2' uses an extension that doesn't exist in this MariaDB version
|
|
ALTER TABLE t2 OPTIMIZE PARTITION p0, p1;
|
|
Table Op Msg_type Msg_text
|
|
s3.t2 optimize Error Table 't2' is read only
|
|
s3.t2 optimize status Operation failed
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
6
|
|
ALTER TABLE t2 REPAIR PARTITION p0, p1;
|
|
Table Op Msg_type Msg_text
|
|
s3.t2 repair Error Table 't2' is read only
|
|
s3.t2 repair status Operation failed
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
6
|
|
ALTER TABLE t2 ADD PARTITION (PARTITION p4 VALUES LESS THAN (400));
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`c1` int(11) DEFAULT NULL,
|
|
`c2` int(11) DEFAULT NULL
|
|
) ENGINE=S3 DEFAULT CHARSET=latin1
|
|
PARTITION BY RANGE (`c1`)
|
|
SUBPARTITION BY HASH (`c2`)
|
|
SUBPARTITIONS 2
|
|
(PARTITION `p0` VALUES LESS THAN (100) ENGINE = S3,
|
|
PARTITION `p1` VALUES LESS THAN (200) ENGINE = S3,
|
|
PARTITION `p3` VALUES LESS THAN (300) ENGINE = S3,
|
|
PARTITION `p4` VALUES LESS THAN (400) ENGINE = S3)
|
|
ALTER TABLE t2
|
|
REORGANIZE PARTITION p4 INTO (
|
|
PARTITION n0 VALUES LESS THAN (500),
|
|
PARTITION n1 VALUES LESS THAN (600)
|
|
);
|
|
ERROR 42000: Table 't2' uses an extension that doesn't exist in this MariaDB version
|
|
ALTER TABLE t2 DROP PARTITION p3;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`c1` int(11) DEFAULT NULL,
|
|
`c2` int(11) DEFAULT NULL
|
|
) ENGINE=S3 DEFAULT CHARSET=latin1
|
|
PARTITION BY RANGE (`c1`)
|
|
SUBPARTITION BY HASH (`c2`)
|
|
SUBPARTITIONS 2
|
|
(PARTITION `p0` VALUES LESS THAN (100) ENGINE = S3,
|
|
PARTITION `p1` VALUES LESS THAN (200) ENGINE = S3,
|
|
PARTITION `p4` VALUES LESS THAN (400) ENGINE = S3)
|
|
SELECT count(*) from t2;
|
|
count(*)
|
|
4
|
|
# Test for ALTER TABLE
|
|
ALTER TABLE t2 ADD COLUMN c INT;
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
4
|
|
ALTER TABLE t2 DROP COLUMN c;
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
4
|
|
# Test for REMOVE PARTITIONING
|
|
ALTER TABLE t2 REMOVE PARTITIONING;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`c1` int(11) DEFAULT NULL,
|
|
`c2` int(11) DEFAULT NULL
|
|
) ENGINE=S3 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
|
|
SELECT count(*) FROM t2;
|
|
count(*)
|
|
4
|
|
DROP TABLE t2;
|
|
# Test for EXCHANGE PARTITION
|
|
CREATE TABLE t1 (
|
|
c1 int DEFAULT NULL
|
|
) ENGINE=Aria
|
|
PARTITION BY RANGE (c1)
|
|
(PARTITION p0 VALUES LESS THAN (100),
|
|
PARTITION p1 VALUES LESS THAN (200));
|
|
INSERT INTO t1 VALUE (1), (2), (101), (102);
|
|
ALTER TABLE t1 ENGINE=S3;
|
|
CREATE TABLE t_part (
|
|
c1 int DEFAULT NULL
|
|
) ENGINE=Aria;
|
|
INSERT INTO t_part VALUE (120), (130), (140);
|
|
ALTER TABLE t_part ENGINE=S3;
|
|
ALTER TABLE t1 EXCHANGE PARTITION p1 WITH TABLE t_part;
|
|
SELECT count(*) FROM t_part;
|
|
count(*)
|
|
2
|
|
SELECT count(*) FROM t1;
|
|
count(*)
|
|
5
|
|
DROP TABLE t1;
|
|
DROP TABLE t_part;
|