1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Merge 10.3 into 10.4

This commit is contained in:
Marko Mäkelä
2020-07-02 07:39:33 +03:00
213 changed files with 2485 additions and 748 deletions

View File

@ -1,9 +1,9 @@
find_path(LZ4_INCLUDE_DIR NAMES lz4.h)
find_library(LZ4_LIBRARY NAMES lz4)
find_library(LZ4_LIBRARIES NAMES lz4)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
LZ4 DEFAULT_MSG
LZ4_LIBRARY LZ4_INCLUDE_DIR)
LZ4_LIBRARIES LZ4_INCLUDE_DIR)
mark_as_advanced(LZ4_INCLUDE_DIR LZ4_LIBRARY)
mark_as_advanced(LZ4_INCLUDE_DIR LZ4_LIBRARIES)

View File

@ -5,10 +5,6 @@
# ZSTD_LIBRARIES - List of libraries when using zstd.
# ZSTD_FOUND - True if zstd found.
if (DEFINED ZSTD_LIBRARIES)
return()
endif()
find_path(ZSTD_INCLUDE_DIR
NAMES zstd.h
HINTS ${ZSTD_ROOT_DIR}/include)
@ -18,7 +14,7 @@ find_library(ZSTD_LIBRARIES
HINTS ${ZSTD_ROOT_DIR}/lib)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(zstd DEFAULT_MSG ZSTD_LIBRARIES ZSTD_INCLUDE_DIR)
find_package_handle_standard_args(ZSTD DEFAULT_MSG ZSTD_LIBRARIES ZSTD_INCLUDE_DIR)
mark_as_advanced(
ZSTD_LIBRARIES

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
#

View File

@ -43,7 +43,8 @@ MACRO(CHECK_DTRACE)
IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
AND NOT BUGGY_GCC_NO_DTRACE_MODULES
AND NOT BUGGY_LINUX_DTRACE
AND NOT CMAKE_SYSTEM_NAME MATCHES "SunOS")
AND NOT CMAKE_SYSTEM_NAME MATCHES "SunOS"
AND NOT WIN32)
SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
ENDIF()
# On GNU/Hurd, dtrace is not supported

View File

@ -490,6 +490,7 @@ static int DbugParse(CODE_STATE *cs, const char *control)
rel= control[0] == '+' || control[0] == '-';
if ((!rel || (!stack->out_file && !stack->next)))
{
LockIfInitSettings(cs);
FreeState(cs, 0);
stack->flags= 0;
stack->delay= 0;
@ -497,10 +498,9 @@ static int DbugParse(CODE_STATE *cs, const char *control)
stack->sub_level= 0;
stack->out_file= sstderr;
stack->functions= NULL;
LockIfInitSettings(cs);
stack->keywords= NULL;
UnlockIfInitSettings(cs);
stack->processes= NULL;
UnlockIfInitSettings(cs);
}
else if (!stack->out_file)
{

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Copyright (c) 2002 MySQL AB, 2009 Sun Microsystems, Inc.
# Use is subject to license terms.

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
die <<EEE unless @ARGV;
Usage: $0 func1 [func2 [ ...] ]

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl -w
#!/usr/bin/env perl -w
# mysqlreport v4.0 Oct 23 2015
# http://hackmysql.com/mysqlreport

View File

@ -38,6 +38,8 @@
# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len)
# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len)
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
# define MEM_GET_VBITS(a,b,len) VALGRIND_GET_VBITS(a,b,len)
# define MEM_SET_VBITS(a,b,len) VALGRIND_SET_VBITS(a,b,len)
# define REDZONE_SIZE 8
#elif defined(__SANITIZE_ADDRESS__)
# include <sanitizer/asan_interface.h>
@ -48,6 +50,8 @@ https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
# define MEM_GET_VBITS(a,b,len) ((void) 0)
# define MEM_SET_VBITS(a,b,len) ((void) 0)
# define REDZONE_SIZE 8
#elif __has_feature(memory_sanitizer)
# include <sanitizer/msan_interface.h>
@ -57,6 +61,8 @@ https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
# define MEM_NOACCESS(a,len) ((void) 0)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
# define MEM_CHECK_DEFINED(a,len) __msan_check_mem_is_initialized(a,len)
# define MEM_GET_VBITS(a,b,len) __msan_copy_shadow(b,a,len)
# define MEM_SET_VBITS(a,b,len) __msan_copy_shadow(a,b,len)
# define REDZONE_SIZE 8
#else
# define MEM_UNDEFINED(a,len) ((void) (a), (void) (len))
@ -64,6 +70,8 @@ https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
# define MEM_NOACCESS(a,len) ((void) 0)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
# define MEM_GET_VBITS(a,b,len) ((void) 0)
# define MEM_SET_VBITS(a,b,len) ((void) 0)
# define REDZONE_SIZE 0
#endif /* HAVE_VALGRIND_MEMCHECK_H */

View File

@ -154,8 +154,10 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
*/
#if MYSQL_PORT_DEFAULT == 0
# if !__has_feature(memory_sanitizer) // Work around MSAN deficiency
if ((serv_ptr= getservbyname("mysql", "tcp")))
mysql_port= (uint) ntohs((ushort) serv_ptr->s_port);
# endif
#endif
if ((env= getenv("MYSQL_TCP_PORT")))
mysql_port=(uint) atoi(env);

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# This script processes a .gcov coverage report to honor purecov

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007, 2008 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB, 2009 Sun Microsystems, Inc.

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2007 MySQL AB

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.

View File

@ -916,6 +916,19 @@ NULL
Warnings:
Warning 4037 Unexpected end of JSON text in argument 2 to function 'json_merge_patch'
#
# MDEV-22976 CAST(JSON_EXTRACT() AS DECIMAL) does not handle boolean values
#
SELECT
CAST(JSON_EXTRACT('{"x":true}', '$.x') AS DOUBLE) AS cf,
CAST(JSON_EXTRACT('{"x":true}', '$.x') AS DECIMAL) AS cd;
cf cd
1 1
SELECT
CAST(JSON_EXTRACT('{"x":false}', '$.x') AS DOUBLE) AS cf,
CAST(JSON_EXTRACT('{"x":false}', '$.x') AS DECIMAL) AS cd;
cf cd
0 0
#
# End of 10.2 tests
#
#

View File

@ -537,6 +537,19 @@ SELECT JSON_MERGE_PATCH('{}');
SELECT JSON_MERGE_PATCH('{', '[1,2,3]');
SELECT JSON_MERGE_PATCH('{"a":"b"}', '[1,');
--echo #
--echo # MDEV-22976 CAST(JSON_EXTRACT() AS DECIMAL) does not handle boolean values
--echo #
SELECT
CAST(JSON_EXTRACT('{"x":true}', '$.x') AS DOUBLE) AS cf,
CAST(JSON_EXTRACT('{"x":true}', '$.x') AS DECIMAL) AS cd;
SELECT
CAST(JSON_EXTRACT('{"x":false}', '$.x') AS DOUBLE) AS cf,
CAST(JSON_EXTRACT('{"x":false}', '$.x') AS DECIMAL) AS cd;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -2209,3 +2209,13 @@ column_name
c1
c2
DROP TABLE tt1, tt2;
#
# MDEV-13242 Wrong results for queries with row constructors and information_schema
#
SELECT SCHEMA_NAME from information_schema.schemata where schema_name='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
SCHEMA_NAME
SELECT SCHEMA_NAME from information_schema.schemata where schema_name=REPEAT('a',193);
SCHEMA_NAME
#
# End of 10.1 tests
#

View File

@ -1911,3 +1911,15 @@ SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (t
SELECT count(*) FROM information_schema.columns WHERE table_schema='test' AND (table_name='tt1' AND column_name='c1') OR (table_name='tt2' AND column_name='c2');
SELECT column_name FROM information_schema.columns WHERE (table_name, column_name) IN (('tt1','c1'),('tt2', 'c2')) ORDER BY column_name;
DROP TABLE tt1, tt2;
--echo #
--echo # MDEV-13242 Wrong results for queries with row constructors and information_schema
--echo #
SELECT SCHEMA_NAME from information_schema.schemata where schema_name='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
SELECT SCHEMA_NAME from information_schema.schemata where schema_name=REPEAT('a',193);
--echo #
--echo # End of 10.1 tests
--echo #

View File

@ -2755,3 +2755,34 @@ WHERE t3.pk IN (2);
drop view v4;
drop table t1,t2,t3,t4;
SET optimizer_switch=@org_optimizer_switch;
#
# MDEV-22866: Crash in join optimizer with constant outer join nest
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3),(4);
CREATE TABLE t3 (c INT, KEY(c)) ENGINE=MyISAM;
CREATE TABLE t4 (d INT, KEY(d)) ENGINE=MyISAM;
INSERT INTO t4 VALUES (5),(6);
CREATE TABLE t5 (e INT) ENGINE=MyISAM;
INSERT INTO t5 VALUES (7),(8);
CREATE TABLE t6 (f INT) ENGINE=MyISAM;
INSERT INTO t6 VALUES (9),(10);
SELECT *
FROM
t1
LEFT JOIN (
t2 LEFT JOIN (
t3 JOIN
t4 ON t3.c = t4.d and t3.c >2 and t3.c<0
) ON t2.b >= t4.d
) ON t1.a <= t2.b
LEFT JOIN t5 ON t2.b = t5.e
LEFT JOIN t6 ON t3.c = t6.f;
a b c d e f
1 3 NULL NULL NULL NULL
2 3 NULL NULL NULL NULL
1 4 NULL NULL NULL NULL
2 4 NULL NULL NULL NULL
drop table t1,t2,t3,t4,t5,t6;

View File

@ -2252,3 +2252,38 @@ drop view v4;
drop table t1,t2,t3,t4;
SET optimizer_switch=@org_optimizer_switch;
--echo #
--echo # MDEV-22866: Crash in join optimizer with constant outer join nest
--echo #
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3),(4);
CREATE TABLE t3 (c INT, KEY(c)) ENGINE=MyISAM;
CREATE TABLE t4 (d INT, KEY(d)) ENGINE=MyISAM;
INSERT INTO t4 VALUES (5),(6);
CREATE TABLE t5 (e INT) ENGINE=MyISAM;
INSERT INTO t5 VALUES (7),(8);
CREATE TABLE t6 (f INT) ENGINE=MyISAM;
INSERT INTO t6 VALUES (9),(10);
SELECT *
FROM
t1
LEFT JOIN (
t2 LEFT JOIN (
t3 JOIN
t4 ON t3.c = t4.d and t3.c >2 and t3.c<0
) ON t2.b >= t4.d
) ON t1.a <= t2.b
LEFT JOIN t5 ON t2.b = t5.e
LEFT JOIN t6 ON t3.c = t6.f;
drop table t1,t2,t3,t4,t5,t6;

View File

@ -2762,3 +2762,34 @@ WHERE t3.pk IN (2);
drop view v4;
drop table t1,t2,t3,t4;
SET optimizer_switch=@org_optimizer_switch;
#
# MDEV-22866: Crash in join optimizer with constant outer join nest
#
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (b INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (3),(4);
CREATE TABLE t3 (c INT, KEY(c)) ENGINE=MyISAM;
CREATE TABLE t4 (d INT, KEY(d)) ENGINE=MyISAM;
INSERT INTO t4 VALUES (5),(6);
CREATE TABLE t5 (e INT) ENGINE=MyISAM;
INSERT INTO t5 VALUES (7),(8);
CREATE TABLE t6 (f INT) ENGINE=MyISAM;
INSERT INTO t6 VALUES (9),(10);
SELECT *
FROM
t1
LEFT JOIN (
t2 LEFT JOIN (
t3 JOIN
t4 ON t3.c = t4.d and t3.c >2 and t3.c<0
) ON t2.b >= t4.d
) ON t1.a <= t2.b
LEFT JOIN t5 ON t2.b = t5.e
LEFT JOIN t6 ON t3.c = t6.f;
a b c d e f
1 3 NULL NULL NULL NULL
2 3 NULL NULL NULL NULL
1 4 NULL NULL NULL NULL
2 4 NULL NULL NULL NULL
drop table t1,t2,t3,t4,t5,t6;

View File

@ -259,6 +259,12 @@ Warning 1286 Unknown storage engine 'NonExistentEngine'
alter table mysql.slow_log engine=memory;
ERROR HY000: Storage engine MEMORY cannot be used for log tables
set storage_engine= @save_storage_engine;
ALTER TABLE mysql.general_log ENGINE=Aria;
ERROR HY000: Storage engine Aria cannot be used for log tables
ALTER TABLE mysql.general_log ENGINE=Aria transactional = 0;
ALTER TABLE mysql.slow_log ENGINE=Aria;
ERROR HY000: Storage engine Aria cannot be used for log tables
ALTER TABLE mysql.slow_log ENGINE=Aria transactional = 0;
drop table mysql.slow_log;
drop table mysql.general_log;
drop table mysql.general_log;

View File

@ -269,6 +269,14 @@ alter table mysql.slow_log engine=memory;
#alter table mysql.slow_log engine=blackhole;
set storage_engine= @save_storage_engine;
# Make sure only non-transactional Aria table can be used for logging
--error ER_UNSUPORTED_LOG_ENGINE
ALTER TABLE mysql.general_log ENGINE=Aria;
ALTER TABLE mysql.general_log ENGINE=Aria transactional = 0;
--error ER_UNSUPORTED_LOG_ENGINE
ALTER TABLE mysql.slow_log ENGINE=Aria;
ALTER TABLE mysql.slow_log ENGINE=Aria transactional = 0;
drop table mysql.slow_log;
drop table mysql.general_log;

View File

@ -0,0 +1,20 @@
SET @saved_profiling=@@GLOBAL.profiling;
SET @saved_init_connect=@@GLOBAL.init_connect;
SET GLOBAL init_connect="set @a=2;set @b=3";
SET GLOBAL profiling=on;
create user mysqltest1@localhost;
connect con1,localhost,mysqltest1,,;
connection con1;
SELECT @a, @b;
@a @b
2 3
SHOW PROFILES;
Query_ID Duration Query
1 # set @a=2;set @b=3
2 # set @b=3
3 # SELECT @a, @b
connection default;
disconnect con1;
DROP USER mysqltest1@localhost;
SET GLOBAL profiling=@saved_profiling;
SET GLOBAL init_connect=@saved_init_connect;

View File

@ -0,0 +1,42 @@
# ==== Purpose ====
#
# Test verifies that "init_connect" and "init_slave" system variables work
# fine when "profiling=on".
#
# ==== Implementation ====
#
# Steps:
# 0 - Create regular user without super privilege so that "init_connect"
# variable is effective.
# 1 - Enable profiling.
# 2 - Start a new connection which will try to execute the statements
# specified in "init_connect". No assert should be reported.
# 3 - Execute SHOW PROFILES to verify that statements specified in
# "init_connect" are displayed as part of profiling.
#
# ==== References ====
#
# MDEV-22706: Assertion `!current' failed in PROFILING::start_new_query
#
--source include/not_embedded.inc
--source include/have_profiling.inc
SET @saved_profiling=@@GLOBAL.profiling;
SET @saved_init_connect=@@GLOBAL.init_connect;
SET GLOBAL init_connect="set @a=2;set @b=3";
SET GLOBAL profiling=on;
create user mysqltest1@localhost;
connect (con1,localhost,mysqltest1,,);
connection con1;
SELECT @a, @b;
--replace_column 2 #
SHOW PROFILES;
#========== Clean up ===========
connection default;
disconnect con1;
DROP USER mysqltest1@localhost;
SET GLOBAL profiling=@saved_profiling;
SET GLOBAL init_connect=@saved_init_connect;

View File

@ -2567,6 +2567,37 @@ sum(a) a b
6 1 1
DROP TABLE t1,t2;
#
# MDEV-17606: Query returns wrong results (while using CHARACTER SET utf8)
#
CREATE TABLE t1(l1 varchar(10), i2 int);
INSERT INTO t1 VALUES ('e',2),('o',6),('x',4);
CREATE TABLE t2 (v1 varchar(10) CHARACTER SET utf8, KEY v1 (v1(3)));
INSERT INTO t2 VALUES ('k'),('rid'),('f'),('x');
EXPLAIN EXTENDED SELECT * FROM t1 where ( t1.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
2 SUBQUERY t2 ALL NULL NULL NULL NULL 4 100.00
Warnings:
Note 1003 /* select#1 */ select `test`.`t1`.`l1` AS `l1`,`test`.`t1`.`i2` AS `i2` from `test`.`t1` where <nop>(<in_optimizer>(`test`.`t1`.`l1`,<max>(/* select#2 */ select max(`test`.`t2`.`v1`) from `test`.`t2`) > convert(<cache>(`test`.`t1`.`l1`) using utf8)))
SELECT * FROM t1 where ( t1.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
l1 i2
e 2
o 6
DROP TABLE t1, t2;
#
# MDEV-22852: SIGSEGV in sortlength (optimized builds)
#
SET @save_optimizer_switch=@@optimizer_switch;
SET optimizer_switch='subquery_cache=off';
CREATE TABLE t1 (a INT,b INT);
INSERT INTO t1 VALUES (0,0),(0,0);
SELECT (SELECT DISTINCT t1i.b FROM t1 t1i GROUP BY t1i.a ORDER BY MAX(t1o.b)) FROM t1 AS t1o;
(SELECT DISTINCT t1i.b FROM t1 t1i GROUP BY t1i.a ORDER BY MAX(t1o.b))
0
SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
# End of 10.2 tests
#
# MDEV-19134: EXISTS() slower if ORDER BY is defined
#
create table t0 (a int);

View File

@ -2102,6 +2102,33 @@ eval EXPLAIN EXTENDED $query;
eval $query;
DROP TABLE t1,t2;
--echo #
--echo # MDEV-17606: Query returns wrong results (while using CHARACTER SET utf8)
--echo #
CREATE TABLE t1(l1 varchar(10), i2 int);
INSERT INTO t1 VALUES ('e',2),('o',6),('x',4);
CREATE TABLE t2 (v1 varchar(10) CHARACTER SET utf8, KEY v1 (v1(3)));
INSERT INTO t2 VALUES ('k'),('rid'),('f'),('x');
EXPLAIN EXTENDED SELECT * FROM t1 where ( t1.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
SELECT * FROM t1 where ( t1.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
DROP TABLE t1, t2;
--echo #
--echo # MDEV-22852: SIGSEGV in sortlength (optimized builds)
--echo #
SET @save_optimizer_switch=@@optimizer_switch;
SET optimizer_switch='subquery_cache=off';
CREATE TABLE t1 (a INT,b INT);
INSERT INTO t1 VALUES (0,0),(0,0);
SELECT (SELECT DISTINCT t1i.b FROM t1 t1i GROUP BY t1i.a ORDER BY MAX(t1o.b)) FROM t1 AS t1o;
SET @@optimizer_switch= @save_optimizer_switch;
DROP TABLE t1;
--echo # End of 10.2 tests
--echo #
--echo # MDEV-19134: EXISTS() slower if ORDER BY is defined
--echo #

View File

@ -584,3 +584,21 @@ ALTER TABLE t1 CHANGE no_such_col1 col1 BIGINT NULL;
ERROR 42S22: Unknown column 'no_such_col1' in 't1'
TRUNCATE TABLE t1;
DROP TEMPORARY TABLE t1;
#
# MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table
#
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TEMPORARY TABLE t1 (a DATETIME ON UPDATE CURRENT_TIMESTAMP);
ALTER TABLE t1 ADD b INT;
INSERT INTO t1 (b) VALUES (1),(2);
ALTER TABLE t1 CHANGE COLUMN x xx INT;
ERROR 42S22: Unknown column 'x' in 't1'
UPDATE t1 SET b = 3;
SELECT * FROM t1;
a b
2001-01-01 10:20:30 3
2001-01-01 10:20:30 3
DROP TEMPORARY TABLE t1;
#
# End of 10.2 tests
#

View File

@ -639,3 +639,22 @@ ALTER TABLE t1 CHANGE no_such_col1 col1 BIGINT NULL;
# was not dropped during the first TRUNCATE due to extra table handles.
TRUNCATE TABLE t1;
DROP TEMPORARY TABLE t1;
--echo #
--echo # MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table
--echo #
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TEMPORARY TABLE t1 (a DATETIME ON UPDATE CURRENT_TIMESTAMP);
ALTER TABLE t1 ADD b INT;
INSERT INTO t1 (b) VALUES (1),(2);
--error ER_BAD_FIELD_ERROR
ALTER TABLE t1 CHANGE COLUMN x xx INT;
UPDATE t1 SET b = 3;
SELECT * FROM t1;
DROP TEMPORARY TABLE t1;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -3788,6 +3788,16 @@ row_number() OVER()
3
DROP TABLE t1;
#
# MDEV-22984: Throw an error when arguments to window functions are window functions
#
CREATE TABLE t1(a INT, b INT);
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
SELECT NTILE(MAX(a) OVER (PARTITION BY a)) OVER (PARTITION BY a ORDER BY b) FROM t1;
ERROR HY000: Window functions can not be used as arguments to group functions.
SELECT FIRST_VALUE(MAX(a) OVER (PARTITION BY a)) OVER (ORDER BY a) AS x FROM t1 GROUP BY a;
ERROR HY000: Window functions can not be used as arguments to group functions.
DROP TABLE t1;
#
# End of 10.2 tests
#
#

View File

@ -2459,6 +2459,19 @@ ANALYZE FORMAT=JSON SELECT row_number() OVER() FROM t1;
SELECT row_number() OVER() FROM t1;
DROP TABLE t1;
--echo #
--echo # MDEV-22984: Throw an error when arguments to window functions are window functions
--echo #
CREATE TABLE t1(a INT, b INT);
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
--error ER_SUM_FUNC_WITH_WINDOW_FUNC_AS_ARG
SELECT NTILE(MAX(a) OVER (PARTITION BY a)) OVER (PARTITION BY a ORDER BY b) FROM t1;
--error ER_SUM_FUNC_WITH_WINDOW_FUNC_AS_ARG
SELECT FIRST_VALUE(MAX(a) OVER (PARTITION BY a)) OVER (ORDER BY a) AS x FROM t1 GROUP BY a;
DROP TABLE t1;
--echo #
--echo # End of 10.2 tests
--echo #

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Call mtr in out-of-source build
$ENV{MTR_BINDIR} = '@CMAKE_BINARY_DIR@';
chdir('@CMAKE_SOURCE_DIR@/mysql-test');

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
#

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# -*- cperl -*-
# Copyright (c) 2004, 2014, Oracle and/or its affiliates.
@ -263,8 +263,12 @@ our %gprof_dirs;
our $glob_debugger= 0;
our $opt_gdb;
my $opt_rr;
my $opt_rr_dir;
my @rr_record_args;
our $opt_client_gdb;
my $opt_boot_gdb;
my $opt_boot_rr;
our $opt_dbx;
our $opt_client_dbx;
my $opt_boot_dbx;
@ -1155,10 +1159,14 @@ sub command_line_setup {
'debug-common' => \$opt_debug_common,
'debug-server' => \$opt_debug_server,
'gdb=s' => \$opt_gdb,
'rr' => \$opt_rr,
'rr-arg=s' => \@rr_record_args,
'rr-dir=s' => \$opt_rr_dir,
'client-gdb' => \$opt_client_gdb,
'manual-gdb' => \$opt_manual_gdb,
'manual-lldb' => \$opt_manual_lldb,
'boot-gdb' => \$opt_boot_gdb,
'boot-rr' => \$opt_boot_rr,
'manual-debug' => \$opt_manual_debug,
'ddd' => \$opt_ddd,
'client-ddd' => \$opt_client_ddd,
@ -1622,7 +1630,7 @@ sub command_line_setup {
# --------------------------------------------------------------------------
# Check debug related options
# --------------------------------------------------------------------------
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd || $opt_rr ||
$opt_manual_gdb || $opt_manual_lldb || $opt_manual_ddd ||
$opt_manual_debug || $opt_dbx || $opt_client_dbx || $opt_manual_dbx ||
$opt_debugger || $opt_client_debugger )
@ -3253,6 +3261,13 @@ sub mysql_install_db {
ddd_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(),
$bootstrap_sql_file);
}
if ($opt_boot_rr) {
$args= ["record", @rr_record_args, $exe_mysqld_bootstrap, @$args];
$exe_mysqld_bootstrap= "rr";
my $rr_dir= $opt_rr_dir ? $opt_rr_dir : "$opt_vardir/rr.boot";
$ENV{'_RR_TRACE_DIR'}= $rr_dir;
mkpath($rr_dir);
}
my $path_sql= my_find_file($install_basedir,
["mysql", "sql/share", "share/mariadb",
@ -5249,6 +5264,14 @@ sub mysqld_start ($$) {
# Indicate the exe should not be started
$exe= undef;
}
elsif ( $opt_rr )
{
$args= ["record", @rr_record_args, "$exe", @$args];
$exe= "rr";
my $rr_dir= $opt_rr_dir ? $opt_rr_dir : "$opt_vardir/rr". $mysqld->after('mysqld');
$ENV{'_RR_TRACE_DIR'}= $rr_dir;
mkpath($rr_dir);
}
else
{
# Default to not wait until pid file has been created
@ -6433,6 +6456,15 @@ Options for strace
stracer=<EXE> Specify name and path to the trace program to use.
Default is "strace". Example: $0 --stracer=ktrace.
Options for rr (Record and Replay)
rr Run the "mysqld" executables using rr. Default run
option is "rr record mysqld mysqld_options"
boot-rr Start bootstrap server in rr
rr-arg=ARG Option to give rr record, can be specified more then once
rr-dir=DIR The directory where rr recordings are stored. Defaults
to 'vardir'/rr.0 (rr.boot for bootstrap instance and
rr.1, ..., rr.N for slave instances).
Misc options
user=USER User for connecting to mysqld(default: $opt_user)
comment=STR Write STR to the output

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Copyright (c) 2011, Oracle and/or its affiliates
#

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
################################################################################
#
# This script runs the transactional stress test "stress_tx_rr" against the

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
if ( (scalar(@ARGV) != 1 ) || ($ARGV[0] =~ /[^0-9]/i ) )

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
if ( (scalar(@ARGV) != 2 ) || ($ARGV[0] =~ /[^0-9]/i ) )

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
#################################################################################
# Author: Serge Kozlov #

View File

@ -38,7 +38,6 @@ galera_ssl_upgrade : MDEV-19950 Galera test failure on galera_ssl_upgrade
galera_sst_mariabackup_encrypt_with_key : MDEV-21484 galera_sst_mariabackup_encrypt_with_key
galera_toi_ddl_nonconflicting : MDEV-21518 galera.galera_toi_ddl_nonconflicting
galera_toi_truncate : MDEV-22996 Hang on galera_toi_truncate test case
galera_var_innodb_disallow_writes : MDEV-20928 galera.galera_var_innodb_disallow_writes
galera_var_node_address : MDEV-20485 Galera test failure
galera_var_notify_cmd : MDEV-21905 Galera test galera_var_notify_cmd causes hang
galera_var_reject_queries : assertion in inline_mysql_socket_send

View File

@ -19,6 +19,7 @@ innodb_lock_schedule_algorithm=FCFS
wsrep-on=1
log-slave-updates
wsrep-on=1
innodb-autoinc-lock-mode=2
default-storage-engine=innodb
@ -44,6 +45,7 @@ innodb_lock_schedule_algorithm=FCFS
wsrep-on=1
log-slave-updates
wsrep-on=1
innodb-autoinc-lock-mode=2
default-storage-engine=innodb
@ -69,6 +71,7 @@ innodb_lock_schedule_algorithm=FCFS
wsrep-on=1
log-slave-updates
wsrep-on=1
innodb-autoinc-lock-mode=2
default-storage-engine=innodb

View File

@ -13,9 +13,33 @@ INSERT INTO fts_t2 (f2) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3;
DROP TABLE ten;
UPDATE fts_t1 SET f2 = 'abcd';
UPDATE fts_t2 SET f2 = 'efjh';
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1 where f2 = 'abcd';
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2 where f2 = 'efjh';
EXPECT_1000
1000
connection node_2;
connection node_1;
connection node_2;
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2;
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1 where f2 = 'abcd';
EXPECT_1000
1000
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2 where f2 = 'efjh';
EXPECT_1000
1000
connection node_1;
USE fts;
DROP TABLE fts_t1;
@ -23,3 +47,4 @@ DROP TABLE fts_t2;
SHOW TABLES;
Tables_in_fts
DROP DATABASE fts;
connection node_2;

View File

@ -1,5 +1,6 @@
connection node_2;
connection node_1;
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
connection node_1a;
SET SESSION wsrep_sync_wait = 0;
connection node_1;
@ -7,19 +8,20 @@ CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
SET GLOBAL innodb_disallow_writes=ON;
INSERT INTO t1 VALUES (1);;
connection node_1a;
SELECT COUNT(*) = 1 FROM t1;
COUNT(*) = 1
SELECT COUNT(*) AS EXPECT_0 FROM t1;
EXPECT_0
0
SELECT COUNT(*) = 1 FROM t1;
COUNT(*) = 1
SELECT COUNT(*) AS EXPECT_0 FROM t1;
EXPECT_0
0
SET GLOBAL innodb_disallow_writes=OFF;
connection node_1;
SELECT COUNT(*) = 1 FROM t1;
COUNT(*) = 1
SELECT COUNT(*) AS EXPECT_1 FROM t1;
EXPECT_1
1
connection node_2;
SELECT COUNT(*) = 1 FROM t1;
COUNT(*) = 1
SELECT COUNT(*) AS EXPECT_1 FROM t1;
EXPECT_1
1
DROP TABLE t1;
disconnect node_1a;

View File

@ -1,5 +1,7 @@
--source include/galera_cluster.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/galera_have_debug_sync.inc
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(255)) Engine=InnoDB;

View File

@ -7,6 +7,8 @@
--source include/have_binlog_format_row.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/galera_have_debug_sync.inc
SET @orig_debug=@@debug_dbug;
--connection node_2

View File

@ -3,7 +3,10 @@
#
--source include/galera_cluster.inc
--source include/have_binlog_format_row.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/galera_have_debug_sync.inc
SET @orig_debug=@@debug_dbug;
--connection node_2

View File

@ -23,6 +23,10 @@ INSERT INTO fts_t2 (f2) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3;
DROP TABLE ten;
UPDATE fts_t1 SET f2 = 'abcd';
UPDATE fts_t2 SET f2 = 'efjh';
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1;
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2;
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1 where f2 = 'abcd';
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2 where f2 = 'efjh';
# Restart the second node:
--connection node_2
@ -34,6 +38,14 @@ UPDATE fts_t2 SET f2 = 'efjh';
--connection node_2
--source include/wait_until_ready.inc
--let $wait_condition = SELECT COUNT(*) = 1000 FROM fts_t1 where f2 = 'abcd';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 1000 FROM fts_t2 where f2 = 'efjh';
--source include/wait_condition.inc
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1;
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2;
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t1 where f2 = 'abcd';
SELECT COUNT(*) AS EXPECT_1000 FROM fts_t2 where f2 = 'efjh';
# Drop the tables and database after nodes restarted:
--connection node_1
@ -43,5 +55,13 @@ DROP TABLE fts_t2;
SHOW TABLES;
DROP DATABASE fts;
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'fts_t1';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'fts_t2';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'fts';
--source include/wait_condition.inc
# Restore original auto_increment_offset values.
--source include/auto_increment_offset_restore.inc

View File

@ -1,6 +1,8 @@
--source include/galera_cluster.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/have_query_cache.inc
--source include/galera_have_debug_sync.inc
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);

View File

@ -11,13 +11,10 @@
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_log_bin.inc
# Open a separate connection to be used to run SHOW PROCESSLIST
--let $galera_connection_name = node_1a
--let $galera_server_number = 1
--source include/galera_connect.inc
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connection node_1a
SET SESSION wsrep_sync_wait = 0;
@ -27,18 +24,27 @@ SET GLOBAL innodb_disallow_writes=ON;
--send INSERT INTO t1 VALUES (1);
--connection node_1a
SELECT COUNT(*) = 1 FROM t1;
let $wait_condition = SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'INSERT INTO t1 VALUES (1)' AND State = 'Commit';
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
--source include/wait_condition.inc
SELECT COUNT(*) = 1 FROM t1;
SELECT COUNT(*) AS EXPECT_0 FROM t1;
let $wait_condition = SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'INSERT INTO t1 VALUES (1)';
--source include/wait_condition.inc
SELECT COUNT(*) AS EXPECT_0 FROM t1;
SET GLOBAL innodb_disallow_writes=OFF;
--connection node_1
--reap
SELECT COUNT(*) = 1 FROM t1;
SELECT COUNT(*) AS EXPECT_1 FROM t1;
--connection node_2
SELECT COUNT(*) = 1 FROM t1;
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'test/t1';
--source include/wait_condition.inc
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
SELECT COUNT(*) AS EXPECT_1 FROM t1;
DROP TABLE t1;
--disconnect node_1a

View File

@ -4,7 +4,9 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/galera_have_debug_sync.inc
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1

View File

@ -0,0 +1,40 @@
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (2, 3);
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
SET GLOBAL wsrep_provider_options = 'dbug=d,after_shift_to_joining';
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (3, 2);
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (4, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (5, 2);
SET GLOBAL wsrep_provider_options = 'dbug=d,before_send_state_request';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (6, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (7, 2);
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (8, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
SET GLOBAL wsrep_provider_options = 'dbug=d,process_primary_configuration';
SET GLOBAL wsrep_provider_options = 'signal=before_send_state_request';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
INSERT INTO t1 VALUES (9, 2);
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET GLOBAL wsrep_provider_options = 'dbug=';
DROP TABLE t1;
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -0,0 +1,50 @@
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (2, 3);
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
SET GLOBAL wsrep_provider_options = 'dbug=d,after_shift_to_joining';
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (3, 2);
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (4, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (5, 2);
SET GLOBAL wsrep_provider_options = 'dbug=d,before_send_state_request';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options = 'signal=before_send_state_request';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
VARIABLE_NAME VARIABLE_VALUE
WSREP_DEBUG_SYNC_WAITERS after_shift_to_joining
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (6, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (7, 2);
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (8, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
SET GLOBAL wsrep_provider_options = 'dbug=d,process_primary_configuration';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
INSERT INTO t1 VALUES (9, 2);
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
VARIABLE_NAME VARIABLE_VALUE
WSREP_DEBUG_SYNC_WAITERS process_primary_configuration
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET GLOBAL wsrep_provider_options = 'dbug=';
DROP TABLE t1;
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -0,0 +1,55 @@
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (2, 3);
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
SET GLOBAL wsrep_provider_options = 'dbug=d,after_shift_to_joining';
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (3, 2);
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (4, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (5, 2);
SET GLOBAL wsrep_provider_options = 'dbug=d,before_send_state_request';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
SET GLOBAL wsrep_provider_options = 'dbug=d,after_shift_to_joining';
SET GLOBAL wsrep_provider_options = 'signal=before_send_state_request';
4
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
VARIABLE_NAME VARIABLE_VALUE
WSREP_DEBUG_SYNC_WAITERS
INSERT INTO t1 VALUES (6, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
INSERT INTO t1 VALUES (7, 2);
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options = 'dbug=d,process_primary_configuration';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
INSERT INTO t1 VALUES (8, 3);
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
INSERT INTO t1 VALUES (9, 2);
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options = 'signal=process_primary_configuration';
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 0;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options = 'signal=after_shift_to_joining';
DROP TABLE t1;
call mtr.add_suppression("WSREP: Send action {\(.*\), STATE_REQUEST} returned -107 \\(Transport endpoint is not connected\\)");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -0,0 +1,262 @@
#
# Tests handling of several configuration changes while a joiner gets
# state transfer
#
# Variant A: sending of state transfer request delayed until two more
# primary configuration changes happen
#
# Refs codersihp/galera-bugs#454
#
--source include/have_innodb.inc
--source include/galera_cluster.inc
--source include/galera_have_debug_sync.inc
--let $galera_connection_name = node_3
--let $galera_server_number = 3
--source include/galera_connect.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
#
# Isolate node_1 and update cluster state to force node 1 into joiner mode
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (2, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 2 FROM t1;
--source include/wait_condition.inc
#
# Now reconnect node_1 but first make it block before sending state transfer
# request
#
# THIS IS PC1
#
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
--let $galera_sync_point = after_shift_to_joining
--source include/galera_set_sync_point.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (3, 2);
--connection node_1a
--source include/galera_wait_sync_point.inc
#
# At this point every node thinks that node_1 is in a JOINER state
#
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
#
# Now that node_1 sent state request and became JOINER isolate node_1 again
# and commit one more action, so that node_1 loses JOINER state
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (4, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
--source include/wait_condition.inc
#
# Reconnect node_1 again
#
# THIS IS PC2
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# After this point node_1 is no longer JOINER and is required to start the
# whole procedure over because it missed some actions (4th insert into t1)
#
INSERT INTO t1 VALUES (5, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 5 FROM t1;
--source include/wait_condition.inc
#
# Now let node_1 continue with IST and finish processing PC1, but make it
# block when processing PC2 just before sending state transfer request
#
--connection node_1a
--let $galera_sync_point = before_send_state_request
--source include/galera_set_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_signal_sync_point.inc
--let $galera_sync_point = before_send_state_request
--source include/galera_wait_sync_point.inc
# since PC1 has been processed node_1 must have 3 rows in t1
# 2 were there before PC1 and one was added while in PC1
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
#
# Now disconnect and reconnect node_1 again to get PC3
# It still is blocked before sending state transfer request in PC2.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (6, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 6 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC3
#
INSERT INTO t1 VALUES (7, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 7 FROM t1;
--source include/wait_condition.inc
#
# Now disconnect and reconnect node_1 again to get PC4 and allow node_1
# to send state transfer request to be delivered in PC4 (and thus get
# updated to PC4 seqno in state transfer.
# Note that node_1 still processes PC2.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (8, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC4. node_1 is still processing PC2, waiting to send state trasfer
# request
#
--connection node_1a
--let $galera_sync_point = process_primary_configuration
--source include/galera_set_sync_point.inc
--let $galera_sync_point = before_send_state_request
--source include/galera_signal_sync_point.inc
# sent STR from PC2 into PC4
--let $galera_sync_point = process_primary_configuration
--source include/galera_wait_sync_point.inc
#
# Now node_1 is processing PC3, but should have completed state transfer from
# PC4 and thus must have 8 rows in t1
#
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
--connection node_2
INSERT INTO t1 VALUES (9, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1a
#--let $galera_sync_point = process_primary_configuration
--source include/galera_signal_sync_point.inc
--source include/galera_wait_sync_point.inc
#
# Now node_1 is processing PC4, still must have 8 rows in t1
#
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
#--let $galera_sync_point = process_primary_configuration
--source include/galera_signal_sync_point.inc
--source include/galera_clear_sync_point.inc
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
--source include/wait_condition.inc
DROP TABLE t1;
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_2
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_3
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -0,0 +1,273 @@
#
# Tests handling of several configuration changes while a joiner gets
# state transfer
#
# Variant B: sending of state transfer request is immediate but completion
# of IST delayed until two more primary configuration changes happen
#
# Refs codersihp/galera-bugs#454
#
--source include/have_innodb.inc
--source include/galera_cluster.inc
--source include/galera_have_debug_sync.inc
--let $galera_connection_name = node_3
--let $galera_server_number = 3
--source include/galera_connect.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
#
# Isolate node_1 and update cluster state to force node 1 into joiner mode
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (2, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 2 FROM t1;
--source include/wait_condition.inc
#
# Now reconnect node_1 but first make it block before sending state transfer
# request
#
# THIS IS PC1
#
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
--let $galera_sync_point = after_shift_to_joining
--source include/galera_set_sync_point.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (3, 2);
--connection node_1a
--source include/galera_wait_sync_point.inc
#
# At this point every node thinks that node_1 is in a JOINER state
#
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
#
# Now that node_1 sent state request and became JOINER isolate node_1 again
# and commit one more action, so that node_1 loses JOINER state
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (4, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
--source include/wait_condition.inc
#
# Reconnect node_1 again
#
# THIS IS PC2
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# After this point node_1 is no longer JOINER and is required to start the
# whole procedure over because it missed some actions (4th insert into t1)
#
INSERT INTO t1 VALUES (5, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 5 FROM t1;
--source include/wait_condition.inc
#
# Now let node_1 continue with IST and finish processing PC1, but make it
# block when processing PC2 right after progressing to JOINER state and
# before IST happens.
#
--connection node_1a
--let $galera_sync_point = before_send_state_request
--source include/galera_set_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_signal_sync_point.inc
--let $galera_sync_point = before_send_state_request
--source include/galera_wait_sync_point.inc
--source include/galera_clear_sync_point.inc
# Here node_1 is processing PC2 just before sending state request
# since PC1 has been processed node_1 must have 3 rows in t1
# 2 were there before PC1 and one was added while in PC1
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
# Proceed to sending state transfer request and block right after
--source include/galera_signal_sync_point.inc # before_send_state_request
--let $galera_sync_point = after_shift_to_joining
--source include/galera_wait_sync_point.inc
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
#
# Now disconnect and reconnect node_1 again to get PC3
# It is blocked right after shifting to JOINING state.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (6, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 6 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC3
#
INSERT INTO t1 VALUES (7, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 7 FROM t1;
--source include/wait_condition.inc
#
# Now disconnect and reconnect node_1 again to get PC4 and allow node_1
# to continue with IST.
# Note that node_1 still processes PC2 and is joining.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (8, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC4. node_1 is still processing PC2, waiting to send state trasfer
# request
#
--connection node_1a
--let $galera_sync_point = process_primary_configuration
--source include/galera_set_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_signal_sync_point.inc
# continue with IST prepared for in PC2
--let $galera_sync_point = process_primary_configuration
--source include/galera_wait_sync_point.inc
#
# Now node_1 is processing PC3, and should have finished state transfer
# State tranfer request was dilivered before PC3, so node_1 should have
# received IST up to 4 rows in t1 (what was there before PC2) plus one more
# INSERT while in PC2.
#
--let $wait_condition = SELECT COUNT(*) = 5 FROM t1;
--source include/wait_condition.inc
--connection node_2
INSERT INTO t1 VALUES (9, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1a
#--let $galera_sync_point = process_primary_configuration
--source include/galera_signal_sync_point.inc
--source include/galera_wait_sync_point.inc
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
#
# Now node_1 is processing PC4, still must have 8 rows in t1
#
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
#--let $galera_sync_point = process_primary_configuration
--source include/galera_signal_sync_point.inc
--source include/galera_clear_sync_point.inc
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
--source include/wait_condition.inc
DROP TABLE t1;
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_2
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_3
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -0,0 +1,299 @@
#
# Tests handling of several configuration changes while a joiner gets
# state transfer
#
# Variant C: sending of state transfer request is scheduled while in non-PRIM
#
# Refs codersihp/galera-bugs#454
#
--source include/have_innodb.inc
--source include/galera_cluster.inc
--source include/galera_have_debug_sync.inc
--let $galera_connection_name = node_3
--let $galera_server_number = 3
--source include/galera_connect.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb;
INSERT INTO t1 VALUES (1, 1);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc
#
# Isolate node_1 and update cluster state to force node 1 into joiner mode
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (2, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 2 FROM t1;
--source include/wait_condition.inc
#
# Now reconnect node_1 but first make it block before sending state transfer
# request
#
# THIS IS PC1
#
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
SET wsrep_sync_wait = 0;
SET wsrep_on = OFF;
--let $galera_sync_point = after_shift_to_joining
--source include/galera_set_sync_point.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (3, 2);
--connection node_1a
--source include/galera_wait_sync_point.inc
#
# At this point every node thinks that node_1 is in a JOINER state
#
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
#
# Now that node_1 sent state request and became JOINER isolate node_1 again
# and commit one more action, so that node_1 loses JOINER state
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (4, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 4 FROM t1;
--source include/wait_condition.inc
#
# Reconnect node_1 again
#
# THIS IS PC2
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# After this point node_1 is no longer JOINER and is required to start the
# whole procedure over because it missed some actions (4th insert into t1)
#
INSERT INTO t1 VALUES (5, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 5 FROM t1;
--source include/wait_condition.inc
#
# Now let node_1 continue with IST and finish processing PC1, but make it
# block when processing PC2 right after progressing to JOINER state and
# before IST happens.
#
--connection node_1a
--let $galera_sync_point = before_send_state_request
--source include/galera_set_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_signal_sync_point.inc
--let $galera_sync_point = before_send_state_request
--source include/galera_wait_sync_point.inc
--source include/galera_clear_sync_point.inc
# Here we are processing PC2 just before sending state request
# since PC1 has been processed node_1 must have 3 rows in t1
# 2 were there before PC1 and one was added while in PC1
--let $wait_condition = SELECT COUNT(*) = 3 FROM t1;
--source include/wait_condition.inc
#
# Now disconnect and reconnect node_1 again to get PC3
# It still is blocked before sending state transfer request in PC2.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
# Proceed to sending state transfer request
--connection node_1a
--let $galera_sync_point = after_shift_to_joining
--source include/galera_set_sync_point.inc
--let $galera_sync_point = before_send_state_request
--source include/galera_signal_sync_point.inc # before_send_state_request
#
# node_1 proceeds to sending state transfer request, it will be delivered only
# in the next PC which is PC3. Only then the node will shift to JOINING
#
--echo 4
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters';
--connection node_3
INSERT INTO t1 VALUES (6, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 6 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC3
#
INSERT INTO t1 VALUES (7, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 7 FROM t1;
--source include/wait_condition.inc
# node_1 is stiil processing PC2, it was let to send state transfer request
# while in non-PRIM. Now it should be able to complete it and shift to
# JOINING. Make it block on next PC(3) and continue to receive IST
--connection node_1a
--let $galera_sync_point = after_shift_to_joining
--source include/galera_wait_sync_point.inc
--source include/galera_clear_sync_point.inc # won't need it any more
--let $galera_sync_point = process_primary_configuration
--source include/galera_set_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_signal_sync_point.inc
# continue with IST while still processing PC2
#
# Now disconnect and reconnect node_1 again to generate PC4.
#
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--connection node_3
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
INSERT INTO t1 VALUES (8, 3);
--connection node_2
--let $wait_condition = SELECT COUNT(*) = 8 FROM t1;
--source include/wait_condition.inc
--connection node_1
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
#
# This is PC4. node_1 should complete IST, complete PC2, and continue
# with the next item in queue
#
--connection node_1a
--let $galera_sync_point = process_primary_configuration
--source include/galera_wait_sync_point.inc
#
# Now node_1 is blocked before processing PC3, and should have finished state
# transfer started while in PC2.
# State tranfer request was dilivered in PC3 to donor, so node_1 should have
# received IST up to 6 rows in t1 (what was there before PC3).
#
--let $wait_condition = SELECT COUNT(*) = 6 FROM t1;
--source include/wait_condition.inc
--connection node_2
INSERT INTO t1 VALUES (9, 2);
--connection node_3
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1a
# continue with processing PC3
--let $galera_sync_point = process_primary_configuration
--source include/galera_signal_sync_point.inc
# wait for row that follows PC3
--let $wait_condition = SELECT COUNT(*) = 7 FROM t1;
--source include/wait_condition.inc
# wait till PC4
--let $galera_sync_point = process_primary_configuration
--source include/galera_wait_sync_point.inc
#
# Now node_1 is processing PC4, still must have 7 rows in t1
#
--let $wait_condition = SELECT COUNT(*) = 7 FROM t1;
--source include/wait_condition.inc
# Continue with PC4
--let $galera_sync_point = process_primary_configuration
--source include/galera_clear_sync_point.inc
--source include/galera_signal_sync_point.inc
--let $galera_sync_point = after_shift_to_joining
--source include/galera_wait_sync_point.inc
--source include/galera_clear_sync_point.inc
--source include/galera_signal_sync_point.inc
--let $wait_condition = SELECT COUNT(*) = 9 FROM t1;
--source include/wait_condition.inc
--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
--source include/wait_condition.inc
DROP TABLE t1;
call mtr.add_suppression("WSREP: Send action {\(.*\), STATE_REQUEST} returned -107 \\(Transport endpoint is not connected\\)");
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_2
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");
--connection node_3
call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required.");

View File

@ -278,9 +278,9 @@ select count(*) > -1 from d_sys_virtual;
count(*) > -1
1
select count(*) > -1 from information_schema.innodb_tablespaces_encryption;
ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
ERROR 42000: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
select count(*) > -1 from i_tablespaces_encryption;
ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
ERROR 42000: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
select count(*) > -1 from d_tablespaces_encryption;
count(*) > -1
1

View File

@ -225,6 +225,13 @@ id title body
1 MySQL Tutorial DBMS stands for DataBase ...
3 Optimizing MySQL In this tutorial we will show ...
DROP TABLE articles;
#
# MDEV-22811 DDL fails to drop and re-create FTS index
#
CREATE TABLE t1 (FTS_DOC_ID BIGINT UNSIGNED PRIMARY KEY,
f1 VARCHAR(200),FULLTEXT fidx(f1))engine=innodb;
ALTER TABLE t1 DROP index fidx, ADD FULLTEXT INDEX(f1);
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(3)) ENGINE=InnoDB;
ALTER TABLE t1 ADD FULLTEXT KEY(a), ADD COLUMN b VARCHAR(3), ADD FULLTEXT KEY(b);
DROP TABLE t1;

View File

@ -270,6 +270,14 @@ SELECT * FROM articles WHERE MATCH (title, body)
DROP TABLE articles;
--echo #
--echo # MDEV-22811 DDL fails to drop and re-create FTS index
--echo #
CREATE TABLE t1 (FTS_DOC_ID BIGINT UNSIGNED PRIMARY KEY,
f1 VARCHAR(200),FULLTEXT fidx(f1))engine=innodb;
ALTER TABLE t1 DROP index fidx, ADD FULLTEXT INDEX(f1);
DROP TABLE t1;
# Add more than one FTS index
CREATE TABLE t1 (a VARCHAR(3)) ENGINE=InnoDB;
ALTER TABLE t1 ADD FULLTEXT KEY(a), ADD COLUMN b VARCHAR(3), ADD FULLTEXT KEY(b);

View File

@ -1,6 +1,11 @@
--source include/have_aria.inc
--source include/innodb_page_size.inc
# see suite.pm "check for exact values, in case the default changes to be small everywhere"
if (`select @@max_binlog_stmt_cache_size = 4294963200 and @@innodb_page_size = 65536`) {
skip skipped on 32bit; # tries to allocate 1GB of memory
}
call mtr.add_suppression("InnoDB: New log files created");
let basedir=$MYSQLTEST_VARDIR/tmp/backup;

View File

@ -15,7 +15,6 @@ rpl_spec_variables : BUG#11755836 2009-10-27 jasonh rpl_spec_variables fa
rpl_partition_archive : MDEV-5077 2013-09-27 svoj Cannot exchange partition with archive table
rpl_row_binlog_max_cache_size : MDEV-11092
rpl_row_index_choice : MDEV-11666
rpl_parallel2 : fails after MDEV-16172
rpl_semi_sync_after_sync : fails after MDEV-16172
rpl_slave_grp_exec: MDEV-10514
rpl_auto_increment_update_failure : disabled for now

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
#

View File

@ -0,0 +1,47 @@
include/master-slave.inc
[connection master]
connection master;
SET GLOBAL LOG_WARNINGS=2;
connection slave;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=current_pos;
include/start_slave.inc
connection master;
"Test Case 1: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('')"
FOUND 1 /using_gtid\(1\), gtid\(\'\'\).*/ in mysqld.1.err
connection slave;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=no;
include/start_slave.inc
connection master;
"Test Case 2: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(0), gtid('')"
FOUND 1 /using_gtid\(0\), gtid\(\'\'\).*/ in mysqld.1.err
CREATE TABLE t (f INT) ENGINE=INNODB;
INSERT INTO t VALUES(10);
connection slave;
connection slave;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
include/start_slave.inc
connection master;
"Test Case 3: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('0-1-2')"
FOUND 1 /using_gtid\(1\), gtid\(\'0-1-2\'\).*/ in mysqld.1.err
SET @@SESSION.gtid_domain_id=10;
INSERT INTO t VALUES(20);
connection slave;
connection slave;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
include/start_slave.inc
connection master;
"Test Case 4: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('0-1-2,10-1-1')"
FOUND 1 /using_gtid\(1\), gtid\(\'0-1-2,10-1-1\'\).*/ in mysqld.1.err
"===== Clean up ====="
connection slave;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=no;
include/start_slave.inc
connection master;
DROP TABLE t;
SET GLOBAL LOG_WARNINGS=default;
include/rpl_end.inc

View File

@ -0,0 +1,121 @@
# ==== Purpose ====
#
# Test verifies that Start binlog_dump message will report GTID position
# requested by slave when log_warnings > 1.
#
# ==== Implementation ====
#
# Steps:
# 0 - Have LOG_WARNINGS=2
# 1 - On a fresh slave server which has not replicated any GTIDs execute
# "CHANGE MASTER TO MASTER_USE_GTID=current_pos;" command. Start the
# slave.
# 2 - In Master error log verify that pattern "using_gtid(1), gtid('')" is
# present.
# 3 - On slave server do STOP SLAVE and execute "CHANGE MASTER TO
# MASTER_USE_GTID=no;" command. Start the slave threads.
# 4 - In Master error log verify that pattern "using_gtid(0), gtid('')" is
# present.
# 5- Execute a DDL and DML on master server. This will generated two GTIDs
# on the master server ('0-1-2'). Sync the slave server with master.
# 6 - On slave do STOP SLAVE and execute "CHANGE MASTER TO
# MASTER_USE_GTID=slave_pos;" command. Start slave threads.
# 7 - In Master error verify that pattern "using_gtid(1), gtid('0-1-2')" is
# present.
# 8 - On Master change domain ID to 10 and execute a DML operation. It will
# generate a GTID 10-1-1.
# 9 - On slave do STOP SLAVE and execute "CHANGE MASTER TO
# MASTER_USE_GTID=slave_pos;" command. Start slave threads.
# 10 -In Master error verify that pattern "using_gtid(1),
# gtid('0-1-2,10-1-1')" is present.
#
# ==== References ====
#
# MDEV-20428: "Start binlog_dump" message doesn't indicate GTID position
#
--source include/have_binlog_format_mixed.inc
--source include/have_innodb.inc
--source include/master-slave.inc
--connection master
SET GLOBAL LOG_WARNINGS=2;
--connection slave
--source include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=current_pos;
--source include/start_slave.inc
--connection master
# Check error log for correct messages.
let $log_error_= `SELECT @@GLOBAL.log_error`;
if(!$log_error_)
{
# MySQL Server on windows is started with --console and thus
# does not know the location of its .err log, use default location
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
}
--echo "Test Case 1: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('')"
--let SEARCH_FILE=$log_error_
--let SEARCH_RANGE=-50000
--let SEARCH_PATTERN=using_gtid\(1\), gtid\(\'\'\).*
--source include/search_pattern_in_file.inc
--connection slave
--source include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=no;
--source include/start_slave.inc
--connection master
--echo "Test Case 2: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(0), gtid('')"
--let SEARCH_FILE=$log_error_
--let SEARCH_RANGE=-50000
--let SEARCH_PATTERN=using_gtid\(0\), gtid\(\'\'\).*
--source include/search_pattern_in_file.inc
CREATE TABLE t (f INT) ENGINE=INNODB;
INSERT INTO t VALUES(10);
save_master_pos;
--connection slave
sync_with_master;
--connection slave
--source include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
--source include/start_slave.inc
--connection master
--echo "Test Case 3: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('0-1-2')"
--let SEARCH_FILE=$log_error_
--let SEARCH_RANGE=-50000
--let SEARCH_PATTERN=using_gtid\(1\), gtid\(\'0-1-2\'\).*
--source include/search_pattern_in_file.inc
SET @@SESSION.gtid_domain_id=10;
INSERT INTO t VALUES(20);
save_master_pos;
--connection slave
sync_with_master;
--connection slave
--source include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
--source include/start_slave.inc
--connection master
--echo "Test Case 4: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('0-1-2,10-1-1')"
--let SEARCH_FILE=$log_error_
--let SEARCH_RANGE=-50000
--let SEARCH_PATTERN=using_gtid\(1\), gtid\(\'0-1-2,10-1-1\'\).*
--source include/search_pattern_in_file.inc
--echo "===== Clean up ====="
--connection slave
--source include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=no;
--source include/start_slave.inc
--connection master
DROP TABLE t;
SET GLOBAL LOG_WARNINGS=default;
--source include/rpl_end.inc

View File

@ -147,6 +147,35 @@ Variable_name Value
Feature_system_versioning 2
drop table t;
#
# MDEV-22906 Disallow system_versioning_asof in DML
#
create or replace table t1 (x int) with system versioning;
create or replace table t2 (y int);
insert into t1 values (1);
insert into t2 values (1);
set system_versioning_asof= '1970-01-01 00:00:00';
delete t1, t2 from t1 join t2 where t1.x = t2.y;
select * from t1 for system_time as of timestamp now(6);
x
insert into t1 values (1);
insert into t2 values (1);
update t1, t2 set x= 2, y= 2 where x = y;
select * from t1 for system_time as of timestamp now(6);
x
2
replace t2 select x + 1 from t1;
select * from t2;
y
2
3
insert t2 select x + 2 from t1;
select * from t2;
y
2
3
4
drop tables t1, t2;
#
# MDEV-16991 Rounding vs truncation for TIME, DATETIME, TIMESTAMP
#
SET sql_mode=TIME_ROUND_FRACTIONAL;
@ -157,3 +186,4 @@ SELECT @@global.system_versioning_asof;
@@global.system_versioning_asof
2002-01-01 00:00:00.000000
SET @@global.system_versioning_asof= DEFAULT;
# End of 10.4 tests

View File

@ -104,6 +104,30 @@ show status like "Feature_system_versioning";
drop table t;
--echo #
--echo # MDEV-22906 Disallow system_versioning_asof in DML
--echo #
create or replace table t1 (x int) with system versioning;
create or replace table t2 (y int);
insert into t1 values (1);
insert into t2 values (1);
set system_versioning_asof= '1970-01-01 00:00:00';
delete t1, t2 from t1 join t2 where t1.x = t2.y;
select * from t1 for system_time as of timestamp now(6);
insert into t1 values (1);
insert into t2 values (1);
update t1, t2 set x= 2, y= 2 where x = y;
select * from t1 for system_time as of timestamp now(6);
replace t2 select x + 1 from t1;
select * from t2;
insert t2 select x + 2 from t1;
select * from t2;
drop tables t1, t2;
--echo #
--echo # MDEV-16991 Rounding vs truncation for TIME, DATETIME, TIMESTAMP
@ -113,3 +137,5 @@ SET sql_mode=TIME_ROUND_FRACTIONAL;
SET @@global.system_versioning_asof= timestamp'2001-12-31 23:59:59.9999999';
SELECT @@global.system_versioning_asof;
SET @@global.system_versioning_asof= DEFAULT;
--echo # End of 10.4 tests

View File

@ -21,9 +21,9 @@ ELSE()
SET(CMAKE_REQUIRED_INCLUDES ${GSSAPI_INCS})
SET(CMAKE_REQUIRED_LIBRARIES ${GSSAPI_LIBS})
INCLUDE(CheckCXXSymbolExists)
CHECK_CXX_SYMBOL_EXISTS(krb5_free_unparsed_name "krb5.h" HAVE_KRB5_FREE_UNPARSED_NAME)
IF(HAVE_KRB5_FREE_UNPARSED_NAME)
ADD_DEFINITIONS(-DHAVE_KRB5_FREE_UNPARSED_NAME=1)
CHECK_CXX_SYMBOL_EXISTS(krb5_xfree "krb5.h" HAVE_KRB5_XFREE)
IF(HAVE_KRB5_XFREE)
ADD_DEFINITIONS(-DHAVE_KRB5_XFREE=1)
ENDIF()
ELSE()

View File

@ -30,7 +30,7 @@ static void log_error( OM_uint32 major, OM_uint32 minor, const char *msg)
Generate default principal service name formatted as principal name "mariadb/server.fqdn@REALM"
*/
#include <krb5.h>
#ifndef HAVE_KRB5_FREE_UNPARSED_NAME
#ifdef HAVE_KRB5_XFREE
#define krb5_free_unparsed_name(a,b) krb5_xfree(b)
#endif
static char* get_default_principal_name()

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
use strict;
use warnings;

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=8:ai:ts=8

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
package Net::HandlerSocket::HSPool;

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

View File

@ -1,4 +1,4 @@
#!/usr/bin/perl
#!/usr/bin/env perl
# vim:sw=2:ai

Some files were not shown because too many files have changed in this diff Show More