1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

Merge 10.1 into 10.2

This commit is contained in:
Marko Mäkelä
2017-09-06 19:28:51 +03:00
33 changed files with 214 additions and 239 deletions

View File

@@ -5063,6 +5063,11 @@ sub mysqld_start ($$) {
}
}
# "Dynamic" version of MYSQLD_CMD is reevaluated with each mysqld_start.
# Use it to restart the server at testing a failing server start (e.g
# due to incompatible options).
$ENV{'MYSQLD_LAST_CMD'}= "$exe @$args";
if ( $opt_gdb || $opt_manual_gdb )
{
gdb_arguments(\$args, \$exe, $mysqld->name());
@@ -5159,11 +5164,6 @@ sub mysqld_start ($$) {
# Remember options used when starting
$mysqld->{'started_opts'}= $extra_opts;
# "Dynamic" version of MYSQLD_CMD is reevaluated with each mysqld_start.
# Use it to restart the server at testing a failing server start (e.g
# due to incompatible options).
$ENV{'MYSQLD_LAST_CMD'}= "$exe @$args";
return;
}

View File

@@ -8087,6 +8087,34 @@ CALL sp1();
CALL sp1();
drop user 'foo'@'%';
drop procedure sp1;
#
# MDEV-10972: Insert from select / view / union --
# repeatable crash in 10.1, 10.2 Linux/Mac/Windows
#
create table t (id int auto_increment primary key);
insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503);
create VIEW v AS
select id from t
union
select id from t
;
drop procedure if exists p;
Warnings:
Note 1305 PROCEDURE test.p does not exist
create procedure p()
insert into tmp_t select t.id from (
select id from v
union
select id from v
) sq
inner join t on (sq.id = t.id);
CALL p();
ERROR 42S02: Table 'test.tmp_t' doesn't exist
create table tmp_t (id int null);
CALL p();
drop procedure p;
drop view v;
drop table t, tmp_t;
#End of 10.1 tests
#
# MDEV-11081: CURSOR for query with GROUP BY

View File

@@ -1,37 +1,17 @@
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=DYNAMIC;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT;
SHOW WARNINGS;
Level Code Message
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B');
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B');
INSERT INTO t1 SELECT a FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
UPDATE t1 SET a=CONCAT(a, RAND(), a);
SELECT * from t1;
DROP TABLE t1;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=REDUNDANT;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC;
SHOW WARNINGS;
Level Code Message
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B');
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B');
INSERT INTO t1 SELECT a FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
UPDATE t1 SET a=CONCAT(a, RAND(), a);
SELECT * from t1;

View File

@@ -1,6 +1,5 @@
--innodb-file-per-table
--innodb-file-format='Barracuda'
--innodb-buffer-pool-size=32M
--innodb-log-file-size=32M
--innodb-page-size=64k
--innodb-strict-mode=OFF

View File

@@ -1,24 +1,13 @@
--source include/have_innodb.inc
--source include/innodb_page_size.inc
#
# MDEV-13227: Assertion failure len < 16384 in file rem0rec.cc line 1285
# Crashes with innodb_page_size=64K. Does not crash at <= 32K.
#
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=DYNAMIC;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT;
SHOW WARNINGS;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B');
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B');
INSERT INTO t1 SELECT a FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
UPDATE t1 SET a=CONCAT(a, RAND(), a);
# random data no output we are only interested if fails
@@ -27,20 +16,10 @@ SELECT * from t1;
--enable_result_log
DROP TABLE t1;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=REDUNDANT;
CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC;
SHOW WARNINGS;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B');
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B');
INSERT INTO t1 SELECT a FROM t1;
UPDATE t1 SET a=CONCAT(a, RAND(), a);
UPDATE t1 SET a=CONCAT(a, RAND(), a);
# random data no output we are only interested if fails

View File

@@ -9549,6 +9549,37 @@ CALL sp1();
drop user 'foo'@'%';
drop procedure sp1;
--echo #
--echo # MDEV-10972: Insert from select / view / union --
--echo # repeatable crash in 10.1, 10.2 Linux/Mac/Windows
--echo #
create table t (id int auto_increment primary key);
insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503);
create VIEW v AS
select id from t
union
select id from t
;
drop procedure if exists p;
create procedure p()
insert into tmp_t select t.id from (
select id from v
union
select id from v
) sq
inner join t on (sq.id = t.id);
--error ER_NO_SUCH_TABLE
CALL p();
create table tmp_t (id int null);
CALL p();
drop procedure p;
drop view v;
drop table t, tmp_t;
--echo #End of 10.1 tests

