mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.5 into 10.6
This commit is contained in:
@ -1623,6 +1623,21 @@ id doc
|
||||
{"$oid":"611c0a463b150154132f6636"} { "_id" : { "$oid" : "611c0a463b150154132f6636" }, "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : 1.0 } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] }
|
||||
DROP TABLE arrNestTest;
|
||||
#
|
||||
# MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
|
||||
#
|
||||
SELECT JSON_OBJECTAGG('"', 1);
|
||||
JSON_OBJECTAGG('"', 1)
|
||||
{"\"":1}
|
||||
SELECT JSON_OBJECTAGG('\"', 1);
|
||||
JSON_OBJECTAGG('\"', 1)
|
||||
{"\"":1}
|
||||
SELECT JSON_OBJECTAGG('\\', 1);
|
||||
JSON_OBJECTAGG('\\', 1)
|
||||
{"\\":1}
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
#
|
||||
# MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
||||
#
|
||||
CREATE TABLE t (a VARCHAR(8));
|
||||
@ -1649,5 +1664,5 @@ JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3') JSON_SET(JSON_OBJECT(l1,
|
||||
{"k1": "v1", "k2": "v2", "k3": "v3"} {"k1": "v1", "k2": "new v2"} {"k1": "v1", "k2": "new v2"}
|
||||
DROP TABLE t;
|
||||
#
|
||||
# End of 10.5 tests
|
||||
# End of 10.6 tests
|
||||
#
|
||||
|
@ -1067,6 +1067,18 @@ INSERT INTO test.arrNestTest (doc) VALUES ('{ "_id" : { "$oid" : "611c0a463b1501
|
||||
SELECT * FROM arrNestTest;
|
||||
DROP TABLE arrNestTest;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
|
||||
--echo #
|
||||
|
||||
SELECT JSON_OBJECTAGG('"', 1);
|
||||
SELECT JSON_OBJECTAGG('\"', 1);
|
||||
SELECT JSON_OBJECTAGG('\\', 1);
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
||||
--echo #
|
||||
@ -1078,7 +1090,6 @@ SELECT JSON_ARRAYAGG(a) AS f FROM v;
|
||||
DROP VIEW v;
|
||||
DROP TABLE t;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-29264 JSON functions overflow error based ON LONGTEXT field
|
||||
--echo #
|
||||
@ -1090,6 +1101,5 @@ SELECT JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3'),JSON_SET(JSON_OBJE
|
||||
DROP TABLE t;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.5 tests
|
||||
--echo # End of 10.6 tests
|
||||
--echo #
|
||||
|
||||
|
@ -51,7 +51,7 @@ ADD INDEX(a,b,d), ADD INDEX(a,d,b), ADD INDEX(b,c,d), ADD INDEX(b,d,c),
|
||||
ALGORITHM=COPY;
|
||||
connection default;
|
||||
SET DEBUG_SYNC='now WAIT_FOR hung';
|
||||
# restart: --innodb-force-recovery=3
|
||||
# restart: --innodb-force-recovery=3 --debug_dbug=+d,recv_ran_out_of_buffer
|
||||
disconnect hang;
|
||||
FTS_INDEX_1.ibd
|
||||
FTS_INDEX_2.ibd
|
||||
|
@ -1,3 +1,7 @@
|
||||
call mtr.add_suppression("InnoDB: The change buffer is corrupted");
|
||||
call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
|
||||
call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
|
||||
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
||||
CREATE PROCEDURE dorepeat()
|
||||
LOOP
|
||||
@ -10,3 +14,19 @@ CALL dorepeat();
|
||||
connection default;
|
||||
# restart: --innodb_buffer_pool_size=5242880
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE dorepeat;
|
||||
#
|
||||
# MDEV-30552 InnoDB recovery crashes when error
|
||||
# handling scenario
|
||||
#
|
||||
SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
|
||||
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||
INSERT INTO t1 SELECT * FROM seq_1_to_65536;
|
||||
# restart: --innodb_buffer_pool_size=5242880 --debug_dbug=+d,ibuf_init_corrupt
|
||||
# restart
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f1` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
DROP TABLE t1;
|
||||
|
@ -57,7 +57,7 @@ ALTER TABLE t ADD INDEX(b,c,d,a),ADD INDEX(b,c,a,d),ADD INDEX(b,a,c,d),ADD INDEX
|
||||
connection default;
|
||||
SET DEBUG_SYNC='now WAIT_FOR hung';
|
||||
let $shutdown_timeout=0;
|
||||
--let $restart_parameters= --innodb-force-recovery=3
|
||||
--let $restart_parameters= --innodb-force-recovery=3 --debug_dbug="+d,recv_ran_out_of_buffer"
|
||||
--source include/restart_mysqld.inc
|
||||
disconnect hang;
|
||||
let $shutdown_timeout=;
|
||||
|
@ -1,5 +1,10 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
--source include/have_sequence.inc
|
||||
call mtr.add_suppression("InnoDB: The change buffer is corrupted");
|
||||
call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
|
||||
call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
|
||||
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
||||
DELIMITER |;
|
||||
|
||||
@ -19,3 +24,19 @@ let $shutdown_timeout=0;
|
||||
let $restart_parameters=--innodb_buffer_pool_size=5242880;
|
||||
--source include/restart_mysqld.inc
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE dorepeat;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-30552 InnoDB recovery crashes when error
|
||||
--echo # handling scenario
|
||||
--echo #
|
||||
SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
|
||||
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||
INSERT INTO t1 SELECT * FROM seq_1_to_65536;
|
||||
let $shutdown_timeout=0;
|
||||
let $restart_parameters=--innodb_buffer_pool_size=5242880 --debug_dbug="+d,ibuf_init_corrupt";
|
||||
--source include/restart_mysqld.inc
|
||||
let $restart_parameters=;
|
||||
--source include/restart_mysqld.inc
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
@ -4083,7 +4083,7 @@ bool Item_func_json_objectagg::add()
|
||||
result.append(STRING_WITH_LEN(", "));
|
||||
|
||||
result.append('"');
|
||||
result.append(*key);
|
||||
st_append_escaped(&result,key);
|
||||
result.append(STRING_WITH_LEN("\":"));
|
||||
|
||||
buf.length(0);
|
||||
|
@ -397,6 +397,11 @@ buf_block_t *buf_LRU_get_free_block(bool have_mutex)
|
||||
mysql_mutex_assert_owner(&buf_pool.mutex);
|
||||
goto got_mutex;
|
||||
}
|
||||
DBUG_EXECUTE_IF("recv_ran_out_of_buffer",
|
||||
if (recv_recovery_is_on()
|
||||
&& recv_sys.apply_log_recs) {
|
||||
goto flush_lru;
|
||||
});
|
||||
mysql_mutex_lock(&buf_pool.mutex);
|
||||
got_mutex:
|
||||
buf_LRU_check_size_of_non_data_objects();
|
||||
@ -482,7 +487,9 @@ not_found:
|
||||
removing the block from buf_pool.page_hash and buf_pool.LRU is fairly
|
||||
involved (particularly in case of ROW_FORMAT=COMPRESSED pages). We
|
||||
can do that in a separate patch sometime in future. */
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
flush_lru:
|
||||
#endif
|
||||
if (!buf_flush_LRU(innodb_lru_flush_size)) {
|
||||
MONITOR_INC(MONITOR_LRU_SINGLE_FLUSH_FAILURE_COUNT);
|
||||
++flush_failures;
|
||||
|
@ -426,6 +426,10 @@ err_exit:
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
DBUG_EXECUTE_IF("ibuf_init_corrupt",
|
||||
err = DB_CORRUPTION;
|
||||
goto err_exit;);
|
||||
|
||||
if (page_is_comp(root) || fil_page_get_type(root) != FIL_PAGE_INDEX
|
||||
|| btr_page_get_index_id(root) != DICT_IBUF_ID_MIN) {
|
||||
err = DB_CORRUPTION;
|
||||
|
@ -747,8 +747,10 @@ static struct
|
||||
bool reinit_all()
|
||||
{
|
||||
retry:
|
||||
mysql_mutex_unlock(&log_sys.mutex);
|
||||
bool fail= false;
|
||||
buf_block_t *free_block= buf_LRU_get_free_block(false);
|
||||
mysql_mutex_lock(&log_sys.mutex);
|
||||
mysql_mutex_lock(&recv_sys.mutex);
|
||||
|
||||
for (auto d= defers.begin(); d != defers.end(); )
|
||||
@ -3287,8 +3289,22 @@ void recv_sys_t::apply(bool last_batch)
|
||||
|
||||
fil_system.extend_to_recv_size();
|
||||
|
||||
/* We must release log_sys.mutex and recv_sys.mutex before
|
||||
invoking buf_LRU_get_free_block(). Allocating a block may initiate
|
||||
a redo log write and therefore acquire log_sys.mutex. To avoid
|
||||
deadlocks, log_sys.mutex must not be acquired while holding
|
||||
recv_sys.mutex. */
|
||||
mysql_mutex_unlock(&mutex);
|
||||
if (!last_batch)
|
||||
mysql_mutex_unlock(&log_sys.mutex);
|
||||
|
||||
mysql_mutex_assert_not_owner(&log_sys.mutex);
|
||||
buf_block_t *free_block= buf_LRU_get_free_block(false);
|
||||
|
||||
if (!last_batch)
|
||||
mysql_mutex_lock(&log_sys.mutex);
|
||||
mysql_mutex_lock(&mutex);
|
||||
|
||||
for (map::iterator p= pages.begin(); p != pages.end(); )
|
||||
{
|
||||
const page_id_t page_id= p->first;
|
||||
@ -3334,7 +3350,12 @@ erase_for_space:
|
||||
{
|
||||
next_free_block:
|
||||
mysql_mutex_unlock(&mutex);
|
||||
if (!last_batch)
|
||||
mysql_mutex_unlock(&log_sys.mutex);
|
||||
mysql_mutex_assert_not_owner(&log_sys.mutex);
|
||||
free_block= buf_LRU_get_free_block(false);
|
||||
if (!last_batch)
|
||||
mysql_mutex_lock(&log_sys.mutex);
|
||||
mysql_mutex_lock(&mutex);
|
||||
break;
|
||||
}
|
||||
@ -4305,6 +4326,11 @@ completed:
|
||||
mysql_mutex_unlock(&log_sys.mutex);
|
||||
return(DB_ERROR);
|
||||
}
|
||||
|
||||
/* In case of multi-batch recovery,
|
||||
redo log for the last batch is not
|
||||
applied yet. */
|
||||
ut_d(recv_sys.after_apply = false);
|
||||
}
|
||||
} else {
|
||||
ut_ad(!rescan || recv_sys.pages.empty());
|
||||
|
Reference in New Issue
Block a user