summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-09-07 12:30:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-09-07 12:30:56 +0300
commitae02407ce3a8fa17949383f9156101c9b464d586 (patch)
treea3f63df2a3186832faca5f470f4033d8099e9666
parent8c0d873b76d2fe9651c1da8084b5ace0ff04b419 (diff)
parenta82ed92a6a721f45f23e210c132d5b33d3dccd21 (diff)
downloadmariadb-git-ae02407ce3a8fa17949383f9156101c9b464d586.tar.gz
Merge bb-10.2-ext into 10.3
-rw-r--r--extra/mariabackup/backup_copy.cc2
-rw-r--r--extra/mariabackup/backup_mysql.cc2
-rw-r--r--mysql-test/include/search_pattern_in_file.inc3
-rwxr-xr-xmysql-test/mysql-test-run.pl10
-rw-r--r--mysql-test/r/sp.result28
-rw-r--r--mysql-test/r/view.result35
-rw-r--r--mysql-test/suite/innodb/r/innodb-enlarge-blob.result32
-rw-r--r--mysql-test/suite/innodb/r/table_flags.result1
-rw-r--r--mysql-test/suite/innodb/t/innodb-enlarge-blob.opt3
-rw-r--r--mysql-test/suite/innodb/t/innodb-enlarge-blob.test33
-rw-r--r--mysql-test/suite/innodb/t/table_flags.test5
-rw-r--r--mysql-test/t/sp.test31
-rw-r--r--mysql-test/t/view.test38
-rw-r--r--pcre/pcre_compile.c5
-rw-r--r--pcre/pcre_exec.c2
-rw-r--r--plugin/metadata_lock_info/metadata_lock_info.cc8
-rw-r--r--scripts/wsrep_sst_rsync.sh8
-rw-r--r--sql/ha_partition.cc2
-rw-r--r--sql/sp.cc1
-rw-r--r--sql/sp_head.cc20
-rw-r--r--sql/sp_head.h3
-rw-r--r--sql/sql_class.cc1
-rw-r--r--sql/sql_table.cc1
-rw-r--r--storage/innobase/buf/buf0buf.cc31
-rw-r--r--storage/innobase/buf/buf0dblwr.cc2
-rw-r--r--storage/innobase/fil/fil0crypt.cc7
-rw-r--r--storage/innobase/fil/fil0pagecompress.cc6
-rw-r--r--storage/innobase/include/buf0buf.h23
-rw-r--r--storage/innobase/log/log0recv.cc1
-rw-r--r--storage/innobase/row/row0sel.cc5
-rw-r--r--storage/rocksdb/CMakeLists.txt9
-rw-r--r--storage/rocksdb/ha_rocksdb.cc10
-rw-r--r--storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result3
-rw-r--r--storage/rocksdb/rdb_io_watchdog.cc2
-rw-r--r--storage/rocksdb/rdb_io_watchdog.h2
35 files changed, 243 insertions, 132 deletions
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc
index 7431d6c08eb..fb84153bdee 100644
--- a/extra/mariabackup/backup_copy.cc
+++ b/extra/mariabackup/backup_copy.cc
@@ -1938,7 +1938,7 @@ cleanup:
ctxt->ret = ret;
- os_thread_exit(NULL);
+ os_thread_exit();
OS_THREAD_DUMMY_RETURN;
}
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index 8fe2e186919..edd369e6ea9 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -840,7 +840,7 @@ stop_thread:
os_event_set(kill_query_thread_stopped);
- os_thread_exit(NULL);
+ os_thread_exit();
OS_THREAD_DUMMY_RETURN;
}
diff --git a/mysql-test/include/search_pattern_in_file.inc b/mysql-test/include/search_pattern_in_file.inc
index 3c5529989bb..21192b55efb 100644
--- a/mysql-test/include/search_pattern_in_file.inc
+++ b/mysql-test/include/search_pattern_in_file.inc
@@ -76,5 +76,6 @@ perl;
my $res=@matches ? "FOUND " . scalar(@matches) : "NOT FOUND";
$ENV{SEARCH_FILE} =~ s{^.*?([^/\\]+)$}{$1};
print "$res /$search_pattern/ in $ENV{SEARCH_FILE}\n";
- exit $ENV{SEARCH_ABORT} && $res =~ /^$ENV{SEARCH_ABORT}/;
+ die "$ENV{SEARCH_ABORT}\n"
+ if $ENV{SEARCH_ABORT} && $res =~ /^$ENV{SEARCH_ABORT}/;
EOF
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 70a2b049fc0..a931381d9cc 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -5052,6 +5052,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());
@@ -5148,11 +5153,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;
}
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index f4e7a729367..a1af26cdda0 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -8088,6 +8088,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
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index d0d57e1b1e9..8767b737ca7 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -6603,6 +6603,41 @@ use test;
drop database test_db;
drop user foo@localhost;
#
+# MDEV-13523: Group By in a View, called within a Stored Routine
+# causes Error Code 1356 when a non-root user runs the routine for
+# a second time
+#
+CREATE DATABASE bugTest;
+USE bugTest;
+CREATE TABLE `procViewTable` (`id` int(10), `someText` varchar(50) NOT NULL);
+insert into `procViewTable` values (1,'Test'), (2,'Test 2');
+CREATE USER 'procView'@'%';
+GRANT ALL PRIVILEGES ON `bugTest`.* TO 'procView'@'%';
+CREATE DEFINER=`procView`@`%` VIEW `procViewSimple` AS (
+select * from (
+select `id` from `bugTest`.`procViewTable`
+ ) `innerQuery`
+ group by `innerQuery`.`id`
+);
+connect con1,localhost,procView,,;
+use bugTest;
+prepare stmt from "SELECT * FROM procViewSimple";
+execute stmt;
+id
+1
+2
+execute stmt;
+id
+1
+2
+disconnect con1;
+connection default;
+drop user procView;
+drop view procViewSimple;
+drop table procViewTable;
+use test;
+drop database bugTest;
+#
# End of 10.2 tests
#
#
diff --git a/mysql-test/suite/innodb/r/innodb-enlarge-blob.result b/mysql-test/suite/innodb/r/innodb-enlarge-blob.result
index e74e954e360..8c8e9cf5007 100644
--- a/mysql-test/suite/innodb/r/innodb-enlarge-blob.result
+++ b/mysql-test/suite/innodb/r/innodb-enlarge-blob.result
@@ -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;
diff --git a/mysql-test/suite/innodb/r/table_flags.result b/mysql-test/suite/innodb/r/table_flags.result
index fdb2898dc81..0d636d84529 100644
--- a/mysql-test/suite/innodb/r/table_flags.result
+++ b/mysql-test/suite/innodb/r/table_flags.result
@@ -181,7 +181,6 @@ a
SELECT * FROM tp;
a
DROP TABLE tr,tc,td,tz,tp;
-ib_buffer_pool
ib_logfile0
ib_logfile1
ibdata1
diff --git a/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt b/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt
index 083a93dfc07..2f9bf78f82e 100644
--- a/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt
+++ b/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt
@@ -1,5 +1,4 @@
--innodb-file-per-table
--innodb-buffer-pool-size=32M
---innodb-log-file-size=32M
+--innodb-page-size=64k
--innodb-strict-mode=OFF
-
diff --git a/mysql-test/suite/innodb/t/innodb-enlarge-blob.test b/mysql-test/suite/innodb/t/innodb-enlarge-blob.test
index 84c23465a5c..65a64d299be 100644
--- a/mysql-test/suite/innodb/t/innodb-enlarge-blob.test
+++ b/mysql-test/suite/innodb/t/innodb-enlarge-blob.test
@@ -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
diff --git a/mysql-test/suite/innodb/t/table_flags.test b/mysql-test/suite/innodb/t/table_flags.test
index c64ff5ace20..2c0b55bcaae 100644
--- a/mysql-test/suite/innodb/t/table_flags.test
+++ b/mysql-test/suite/innodb/t/table_flags.test
@@ -204,6 +204,11 @@ DROP TABLE tr,tc,td,tz,tp;
--let $restart_parameters=
--source include/restart_mysqld.inc
+--error 0,1
+--remove_file $bugdir/ibtmp1
+--error 0,1
+--remove_file $bugdir/ib_buffer_pool
+
--list_files $bugdir
--remove_files_wildcard $bugdir
--rmdir $bugdir
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 4b7ee3723db..94d779de203 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -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
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index c24cb502d7b..fc6ee46c1ac 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -6313,6 +6313,44 @@ drop database test_db;
drop user foo@localhost;
--echo #
+--echo # MDEV-13523: Group By in a View, called within a Stored Routine
+--echo # causes Error Code 1356 when a non-root user runs the routine for
+--echo # a second time
+--echo #
+
+CREATE DATABASE bugTest;
+USE bugTest;
+
+CREATE TABLE `procViewTable` (`id` int(10), `someText` varchar(50) NOT NULL);
+insert into `procViewTable` values (1,'Test'), (2,'Test 2');
+
+CREATE USER 'procView'@'%';
+GRANT ALL PRIVILEGES ON `bugTest`.* TO 'procView'@'%';
+
+CREATE DEFINER=`procView`@`%` VIEW `procViewSimple` AS (
+ select * from (
+ select `id` from `bugTest`.`procViewTable`
+ ) `innerQuery`
+ group by `innerQuery`.`id`
+);
+
+--connect (con1,localhost,procView,,)
+use bugTest;
+
+prepare stmt from "SELECT * FROM procViewSimple";
+execute stmt;
+execute stmt;
+
+# Cleanup
+--disconnect con1
+--connection default
+drop user procView;
+drop view procViewSimple;
+drop table procViewTable;
+use test;
+drop database bugTest;
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/pcre/pcre_compile.c b/pcre/pcre_compile.c
index 42f204cdfff..1a916693e69 100644
--- a/pcre/pcre_compile.c
+++ b/pcre/pcre_compile.c
@@ -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 */
diff --git a/pcre/pcre_exec.c b/pcre/pcre_exec.c
index 1a9bdd546ee..70ac2fea381 100644
--- a/pcre/pcre_exec.c
+++ b/pcre/pcre_exec.c
@@ -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:
diff --git a/plugin/metadata_lock_info/metadata_lock_info.cc b/plugin/metadata_lock_info/metadata_lock_info.cc
index 9fe764ea30b..ef6fdd5cc5c 100644
--- a/plugin/metadata_lock_info/metadata_lock_info.cc
+++ b/plugin/metadata_lock_info/metadata_lock_info.cc
@@ -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");
diff --git a/scripts/wsrep_sst_rsync.sh b/scripts/wsrep_sst_rsync.sh
index 23ee3df5d40..7acdf87b660 100644
--- a/scripts/wsrep_sst_rsync.sh
+++ b/scripts/wsrep_sst_rsync.sh
@@ -357,18 +357,18 @@ EOF
readonly RSYNC_PORT=${WSREP_SST_OPT_PORT:-4444}
# If the IP is local listen only in it
- if is_local_ip $RSYNC_ADDR
+ if is_local_ip "$RSYNC_ADDR"
then
- rsync --daemon --no-detach --address $RSYNC_ADDR --port $RSYNC_PORT --config "$RSYNC_CONF" &
+ rsync --daemon --no-detach --address "$RSYNC_ADDR" --port "$RSYNC_PORT" --config "$RSYNC_CONF" &
else
# Not local, possibly a NAT, listen in all interface
- rsync --daemon --no-detach --port $RSYNC_PORT --config "$RSYNC_CONF" &
+ rsync --daemon --no-detach --port "$RSYNC_PORT" --config "$RSYNC_CONF" &
# Overwrite address with all
RSYNC_ADDR="*"
fi
RSYNC_REAL_PID=$!
- until check_pid_and_port $RSYNC_PID $RSYNC_REAL_PID $RSYNC_ADDR $RSYNC_PORT
+ until check_pid_and_port "$RSYNC_PID" "$RSYNC_REAL_PID" "$RSYNC_ADDR" "$RSYNC_PORT"
do
sleep 0.2
done
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 44e14c7a643..bd8dc1efa4c 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -7910,7 +7910,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). */
diff --git a/sql/sp.cc b/sql/sp.cc
index bc7da657462..8f4acd40f10 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -807,6 +807,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();
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index ebd8dd5b8d2..5bd4ff95f9c 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -558,7 +558,7 @@ sp_head::sp_head(const Sp_handler *sph)
m_defstr(null_clex_str),
m_sp_cache_version(0),
m_creation_ctx(0),
- unsafe_flags(0),
+ unsafe_flags(0), m_select_number(1),
m_created(0),
m_modified(0),
m_recursion_level(0),
@@ -2041,8 +2041,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)
diff --git a/sql/sp_head.h b/sql/sp_head.h
index d7ef6fd0921..977e20a07b9 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -235,6 +235,7 @@ private:
*/
uint32 unsafe_flags;
+ uint m_select_number;
public:
inline Stored_program_creation_ctx *get_creation_ctx()
{
@@ -817,6 +818,8 @@ public:
sp_pcontext *get_parse_context() { return m_pcont; }
+ void set_select_number(uint num) { m_select_number= num; }
+
bool check_execute_access(THD *thd) const;
private:
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 13db12b4f7e..9ce2cfb0a80 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -716,6 +716,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
/* statement id */ 0),
rli_fake(0), rgi_fake(0), rgi_slave(NULL),
protocol_text(this), protocol_binary(this),
+ m_current_stage_key(0),
in_sub_stmt(0), log_all_errors(0),
binlog_unsafe_warning_flags(0),
binlog_table_maps(0),
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index ebf1052d115..4006e3aec4d 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1173,6 +1173,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
action in the log entry by stepping up the phase.
*/
}
+ /* fall through */
case DDL_LOG_RENAME_ACTION:
{
error= TRUE;
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 35333dd2843..1c67a5a0dfc 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -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. */
@@ -1351,8 +1343,6 @@ buf_page_print(
stderr);
break;
}
-
- ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH);
}
# ifdef PFS_GROUP_BUFFER_SYNC
@@ -5976,8 +5966,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"
diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc
index 17b2229f1da..2bc3630d3f5 100644
--- a/storage/innobase/buf/buf0dblwr.cc
+++ b/storage/innobase/buf/buf0dblwr.cc
@@ -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
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index cdf3d9bd997..5e7e5a2f21b 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -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);
diff --git a/storage/innobase/fil/fil0pagecompress.cc b/storage/innobase/fil/fil0pagecompress.cc
index 83191c98b37..f2a7b7bd291 100644
--- a/storage/innobase/fil/fil0pagecompress.cc
+++ b/storage/innobase/fil/fil0pagecompress.cc
@@ -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);
@@ -641,6 +642,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);
}
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 67de1174d25..516898066aa 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -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 */
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index b5bd132d198..eeb743cb180 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -3525,6 +3525,7 @@ recv_reset_logs(
log_sys->next_checkpoint_no = 0;
log_sys->last_checkpoint_lsn = 0;
+ memset(log_sys->buf, 0, log_sys->buf_size);
log_block_init(log_sys->buf, log_sys->lsn);
log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE);
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index c01f11024f6..984890791bd 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -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:
@@ -4606,6 +4608,7 @@ wait_table_again:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
+ /* fall through */
case DB_SUCCESS:
break;
default:
@@ -4688,6 +4691,7 @@ rec_loop:
switch (err) {
case DB_SUCCESS_LOCKED_REC:
err = DB_SUCCESS;
+ /* fall through */
case DB_SUCCESS:
break;
default:
@@ -4949,6 +4953,7 @@ no_gap_lock:
prebuilt->new_rec_locks = 1;
}
err = DB_SUCCESS;
+ /* fall through */
case DB_SUCCESS:
break;
case DB_LOCK_WAIT:
diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt
index 5db6d888bb6..6db82119b45 100644
--- a/storage/rocksdb/CMakeLists.txt
+++ b/storage/rocksdb/CMakeLists.txt
@@ -146,7 +146,10 @@ ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib
ADD_DEPENDENCIES(rocksdb_aux_lib GenError)
# MARIAROCKS-TODO: how to properly depend on -lrt ?
-TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY} -lrt)
+TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY})
+if (UNIX AND NOT APPLE)
+ TARGET_LINK_LIBRARIES(rocksdb_aux_lib -lrt)
+endif()
TARGET_LINK_LIBRARIES(rocksdb rocksdb_aux_lib)
@@ -182,7 +185,9 @@ ENDIF()
# ADD_SUBDIRECTORY(unittest)
#ENDIF()
-SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt")
+if (UNIX AND NOT APPLE)
+ SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt")
+endif()
ADD_LIBRARY(rocksdb_tools STATIC
rocksdb/tools/ldb_tool.cc
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc
index e4d9ce02f10..3b01c883d92 100644
--- a/storage/rocksdb/ha_rocksdb.cc
+++ b/storage/rocksdb/ha_rocksdb.cc
@@ -173,7 +173,7 @@ Rdb_ddl_manager ddl_manager;
const char *m_mysql_gtid;
Rdb_binlog_manager binlog_manager;
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
Rdb_io_watchdog *io_watchdog = nullptr;
#endif
/**
@@ -554,7 +554,7 @@ static void rocksdb_set_io_write_timeout(
void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) {
DBUG_ASSERT(save != nullptr);
DBUG_ASSERT(rdb != nullptr);
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
DBUG_ASSERT(io_watchdog != nullptr);
#endif
@@ -563,7 +563,7 @@ static void rocksdb_set_io_write_timeout(
const uint32_t new_val = *static_cast<const uint32_t *>(save);
rocksdb_io_write_timeout_secs = new_val;
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
#endif
RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex);
@@ -3984,7 +3984,7 @@ static int rocksdb_init_func(void *const p) {
directories.push_back(myrocks::rocksdb_wal_dir);
}
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
io_watchdog = new Rdb_io_watchdog(directories);
io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs);
#endif
@@ -4076,7 +4076,7 @@ static int rocksdb_done_func(void *const p) {
delete commit_latency_stats;
commit_latency_stats = nullptr;
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
delete io_watchdog;
io_watchdog = nullptr;
#endif
diff --git a/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result b/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result
index 4d259b5ea2f..6c38e030afb 100644
--- a/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result
+++ b/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result
@@ -21,6 +21,7 @@ b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin' PARTITION BY KEY() PARTITIONS 4;
+connect other,localhost,root,,;
set session transaction isolation level repeatable read;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
STAT_TYPE VALUE
@@ -29,6 +30,7 @@ start transaction with consistent snapshot;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
STAT_TYPE VALUE
DB_NUM_SNAPSHOTS 1
+connection default;
set rocksdb_bulk_load=1;
set rocksdb_bulk_load_size=100000;
LOAD DATA INFILE <input_file> INTO TABLE t1;
@@ -79,4 +81,5 @@ count(b)
5000000
longfilenamethatvalidatesthatthiswillgetdeleted.bulk_load.tmp
test.bulk_load.tmp
+disconnect other;
DROP TABLE t1, t2, t3;
diff --git a/storage/rocksdb/rdb_io_watchdog.cc b/storage/rocksdb/rdb_io_watchdog.cc
index a599ba58aec..b41e9248d52 100644
--- a/storage/rocksdb/rdb_io_watchdog.cc
+++ b/storage/rocksdb/rdb_io_watchdog.cc
@@ -22,7 +22,7 @@
#include <vector>
/* Rdb_io_watchdog doesn't work on Windows [yet] */
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
namespace myrocks {
diff --git a/storage/rocksdb/rdb_io_watchdog.h b/storage/rocksdb/rdb_io_watchdog.h
index de8c1b9500e..c50547745df 100644
--- a/storage/rocksdb/rdb_io_watchdog.h
+++ b/storage/rocksdb/rdb_io_watchdog.h
@@ -35,7 +35,7 @@
namespace myrocks {
// Rdb_io_watchdog does not support Windows ATM.
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__APPLE__)
class Rdb_io_watchdog {
const int RDB_IO_WRITE_BUFFER_SIZE = 4096;