View File

@@ -1249,6 +1249,7 @@ else
if ((c = *ptr) >= CHAR_8) break;
/* fall through */
/* Fall through with a digit less than 8 */
/* \0 always starts an octal number, but we may drop through to here with a
@@ -5097,6 +5098,8 @@ for (;; ptr++)
either not match or match, depending on whether the class is or is
not negated. */
/* fall through */
default:
if (local_negate &&
(xclass || tempptr[2] != CHAR_RIGHT_SQUARE_BRACKET))
@@ -7165,7 +7168,7 @@ for (;; ptr++)
goto FAILED;
}
/* Fall through to handle (?P< as (?< is handled */
/* fall through */
/* ------------------------------------------------------------ */
DEFINE_NAME: /* Come here from (?< handling */

View File

@@ -1053,6 +1053,8 @@ for (;;)
group. At this point, the return is converted into MATCH_NOMATCH so that
previous backup points can be taken. */
/* fall through */
case OP_ONCE:
case OP_BRA:
case OP_SBRA:

View File

@@ -45,12 +45,6 @@ static const LEX_STRING metadata_lock_info_lock_mode[] = {
{ C_STRING_WITH_LEN("MDL_EXCLUSIVE") },
};
static const LEX_STRING metadata_lock_info_duration[] = {
{ C_STRING_WITH_LEN("MDL_STATEMENT") },
{ C_STRING_WITH_LEN("MDL_TRANSACTION") },
{ C_STRING_WITH_LEN("MDL_EXPLICIT") },
};
static ST_FIELD_INFO i_s_metadata_lock_info_fields_info[] =
{
{"THREAD_ID", 20, MYSQL_TYPE_LONGLONG, 0,
@@ -129,8 +123,6 @@ static int i_s_metadata_lock_info_init(
== MDL_key::NAMESPACE_END);
compile_time_assert(sizeof(metadata_lock_info_lock_mode)/sizeof(LEX_STRING)
== MDL_TYPE_END);
compile_time_assert(sizeof(metadata_lock_info_duration)/sizeof(LEX_STRING)
== MDL_DURATION_END);
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *) p;
DBUG_ENTER("i_s_metadata_lock_info_init");

View File

@@ -7905,7 +7905,7 @@ uint32 ha_partition::calculate_key_hash_value(Field **field_array)
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_GEOMETRY:
/* fall through. */
/* fall through */
default:
DBUG_ASSERT(0); // New type?
/* Fall through for default hashing (5.5). */

View File

@@ -760,6 +760,7 @@ static sp_head *sp_compile(THD *thd, String *defstr, sql_mode_t sql_mode,
else
{
sp= thd->lex->sphead;
sp->set_select_number(thd->select_number);
}
thd->pop_internal_handler();

View File

@@ -579,7 +579,7 @@ sp_head::sp_head()
m_flags(0),
m_sp_cache_version(0),
m_creation_ctx(0),
unsafe_flags(0),
unsafe_flags(0), m_select_number(1),
m_recursion_level(0),
m_next_cached_sp(0),
m_cont_level(0)
@@ -2110,8 +2110,26 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
if (!err_status)
{
/*
Normally the counter is not reset between parsing and first execution,
but it is possible in case of error to have parsing on one CALL and
first execution (where VIEW will be parsed and added). So we store the
counter after parsing and restore it before execution just to avoid
repeating SELECT numbers.
*/
thd->select_number= m_select_number;
err_status= execute(thd, TRUE);
DBUG_PRINT("info", ("execute returned %d", (int) err_status));
/*
This execution of the SP was aborted with an error (e.g. "Table not
found"). However it might still have consumed some numbers from the
thd->select_number counter. The next sp->exec() call must not use the
consumed numbers, so we remember the first free number (We know that
nobody will use it as this execution has stopped with an error).
*/
if (err_status)
set_select_number(thd->select_number);
}
if (save_log_general)

View File

@@ -229,6 +229,7 @@ private:
*/
uint32 unsafe_flags;
uint m_select_number;
public:
inline Stored_program_creation_ctx *get_creation_ctx()
{
@@ -517,6 +518,8 @@ public:
sp_pcontext *get_parse_context() { return m_pcont; }
void set_select_number(uint num) { m_select_number= num; }
private:
MEM_ROOT *m_thd_root; ///< Temp. store for thd's mem_root

View File

@@ -1173,28 +1173,20 @@ buf_page_is_corrupted(
}
#ifndef UNIV_INNOCHECKSUM
/** Prints a page to stderr.
@param[in] read_buf a database page
@param[in] page_size page size
@param[in] flags 0 or BUF_PAGE_PRINT_NO_CRASH or
BUF_PAGE_PRINT_NO_FULL */
/** Dump a page to stderr.
@param[in] read_buf database page
@param[in] page_size page size */
UNIV_INTERN
void
buf_page_print(
const byte* read_buf,
const page_size_t& page_size,
ulint flags)
buf_page_print(const byte* read_buf, const page_size_t& page_size)
{
dict_index_t* index;
if (!(flags & BUF_PAGE_PRINT_NO_FULL)) {
ib::info() << "Page dump in ascii and hex ("
<< page_size.physical() << " bytes):";
ib::info() << "Page dump in ascii and hex ("
<< page_size.physical() << " bytes):";
ut_print_buf(stderr, read_buf, page_size.physical());
fputs("\nInnoDB: End of page dump\n", stderr);
}
ut_print_buf(stderr, read_buf, page_size.physical());
fputs("\nInnoDB: End of page dump\n", stderr);
if (page_size.is_compressed()) {
/* Print compressed page. */
@@ -1359,8 +1351,6 @@ buf_page_print(
stderr);
break;
}
ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH);
}
# ifdef PFS_GROUP_BUFFER_SYNC
@@ -5984,8 +5974,7 @@ database_corrupted:
<< ". You may have to recover from "
<< "a backup.";
buf_page_print(frame, bpage->size,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(frame, bpage->size);
ib::info()
<< "It is also possible that your"

View File

@@ -827,7 +827,7 @@ buf_dblwr_assert_on_corrupt_block(
/*==============================*/
const buf_block_t* block) /*!< in: block to check */
{
buf_page_print(block->frame, univ_page_size, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(block->frame, univ_page_size);
ib::fatal() << "Apparent corruption of an index page "
<< block->page.id

View File

@@ -698,11 +698,12 @@ fil_space_encrypt(
fprintf(stderr, "ok %d corrupted %d corrupted1 %d err %d different %d\n",
ok , corrupted, corrupted1, err, different);
fprintf(stderr, "src_frame\n");
buf_page_print(src_frame, page_size, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(src_frame, page_size);
fprintf(stderr, "encrypted_frame\n");
buf_page_print(tmp, page_size, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(tmp, page_size);
fprintf(stderr, "decrypted_frame\n");
buf_page_print(tmp_mem, page_size, 0);
buf_page_print(tmp_mem, page_size);
ut_ad(0);
}
free(tmp_mem);

View File

@@ -313,7 +313,8 @@ fil_compress_page(
if (buf_page_is_corrupted(false, uncomp_page, univ_page_size,
space)) {
buf_page_print(uncomp_page, univ_page_size, 0);
buf_page_print(uncomp_page, univ_page_size);
ut_ad(0);
}
ut_free(comp_page);
@@ -648,6 +649,7 @@ err_exit:
<< " compression method: "
<< fil_get_compression_alg_name(compression_alg) << ".";
buf_page_print(buf, univ_page_size, 0);
buf_page_print(buf, univ_page_size);
fil_space_release_for_io(space);
ut_ad(0);
}

View File

@@ -893,24 +893,13 @@ buf_print(void);
/*============*/
#endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */
enum buf_page_print_flags {
/** Do not crash at the end of buf_page_print(). */
BUF_PAGE_PRINT_NO_CRASH = 1,
/** Do not print the full page dump. */
BUF_PAGE_PRINT_NO_FULL = 2
};
/** Prints a page to stderr.
@param[in] read_buf a database page
@param[in] page_size page size
@param[in] flags 0 or BUF_PAGE_PRINT_NO_CRASH or
BUF_PAGE_PRINT_NO_FULL */
/** Dump a page to stderr.
@param[in] read_buf database page
@param[in] page_size page size */
UNIV_INTERN
void
buf_page_print(
const byte* read_buf,
const page_size_t& page_size,
ulint flags);
buf_page_print(const byte* read_buf, const page_size_t& page_size)
ATTRIBUTE_COLD __attribute__((nonnull));
/********************************************************************//**
Decompress a block.
@return TRUE if successful */

View File

@@ -1796,6 +1796,7 @@ rec_loop:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -1856,6 +1857,7 @@ skip_lock:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4597,6 +4599,7 @@ wait_table_again:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4679,6 +4682,7 @@ rec_loop:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4940,6 +4944,7 @@ no_gap_lock:
prebuilt->new_rec_locks = 1;
}
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
case DB_LOCK_WAIT:

View File

@@ -77,10 +77,9 @@ btr_corruption_report(
index->name, index->table_name);
if (block->page.zip.data) {
buf_page_print(block->page.zip.data,
buf_block_get_zip_size(block),
BUF_PAGE_PRINT_NO_CRASH);
buf_block_get_zip_size(block));
}
buf_page_print(buf_nonnull_block_get_frame(block), 0, 0);
buf_page_print(buf_nonnull_block_get_frame(block), 0);
}
#ifndef UNIV_HOTBACKUP
@@ -1601,11 +1600,9 @@ btr_page_get_father_node_ptr_func(
if (btr_node_ptr_get_child_page_no(node_ptr, offsets) != page_no) {
rec_t* print_rec;
fputs("InnoDB: Dump of the child page:\n", stderr);
buf_page_print(page_align(user_rec), 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page_align(user_rec), 0);
fputs("InnoDB: Dump of the parent page:\n", stderr);
buf_page_print(page_align(node_ptr), 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page_align(node_ptr), 0);
fputs("InnoDB: Corruption of an index tree: table ", stderr);
ut_print_name(stderr, NULL, TRUE, index->table_name);
@@ -2080,8 +2077,8 @@ btr_page_reorganize_low(
max_ins_size2 = page_get_max_insert_size_after_reorganize(page, 1);
if (data_size1 != data_size2 || max_ins_size1 != max_ins_size2) {
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(temp_page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
buf_page_print(temp_page, 0);
fprintf(stderr,
"InnoDB: Error: page old data size %lu"
@@ -4609,7 +4606,7 @@ btr_index_rec_validate(
(ulong) rec_get_n_fields_old(rec), (ulong) n);
if (dump_on_error) {
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
fputs("InnoDB: corrupt record ", stderr);
rec_print_old(stderr, rec);
@@ -4647,8 +4644,7 @@ btr_index_rec_validate(
(ulong) i, (ulong) len, (ulong) fixed_size);
if (dump_on_error) {
buf_page_print(page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
fputs("InnoDB: corrupt record ", stderr);
rec_print_new(stderr, rec, offsets);
@@ -4925,8 +4921,8 @@ loop:
btr_validate_report2(index, level, block, right_block);
fputs("InnoDB: broken FIL_PAGE_NEXT"
" or FIL_PAGE_PREV links\n", stderr);
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
ret = false;
}
@@ -4934,8 +4930,8 @@ loop:
if (page_is_comp(right_page) != page_is_comp(page)) {
btr_validate_report2(index, level, block, right_block);
fputs("InnoDB: 'compact' flag mismatch\n", stderr);
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
ret = false;
@@ -4957,8 +4953,8 @@ loop:
fputs("InnoDB: records in wrong order"
" on adjacent pages\n", stderr);
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
fputs("InnoDB: record ", stderr);
rec = page_rec_get_prev(page_get_supremum_rec(page));
@@ -5006,8 +5002,8 @@ loop:
fputs("InnoDB: node pointer to the page is wrong\n",
stderr);
buf_page_print(father_page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(father_page, 0);
buf_page_print(page, 0);
fputs("InnoDB: node ptr ", stderr);
rec_print(stderr, node_ptr, index);
@@ -5039,10 +5035,8 @@ loop:
btr_validate_report1(index, level, block);
buf_page_print(father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(father_page, 0);
buf_page_print(page, 0);
fputs("InnoDB: Error: node ptrs differ"
" on levels > 0\n"
@@ -5087,15 +5081,9 @@ loop:
btr_validate_report1(index, level,
block);
buf_page_print(
father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
right_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(father_page, 0);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
}
} else {
page_t* right_father_page
@@ -5113,18 +5101,10 @@ loop:
btr_validate_report1(index, level,
block);
buf_page_print(
father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
right_father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
right_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(father_page, 0);
buf_page_print(right_father_page, 0);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
}
if (page_get_page_no(right_father_page)
@@ -5138,18 +5118,10 @@ loop:
btr_validate_report1(index, level,
block);
buf_page_print(
father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
right_father_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(
right_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(father_page, 0);
buf_page_print(right_father_page, 0);
buf_page_print(page, 0);
buf_page_print(right_page, 0);
}
}
}

View File

@@ -2022,9 +2022,7 @@ btr_search_validate_one_table(
(ulong) block->curr_left_side);
if (n_page_dumps < 20) {
buf_page_print(
page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
n_page_dumps++;
}
}

View File

@@ -956,19 +956,12 @@ buf_page_is_corrupted(
return(false);
}
/********************************************************************//**
Prints a page to stderr. */
/** Dump a page to stderr.
@param[in] read_buf database page
@param[in] zip_size compressed page size, or 0 for uncompressed */
UNIV_INTERN
void
buf_page_print(
/*===========*/
const byte* read_buf, /*!< in: a database page */
ulint zip_size, /*!< in: compressed page size, or
0 for uncompressed pages */
ulint flags) /*!< in: 0 or
BUF_PAGE_PRINT_NO_CRASH or
BUF_PAGE_PRINT_NO_FULL */
buf_page_print(const byte* read_buf, ulint zip_size)
{
#ifndef UNIV_HOTBACKUP
dict_index_t* index;
@@ -979,14 +972,12 @@ buf_page_print(
size = UNIV_PAGE_SIZE;
}
if (!(flags & BUF_PAGE_PRINT_NO_FULL)) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Page dump in ascii and hex (%lu bytes):\n",
size);
ut_print_buf(stderr, read_buf, size);
fputs("\nInnoDB: End of page dump\n", stderr);
}
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Page dump in ascii and hex (%lu bytes):\n",
size);
ut_print_buf(stderr, read_buf, size);
fputs("\nInnoDB: End of page dump\n", stderr);
if (zip_size) {
/* Print compressed page. */
@@ -1141,8 +1132,6 @@ buf_page_print(
stderr);
break;
}
ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH);
}
#ifndef UNIV_HOTBACKUP
@@ -4832,8 +4821,8 @@ database_corrupted:
space->name,
bpage->space, bpage->offset);
buf_page_print(frame, buf_page_get_zip_size(bpage),
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(frame,
buf_page_get_zip_size(bpage));
ib_logf(IB_LOG_LEVEL_INFO,
"It is also possible that your"

View File

@@ -800,7 +800,7 @@ buf_dblwr_assert_on_corrupt_block(
/*==============================*/
const buf_block_t* block) /*!< in: block to check */
{
buf_page_print(block->frame, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(block->frame, 0);
ut_print_timestamp(stderr);
fprintf(stderr,

View File

@@ -742,11 +742,12 @@ fil_space_encrypt(
fprintf(stderr, "ok %d corrupted %d corrupted1 %d err %d different %d\n",
ok , corrupted, corrupted1, err, different);
fprintf(stderr, "src_frame\n");
buf_page_print(src_frame, zip_size, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(src_frame, zip_size);
fprintf(stderr, "encrypted_frame\n");
buf_page_print(tmp, zip_size, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(tmp, zip_size);
fprintf(stderr, "decrypted_frame\n");
buf_page_print(tmp_mem, zip_size, 0);
buf_page_print(tmp_mem, zip_size);
ut_ad(0);
}
free(tmp_mem);

View File

@@ -397,7 +397,8 @@ fil_compress_page(
fil_decompress_page(uncomp_page, comp_page, ulong(len), NULL);
if (buf_page_is_corrupted(false, uncomp_page, 0, space)) {
buf_page_print(uncomp_page, 0, 0);
buf_page_print(uncomp_page, 0);
ut_ad(0);
}
ut_free(comp_page);

View File

@@ -4104,7 +4104,7 @@ ibuf_insert_to_index_page(
"InnoDB: but the number of fields does not match!\n",
stderr);
dump:
buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page, 0);
dtuple_print(stderr, entry);
ut_ad(0);
@@ -4723,15 +4723,13 @@ ibuf_merge_or_delete_for_page(
fputs("InnoDB: cannot retrieve bitmap page\n",
stderr);
} else {
buf_page_print(bitmap_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(bitmap_page, 0);
}
ibuf_mtr_commit(&mtr);
fputs("\nInnoDB: Dump of the page:\n", stderr);
buf_page_print(block->frame, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(block->frame, 0);
fprintf(stderr,
"InnoDB: Error: corruption in the tablespace."

View File

@@ -306,7 +306,7 @@ btr_node_ptr_get_child_page_no(
"InnoDB: a nonsensical page number 0"
" in a node ptr record at offset %lu\n",
(ulong) page_offset(rec));
buf_page_print(page_align(rec), 0, 0);
buf_page_print(page_align(rec), 0);
ut_ad(0);
}

View File

@@ -758,26 +758,15 @@ buf_print(void);
/*============*/
#endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */
#endif /* !UNIV_HOTBACKUP */
enum buf_page_print_flags {
/** Do not crash at the end of buf_page_print(). */
BUF_PAGE_PRINT_NO_CRASH = 1,
/** Do not print the full page dump. */
BUF_PAGE_PRINT_NO_FULL = 2
};
/********************************************************************//**
Prints a page to stderr. */
/** Dump a page to stderr.
@param[in] read_buf database page
@param[in] zip_size compressed page size, or 0 for uncompressed */
UNIV_INTERN
void
buf_page_print(
/*===========*/
const byte* read_buf, /*!< in: a database page */
ulint zip_size, /*!< in: compressed page size, or
0 for uncompressed pages */
ulint flags) /*!< in: 0 or
BUF_PAGE_PRINT_NO_CRASH or
BUF_PAGE_PRINT_NO_FULL */
UNIV_COLD;
buf_page_print(const byte* read_buf, ulint zip_size)
UNIV_COLD MY_ATTRIBUTE((nonnull));
/********************************************************************//**
Decompress a block.
@return TRUE if successful */

View File

@@ -771,7 +771,7 @@ page_rec_get_next_low(
(void*) rec,
(ulong) page_get_space_id(page),
(ulong) page_get_page_no(page));
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_error;
} else if (offs == 0) {

View File

@@ -1921,7 +1921,7 @@ lock_sec_rec_some_has_impl(
} else if (!lock_check_trx_id_sanity(max_trx_id, rec, index, offsets)) {
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
/* The page is corrupt: try to avoid a crash by returning 0 */
trx_id = 0;

View File

@@ -903,7 +903,7 @@ page_cur_parse_insert_rec(
ut_print_buf(stderr, ptr2, 300);
putc('\n', stderr);
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_error;
}

View File

@@ -154,7 +154,7 @@ page_dir_find_owner_slot(
fputs("\n"
"InnoDB: on that page!\n", stderr);
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_error;
}
@@ -618,10 +618,8 @@ page_copy_rec_list_end_no_locks(
/* Track an assertion failure reported on the mailing
list on June 18th, 2003 */
buf_page_print(new_page, 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page_align(rec), 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(new_page, 0);
buf_page_print(page_align(rec), 0);
ut_print_timestamp(stderr);
fprintf(stderr,
@@ -1953,7 +1951,8 @@ page_check_dir(
fprintf(stderr,
"InnoDB: Page directory corruption:"
" infimum not pointed to\n");
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_ad(0);
}
if (UNIV_UNLIKELY(!page_rec_is_supremum_low(supremum_offs))) {
@@ -1961,7 +1960,8 @@ page_check_dir(
fprintf(stderr,
"InnoDB: Page directory corruption:"
" supremum not pointed to\n");
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_ad(0);
}
}
#endif /* !UNIV_HOTBACKUP */
@@ -2679,7 +2679,8 @@ func_exit2:
(ulong) page_get_space_id(page),
(ulong) page_get_page_no(page),
index->name);
buf_page_print(page, 0, 0);
buf_page_print(page, 0);
ut_ad(0);
}
return(ret);

View File

@@ -1545,6 +1545,7 @@ rec_loop:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -1603,6 +1604,7 @@ skip_lock:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4186,6 +4188,7 @@ wait_table_again:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4281,6 +4284,7 @@ rec_loop:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
default:
@@ -4323,8 +4327,7 @@ wrong_offs:
if ((srv_force_recovery == 0 || moves_up == FALSE)
&& srv_pass_corrupt_table <= 1) {
ut_print_timestamp(stderr);
buf_page_print(page_align(rec), 0,
BUF_PAGE_PRINT_NO_CRASH);
buf_page_print(page_align(rec), 0);
fprintf(stderr,
"\nInnoDB: rec address %p,"
" buf block fix count %lu\n",
@@ -4569,6 +4572,7 @@ no_gap_lock:
prebuilt->new_rec_locks = 1;
}
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
break;
case DB_LOCK_WAIT: