2020-03-30 22:57:53 +02:00
#!/usr/bin/env perl
2004-12-30 16:34:01 +01:00
# -*- cperl -*-
2014-03-27 22:26:58 +01:00
# Copyright (c) 2004, 2014, Oracle and/or its affiliates.
2022-07-27 16:17:24 +02:00
# Copyright (c) 2009, 2022, MariaDB Corporation
2010-01-12 02:47:27 +01:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
2019-05-11 20:29:06 +02:00
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
2010-01-12 02:47:27 +01:00
2004-12-30 16:34:01 +01:00
#
2006-10-05 22:05:42 +02:00
##############################################################################
#
# mysql-test-run.pl
2004-12-30 16:34:01 +01:00
#
2007-12-12 18:19:24 +01:00
# Tool used for executing a suite of .test files
2004-12-30 16:34:01 +01:00
#
2006-10-05 22:05:42 +02:00
# See the "MySQL Test framework manual" for more information
2018-10-28 14:50:49 +01:00
# https://mariadb.com/kb/en/library/mysqltest/
2004-12-30 16:34:01 +01:00
#
#
2006-10-05 22:05:42 +02:00
##############################################################################
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
use strict ;
use warnings ;
BEGIN {
# Check that mysql-test-run.pl is started from mysql-test/
2021-02-08 10:22:04 +01:00
unless ( - f "mariadb-test-run.pl" )
2007-12-12 18:19:24 +01:00
{
print "**** ERROR **** " ,
"You must start mysql-test-run from the mysql-test/ directory\n" ;
exit ( 1 ) ;
}
# Check that lib exist
unless ( - d "lib/" )
{
print "**** ERROR **** " ,
"Could not find the lib/ directory \n" ;
exit ( 1 ) ;
}
2007-11-23 15:02:50 +01:00
2008-11-14 09:45:32 +01:00
# Check backward compatibility support
# By setting the environment variable MTR_VERSION
# it's possible to use a previous version of
# mysql-test-run.pl
my $ version = $ ENV { MTR_VERSION } || 2 ;
if ( $ version == 1 )
{
print "=======================================================\n" ;
2021-02-08 10:22:04 +01:00
print " WARNING: Using mariadb-test-run.pl version 1! \n" ;
2008-11-14 09:45:32 +01:00
print "=======================================================\n" ;
2009-02-10 11:00:16 +01:00
# Should use exec() here on *nix but this appears not to work on Windows
2021-02-08 10:22:04 +01:00
exit ( system ( $^X , "lib/v1/mariadb-test-run.pl" , @ ARGV ) >> 8 ) ;
2008-11-14 09:45:32 +01:00
}
elsif ( $ version == 2 )
{
# This is the current version, just continue
;
}
else
{
2021-02-08 10:22:04 +01:00
print "ERROR: Version $version of mariadb-test-run does not exist!\n" ;
2008-11-14 09:45:32 +01:00
exit ( 1 ) ;
}
}
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
use lib "lib" ;
2008-11-14 09:45:32 +01:00
2012-05-04 14:46:18 +02:00
use Cwd ;
2022-07-18 22:16:18 +02:00
use POSIX ":sys_wait_h" ;
2022-07-18 22:16:17 +02:00
use Getopt::Long qw( :config bundling ) ;
2007-12-12 18:19:24 +01:00
use My::File::Path ; # Patched version of File::Path
use File::Basename ;
use File::Copy ;
2008-04-27 23:35:38 +02:00
use File::Find ;
2009-12-22 10:35:56 +01:00
use File::Temp qw/tempdir/ ;
2010-06-10 11:11:52 +02:00
use File::Spec::Functions qw/splitdir rel2abs/ ;
2008-02-20 14:55:30 +01:00
use My::Platform ;
2007-12-12 18:19:24 +01:00
use My::SafeProcess ;
use My::ConfigFactory ;
2008-01-07 19:44:48 +01:00
use My::Options ;
2018-02-14 13:30:52 +01:00
use My::Tee ;
2008-03-13 17:16:42 +01:00
use My::Find ;
2008-05-04 13:31:40 +02:00
use My::SysInfo ;
2008-09-06 08:57:05 +02:00
use My::CoreDump ;
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
use My::Debugger ;
2007-12-12 18:19:24 +01:00
use mtr_cases ;
2008-02-04 11:16:25 +01:00
use mtr_report ;
2008-04-08 16:51:26 +02:00
use mtr_match ;
2008-08-10 19:46:43 +02:00
use mtr_unique ;
2011-05-09 16:07:43 +02:00
use mtr_results ;
2008-04-24 13:02:53 +02:00
use IO::Socket::INET ;
use IO::Select ;
2018-10-10 16:27:17 +02:00
use Time::HiRes qw( gettimeofday ) ;
2006-11-02 21:05:20 +01:00
2020-03-12 19:30:58 +01:00
sub realpath ($) { ( IS_WINDOWS ) ? $ _ [ 0 ] : Cwd:: realpath ( $ _ [ 0 ] ) }
2016-09-10 17:50:32 +02:00
require "mtr_process.pl" ;
require "mtr_io.pl" ;
require "mtr_gprof.pl" ;
require "mtr_misc.pl" ;
2004-12-30 16:34:01 +01:00
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
my $ opt_valgrind ;
my $ valgrind_reports = 0 ;
2007-12-12 18:19:24 +01:00
$ SIG { INT } = sub { mtr_error ( "Got ^C signal" ) ; } ;
2015-01-14 14:50:38 +01:00
$ SIG { HUP } = sub { mtr_error ( "Hangup detected on controlling terminal" ) ; } ;
2004-12-30 16:34:01 +01:00
2006-10-04 12:47:32 +02:00
our $ mysql_version_id ;
2011-01-19 15:47:56 +01:00
my $ mysql_version_extra ;
2007-12-12 18:19:24 +01:00
our $ glob_mysql_test_dir ;
our $ basedir ;
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
our $ bindir ;
2004-12-30 16:34:01 +01:00
our $ path_charsetsdir ;
our $ path_client_bindir ;
2008-03-03 12:53:57 +01:00
our $ path_client_libdir ;
2004-12-30 16:34:01 +01:00
our $ path_language ;
2008-02-25 16:41:59 +01:00
our $ path_current_testlog ;
our $ path_testlog ;
2006-10-04 12:47:32 +02:00
2007-12-12 18:19:24 +01:00
our $ default_vardir ;
our $ opt_vardir ; # Path to use for var/ dir
2010-06-10 11:11:52 +02:00
our $ plugindir ;
2020-04-07 09:45:49 +02:00
our $ opt_xml_report ; # XML output
2020-04-08 14:25:04 +02:00
our $ client_plugindir ;
2007-12-12 18:19:24 +01:00
my $ path_vardir_trace ; # unix formatted opt_vardir for trace files
my $ opt_tmpdir ; # Path to use for tmp/ dir
2009-02-12 17:36:58 +01:00
my $ opt_tmpdir_pid ;
2010-09-28 15:58:01 +02:00
my $ opt_start ;
my $ opt_start_dirty ;
my $ opt_start_exit ;
my $ start_only ;
2014-08-06 14:39:15 +02:00
my $ file_wsrep_provider ;
2022-07-18 22:16:18 +02:00
my $ num_saved_cores = 0 ; # Number of core files saved in vardir/log/ so far.
2010-09-28 15:58:01 +02:00
2014-09-26 10:22:44 +02:00
our @ global_suppressions ;
2009-02-12 17:36:58 +01:00
END {
2009-02-13 10:38:53 +01:00
if ( defined $ opt_tmpdir_pid and $ opt_tmpdir_pid == $$ )
{
2010-09-28 15:58:01 +02:00
if ( ! $ opt_start_exit )
{
# Remove the tempdir this process has created
mtr_verbose ( "Removing tmpdir $opt_tmpdir" ) ;
rmtree ( $ opt_tmpdir ) ;
}
else
{
mtr_warning ( "tmpdir $opt_tmpdir should be removed after the server has finished" ) ;
}
2009-02-12 17:36:58 +01:00
}
}
2009-12-22 10:35:56 +01:00
sub env_or_val ($$) { defined $ ENV { $ _ [ 0 ] } ? $ ENV { $ _ [ 0 ] } : $ _ [ 1 ] }
2007-12-12 18:19:24 +01:00
my $ path_config_file ; # The generated config file, var/my.cnf
2004-12-30 16:34:01 +01:00
2006-11-02 21:05:20 +01:00
# Visual Studio produces executables in different sub-directories based on the
# configuration used to build them. To make life easier, an environment
# variable or command-line option may be specified to control which set of
# executables will be used by the test suite.
2021-10-21 14:21:44 +02:00
our $ multiconfig = $ ENV { 'MTR_VS_CONFIG' } ;
2006-11-02 21:05:20 +01:00
2013-11-27 21:58:36 +01:00
my @ DEFAULT_SUITES = qw(
main -
archive -
2020-10-15 01:25:57 +02:00
atomic -
2013-11-27 21:58:36 +01:00
binlog -
2016-12-05 19:19:01 +01:00
binlog_encryption -
2019-11-27 10:29:03 +01:00
client -
2013-11-27 21:58:36 +01:00
csv -
2016-09-17 05:56:56 +02:00
compat / oracle -
2019-04-03 13:40:45 +02:00
compat / mssql -
2020-07-08 06:31:32 +02:00
compat / maxdb -
2015-05-09 12:31:53 +02:00
encryption -
2013-11-27 21:58:36 +01:00
federated -
funcs_1 -
funcs_2 -
2016-11-07 16:48:50 +01:00
gcol -
2013-11-27 21:58:36 +01:00
handler -
heap -
innodb -
2013-12-16 13:02:21 +01:00
innodb_fts -
2016-11-29 13:25:22 +01:00
innodb_gis -
2019-06-19 08:49:49 +02:00
innodb_i_s -
2014-02-17 11:00:51 +01:00
innodb_zip -
2017-01-24 14:34:44 +01:00
json -
2013-11-27 21:58:36 +01:00
maria -
2017-04-19 09:45:24 +02:00
mariabackup -
2013-12-15 15:57:26 +01:00
multi_source -
2013-11-27 21:58:36 +01:00
optimizer_unfixed_bugs -
parts -
perfschema -
plugins -
2013-12-15 15:57:26 +01:00
roles -
2013-11-27 21:58:36 +01:00
rpl -
2020-06-03 14:43:13 +02:00
stress -
2013-11-27 21:58:36 +01:00
sys_vars -
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
sql_sequence -
2013-11-27 21:58:36 +01:00
unit -
vcol -
2017-01-21 16:19:46 +01:00
versioning -
2019-03-13 13:25:48 +01:00
period -
2021-03-03 10:35:25 +01:00
sysschema -
2013-11-27 21:58:36 +01:00
) ;
2008-03-25 16:29:32 +01:00
my $ opt_suites ;
2005-01-02 16:57:21 +01:00
2008-11-21 13:45:28 +01:00
our $ opt_verbose = 0 ; # Verbose output, enable with --verbose
2012-02-06 23:16:21 +01:00
our $ exe_patch ;
2004-12-30 16:34:01 +01:00
our $ exe_mysql ;
2011-07-19 16:17:58 +02:00
our $ exe_mysql_plugin ;
2004-12-30 16:34:01 +01:00
our $ exe_mysqladmin ;
our $ exe_mysqltest ;
2006-05-02 14:46:18 +02:00
our $ exe_libtool ;
2011-06-16 15:55:11 +02:00
our $ exe_mysql_embedded ;
2019-11-27 10:29:03 +01:00
our $ exe_mariadb_conv ;
2004-12-30 16:34:01 +01:00
2008-08-08 19:09:13 +02:00
our $ opt_big_test = 0 ;
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
our $ opt_staging_run = 0 ;
2004-12-30 16:34:01 +01:00
2007-11-23 13:29:31 +01:00
our @ opt_combinations ;
2007-11-02 22:32:17 +01:00
2005-06-10 21:29:37 +02:00
our @ opt_extra_mysqld_opt ;
2011-01-27 14:42:08 +01:00
our @ opt_mysqld_envs ;
2004-12-30 16:34:01 +01:00
2011-09-15 12:34:32 +02:00
my $ opt_stress ;
2017-04-29 21:28:32 +02:00
my $ opt_tail_lines = 20 ;
2011-09-15 12:34:32 +02:00
2013-04-09 16:20:54 +02:00
my $ opt_dry_run ;
2009-01-27 14:21:18 +01:00
my $ opt_compress ;
my $ opt_ssl ;
2009-02-06 15:09:15 +01:00
my $ opt_skip_ssl ;
2010-06-02 14:01:42 +02:00
my @ opt_skip_test_list ;
2009-10-19 15:51:47 +02:00
our $ opt_ssl_supported ;
2021-07-15 11:27:31 +02:00
our $ opt_ps_protocol ;
2009-01-27 14:21:18 +01:00
my $ opt_sp_protocol ;
2024-10-03 08:31:39 +02:00
our $ opt_cursor_protocol ;
2009-01-27 14:21:18 +01:00
my $ opt_view_protocol ;
2011-09-20 12:49:25 +02:00
my $ opt_non_blocking_api ;
2005-10-04 15:43:55 +02:00
2004-12-30 16:34:01 +01:00
our $ opt_debug ;
2011-12-15 22:07:58 +01:00
my $ debug_d = "d,*" ;
2010-12-09 12:10:49 +01:00
my $ opt_debug_common ;
2011-02-07 12:42:21 +01:00
our $ opt_debug_server ;
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
our @ opt_cases ; # The test cases names in argv
2008-02-25 16:41:59 +01:00
our $ opt_embedded_server ;
2006-11-17 13:30:42 +01:00
2007-12-12 18:19:24 +01:00
# Options used when connecting to an already running server
my % opts_extern ;
sub using_extern { return ( keys % opts_extern > 0 ) ; } ;
2006-11-17 13:30:42 +01:00
2007-12-12 18:19:24 +01:00
our $ opt_fast = 0 ;
2012-05-15 19:35:57 +02:00
our $ opt_force = 0 ;
2023-10-23 12:15:46 +02:00
our $ opt_skip_not_found = 0 ;
2006-11-07 11:07:27 +01:00
our $ opt_mem = $ ENV { 'MTR_MEM' } ;
2010-10-13 13:07:28 +02:00
our $ opt_clean_vardir = $ ENV { 'MTR_CLEAN_VARDIR' } ;
2004-12-30 16:34:01 +01:00
our $ opt_gcov ;
2010-01-05 21:35:50 +01:00
our $ opt_gprof ;
our % gprof_dirs ;
2007-12-12 18:19:24 +01:00
my $ config ; # The currently running config
my $ current_config_name ; # The currently running config file template
2004-12-30 16:34:01 +01:00
2010-06-10 10:34:16 +02:00
our @ opt_experimentals ;
2010-06-15 13:37:53 +02:00
our $ experimental_test_cases = [] ;
2005-08-29 20:28:42 +02:00
2016-08-25 02:21:06 +02:00
our $ baseport ;
2010-01-25 11:20:52 +01:00
# $opt_build_thread may later be set from $opt_port_base
2008-04-24 13:02:53 +02:00
my $ opt_build_thread = $ ENV { 'MTR_BUILD_THREAD' } || "auto" ;
2010-01-25 11:20:52 +01:00
my $ opt_port_base = $ ENV { 'MTR_PORT_BASE' } || "auto" ;
2009-03-04 11:34:47 +01:00
my $ build_thread = 0 ;
2005-08-29 20:28:42 +02:00
2007-12-12 18:19:24 +01:00
my $ opt_record ;
2004-12-30 16:34:01 +01:00
2011-05-09 16:07:43 +02:00
our $ opt_resfile = $ ENV { 'MTR_RESULT_FILE' } || 0 ;
2009-03-09 14:31:39 +01:00
my $ opt_skip_core ;
2008-04-09 12:27:39 +02:00
our $ opt_check_testcases = 1 ;
2007-12-12 18:19:24 +01:00
my $ opt_mark_progress ;
2010-02-17 16:28:02 +01:00
my $ opt_max_connections ;
2010-10-19 14:08:46 +02:00
our $ opt_report_times = 0 ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
my $ opt_sleep ;
2005-01-01 19:27:41 +01:00
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
our $ opt_retry = 1 ;
our $ opt_retry_failure = env_or_val ( MTR_RETRY_FAILURE = > 2 ) ;
our $ opt_testcase_timeout = $ ENV { MTR_TESTCASE_TIMEOUT } || 15 ; # minutes
our $ opt_suite_timeout = $ ENV { MTR_SUITE_TIMEOUT } || 360 ; # minutes
our $ opt_shutdown_timeout = $ ENV { MTR_SHUTDOWN_TIMEOUT } || 10 ; # seconds
our $ opt_start_timeout = $ ENV { MTR_START_TIMEOUT } || 180 ; # seconds
2004-12-30 16:34:01 +01:00
2008-11-21 13:45:28 +01:00
sub suite_timeout { return $ opt_suite_timeout * 60 ; } ;
2009-04-29 16:13:38 +02:00
my $ opt_wait_all ;
2010-06-09 10:21:46 +02:00
my $ opt_user_args ;
2008-01-10 10:44:18 +01:00
my $ opt_repeat = 1 ;
2010-02-17 12:37:37 +01:00
my $ opt_reorder = 1 ;
2010-08-31 11:27:57 +02:00
my $ opt_force_restart = 0 ;
2004-12-30 16:34:01 +01:00
2008-09-05 18:28:20 +02:00
our $ opt_user = "root" ;
2004-12-30 16:34:01 +01:00
2009-11-12 11:04:01 +01:00
my % mysqld_logs ;
2009-09-29 17:38:40 +02:00
my $ opt_debug_sync_timeout = 300 ; # Default timeout for WAIT_FOR actions.
2011-12-14 10:59:11 +01:00
my $ warn_seconds = 60 ;
2007-12-12 18:19:24 +01:00
2018-03-28 17:06:27 +02:00
my $ rebootstrap_re = '--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)|data[-_]file[-_]path|force_rebootstrap' ;
2017-12-14 13:39:12 +01:00
2021-01-24 21:57:37 +01:00
sub testcase_timeout ($) { return $ opt_testcase_timeout * 60 ; }
2014-10-28 12:45:39 +01:00
sub check_timeout ($) { return testcase_timeout ( $ _ [ 0 ] ) ; }
2011-05-25 16:07:16 +02:00
2007-12-12 18:19:24 +01:00
our $ opt_warnings = 1 ;
2004-12-30 16:34:01 +01:00
2006-10-08 15:50:16 +02:00
our % mysqld_variables ;
2012-02-23 07:50:11 +01:00
our @ optional_plugins ;
2006-10-08 15:50:16 +02:00
2013-04-09 16:20:54 +02:00
my $ source_dist = - d "../sql" ;
2006-11-23 17:30:32 +01:00
2009-12-22 10:35:56 +01:00
my $ opt_max_save_core = env_or_val ( MTR_MAX_SAVE_CORE = > 5 ) ;
my $ opt_max_save_datadir = env_or_val ( MTR_MAX_SAVE_DATADIR = > 20 ) ;
my $ opt_max_test_fail = env_or_val ( MTR_MAX_TEST_FAIL = > 10 ) ;
2016-08-21 19:14:13 +02:00
my $ opt_core_on_failure = 0 ;
2020-05-13 13:42:32 +02:00
2008-11-14 10:22:44 +01:00
my $ opt_parallel = $ ENV { MTR_PARALLEL } || 1 ;
2024-06-06 19:26:50 +02:00
# Some galera tests starts 6 galera nodes. Each galera node requires
# three ports: 6*3 = 18. Plus 6 ports are needed for 6 mariadbd servers.
# Since the number of ports is rounded up to 10 everywhere, we will
# take 30 as the default value:
my $ opt_port_group_size = $ ENV { MTR_PORT_GROUP_SIZE } || 30 ;
2008-11-10 16:10:49 +01:00
2009-09-24 14:19:15 +02:00
# lock file to stop tests
my $ opt_stop_file = $ ENV { MTR_STOP_FILE } ;
# print messages when test suite is stopped (for buildbot)
my $ opt_stop_keep_alive = $ ENV { MTR_STOP_KEEP_ALIVE } ;
2007-12-12 18:19:24 +01:00
select ( STDOUT ) ;
$| = 1 ; # Automatically flush STDOUT
2004-12-30 16:34:01 +01:00
main ( ) ;
2007-12-12 18:19:24 +01:00
sub main {
2023-08-07 21:33:58 +02:00
$ ENV { MTR_PERL } = mixed_path ( $^X ) ;
2019-06-21 12:02:40 +02:00
2008-09-05 14:09:39 +02:00
# Default, verbosity on
2008-05-04 13:31:40 +02:00
report_option ( 'verbose' , 0 ) ;
2004-12-30 16:34:01 +01:00
2008-04-24 13:02:53 +02:00
# This is needed for test log evaluation in "gen-build-status-page"
# in all cases where the calling tool does not log the commands
# directly before it executes them, like "make test-force-pl" in RPM builds.
mtr_report ( "Logging: $0 " , join ( " " , @ ARGV ) ) ;
2005-10-04 15:43:55 +02:00
2008-09-05 14:09:39 +02:00
command_line_setup ( ) ;
2004-12-30 16:34:01 +01:00
2009-11-17 12:13:22 +01:00
# --help will not reach here, so now it's safe to assume we have binaries
My::SafeProcess:: find_bin ( ) ;
2010-06-10 11:11:52 +02:00
print "vardir: $opt_vardir\n" ;
initialize_servers ( ) ;
2010-10-19 14:08:46 +02:00
init_timers ( ) ;
2010-06-10 11:11:52 +02:00
2018-02-14 13:30:52 +01:00
unless ( IS_WINDOWS ) {
binmode ( STDOUT , ":via(My::Tee)" ) or die "binmode(STDOUT, :via(My::Tee)):$!" ;
binmode ( STDERR , ":via(My::Tee)" ) or die "binmode(STDERR, :via(My::Tee)):$!" ;
}
2010-06-10 11:11:52 +02:00
mtr_report ( "Checking supported features..." ) ;
2011-07-02 22:08:51 +02:00
2012-03-09 09:20:45 +01:00
executable_setup ( ) ;
2011-07-02 22:08:51 +02:00
# --debug[-common] implies we run debug server
$ opt_debug_server = 1 if $ opt_debug || $ opt_debug_common ;
2010-06-10 11:11:52 +02:00
if ( using_extern ( ) )
{
# Connect to the running mysqld and find out what it supports
collect_mysqld_features_from_running_server ( ) ;
}
else
{
# Run the mysqld to find out what features are available
collect_mysqld_features ( ) ;
}
2012-02-23 07:50:11 +01:00
check_ssl_support ( ) ;
check_debug_support ( ) ;
2020-04-21 18:07:11 +02:00
environment_setup ( ) ;
2010-06-10 11:11:52 +02:00
2013-12-22 17:11:31 +01:00
if ( ! $ opt_suites ) {
$ opt_suites = join ',' , collect_default_suites ( @ DEFAULT_SUITES ) ;
}
mtr_report ( "Using suites: $opt_suites" ) unless @ opt_cases ;
2007-12-12 18:19:24 +01:00
mtr_report ( "Collecting tests..." ) ;
2010-06-02 14:01:42 +02:00
my $ tests = collect_test_cases ( $ opt_reorder , $ opt_suites , \ @ opt_cases , \ @ opt_skip_test_list ) ;
2023-04-20 02:13:12 +02:00
if ( @$ tests == 0 ) {
mtr_report ( "No tests to run..." ) ;
exit 0 ;
}
2010-10-19 14:08:46 +02:00
mark_time_used ( 'collect' ) ;
2004-12-30 16:34:01 +01:00
2023-04-18 10:21:06 +02:00
if ( ! using_extern ( ) )
{
mysql_install_db ( default_mysqld ( ) , "$opt_vardir/install.db" ) ;
make_readonly ( "$opt_vardir/install.db" ) ;
}
2013-04-09 16:20:54 +02:00
if ( $ opt_dry_run )
{
for ( @$ tests ) {
print $ _ - > fullname ( ) , "\n" ;
}
exit 0 ;
}
2017-01-02 21:28:15 +01:00
if ( $ opt_gcov ) {
system './dgcov.pl --purge' ;
}
2008-09-05 14:09:39 +02:00
#######################################################################
2020-05-24 17:30:57 +02:00
my $ num_tests = $ mtr_report:: tests_total = @$ tests ;
2009-06-03 12:46:04 +02:00
if ( $ opt_parallel eq "auto" ) {
2008-09-05 14:09:39 +02:00
# Try to find a suitable value for number of workers
2018-02-14 17:52:18 +01:00
if ( IS_WINDOWS )
{
$ opt_parallel = $ ENV { NUMBER_OF_PROCESSORS } || 1 ;
}
2024-05-15 15:50:11 +02:00
elsif ( IS_MAC || IS_FREEBSD )
2024-05-02 17:44:02 +02:00
{
$ opt_parallel = `sysctl -n hw.ncpu` ;
}
2018-02-14 17:52:18 +01:00
else
{
my $ sys_info = My::SysInfo - > new ( ) ;
2020-04-12 18:07:40 +02:00
$ opt_parallel = $ sys_info - > num_cpus ( ) + int ( $ sys_info - > min_bogomips ( ) / 500 ) - 4 ;
2008-09-05 14:09:39 +02:00
}
2009-10-05 13:08:10 +02:00
my $ max_par = $ ENV { MTR_MAX_PARALLEL } || 8 ;
$ opt_parallel = $ max_par if ( $ opt_parallel > $ max_par ) ;
2008-09-05 14:09:39 +02:00
$ opt_parallel = $ num_tests if ( $ opt_parallel > $ num_tests ) ;
$ opt_parallel = 1 if ( $ opt_parallel < 1 ) ;
mtr_report ( "Using parallel: $opt_parallel" ) ;
}
2010-06-14 11:23:49 +02:00
$ ENV { MTR_PARALLEL } = $ opt_parallel ;
2008-09-05 14:09:39 +02:00
2011-09-15 12:34:32 +02:00
if ( $ opt_parallel > 1 && ( $ opt_start_exit || $ opt_stress ) ) {
mtr_warning ( "Parallel cannot be used with --start-and-exit or --stress\n" .
2010-03-16 10:45:32 +01:00
"Setting parallel to 1" ) ;
$ opt_parallel = 1 ;
}
2008-09-05 14:09:39 +02:00
# Create server socket on any free port
my $ server = new IO::Socket:: INET
(
LocalAddr = > 'localhost' ,
Proto = > 'tcp' ,
Listen = > $ opt_parallel ,
) ;
mtr_error ( "Could not create testcase server port: $!" ) unless $ server ;
my $ server_port = $ server - > sockport ( ) ;
2011-05-09 16:07:43 +02:00
if ( $ opt_resfile ) {
resfile_init ( "$opt_vardir/mtr-results.txt" ) ;
print_global_resfile ( ) ;
}
2008-09-05 14:09:39 +02:00
# Create child processes
my % children ;
for my $ child_num ( 1 .. $ opt_parallel ) {
my $ child_pid = My::SafeProcess::Base:: _safe_fork ( ) ;
if ( $ child_pid == 0 ) {
$ server = undef ; # Close the server port in child
$ tests = { } ; # Don't need the tests list in child
# Use subdir of var and tmp unless only one worker
if ( $ opt_parallel > 1 ) {
set_vardir ( "$opt_vardir/$child_num" ) ;
$ opt_tmpdir = "$opt_tmpdir/$child_num" ;
}
2010-10-19 14:08:46 +02:00
init_timers ( ) ;
2008-09-05 14:09:39 +02:00
run_worker ( $ server_port , $ child_num ) ;
exit ( 1 ) ;
}
$ children { $ child_pid } = 1 ;
}
#######################################################################
2008-04-24 13:02:53 +02:00
mtr_report ( ) ;
mtr_print_thick_line ( ) ;
2011-01-12 10:27:46 +01:00
mtr_print_header ( $ opt_parallel > 1 ) ;
2008-04-24 13:02:53 +02:00
2010-10-19 14:08:46 +02:00
mark_time_used ( 'init' ) ;
2008-04-24 13:02:53 +02:00
2010-04-28 14:52:24 +02:00
my ( $ prefix , $ fail , $ completed , $ extra_warnings ) =
2023-08-04 17:17:17 +02:00
Manager:: run ( $ server , $ tests , \ % children ) ;
2008-04-24 13:02:53 +02:00
2010-03-16 10:45:32 +01:00
exit ( 0 ) if $ opt_start_exit ;
2008-04-24 13:02:53 +02:00
# Send Ctrl-C to any children still running
kill ( "INT" , keys ( % children ) ) ;
2014-02-25 14:12:14 +01:00
if ( ! IS_WINDOWS ) {
# Wait for children to exit
foreach my $ pid ( keys % children )
{
my $ ret_pid = waitpid ( $ pid , 0 ) ;
2022-07-18 22:16:18 +02:00
if ( $ ret_pid == - 1 ) {
# Child was automatically reaped. Probably not possible
# unless you $SIG{CHLD}= 'IGNORE'
2022-07-18 22:16:18 +02:00
mtr_warning ( "Child ${pid} was automatically reaped (this should never happen)" ) ;
2022-07-18 22:16:18 +02:00
} elsif ( $ ret_pid != $ pid ) {
confess ( "Unexpected PID ${ret_pid} instead of expected ${pid}" ) ;
2014-02-25 14:12:14 +01:00
}
2022-07-18 22:16:18 +02:00
my $ exit_status = ( $? >> 8 ) ;
mtr_verbose2 ( "Child ${pid} exited with status ${exit_status}" ) ;
2022-07-18 22:16:18 +02:00
delete $ children { $ ret_pid } ;
2008-04-24 13:02:53 +02:00
}
}
2013-05-03 00:54:47 +02:00
if ( not @$ completed ) {
2023-04-20 02:10:23 +02:00
my $ test_name = mtr_grab_file ( $ path_testlog ) ;
$ test_name =~ s/^CURRENT_TEST:\s// ;
chomp ( $ test_name ) ;
my $ tinfo = My::Test - > new ( name = > $ test_name ) ;
$ tinfo - > { result } = 'MTR_RES_FAILED' ;
$ tinfo - > { comment } = ' ' ;
mtr_report_test ( $ tinfo ) ;
2008-04-28 08:38:07 +02:00
mtr_error ( "Test suite aborted" ) ;
}
2008-04-25 10:31:13 +02:00
if ( @$ completed != $ num_tests ) {
2008-04-28 08:26:04 +02:00
2008-04-25 10:31:13 +02:00
# Not all tests completed, failure
2008-04-28 08:23:00 +02:00
mtr_report ( ) ;
2008-05-04 20:59:51 +02:00
mtr_report ( "Only " , int ( @$ completed ) , " of $num_tests completed." ) ;
2008-04-25 10:31:13 +02:00
}
2011-04-19 14:01:32 +02:00
if ( $ opt_valgrind ) {
# Create minimalistic "test" for the reporting
my $ tinfo = My::Test - > new
(
2020-05-19 17:15:52 +02:00
suite = > { name = > 'valgrind' , } ,
2011-04-19 14:01:32 +02:00
name = > 'valgrind_report' ,
) ;
# Set dummy worker id to align report with normal tests
$ tinfo - > { worker } = 0 if $ opt_parallel > 1 ;
if ( $ valgrind_reports ) {
$ tinfo - > { result } = 'MTR_RES_FAILED' ;
$ tinfo - > { comment } = "Valgrind reported failures at shutdown, see above" ;
$ tinfo - > { failures } = 1 ;
} else {
$ tinfo - > { result } = 'MTR_RES_PASSED' ;
}
mtr_report_test ( $ tinfo ) ;
push @$ completed , $ tinfo ;
2012-02-09 13:10:47 +01:00
+ + $ num_tests
2011-04-19 14:01:32 +02:00
}
2008-04-24 13:02:53 +02:00
mtr_print_line ( ) ;
2010-10-19 14:08:46 +02:00
print_total_times ( $ opt_parallel ) if $ opt_report_times ;
2011-07-02 22:12:12 +02:00
mtr_report_stats ( $ prefix , $ fail , $ completed , $ extra_warnings ) ;
2008-04-24 13:02:53 +02:00
2017-01-02 21:28:15 +01:00
if ( $ opt_gcov ) {
mtr_report ( "Running dgcov" ) ;
system "./dgcov.pl --generate > $opt_vardir/last_changes.dgcov" ;
}
2010-01-29 11:42:31 +01:00
if ( @$ completed != $ num_tests )
{
2012-02-09 13:10:47 +01:00
mtr_error ( "Not all tests completed (only " . scalar ( @$ completed ) .
" of $num_tests)" ) ;
2010-01-29 11:42:31 +01:00
}
2011-07-02 22:08:51 +02:00
2010-10-13 13:07:28 +02:00
remove_vardir_subs ( ) if $ opt_clean_vardir ;
2008-04-24 13:02:53 +02:00
exit ( 0 ) ;
}
2023-08-04 17:17:17 +02:00
package Manager ;
use POSIX ":sys_wait_h" ;
use File::Basename ;
use File::Find ;
use IO::Socket::INET ;
use IO::Select ;
use mtr_report ;
use My::Platform ;
my $ num_saved_datadir ; # Number of datadirs saved in vardir/log/ so far.
my $ num_failed_test ; # Number of tests failed so far
my $ test_failure ; # Set true if test suite failed
my $ extra_warnings ; # Warnings found during server shutdowns
my $ completed ;
my % running ;
my $ result ;
my $ exe_mysqld ; # Used as hint to CoreDump
my % names ;
sub parse_protocol ($$) {
my $ sock = shift ;
my $ line = shift ;
if ( $ line eq 'TESTRESULT' ) {
mtr_verbose2 ( "Got TESTRESULT from " . $ names { $ sock } ) ;
$ result = My::Test:: read_test ( $ sock ) ;
# Report test status
mtr_report_test ( $ result ) ;
if ( $ result - > is_failed ( ) ) {
# Save the workers "savedir" in var/log
my $ worker_savedir = $ result - > { savedir } ;
my $ worker_savename = basename ( $ worker_savedir ) ;
my $ savedir = "$opt_vardir/log/$worker_savename" ;
# Move any core files from e.g. mysqltest
foreach my $ coref ( glob ( "core*" ) , glob ( "*.dmp" ) )
{
mtr_report ( " - found '$coref', moving it to '$worker_savedir'" ) ;
2023-09-08 21:40:35 +02:00
:: move ( $ coref , $ worker_savedir ) ;
2023-08-04 17:17:17 +02:00
}
find (
{
no_chdir = > 1 ,
wanted = > sub
{
My::CoreDump:: core_wanted ( \ $ num_saved_cores ,
$ opt_max_save_core ,
@ opt_cases == 0 ,
$ exe_mysqld , $ opt_parallel ) ;
}
} ,
$ worker_savedir ) ;
if ( $ num_saved_datadir >= $ opt_max_save_datadir )
{
mtr_report ( " - skipping '$worker_savedir/'" ) ;
main:: rmtree ( $ worker_savedir ) ;
}
else
{
mtr_report ( " - saving '$worker_savedir/' to '$savedir/'" ) ;
rename ( $ worker_savedir , $ savedir ) ;
$ num_saved_datadir + + ;
}
main:: resfile_print_test ( ) ;
$ num_failed_test + + unless ( $ result - > { retries } ||
$ result - > { exp_fail } ) ;
$ test_failure = 1 ;
if ( ! $ opt_force ) {
# Test has failed, force is off
push ( @$ completed , $ result ) ;
if ( $ result - > { 'dont_kill_server' } )
{
mtr_verbose2 ( "${line}: saying BYE to " . $ names { $ sock } ) ;
print $ sock "BYE\n" ;
2023-08-07 17:49:47 +02:00
return 2 ;
2023-08-04 17:17:17 +02:00
}
return [ "Failure" , 1 , $ completed , $ extra_warnings ] ;
}
elsif ( $ opt_max_test_fail > 0 and
$ num_failed_test >= $ opt_max_test_fail ) {
push ( @$ completed , $ result ) ;
mtr_report ( "Too many tests($num_failed_test) failed!" ,
"Terminating..." ) ;
return [ "Too many failed" , 1 , $ completed , $ extra_warnings ] ;
}
}
2008-04-24 13:02:53 +02:00
2023-08-04 17:17:17 +02:00
main:: resfile_print_test ( ) ;
# Retry test run after test failure
my $ retries = $ result - > { retries } || 2 ;
my $ test_has_failed = $ result - > { failures } || 0 ;
if ( $ test_has_failed and $ retries <= $ opt_retry ) {
# Test should be run one more time unless it has failed
# too many times already
my $ tname = $ result - > { name } ;
my $ failures = $ result - > { failures } ;
if ( $ opt_retry > 1 and $ failures >= $ opt_retry_failure ) {
mtr_report ( "\nTest $tname has failed $failures times," ,
"no more retries!\n" ) ;
}
else {
mtr_report ( "\nRetrying test $tname, " .
"attempt($retries/$opt_retry)...\n" ) ;
#saving the log file as filename.failed in case of retry
if ( $ result - > is_failed ( ) ) {
my $ worker_logdir = $ result - > { savedir } ;
my $ log_file_name = dirname ( $ worker_logdir ) . "/" . $ result - > { shortname } . ".log" ;
if ( - e $ log_file_name ) {
2023-09-08 21:40:35 +02:00
$ result - > { 'logfile-failed' } = :: mtr_lastlinesfromfile ( $ log_file_name , 20 ) ;
2023-08-04 17:17:17 +02:00
} else {
$ result - > { 'logfile-failed' } = "" ;
}
2008-04-27 23:35:38 +02:00
2023-08-04 17:17:17 +02:00
rename $ log_file_name , $ log_file_name . ".failed" ;
}
{
local @$ result { 'retries' , 'result' } ;
delete $ result - > { result } ;
$ result - > { retries } = $ retries + 1 ;
$ result - > write_test ( $ sock , 'TESTCASE' ) ;
}
push ( @$ completed , $ result ) ;
2023-08-07 17:49:47 +02:00
return 2 ;
2023-08-04 17:17:17 +02:00
}
}
2008-04-24 13:02:53 +02:00
2023-08-04 17:17:17 +02:00
# Repeat test $opt_repeat number of times
my $ repeat = $ result - > { repeat } || 1 ;
if ( $ repeat < $ opt_repeat )
{
$ result - > { retries } = 0 ;
$ result - > { rep_failures } + + if $ result - > { failures } ;
$ result - > { failures } = 0 ;
delete ( $ result - > { result } ) ;
$ result - > { repeat } = $ repeat + 1 ;
$ result - > write_test ( $ sock , 'TESTCASE' ) ;
2023-08-07 17:49:47 +02:00
return 2 ;
2023-08-04 17:17:17 +02:00
}
2008-04-27 23:35:38 +02:00
2023-08-04 17:17:17 +02:00
# Remove from list of running
mtr_error ( "'" , $ result - > { name } , "' is not known to be running" )
unless delete $ running { $ result - > key ( ) } ;
2008-04-24 13:02:53 +02:00
2023-08-04 17:17:17 +02:00
# Save result in completed list
push ( @$ completed , $ result ) ;
} # if ($line eq 'TESTRESULT')
elsif ( $ line =~ /^START (.*)$/ ) {
# Send first test
$ names { $ sock } = $ 1 ;
}
elsif ( $ line eq 'WARNINGS' ) {
my $ fake_test = My::Test:: read_test ( $ sock ) ;
my $ test_list = join ( " " , @ { $ fake_test - > { testnames } } ) ;
push @$ extra_warnings , $ test_list ;
my $ report = $ fake_test - > { 'warnings' } ;
mtr_report ( "***Warnings generated in error logs during shutdown " .
"after running tests: $test_list\n\n$report" ) ;
$ test_failure = 1 ;
if ( ! $ opt_force ) {
# Test failure due to warnings, force is off
mtr_verbose2 ( "Socket loop exiting 3" ) ;
return [ "Warnings in log" , 1 , $ completed , $ extra_warnings ] ;
}
return 1 ;
}
elsif ( $ line =~ /^SPENT/ ) {
main:: add_total_times ( $ line ) ;
}
elsif ( $ line eq 'VALGREP' && $ opt_valgrind ) {
$ valgrind_reports = 1 ;
}
else {
mtr_error ( "Unknown response: '$line' from client" ) ;
}
return 0 ;
}
sub run ($$$) {
my ( $ server , $ tests , $ children ) = @ _ ;
my $ suite_timeout = main:: start_timer ( main:: suite_timeout ( ) ) ;
$ exe_mysqld = main:: find_mysqld ( $ bindir ) || "" ; # Used as hint to CoreDump
$ num_saved_datadir = 0 ; # Number of datadirs saved in vardir/log/ so far.
$ num_failed_test = 0 ; # Number of tests failed so far
$ test_failure = 0 ; # Set true if test suite failed
$ extra_warnings = [] ; # Warnings found during server shutdowns
$ completed = [] ;
2008-04-28 08:38:07 +02:00
2008-04-24 13:02:53 +02:00
my $ s = IO::Select - > new ( ) ;
2022-07-18 22:16:18 +02:00
my $ childs = 0 ;
2023-08-04 17:17:17 +02:00
2008-04-24 13:02:53 +02:00
$ s - > add ( $ server ) ;
while ( 1 ) {
2009-09-24 14:19:15 +02:00
if ( $ opt_stop_file )
{
if ( mtr_wait_lock_file ( $ opt_stop_file , $ opt_stop_keep_alive ) )
{
# We were waiting so restart timer process
2023-08-04 17:17:17 +02:00
my $ suite_timeout = main:: start_timer ( main:: suite_timeout ( ) ) ;
2009-09-24 14:19:15 +02:00
}
}
2011-07-02 22:08:51 +02:00
2023-08-04 17:17:17 +02:00
main:: mark_time_used ( 'admin' ) ;
2008-04-24 13:02:53 +02:00
my @ ready = $ s - > can_read ( 1 ) ; # Wake up once every second
2023-08-04 11:10:34 +02:00
if ( @ ready > 0 ) {
mtr_verbose2 ( "Got " . ( 0 + @ ready ) . " connection(s)" ) ;
}
2023-08-04 17:17:17 +02:00
main:: mark_time_idle ( ) ;
2023-08-04 11:10:34 +02:00
my $ i = 0 ;
2023-08-07 17:49:47 +02:00
sock_loop: foreach my $ sock ( @ ready ) {
2023-08-04 11:10:34 +02:00
+ + $ i ;
2008-04-24 13:02:53 +02:00
if ( $ sock == $ server ) {
# New client connected
2022-07-18 22:16:18 +02:00
+ + $ childs ;
2008-04-24 13:02:53 +02:00
my $ child = $ sock - > accept ( ) ;
2023-08-04 11:10:34 +02:00
mtr_verbose2 ( "Connection ${i}: Worker connected (got ${childs} childs)" ) ;
2008-04-24 13:02:53 +02:00
$ s - > add ( $ child ) ;
print $ child "HELLO\n" ;
}
else {
2023-08-07 17:49:47 +02:00
my $ j = 0 ;
$ sock - > blocking ( 0 ) ;
while ( my $ line = <$sock> ) {
+ + $ j ;
chomp ( $ line ) ;
mtr_verbose2 ( "Connection ${i}.${j}" . ( exists $ names { $ sock } ? " from $names{$sock}" : "" ) . ": $line" ) ;
$ sock - > blocking ( 1 ) ;
my $ res = parse_protocol ( $ sock , $ line ) ;
$ sock - > blocking ( 0 ) ;
if ( ref $ res eq 'ARRAY' ) {
return @$ res ;
} elsif ( $ res == 1 ) {
next ;
} elsif ( $ res == 2 ) {
next sock_loop ;
2009-03-20 15:18:22 +01:00
}
2023-08-07 17:49:47 +02:00
if ( IS_WINDOWS and ! IS_CYGWIN ) {
# Strawberry and ActiveState don't support blocking(0), the next iteration will be blocked!
# If there is next response now in the buffer and it is TESTRESULT we are affected by MDEV-30836 and the manager will hang.
last ;
}
}
$ sock - > blocking ( 1 ) ;
if ( $ j == 0 ) {
# Client disconnected
- - $ childs ;
mtr_verbose2 ( ( exists $ names { $ sock } ? $ names { $ sock } : "Worker" ) . " closed socket (left ${childs} childs)" ) ;
$ s - > remove ( $ sock ) ;
$ sock - > close ;
2020-11-09 11:58:49 +01:00
next ;
2011-07-02 22:12:12 +02:00
}
2008-04-24 13:02:53 +02:00
# Find next test to schedule
# - Try to use same configuration as worker used last time
my $ next ;
my $ second_best ;
2008-09-22 09:02:45 +02:00
for ( my $ i = 0 ; $ i <= @$ tests ; $ i + + )
2008-04-24 13:02:53 +02:00
{
my $ t = $ tests - > [ $ i ] ;
2008-09-22 09:02:45 +02:00
last unless defined $ t ;
2023-08-04 17:17:17 +02:00
if ( main:: run_testcase_check_skip_test ( $ t ) ) {
2008-04-24 13:02:53 +02:00
# Move the test to completed list
#mtr_report("skip - Moving test $i to completed");
push ( @$ completed , splice ( @$ tests , $ i , 1 ) ) ;
2008-09-22 09:02:45 +02:00
# Since the test at pos $i was taken away, next
# test will also be at $i -> redo
redo ;
2008-04-24 13:02:53 +02:00
}
2011-01-03 15:33:39 +01:00
# From secondary choices, we prefer to pick a 'long-running' test if
# possible; this helps avoid getting stuck with a few of those at the
# end of high --parallel runs, with most workers being idle.
if ( ! defined $ second_best ||
( $ t - > { 'long_test' } && ! ( $ tests - > [ $ second_best ] { 'long_test' } ) ) ) {
2008-04-24 13:02:53 +02:00
#mtr_report("Setting second_best to $i");
$ second_best = $ i ;
}
2010-11-05 15:26:38 +01:00
# Smart allocation of next test within this thread.
if ( $ opt_reorder and $ opt_parallel > 1 and defined $ result )
{
my $ wid = $ result - > { worker } ;
# Reserved for other thread, try next
next if ( defined $ t - > { reserved } and $ t - > { reserved } != $ wid ) ;
if ( ! defined $ t - > { reserved } )
{
2019-07-11 06:13:58 +02:00
# Force-restart not relevant when comparing *next* test
$ t - > { criteria } =~ s/force-restart$/no-restart/ ;
2010-11-05 15:26:38 +01:00
my $ criteria = $ t - > { criteria } ;
# Reserve similar tests for this worker, but not too many
my $ maxres = ( @$ tests - $ i ) / $ opt_parallel + 1 ;
for ( my $ j = $ i + 1 ; $ j <= $ i + $ maxres ; $ j + + )
{
my $ tt = $ tests - > [ $ j ] ;
last unless defined $ tt ;
last if $ tt - > { criteria } ne $ criteria ;
$ tt - > { reserved } = $ wid ;
}
}
}
# At this point we have found next suitable test
$ next = splice ( @$ tests , $ i , 1 ) ;
last ;
2023-08-04 11:10:34 +02:00
} # for(my $i= 0; $i <= @$tests; $i++)
2008-04-24 13:02:53 +02:00
# Use second best choice if no other test has been found
if ( ! $ next and defined $ second_best ) {
#mtr_report("Take second best choice $second_best");
2008-09-22 09:02:45 +02:00
mtr_error ( "Internal error, second best too large($second_best)" )
2008-04-24 13:02:53 +02:00
if $ second_best > $#$ tests ;
$ next = splice ( @$ tests , $ second_best , 1 ) ;
2010-11-05 15:26:38 +01:00
delete $ next - > { reserved } ;
2008-04-24 13:02:53 +02:00
}
if ( $ next ) {
2010-11-05 15:26:38 +01:00
# We don't need this any more
delete $ next - > { criteria } ;
2008-04-24 13:02:53 +02:00
$ next - > write_test ( $ sock , 'TESTCASE' ) ;
$ running { $ next - > key ( ) } = $ next ;
}
else {
# No more test, tell child to exit
2023-08-04 11:10:34 +02:00
mtr_verbose2 ( "Saying BYE to " . $ names { $ sock } ) ;
2008-04-24 13:02:53 +02:00
print $ sock "BYE\n" ;
2023-08-04 11:10:34 +02:00
} # else (!$next)
} # else ($sock != $server)
} # foreach my $sock (@ready)
2008-04-28 08:38:07 +02:00
2022-07-18 22:16:18 +02:00
if ( ! IS_WINDOWS ) {
foreach my $ pid ( keys %$ children )
{
my $ res = waitpid ( $ pid , WNOHANG ) ;
if ( $ res == $ pid || $ res == - 1 ) {
if ( $ res == - 1 ) {
# Child was automatically reaped. Probably not possible
# unless you $SIG{CHLD}= 'IGNORE'
mtr_warning ( "Child ${pid} was automatically reaped (this should never happen)" ) ;
}
my $ exit_status = ( $? >> 8 ) ;
mtr_verbose2 ( "Child ${pid} exited with status ${exit_status}" ) ;
delete $ children - > { $ pid } ;
if ( ! %$ children && $ childs ) {
mtr_verbose2 ( "${childs} children didn't close socket before dying!" ) ;
$ childs = 0 ;
}
} elsif ( $ res != 0 ) {
confess ( "Unexpected result ${res} on waitpid(${pid}, WNOHANG)" ) ;
}
}
}
if ( $ childs == 0 ) {
return ( "Completed" , $ test_failure , $ completed , $ extra_warnings ) ;
}
2008-04-28 08:38:07 +02:00
# ----------------------------------------------------
# Check if test suite timer expired
# ----------------------------------------------------
2023-08-04 17:17:17 +02:00
if ( main:: has_expired ( $ suite_timeout ) )
2008-04-28 08:38:07 +02:00
{
mtr_report ( "Test suite timeout! Terminating..." ) ;
2010-04-28 14:52:24 +02:00
return ( "Timeout" , 1 , $ completed , $ extra_warnings ) ;
2008-04-28 08:38:07 +02:00
}
2008-04-24 13:02:53 +02:00
}
}
2023-08-04 17:17:17 +02:00
1 ;
package main ;
2008-04-24 13:02:53 +02:00
sub run_worker ($) {
my ( $ server_port , $ thread_num ) = @ _ ;
$ SIG { INT } = sub { exit ( 1 ) ; } ;
2015-01-14 14:50:38 +01:00
$ SIG { HUP } = sub { exit ( 1 ) ; } ;
2008-04-24 13:02:53 +02:00
2008-09-15 12:15:08 +02:00
# Connect to server
my $ server = new IO::Socket:: INET
(
PeerAddr = > 'localhost' ,
PeerPort = > $ server_port ,
Proto = > 'tcp'
) ;
mtr_error ( "Could not connect to server at port $server_port: $!" )
unless $ server ;
2008-09-05 14:09:39 +02:00
# --------------------------------------------------------------------------
# Set worker name
# --------------------------------------------------------------------------
2023-08-04 11:10:34 +02:00
report_option ( 'name' , "worker[" . sprintf ( "%02d" , $ thread_num ) . "]" ) ;
my $ proc_title = basename ( $ 0 ) . " ${mtr_report::name} :" . $ server - > sockport ( ) . " -> :${server_port}" ;
$ 0 = $ proc_title ;
mtr_verbose2 ( "Running at PID $$" ) ;
2008-04-24 13:02:53 +02:00
2008-09-05 14:09:39 +02:00
# --------------------------------------------------------------------------
2009-03-04 11:34:47 +01:00
# Set different ports per thread
2008-09-05 14:09:39 +02:00
# --------------------------------------------------------------------------
2009-03-04 11:34:47 +01:00
set_build_thread_ports ( $ thread_num ) ;
2008-09-05 14:09:39 +02:00
# --------------------------------------------------------------------------
# Turn off verbosity in workers, unless explicitly specified
# --------------------------------------------------------------------------
report_option ( 'verbose' , undef ) if ( $ opt_verbose == 0 ) ;
environment_setup ( ) ;
2008-04-24 13:02:53 +02:00
# Read hello from server which it will send when shared
# resources have been setup
my $ hello = <$server> ;
setup_vardir ( ) ;
2008-08-04 21:54:44 +02:00
check_running_as_root ( ) ;
2008-04-24 13:02:53 +02:00
2007-12-12 18:19:24 +01:00
if ( using_extern ( ) ) {
create_config_file_for_extern ( % opts_extern ) ;
}
2004-12-30 16:34:01 +01:00
2008-04-24 13:02:53 +02:00
# Ask server for first test
2023-08-04 11:10:34 +02:00
print $ server "START ${mtr_report::name}\n" ;
2004-12-30 16:34:01 +01:00
2010-10-19 14:08:46 +02:00
mark_time_used ( 'init' ) ;
while ( my $ line = <$server> ) {
2008-04-24 13:02:53 +02:00
chomp ( $ line ) ;
if ( $ line eq 'TESTCASE' ) {
my $ test = My::Test:: read_test ( $ server ) ;
2023-08-04 11:10:34 +02:00
$ 0 = $ proc_title . " " . $ test - > { name } ;
2009-01-24 13:02:27 +01:00
# Clear comment and logfile, to avoid
# reusing them from previous test
delete ( $ test - > { 'comment' } ) ;
delete ( $ test - > { 'logfile' } ) ;
2010-11-05 15:26:38 +01:00
# A sanity check. Should this happen often we need to look at it.
if ( defined $ test - > { reserved } && $ test - > { reserved } != $ thread_num ) {
my $ tres = $ test - > { reserved } ;
mtr_warning ( "Test reserved for w$tres picked up by w$thread_num" ) ;
}
2009-05-28 13:02:03 +02:00
$ test - > { worker } = $ thread_num if $ opt_parallel > 1 ;
2009-03-20 15:18:22 +01:00
run_testcase ( $ test , $ server ) ;
2008-04-24 13:02:53 +02:00
#$test->{result}= 'MTR_RES_PASSED';
# Send it back, now with results set
2023-08-04 11:10:34 +02:00
mtr_verbose2 ( 'Writing TESTRESULT' ) ;
2008-04-24 13:02:53 +02:00
$ test - > write_test ( $ server , 'TESTRESULT' ) ;
2010-10-19 14:08:46 +02:00
mark_time_used ( 'restart' ) ;
2008-04-24 13:02:53 +02:00
}
elsif ( $ line eq 'BYE' ) {
2023-08-04 11:10:34 +02:00
mtr_verbose2 ( "Manager said BYE" ) ;
2009-03-20 15:18:22 +01:00
# We need to gracefully shut down the servers to see any
# Valgrind memory leak errors etc. since last server restart.
if ( $ opt_warnings ) {
2010-08-17 09:14:46 +02:00
stop_servers ( reverse all_servers ( ) ) ;
2009-03-20 15:18:22 +01:00
if ( check_warnings_post_shutdown ( $ server ) ) {
# Warnings appeared in log file(s) during final server shutdown.
exit ( 1 ) ;
}
}
2010-04-28 14:52:24 +02:00
else {
stop_all_servers ( $ opt_shutdown_timeout ) ;
2009-11-12 11:04:01 +01:00
}
2010-10-19 14:08:46 +02:00
mark_time_used ( 'restart' ) ;
2010-11-23 14:34:00 +01:00
my $ valgrind_reports = 0 ;
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
if ( $ opt_valgrind ) {
2010-11-23 14:34:00 +01:00
$ valgrind_reports = valgrind_exit_reports ( ) ;
2011-04-19 14:01:32 +02:00
print $ server "VALGREP\n" if $ valgrind_reports ;
2009-11-12 11:04:01 +01:00
}
2010-01-05 21:35:50 +01:00
if ( $ opt_gprof ) {
2011-01-29 18:51:12 +01:00
gprof_collect ( find_mysqld ( $ bindir ) , keys % gprof_dirs ) ;
2010-01-05 21:35:50 +01:00
}
2011-04-07 10:12:52 +02:00
mark_time_used ( 'admin' ) ;
2010-10-19 14:08:46 +02:00
print_times_used ( $ server , $ thread_num ) ;
2010-11-23 14:34:00 +01:00
exit ( $ valgrind_reports ) ;
2008-04-24 13:02:53 +02:00
}
else {
mtr_error ( "Could not understand server, '$line'" ) ;
}
}
stop_all_servers ( ) ;
exit ( 1 ) ;
2007-12-12 18:19:24 +01:00
}
2004-12-30 16:34:01 +01:00
2008-09-05 14:09:39 +02:00
# Setup any paths that are $opt_vardir related
sub set_vardir {
2015-03-02 18:18:10 +01:00
( $ opt_vardir ) = @ _ ;
2008-09-05 14:09:39 +02:00
$ path_vardir_trace = $ opt_vardir ;
# Chop off any "c:", DBUG likes a unix path ex: c:/src/... => /src/...
$ path_vardir_trace =~ s/^\w:// ;
# Location of my.cnf that all clients use
$ path_config_file = "$opt_vardir/my.cnf" ;
$ path_testlog = "$opt_vardir/log/mysqltest.log" ;
$ path_current_testlog = "$opt_vardir/log/current_test" ;
}
2008-11-10 16:10:49 +01:00
2011-05-09 16:07:43 +02:00
sub print_global_resfile {
resfile_global ( "start_time" , isotime $^T ) ;
resfile_global ( "user_id" , $< ) ;
resfile_global ( "embedded-server" , $ opt_embedded_server ? 1 : 0 ) ;
resfile_global ( "ps-protocol" , $ opt_ps_protocol ? 1 : 0 ) ;
resfile_global ( "sp-protocol" , $ opt_sp_protocol ? 1 : 0 ) ;
resfile_global ( "view-protocol" , $ opt_view_protocol ? 1 : 0 ) ;
resfile_global ( "cursor-protocol" , $ opt_cursor_protocol ? 1 : 0 ) ;
resfile_global ( "ssl" , $ opt_ssl ? 1 : 0 ) ;
resfile_global ( "compress" , $ opt_compress ? 1 : 0 ) ;
resfile_global ( "parallel" , $ opt_parallel ) ;
resfile_global ( "check-testcases" , $ opt_check_testcases ? 1 : 0 ) ;
2021-03-31 12:06:12 +02:00
resfile_global ( "mariadbd" , \ @ opt_extra_mysqld_opt ) ;
2011-05-09 16:07:43 +02:00
resfile_global ( "debug" , $ opt_debug ? 1 : 0 ) ;
resfile_global ( "gcov" , $ opt_gcov ? 1 : 0 ) ;
resfile_global ( "gprof" , $ opt_gprof ? 1 : 0 ) ;
2017-02-20 00:43:42 +01:00
resfile_global ( "mem" , $ opt_mem ) ;
2011-05-09 16:07:43 +02:00
resfile_global ( "tmpdir" , $ opt_tmpdir ) ;
resfile_global ( "vardir" , $ opt_vardir ) ;
resfile_global ( "fast" , $ opt_fast ? 1 : 0 ) ;
resfile_global ( "force-restart" , $ opt_force_restart ? 1 : 0 ) ;
resfile_global ( "reorder" , $ opt_reorder ? 1 : 0 ) ;
resfile_global ( "sleep" , $ opt_sleep ) ;
resfile_global ( "repeat" , $ opt_repeat ) ;
resfile_global ( "user" , $ opt_user ) ;
resfile_global ( "testcase-timeout" , $ opt_testcase_timeout ) ;
resfile_global ( "suite-timeout" , $ opt_suite_timeout ) ;
resfile_global ( "shutdown-timeout" , $ opt_shutdown_timeout ? 1 : 0 ) ;
resfile_global ( "warnings" , $ opt_warnings ? 1 : 0 ) ;
resfile_global ( "max-connections" , $ opt_max_connections ) ;
2021-03-31 12:06:12 +02:00
resfile_global ( "product" , "MariaDB" ) ;
2020-04-07 09:45:49 +02:00
resfile_global ( "xml-report" , $ opt_xml_report ) ;
2011-05-09 16:07:43 +02:00
# Somewhat hacky code to convert numeric version back to dot notation
my $ v1 = int ( $ mysql_version_id / 10000 ) ;
my $ v2 = int ( ( $ mysql_version_id % 10000 ) / 100 ) ;
my $ v3 = $ mysql_version_id % 100 ;
resfile_global ( "version" , "$v1.$v2.$v3" ) ;
}
2008-09-05 14:09:39 +02:00
sub command_line_setup {
2006-02-17 16:20:53 +01:00
my $ opt_comment ;
2007-12-12 18:19:24 +01:00
my $ opt_usage ;
2009-12-22 10:35:56 +01:00
my $ opt_list_options ;
2006-03-30 00:48:46 +02:00
2007-12-12 18:19:24 +01:00
# Read the command line options
2010-12-09 14:40:36 +01:00
# Note: Keep list in sync with usage at end of this file
2005-09-28 23:24:44 +02:00
Getopt::Long:: Configure ( "pass_through" ) ;
2009-12-22 10:35:56 +01:00
my % options = (
2005-01-02 16:57:21 +01:00
# Control what engine/variation to run
2004-12-30 16:34:01 +01:00
'embedded-server' = > \ $ opt_embedded_server ,
2005-01-01 19:27:41 +01:00
'ps-protocol' = > \ $ opt_ps_protocol ,
2005-11-03 19:00:37 +01:00
'sp-protocol' = > \ $ opt_sp_protocol ,
'view-protocol' = > \ $ opt_view_protocol ,
'cursor-protocol' = > \ $ opt_cursor_protocol ,
2011-09-20 12:49:25 +02:00
'non-blocking-api' = > \ $ opt_non_blocking_api ,
2005-10-12 13:56:07 +02:00
'ssl|with-openssl' = > \ $ opt_ssl ,
2005-10-04 15:43:55 +02:00
'skip-ssl' = > \ $ opt_skip_ssl ,
'compress' = > \ $ opt_compress ,
2021-10-21 14:21:44 +02:00
'vs-config=s' = > \ $ multiconfig ,
2007-12-12 18:19:24 +01:00
2008-11-10 16:10:49 +01:00
# Max number of parallel threads to use
2009-06-03 12:46:04 +02:00
'parallel=s' = > \ $ opt_parallel ,
2008-11-10 16:10:49 +01:00
2007-12-12 18:19:24 +01:00
# Config file to use as template for all tests
'defaults-file=s' = > \ & collect_option ,
# Extra config file to append to all generated configs
'defaults-extra-file=s' = > \ & collect_option ,
2005-01-02 16:57:21 +01:00
# Control what test suites or cases to run
2012-05-15 19:35:57 +02:00
'force+' = > \ $ opt_force ,
2023-10-23 12:15:46 +02:00
'skip-not-found' = > \ $ opt_skip_not_found ,
2007-06-27 14:28:02 +02:00
'suite|suites=s' = > \ $ opt_suites ,
2007-12-12 18:19:24 +01:00
'skip-rpl' = > \ & collect_option ,
'skip-test=s' = > \ & collect_option ,
'do-test=s' = > \ & collect_option ,
'start-from=s' = > \ & collect_option ,
2012-01-25 11:34:43 +01:00
'big-test+' = > \ $ opt_big_test ,
2007-12-12 18:19:24 +01:00
'combination=s' = > \ @ opt_combinations ,
2010-06-10 10:34:16 +02:00
'experimental=s' = > \ @ opt_experimentals ,
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
'staging-run' = > \ $ opt_staging_run ,
2007-12-21 13:06:56 +01:00
2005-01-02 16:57:21 +01:00
# Specify ports
2008-04-24 13:02:53 +02:00
'build-thread|mtr-build-thread=i' = > \ $ opt_build_thread ,
2010-01-25 11:20:52 +01:00
'port-base|mtr-port-base=i' = > \ $ opt_port_base ,
2015-03-31 15:43:38 +02:00
'port-group-size=s' = > \ $ opt_port_group_size ,
2005-01-02 16:57:21 +01:00
# Test case authoring
'record' = > \ $ opt_record ,
2008-04-08 16:51:26 +02:00
'check-testcases!' = > \ $ opt_check_testcases ,
2006-12-20 16:53:06 +01:00
'mark-progress' = > \ $ opt_mark_progress ,
2005-01-02 16:57:21 +01:00
2021-03-31 12:06:12 +02:00
# Extra options used when starting mariadbd
'mariadbd=s' = > \ @ opt_extra_mysqld_opt ,
'mariadbd-env=s' = > \ @ opt_mysqld_envs ,
# mysqld is an alias for mariadbd
2005-06-10 21:29:37 +02:00
'mysqld=s' = > \ @ opt_extra_mysqld_opt ,
2011-01-27 14:42:08 +01:00
'mysqld-env=s' = > \ @ opt_mysqld_envs ,
2007-08-09 15:00:32 +02:00
2005-01-02 16:57:21 +01:00
# Run test on running server
2007-12-12 18:19:24 +01:00
'extern=s' = > \ % opts_extern , # Append to hash
2005-01-02 16:57:21 +01:00
# Debugging
2007-12-12 18:19:24 +01:00
'debug' = > \ $ opt_debug ,
2010-12-09 12:10:49 +01:00
'debug-common' = > \ $ opt_debug_common ,
2011-02-07 12:42:21 +01:00
'debug-server' = > \ $ opt_debug_server ,
2007-01-19 09:41:08 +01:00
'max-save-core=i' = > \ $ opt_max_save_core ,
2008-04-27 15:32:12 +02:00
'max-save-datadir=i' = > \ $ opt_max_save_datadir ,
2008-04-28 09:24:30 +02:00
'max-test-fail=i' = > \ $ opt_max_test_fail ,
2016-08-21 19:14:13 +02:00
'core-on-failure' = > \ $ opt_core_on_failure ,
2005-01-02 16:57:21 +01:00
# Coverage, profiling etc
'gcov' = > \ $ opt_gcov ,
2010-01-05 21:35:50 +01:00
'gprof' = > \ $ opt_gprof ,
2009-09-29 17:38:40 +02:00
'debug-sync-timeout=i' = > \ $ opt_debug_sync_timeout ,
2005-01-02 16:57:21 +01:00
2006-03-23 16:39:51 +01:00
# Directories
'tmpdir=s' = > \ $ opt_tmpdir ,
'vardir=s' = > \ $ opt_vardir ,
2006-11-13 12:44:12 +01:00
'mem' = > \ $ opt_mem ,
2010-10-13 13:07:28 +02:00
'clean-vardir' = > \ $ opt_clean_vardir ,
2008-03-03 12:53:57 +01:00
'client-bindir=s' = > \ $ path_client_bindir ,
'client-libdir=s' = > \ $ path_client_libdir ,
2006-03-23 16:39:51 +01:00
2005-01-02 16:57:21 +01:00
# Misc
2006-02-20 00:32:07 +01:00
'comment=s' = > \ $ opt_comment ,
2005-01-02 16:57:21 +01:00
'fast' = > \ $ opt_fast ,
2010-08-31 11:27:57 +02:00
'force-restart' = > \ $ opt_force_restart ,
2010-02-17 12:37:37 +01:00
'reorder!' = > \ $ opt_reorder ,
2007-12-12 18:19:24 +01:00
'enable-disabled' = > \ & collect_option ,
2022-07-18 22:16:17 +02:00
'verbose|v+' = > \ $ opt_verbose ,
2008-04-24 13:02:53 +02:00
'verbose-restart' = > \ & report_option ,
2004-12-30 16:34:01 +01:00
'sleep=i' = > \ $ opt_sleep ,
2005-04-13 11:47:28 +02:00
'start-dirty' = > \ $ opt_start_dirty ,
2010-03-16 10:45:32 +01:00
'start-and-exit' = > \ $ opt_start_exit ,
2007-12-12 18:19:24 +01:00
'start' = > \ $ opt_start ,
2010-06-09 10:21:46 +02:00
'user-args' = > \ $ opt_user_args ,
2009-04-29 16:13:38 +02:00
'wait-all' = > \ $ opt_wait_all ,
2007-12-12 18:19:24 +01:00
'print-testcases' = > \ & collect_option ,
2008-01-10 10:44:18 +01:00
'repeat=i' = > \ $ opt_repeat ,
'retry=i' = > \ $ opt_retry ,
'retry-failure=i' = > \ $ opt_retry_failure ,
2008-05-04 21:40:40 +02:00
'timer!' = > \ & report_option ,
2004-12-30 16:34:01 +01:00
'user=s' = > \ $ opt_user ,
2005-08-18 00:16:44 +02:00
'testcase-timeout=i' = > \ $ opt_testcase_timeout ,
'suite-timeout=i' = > \ $ opt_suite_timeout ,
2007-12-12 18:19:24 +01:00
'shutdown-timeout=i' = > \ $ opt_shutdown_timeout ,
'warnings!' = > \ $ opt_warnings ,
2008-02-04 11:16:25 +01:00
'timestamp' = > \ & report_option ,
2008-05-04 21:45:38 +02:00
'timediff' = > \ & report_option ,
2009-09-24 14:19:15 +02:00
'stop-file=s' = > \ $ opt_stop_file ,
'stop-keep-alive=i' = > \ $ opt_stop_keep_alive ,
2010-02-17 16:28:02 +01:00
'max-connections=i' = > \ $ opt_max_connections ,
2010-10-19 14:08:46 +02:00
'report-times' = > \ $ opt_report_times ,
2011-05-09 16:07:43 +02:00
'result-file' = > \ $ opt_resfile ,
2011-09-15 12:34:32 +02:00
'stress=s' = > \ $ opt_stress ,
2017-04-29 21:28:32 +02:00
'tail-lines=i' = > \ $ opt_tail_lines ,
2013-04-09 16:20:54 +02:00
'dry-run' = > \ $ opt_dry_run ,
2005-01-02 16:57:21 +01:00
'help|h' = > \ $ opt_usage ,
2010-12-09 14:40:36 +01:00
# list-options is internal, not listed in help
2010-12-09 15:32:39 +01:00
'list-options' = > \ $ opt_list_options ,
2020-04-07 09:45:49 +02:00
'skip-test-list=s' = > \ @ opt_skip_test_list ,
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
'xml-report=s' = > \ $ opt_xml_report ,
2022-07-18 22:16:17 +02:00
My::Debugger:: options ( ) ,
2023-08-09 19:11:06 +02:00
My::CoreDump:: options ( ) ,
My::Platform:: options ( )
2009-12-22 10:35:56 +01:00
) ;
2018-04-18 13:28:22 +02:00
# fix options (that take an optional argument and *only* after = sign
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
@ ARGV = My::Debugger:: fix_options ( @ ARGV ) ;
2009-12-22 10:35:56 +01:00
GetOptions ( % options ) or usage ( "Can't read options" ) ;
2008-09-05 14:09:39 +02:00
usage ( "" ) if $ opt_usage ;
2009-12-22 10:35:56 +01:00
list_options ( \ % options ) if $ opt_list_options ;
2006-02-17 16:20:53 +01:00
2008-01-07 15:39:32 +01:00
# --------------------------------------------------------------------------
2008-04-24 13:02:53 +02:00
# Setup verbosity
2008-01-07 15:39:32 +01:00
# --------------------------------------------------------------------------
2008-07-24 22:58:18 +02:00
if ( $ opt_verbose != 0 ) {
report_option ( 'verbose' , $ opt_verbose ) ;
2008-04-24 13:02:53 +02:00
}
2020-07-27 03:51:50 +02:00
# Negative values aren't meaningful on integer options
foreach ( grep ( /=i$/ , keys % options ) )
{
if ( defined $ { $ options { $ _ } } &&
do { no warnings "numeric" ; int $ { $ options { $ _ } } < 0 } )
{
my $ v = ( split /=/ ) [ 0 ] ;
die ( "$v doesn't accept a negative value:" ) ;
}
}
2006-11-11 14:32:10 +01:00
# Find the absolute path to the test directory
2008-02-20 14:55:30 +01:00
$ glob_mysql_test_dir = cwd ( ) ;
2010-02-03 15:11:52 +01:00
if ( $ glob_mysql_test_dir =~ / / )
{
die ( "Working directory \"$glob_mysql_test_dir\" contains space\n" .
"Bailing out, cannot function properly with space in path" ) ;
}
2008-02-20 14:55:30 +01:00
if ( IS_CYGWIN )
2005-01-02 16:57:21 +01:00
{
2023-08-09 19:11:06 +02:00
if ( My::Platform:: check_cygwin_subshell ( ) ) {
die ( "Cygwin /bin/sh subshell requires fix with --cygwin-subshell-fix=do\n" ) ;
}
2008-02-20 14:55:30 +01:00
# Use mixed path format i.e c:/path/to/
$ glob_mysql_test_dir = mixed_path ( $ glob_mysql_test_dir ) ;
2005-01-02 16:57:21 +01:00
}
2006-11-11 14:32:10 +01:00
# In most cases, the base directory we find everything relative to,
# is the parent directory of the "mysql-test" directory. For source
# distributions, TAR binary distributions and some other packages.
2007-12-12 18:19:24 +01:00
$ basedir = dirname ( $ glob_mysql_test_dir ) ;
2006-11-11 14:32:10 +01:00
# In the RPM case, binaries and libraries are installed in the
# default system locations, instead of having our own private base
# directory. And we install "/usr/share/mysql-test". Moving up one
# more directory relative to "mysql-test" gives us a usable base
# directory for RPM installs.
2007-12-12 18:19:24 +01:00
if ( ! $ source_dist and ! - d "$basedir/bin" )
2007-08-03 20:43:12 +02:00
{
2007-12-12 18:19:24 +01:00
$ basedir = dirname ( $ basedir ) ;
2007-08-03 20:43:12 +02:00
}
2009-11-05 14:40:01 +01:00
# For .deb, it's like RPM, but installed in /usr/share/mysql/mysql-test.
# So move up one more directory level yet.
if ( ! $ source_dist and ! - d "$basedir/bin" )
{
$ basedir = dirname ( $ basedir ) ;
}
2007-08-03 20:43:12 +02:00
2011-01-29 18:51:12 +01:00
# Respect MTR_BINDIR variable, which is typically set in to the
# build directory in out-of-source builds.
$ bindir = $ ENV { MTR_BINDIR } || $ basedir ;
2010-06-10 11:11:52 +02:00
fix_vs_config_dir ( ) ;
2006-11-28 20:00:27 +01:00
# Look for the client binaries directory
2008-03-03 12:53:57 +01:00
if ( $ path_client_bindir )
{
# --client-bindir=path set on command line, check that the path exists
$ path_client_bindir = mtr_path_exists ( $ path_client_bindir ) ;
}
else
{
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
$ path_client_bindir = mtr_path_exists ( "$bindir/client_release" ,
"$bindir/client_debug" ,
2021-10-21 14:21:44 +02:00
"$bindir/client/$multiconfig" ,
"$bindir/client$multiconfig" ,
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
"$bindir/client" ,
"$bindir/bin" ) ;
2008-03-03 12:53:57 +01:00
}
2006-11-02 21:05:20 +01:00
2007-04-18 14:24:09 +02:00
# Look for language files and charsetsdir, use same share
2010-11-25 18:17:28 +01:00
$ path_language = mtr_path_exists ( "$bindir/share/mariadb" ,
"$bindir/share/mysql" ,
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
"$bindir/sql/share" ,
"$bindir/share" ) ;
2009-10-15 14:23:43 +02:00
my $ path_share = $ path_language ;
2010-11-25 18:17:28 +01:00
$ path_charsetsdir = mtr_path_exists ( "$basedir/share/mariadb/charsets" ,
"$basedir/share/mysql/charsets" ,
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
"$basedir/sql/share/charsets" ,
"$basedir/share/charsets" ) ;
2006-02-17 16:20:53 +01:00
if ( $ opt_comment )
2005-01-02 16:57:21 +01:00
{
2007-12-12 18:19:24 +01:00
mtr_report ( ) ;
mtr_print_thick_line ( '#' ) ;
mtr_report ( "# $opt_comment" ) ;
mtr_print_thick_line ( '#' ) ;
2005-01-02 16:57:21 +01:00
}
2004-12-30 16:34:01 +01:00
2010-06-10 10:34:16 +02:00
if ( @ opt_experimentals )
2009-02-24 12:53:34 +01:00
{
2009-08-13 15:29:19 +02:00
# $^O on Windows considered not generic enough
my $ plat = ( IS_WINDOWS ) ? 'windows' : $^O ;
2010-06-10 10:34:16 +02:00
# read the list of experimental test cases from the files specified on
2009-02-25 15:00:17 +01:00
# the command line
$ experimental_test_cases = [] ;
2010-06-10 10:34:16 +02:00
foreach my $ exp_file ( @ opt_experimentals )
{
open ( FILE , "<" , $ exp_file )
or mtr_error ( "Can't read experimental file: $exp_file" ) ;
mtr_report ( "Using experimental file: $exp_file" ) ;
while ( <FILE> ) {
chomp ;
# remove comments (# foo) at the beginning of the line, or after a
# blank at the end of the line
2011-04-15 10:30:52 +02:00
s/(\s+|^)#.*$// ;
2010-06-10 10:34:16 +02:00
# If @ platform specifier given, use this entry only if it contains
# @<platform> or @!<xxx> where xxx != platform
if ( /\@.*/ )
{
next if ( /\@!$plat/ ) ;
next unless ( /\@$plat/ or /\@!/ ) ;
# Then remove @ and everything after it
s/\@.*$// ;
}
# remove whitespace
2011-04-15 10:30:52 +02:00
s/^\s+// ;
s/\s+$// ;
2010-06-10 10:34:16 +02:00
# if nothing left, don't need to remember this line
if ( $ _ eq "" ) {
next ;
}
# remember what is left as the name of another test case that should be
# treated as experimental
print " - $_\n" ;
push @$ experimental_test_cases , $ _ ;
2009-02-24 12:53:34 +01:00
}
2010-06-10 10:34:16 +02:00
close FILE ;
2009-02-24 12:53:34 +01:00
}
2006-03-01 13:15:37 +01:00
}
2005-09-28 23:24:44 +02:00
foreach my $ arg ( @ ARGV )
{
if ( $ arg =~ /^--skip-/ )
{
push ( @ opt_extra_mysqld_opt , $ arg ) ;
}
2006-06-08 14:52:33 +02:00
elsif ( $ arg =~ /^--$/ )
{
# It is an effect of setting 'pass_through' in option processing
# that the lone '--' separating options from arguments survives,
# simply ignore it.
}
2005-09-28 23:24:44 +02:00
elsif ( $ arg =~ /^-/ )
{
2008-09-05 14:09:39 +02:00
usage ( "Invalid option \"$arg\"" ) ;
2005-09-28 23:24:44 +02:00
}
else
{
push ( @ opt_cases , $ arg ) ;
}
}
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
2009-02-15 11:58:34 +01:00
if ( @ opt_cases )
{
2016-06-08 13:14:42 +02:00
# Run big tests if explicitly specified on command line
2009-02-15 11:58:34 +01:00
$ opt_big_test = 1 ;
}
2006-06-11 15:49:34 +02:00
# --------------------------------------------------------------------------
# Find out type of logging that are being used
# --------------------------------------------------------------------------
2007-12-12 18:19:24 +01:00
foreach my $ arg ( @ opt_extra_mysqld_opt )
2006-06-11 15:49:34 +02:00
{
2007-12-12 18:19:24 +01:00
if ( $ arg =~ /binlog[-_]format=(\S+)/ )
2007-11-20 17:55:51 +01:00
{
2007-12-12 18:19:24 +01:00
# Save this for collect phase
collect_option ( 'binlog-format' , $ 1 ) ;
mtr_report ( "Using binlog format '$1'" ) ;
2007-11-20 17:55:51 +01:00
}
2006-06-11 15:49:34 +02:00
}
2007-03-29 11:31:50 +02:00
# --------------------------------------------------------------------------
# Find out default storage engine being used(if any)
# --------------------------------------------------------------------------
foreach my $ arg ( @ opt_extra_mysqld_opt )
{
if ( $ arg =~ /default-storage-engine=(\S+)/ )
{
2007-12-12 18:19:24 +01:00
# Save this for collect phase
collect_option ( 'default-storage-engine' , $ 1 ) ;
mtr_report ( "Using default engine '$1'" )
2007-03-29 11:31:50 +02:00
}
}
2009-11-26 11:23:30 +01:00
if ( IS_WINDOWS and defined $ opt_mem ) {
mtr_report ( "--mem not supported on Windows, ignored" ) ;
$ opt_mem = undef ;
}
2010-01-25 11:20:52 +01:00
if ( $ opt_port_base ne "auto" )
{
if ( my $ rem = $ opt_port_base % 10 )
{
mtr_warning ( "Port base $opt_port_base rounded down to multiple of 10" ) ;
$ opt_port_base -= $ rem ;
}
$ opt_build_thread = $ opt_port_base / 10 - 1000 ;
}
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2006-10-05 14:37:46 +02:00
# Check if we should speed up tests by trying to run on tmpfs
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2008-09-05 14:09:39 +02:00
if ( defined $ opt_mem )
2006-10-05 14:37:46 +02:00
{
mtr_error ( "Can't use --mem and --vardir at the same time " )
if $ opt_vardir ;
mtr_error ( "Can't use --mem and --tmpdir at the same time " )
if $ opt_tmpdir ;
2006-11-08 23:16:44 +01:00
# Search through list of locations that are known
2008-01-08 10:50:07 +01:00
# to be "fast disks" to find a suitable location
2017-02-20 00:43:42 +01:00
my @ tmpfs_locations = ( "/run/shm" , "/dev/shm" , "/tmp" ) ;
# Use $ENV{'MTR_MEM'} as first location to look (if defined)
unshift ( @ tmpfs_locations , $ ENV { 'MTR_MEM' } ) if defined $ ENV { 'MTR_MEM' } ;
2006-11-08 23:16:44 +01:00
2006-10-05 14:37:46 +02:00
foreach my $ fs ( @ tmpfs_locations )
{
2018-09-03 10:57:02 +02:00
if ( - d $ fs && ! - l $ fs && - w $ fs )
2006-10-05 14:37:46 +02:00
{
2008-04-24 13:02:53 +02:00
my $ template = "var_${opt_build_thread}_XXXX" ;
2008-01-08 10:50:07 +01:00
$ opt_mem = tempdir ( $ template , DIR = > $ fs , CLEANUP = > 0 ) ;
2006-10-05 14:37:46 +02:00
last ;
}
}
}
2005-02-08 06:11:05 +01:00
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2008-09-05 14:09:39 +02:00
# Set the "var/" directory, the base for everything else
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2015-03-02 18:18:10 +01:00
my $ vardir_location = ( defined $ ENV { MTR_BINDIR }
? "$ENV{MTR_BINDIR}/mysql-test"
: $ glob_mysql_test_dir ) ;
2020-03-12 19:30:58 +01:00
$ vardir_location = realpath $ vardir_location ;
2015-03-02 18:18:10 +01:00
$ default_vardir = "$vardir_location/var" ;
2011-10-19 21:45:18 +02:00
2005-05-15 17:22:54 +02:00
if ( ! $ opt_vardir )
{
2006-10-06 16:26:17 +02:00
$ opt_vardir = $ default_vardir ;
2005-05-15 17:22:54 +02:00
}
2006-10-04 12:47:32 +02:00
2005-06-05 20:10:47 +02:00
# We make the path absolute, as the server will do a chdir() before usage
unless ( $ opt_vardir =~ m , ^ / , or
2012-04-23 12:52:14 +02:00
( IS_WINDOWS and $ opt_vardir =~ m , ^ [ a - z ] : [ / \ \ ] , i ) )
2005-05-15 17:22:54 +02:00
{
# Make absolute path, relative test dir
$ opt_vardir = "$glob_mysql_test_dir/$opt_vardir" ;
}
2004-12-30 16:34:01 +01:00
2008-09-05 14:09:39 +02:00
set_vardir ( $ opt_vardir ) ;
2007-12-12 18:19:24 +01:00
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2008-09-05 14:09:39 +02:00
# Set the "tmp" directory
2005-05-15 17:22:54 +02:00
# --------------------------------------------------------------------------
2008-09-15 17:05:14 +02:00
if ( ! $ opt_tmpdir )
{
$ opt_tmpdir = "$opt_vardir/tmp" unless $ opt_tmpdir ;
2009-02-02 11:18:38 +01:00
if ( check_socket_path_length ( "$opt_tmpdir/mysql_testsocket.sock" ) )
2008-09-15 17:05:14 +02:00
{
mtr_report ( "Too long tmpdir path '$opt_tmpdir'" ,
" creating a shorter one..." ) ;
# Create temporary directory in standard location for temporary files
2009-02-12 17:36:58 +01:00
$ opt_tmpdir = tempdir ( TMPDIR = > 1 , CLEANUP = > 0 ) ;
2008-09-15 17:05:14 +02:00
mtr_report ( " - using tmpdir: '$opt_tmpdir'\n" ) ;
2009-02-12 17:36:58 +01:00
# Remember pid that created dir so it's removed by correct process
$ opt_tmpdir_pid = $$ ;
2008-09-15 17:05:14 +02:00
}
}
2006-02-12 04:13:24 +01:00
$ opt_tmpdir =~ s , / + $, , ; # Remove ending slash if any
2004-12-30 16:34:01 +01:00
# --------------------------------------------------------------------------
2007-12-12 18:19:24 +01:00
# fast option
2004-12-30 16:34:01 +01:00
# --------------------------------------------------------------------------
2007-12-12 18:19:24 +01:00
if ( $ opt_fast ) {
$ opt_shutdown_timeout = 0 ; # Kill processes instead of nice shutdown
2007-03-28 11:16:50 +02:00
}
2009-03-04 12:12:57 +01:00
# --------------------------------------------------------------------------
# Check parallel value
# --------------------------------------------------------------------------
2009-06-03 12:46:04 +02:00
if ( $ opt_parallel ne "auto" && $ opt_parallel < 1 )
2009-03-04 12:12:57 +01:00
{
2009-06-03 12:46:04 +02:00
mtr_error ( "0 or negative parallel value makes no sense, use 'auto' or positive number" ) ;
2009-03-04 12:12:57 +01:00
}
2004-12-30 16:34:01 +01:00
# --------------------------------------------------------------------------
2006-10-08 15:50:16 +02:00
# Record flag
2004-12-30 16:34:01 +01:00
# --------------------------------------------------------------------------
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
if ( $ opt_record and ! @ opt_cases )
2004-12-30 16:34:01 +01:00
{
mtr_error ( "Will not run in record mode without a specific test case" ) ;
}
2008-11-10 16:10:49 +01:00
if ( $ opt_record ) {
# Use only one worker with --record
$ opt_parallel = 1 ;
}
2006-10-08 15:50:16 +02:00
# --------------------------------------------------------------------------
2007-12-12 18:19:24 +01:00
# Embedded server flag
2006-10-08 15:50:16 +02:00
# --------------------------------------------------------------------------
2007-12-12 18:19:24 +01:00
if ( $ opt_embedded_server )
2005-08-25 16:25:54 +02:00
{
2007-12-12 18:19:24 +01:00
$ opt_skip_ssl = 1 ; # Turn off use of SSL
2005-08-25 16:25:54 +02:00
2007-12-12 18:19:24 +01:00
# Turn off use of bin log
push ( @ opt_extra_mysqld_opt , "--skip-log-bin" ) ;
if ( using_extern ( ) )
{
mtr_error ( "Can't use --extern with --embedded-server" ) ;
}
2004-12-30 16:34:01 +01:00
}
2006-10-08 15:50:16 +02:00
# --------------------------------------------------------------------------
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
# Big test and staging_run flags
2006-10-08 15:50:16 +02:00
# --------------------------------------------------------------------------
2006-11-17 13:14:07 +01:00
if ( $ opt_big_test )
{
$ ENV { 'BIG_TEST' } = 1 ;
}
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
$ ENV { 'STAGING_RUN' } = $ opt_staging_run ;
2004-12-30 16:34:01 +01:00
2006-10-08 15:50:16 +02:00
# --------------------------------------------------------------------------
# Gcov flag
# --------------------------------------------------------------------------
2010-01-05 21:35:50 +01:00
if ( ( $ opt_gcov or $ opt_gprof ) and ! $ source_dist )
2004-12-30 16:34:01 +01:00
{
2005-01-01 19:27:41 +01:00
mtr_error ( "Coverage test needs the source - please use source dist" ) ;
}
2019-08-15 22:42:07 +02:00
$ ENV { ASAN_OPTIONS } = "abort_on_error=1:" . ( $ ENV { ASAN_OPTIONS } || '' ) ;
$ ENV { ASAN_OPTIONS } = "suppressions=${glob_mysql_test_dir}/asan.supp:" .
$ ENV { ASAN_OPTIONS }
2019-12-09 20:23:51 +01:00
if - f "$glob_mysql_test_dir/asan.supp" and not IS_WINDOWS ;
2019-08-15 22:42:07 +02:00
# The following can be useful when a test fails without any asan report
# on stderr like with openssl_1.test
# $ENV{ASAN_OPTIONS}= "log_path=${opt_vardir}/log/asan:" . $ENV{ASAN_OPTIONS};
# Add leak suppressions
2020-04-06 09:47:11 +02:00
$ ENV { LSAN_OPTIONS } = "suppressions=${glob_mysql_test_dir}/lsan.supp:print_suppressions=0"
2019-12-09 20:23:51 +01:00
if - f "$glob_mysql_test_dir/lsan.supp" and not IS_WINDOWS ;
2019-08-15 22:42:07 +02:00
2019-12-09 20:23:51 +01:00
mtr_verbose ( "ASAN_OPTIONS=$ENV{ASAN_OPTIONS}" ) ;
2004-12-30 16:34:01 +01:00
2009-08-18 09:38:18 +02:00
# --------------------------------------------------------------------------
# Modified behavior with --start options
# --------------------------------------------------------------------------
2010-03-16 10:45:32 +01:00
if ( $ opt_start or $ opt_start_dirty or $ opt_start_exit ) {
2009-08-18 09:38:18 +02:00
collect_option ( 'quick-collect' , 1 ) ;
$ start_only = 1 ;
2004-12-30 16:34:01 +01:00
}
2009-03-12 23:27:35 +01:00
if ( $ opt_debug )
{
2011-07-02 22:12:12 +02:00
$ opt_testcase_timeout = 7 * 24 * 60 ;
$ opt_suite_timeout = 7 * 24 * 60 ;
2009-03-12 23:27:35 +01:00
$ opt_retry = 1 ;
$ opt_retry_failure = 1 ;
}
2004-12-30 16:34:01 +01:00
2010-06-09 10:21:46 +02:00
# --------------------------------------------------------------------------
# Check use of user-args
# --------------------------------------------------------------------------
if ( $ opt_user_args ) {
mtr_error ( "--user-args only valid with --start options" )
unless $ start_only ;
mtr_error ( "--user-args cannot be combined with named suites or tests" )
if $ opt_suites || @ opt_cases ;
}
2009-04-29 16:13:38 +02:00
# --------------------------------------------------------------------------
# Check use of wait-all
# --------------------------------------------------------------------------
2009-08-18 09:38:18 +02:00
if ( $ opt_wait_all && ! $ start_only )
2009-04-29 16:13:38 +02:00
{
2010-06-09 10:21:46 +02:00
mtr_error ( "--wait-all can only be used with --start options" ) ;
2009-04-29 16:13:38 +02:00
}
2011-09-15 12:34:32 +02:00
# --------------------------------------------------------------------------
# Gather stress-test options and modify behavior
# --------------------------------------------------------------------------
if ( $ opt_stress )
{
$ opt_stress =~ s/,/ /g ;
$ opt_user_args = 1 ;
mtr_error ( "--stress cannot be combined with named ordinary suites or tests" )
if $ opt_suites || @ opt_cases ;
$ opt_suites = "stress" ;
@ opt_cases = ( "wrapper" ) ;
$ ENV { MST_OPTIONS } = $ opt_stress ;
}
2008-11-21 13:45:28 +01:00
# --------------------------------------------------------------------------
# Check timeout arguments
# --------------------------------------------------------------------------
mtr_error ( "Invalid value '$opt_testcase_timeout' supplied " .
"for option --testcase-timeout" )
if ( $ opt_testcase_timeout <= 0 ) ;
mtr_error ( "Invalid value '$opt_suite_timeout' supplied " .
"for option --testsuite-timeout" )
if ( $ opt_suite_timeout <= 0 ) ;
2010-12-09 12:10:49 +01:00
if ( $ opt_debug_common )
{
$ opt_debug = 1 ;
$ debug_d = "d,query,info,error,enter,exit" ;
}
2022-07-18 22:16:17 +02:00
My::CoreDump:: pre_setup ( ) ;
2006-04-21 18:48:49 +02:00
}
2007-12-12 18:19:24 +01:00
2006-11-23 17:39:10 +01:00
#
# To make it easier for different devs to work on the same host,
# an environment variable can be used to control all ports. A small
# number is to be used, 0 - 16 or similar.
#
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
# versions of this script, else a 4.0 test run might conflict with a
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
# all port numbers might not be used in this version of the script.
#
# Also note the limitation of ports we are allowed to hand out. This
# differs between operating systems and configuration, see
# http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
# But a fairly safe range seems to be 5001 - 32767
#
2008-04-24 13:02:53 +02:00
sub set_build_thread_ports ($) {
2009-03-04 11:34:47 +01:00
my $ thread = shift || 0 ;
2006-11-23 17:39:10 +01:00
2009-03-04 11:34:47 +01:00
if ( lc ( $ opt_build_thread ) eq 'auto' ) {
my $ found_free = 0 ;
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
$ build_thread = 300 ; # Start attempts from here
2015-12-10 07:00:14 +01:00
my $ build_thread_upper = $ build_thread + ( $ opt_parallel > 1500
? 3000
2016-06-16 21:00:16 +02:00
: 2 * $ opt_parallel ) + 300 ;
2009-03-04 11:34:47 +01:00
while ( ! $ found_free )
{
2015-12-10 07:00:14 +01:00
$ build_thread = mtr_get_unique_id ( $ build_thread , $ build_thread_upper ) ;
2009-03-04 11:34:47 +01:00
if ( ! defined $ build_thread ) {
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
mtr_error ( "Could not get a unique build thread id" ) ;
2009-03-04 11:34:47 +01:00
}
$ found_free = check_ports_free ( $ build_thread ) ;
# If not free, release and try from next number
Bug #42804 --parallel option does not work for MTR under ActiveState
perl
The problem here was the method how MTR gets its unique thread ids.
Prior to this patch, the method to do it was to maintain a global
table of pid,mtr_unique_id) pairs. The table was backed by a text
file. The table was cleaned up one in a while and dead processes leaking
unique_ids were determined with with kill(0) or with scripting tasklist
on Windows.
This method is flawed specifically on native Windows Perl. fork() is
implemented with starting a new thread, give it a syntetic negative PID
(threadID*(-1)), until this thread creates a new process with exec()
However, neither tasklist nor any other native Windows tool can cope with
negative perl PIDs. This lead to incorrect determination of dead process
and reusing already used mtr_unique_id.
The patch introduces alternative portable method of solving unique-id
problem. When a process needs a unique id in range [min...max], it just
starts to open files named min, min+1,...max in a loop . After file is
opened, we do non-blocking flock(). When flock() succeeds, process has
allocated the ID. When process dies, file is unlocked . Checks for zombies
are not necessary.
Since the change would create a co-existence problems with older version
of MTR, because of different way to calculate IDs, the default ID range
is changed from 250-299 to 300-349.
Another fix that was necessary enable --parallel option was to serialize
spawn() calls on Windows. specifically, IO redirects needed to be protected.
This patch also fixes hanging CRTL-C (as described in Bug #38629) for the
"new" MTR. The fix was already in 6.0 and is now downported.
2009-04-23 13:35:02 +02:00
if ( ! $ found_free ) {
mtr_release_unique_id ( ) ;
$ build_thread + + ;
}
2008-08-10 19:46:43 +02:00
}
2009-03-04 11:34:47 +01:00
}
else
{
$ build_thread = $ opt_build_thread + $ thread - 1 ;
2009-04-28 23:06:36 +02:00
if ( ! check_ports_free ( $ build_thread ) ) {
# Some port was not free(which one has already been printed)
mtr_error ( "Some port(s) was not free" )
}
2006-11-30 22:45:55 +01:00
}
2008-04-24 13:02:53 +02:00
$ ENV { MTR_BUILD_THREAD } = $ build_thread ;
2009-03-04 11:34:47 +01:00
2007-12-12 18:19:24 +01:00
# Calculate baseport
2015-03-31 15:43:38 +02:00
$ baseport = $ build_thread * $ opt_port_group_size + 10000 ;
if ( $ baseport < 5001 or $ baseport + $ opt_port_group_size >= 32767 )
2006-11-23 17:39:10 +01:00
{
mtr_error ( "MTR_BUILD_THREAD number results in a port" ,
"outside 5001 - 32767" ,
2015-03-31 15:43:38 +02:00
"($baseport - $baseport + $opt_port_group_size)" ) ;
2006-12-20 23:44:53 +01:00
}
2006-03-13 10:30:36 +01:00
2008-04-24 13:02:53 +02:00
mtr_report ( "Using MTR_BUILD_THREAD $build_thread," ,
2015-03-31 15:43:38 +02:00
"with reserved ports $baseport.." . ( $ baseport + ( $ opt_port_group_size - 1 ) ) ) ;
2006-03-13 10:30:36 +01:00
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
sub collect_mysqld_features {
2006-11-28 22:16:31 +01:00
#
2007-12-12 18:19:24 +01:00
# Execute "mysqld --no-defaults --help --verbose" to get a
2007-03-28 11:16:50 +02:00
# list of all features and settings
2006-11-28 22:16:31 +01:00
#
2007-04-15 15:47:27 +02:00
# --no-defaults and --skip-grant-tables are to avoid loading
# system-wide configs and plugins
#
2007-04-30 16:45:56 +02:00
# --datadir must exist, mysqld will chdir into it
2007-04-30 02:46:18 +02:00
#
2008-02-20 14:55:30 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--no-defaults" ) ;
2011-05-04 15:45:39 +02:00
mtr_add_arg ( $ args , "--datadir=." ) ;
2010-06-10 11:11:52 +02:00
mtr_add_arg ( $ args , "--basedir=%s" , $ basedir ) ;
2009-10-15 14:23:43 +02:00
mtr_add_arg ( $ args , "--lc-messages-dir=%s" , $ path_language ) ;
2008-02-20 14:55:30 +01:00
mtr_add_arg ( $ args , "--skip-grant-tables" ) ;
2012-02-23 07:50:11 +01:00
mtr_add_arg ( $ args , "--log-warnings=0" ) ;
2017-02-14 15:30:45 +01:00
mtr_add_arg ( $ args , "--log-slow-admin-statements=0" ) ;
mtr_add_arg ( $ args , "--log-queries-not-using-indexes=0" ) ;
mtr_add_arg ( $ args , "--log-slow-slave-statements=0" ) ;
2008-02-20 14:55:30 +01:00
mtr_add_arg ( $ args , "--verbose" ) ;
mtr_add_arg ( $ args , "--help" ) ;
2011-01-29 18:51:12 +01:00
my $ exe_mysqld = find_mysqld ( $ bindir ) ;
2008-02-20 14:55:30 +01:00
my $ cmd = join ( " " , $ exe_mysqld , @$ args ) ;
2005-06-21 02:21:52 +02:00
2010-08-17 09:14:46 +02:00
mtr_verbose ( "cmd: $cmd" ) ;
2010-05-26 20:55:40 +02:00
2012-02-23 07:50:11 +01:00
my $ list = `$cmd` ;
# to simplify the parsing, we'll merge all nicely formatted --help texts
$ list =~ s/\n {22}(\S)/ $1/g ;
2023-08-07 21:33:58 +02:00
my @ list = split '\R' , $ list ;
2016-06-01 20:21:36 +02:00
$ mysql_version_id = 0 ;
2023-08-07 21:33:58 +02:00
my $ exe = basename ( $ exe_mysqld ) ;
2016-06-01 20:21:36 +02:00
while ( defined ( my $ line = shift @ list ) ) {
2023-08-07 21:33:58 +02:00
if ( $ line =~ /\W\Q$exe\E\s+Ver\s(\d+)\.(\d+)\.(\d+)(\S*)/ ) {
2016-06-01 20:21:36 +02:00
$ mysql_version_id = $ 1 * 10000 + $ 2 * 100 + $ 3 ;
mtr_report ( "MariaDB Version $1.$2.$3$4" ) ;
last ;
}
}
2012-02-23 07:50:11 +01:00
mtr_error ( "Could not find version of MariaDB" )
2016-06-01 20:21:36 +02:00
unless $ mysql_version_id > 0 ;
2012-02-23 07:50:11 +01:00
for ( @ list )
{
# first part of the help - command-line options.
if ( /Copyright/ .. /^-{30,}/ ) {
# here we want to detect all not mandatory plugins
# they are listed in the --help output as
2019-06-10 18:07:49 +02:00
# --archive[=name]
# Enable or disable ARCHIVE plugin. Possible values are ON, OFF,
# FORCE (don't start if the plugin fails to load),
# FORCE_PLUS_PERMANENT (like FORCE, but the plugin can not be uninstalled).
2021-03-03 10:30:29 +01:00
# For Innodb I_S plugins that are referenced in sys schema
# do not make them optional, to prevent diffs in tests.
2013-04-19 07:07:06 +02:00
push @ optional_plugins , $ 1
2021-03-03 10:30:29 +01:00
if /^ --([-a-z0-9]+)\[=name\] +Enable or disable \w+ plugin. One of: ON, OFF, FORCE/
and $ 1 ne "innodb-metrics"
and $ 1 ne "innodb-buffer-page"
and $ 1 ne "innodb-lock-waits"
and $ 1 ne "innodb-locks"
and $ 1 ne "innodb-trx" ;
2012-02-23 07:50:11 +01:00
next ;
2005-06-19 20:06:27 +02:00
}
2006-10-04 12:47:32 +02:00
2023-08-07 21:33:58 +02:00
last if /^\r?$/ ; # then goes a list of variables, it ends with an empty line
2012-02-23 07:50:11 +01:00
# Put a variable into hash
/^([\S]+)[ \t]+(.*?)\r?$/ or die "Could not parse mysqld --help: $_\n" ;
$ mysqld_variables { $ 1 } = $ 2 ;
}
mtr_error ( "Could not find variabes list" ) unless % mysqld_variables ;
2006-10-04 12:47:32 +02:00
}
2008-09-05 18:28:20 +02:00
sub collect_mysqld_features_from_running_server ()
{
2023-06-05 09:42:51 +02:00
my $ mysql = mtr_exe_exists ( "$path_client_bindir/mariadb" ) ;
2008-09-05 18:28:20 +02:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--no-defaults" ) ;
mtr_add_arg ( $ args , "--user=%s" , $ opt_user ) ;
while ( my ( $ option , $ value ) = each ( % opts_extern ) ) {
mtr_add_arg ( $ args , "--$option=$value" ) ;
}
mtr_add_arg ( $ args , "--silent" ) ; # Tab separated output
2022-02-04 00:33:10 +01:00
mtr_add_arg ( $ args , "-e \"use mysql; SHOW VARIABLES\"" ) ;
2008-09-05 18:28:20 +02:00
my $ cmd = "$mysql " . join ( ' ' , @$ args ) ;
mtr_verbose ( "cmd: $cmd" ) ;
my $ list = `$cmd` or
mtr_error ( "Could not connect to extern server using command: '$cmd'" ) ;
2023-08-07 21:33:58 +02:00
foreach my $ line ( split ( '\R' , $ list ) )
2008-09-05 18:28:20 +02:00
{
# Put variables into hash
if ( $ line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
{
2012-02-20 13:03:44 +01:00
my $ name = $ 1 ;
my $ value = $ 2 ;
$ name =~ s/_/-/g ;
# print "$name=\"$value\"\n";
$ mysqld_variables { $ name } = $ value ;
2008-09-05 18:28:20 +02:00
}
}
# Parse version
my $ version_str = $ mysqld_variables { 'version' } ;
2011-01-19 15:47:56 +01:00
if ( $ version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)([^\s]*)/ )
2008-09-05 18:28:20 +02:00
{
#print "Major: $1 Minor: $2 Build: $3\n";
$ mysql_version_id = $ 1 * 10000 + $ 2 * 100 + $ 3 ;
#print "mysql_version_id: $mysql_version_id\n";
2017-11-05 19:05:02 +01:00
mtr_report ( "MariaDB Version $1.$2.$3" ) ;
2011-01-19 15:47:56 +01:00
$ mysql_version_extra = $ 4 ;
2008-09-05 18:28:20 +02:00
}
2017-11-05 19:05:02 +01:00
mtr_error ( "Could not find version of MariaDBL" ) unless $ mysql_version_id ;
2008-09-05 18:28:20 +02:00
}
2008-03-25 09:19:03 +01:00
sub find_mysqld {
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
2022-12-26 22:02:01 +01:00
my ( $ mysqld_basedir ) = $ ENV { MTR_BINDIR_FORCED } || $ ENV { MTR_BINDIR } || @ _ ;
2008-03-25 09:19:03 +01:00
2020-03-30 22:49:45 +02:00
my @ mysqld_names = ( "mariadbd" , "mysqld" , "mysqld-max-nt" , "mysqld-max" ,
2008-03-25 09:19:03 +01:00
"mysqld-nt" ) ;
2011-02-07 12:42:21 +01:00
if ( $ opt_debug_server ) {
2008-03-25 09:19:03 +01:00
# Put mysqld-debug first in the list of binaries to look for
mtr_verbose ( "Adding mysqld-debug first in list of binaries to look for" ) ;
unshift ( @ mysqld_names , "mysqld-debug" ) ;
}
2022-12-26 22:02:01 +01:00
return my_find_bin ( $ mysqld_basedir ,
2008-11-07 16:22:53 +01:00
[ "sql" , "libexec" , "sbin" , "bin" ] ,
2008-03-25 09:19:03 +01:00
[ @ mysqld_names ] ) ;
}
2004-12-30 16:34:01 +01:00
sub executable_setup () {
2012-02-06 23:16:21 +01:00
$ exe_patch = 'patch' if `patch -v` ;
2006-10-04 12:47:32 +02:00
# Look for the client binaries
2022-09-23 10:28:12 +02:00
$ exe_mysqladmin = mtr_exe_exists ( "$path_client_bindir/mariadb-admin" ) ;
$ exe_mysql = mtr_exe_exists ( "$path_client_bindir/mariadb" ) ;
$ exe_mysql_plugin = mtr_exe_exists ( "$path_client_bindir/mariadb-plugin" ) ;
2019-11-27 10:29:03 +01:00
$ exe_mariadb_conv = mtr_exe_exists ( "$path_client_bindir/mariadb-conv" ) ;
2005-06-21 02:21:52 +02:00
2021-12-16 10:11:48 +01:00
$ exe_mysql_embedded = mtr_exe_maybe_exists ( "$bindir/libmysqld/examples/mysql_embedded" ) ;
2005-06-21 02:21:52 +02:00
2006-10-04 12:47:32 +02:00
# Look for mysqltest executable
2007-12-12 18:19:24 +01:00
if ( $ opt_embedded_server )
2005-06-10 21:29:37 +02:00
{
2006-10-04 12:47:32 +02:00
$ exe_mysqltest =
2021-10-21 14:21:44 +02:00
mtr_exe_exists ( "$bindir/libmysqld/examples$multiconfig/mysqltest_embedded" ,
2006-11-02 21:05:20 +01:00
"$path_client_bindir/mysqltest_embedded" ) ;
2005-06-10 21:29:37 +02:00
}
2006-10-04 12:47:32 +02:00
else
{
2013-05-16 10:48:04 +02:00
if ( defined $ ENV { 'MYSQL_TEST' } )
{
$ exe_mysqltest = $ ENV { 'MYSQL_TEST' } ;
print "===========================================================\n" ;
print "WARNING:The mysqltest binary is fetched from $exe_mysqltest\n" ;
print "===========================================================\n" ;
}
else
{
2022-09-23 10:28:12 +02:00
$ exe_mysqltest = mtr_exe_exists ( "$path_client_bindir/mariadb-test" ) ;
2013-05-16 10:48:04 +02:00
}
2006-10-04 12:47:32 +02:00
}
2005-02-08 06:11:05 +01:00
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
sub client_debug_arg ($$) {
my ( $ args , $ client_name ) = @ _ ;
2011-02-04 12:33:45 +01:00
# Workaround for Bug #50627: drop any debug opt
2022-09-23 10:28:12 +02:00
return if $ client_name =~ /^mariadb-binlog/ ;
2011-02-04 12:33:45 +01:00
2007-12-12 18:19:24 +01:00
if ( $ opt_debug ) {
mtr_add_arg ( $ args ,
2023-08-04 11:10:34 +02:00
"--loose-debug=d,info,warning,warnings:t:A,%s/log/%s.trace" ,
2007-12-12 18:19:24 +01:00
$ path_vardir_trace , $ client_name )
}
2006-08-16 10:30:22 +02:00
}
2009-04-09 01:42:51 +02:00
sub client_arguments ($;$) {
2009-10-07 15:42:16 +02:00
my $ client_name = shift ;
2009-04-09 01:42:51 +02:00
my $ group_suffix = shift ;
2007-12-12 18:19:24 +01:00
my $ client_exe = mtr_exe_exists ( "$path_client_bindir/$client_name" ) ;
2006-10-25 14:34:18 +02:00
2007-12-12 18:19:24 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
2009-04-09 01:42:51 +02:00
if ( defined ( $ group_suffix ) ) {
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ group_suffix ) ;
client_debug_arg ( $ args , "$client_name-$group_suffix" ) ;
}
else
2006-10-25 14:34:18 +02:00
{
2009-04-09 01:42:51 +02:00
client_debug_arg ( $ args , $ client_name ) ;
2006-10-25 14:34:18 +02:00
}
2007-12-12 18:19:24 +01:00
return mtr_args2str ( $ client_exe , @$ args ) ;
}
2009-02-12 15:08:56 +01:00
sub mysqlbinlog_arguments () {
2022-09-23 10:28:12 +02:00
my $ exe = mtr_exe_exists ( "$path_client_bindir/mariadb-binlog" ) ;
2009-02-12 15:08:56 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--local-load=%s" , $ opt_tmpdir ) ;
client_debug_arg ( $ args , "mysqlbinlog" ) ;
return mtr_args2str ( $ exe , @$ args ) ;
}
2007-12-12 18:19:24 +01:00
sub mysqlslap_arguments () {
2022-09-23 10:28:12 +02:00
my $ exe = mtr_exe_maybe_exists ( "$path_client_bindir/mariadb-slap" ) ;
2007-12-12 18:19:24 +01:00
if ( $ exe eq "" ) {
# mysqlap was not found
if ( defined $ mysql_version_id and $ mysql_version_id >= 50100 ) {
2022-09-23 10:28:12 +02:00
mtr_error ( "Could not find the mariadb-slap binary" ) ;
2007-12-12 18:19:24 +01:00
}
2022-09-23 10:28:12 +02:00
return "" ; # Don't care about mariadb-slap
2006-10-25 14:34:18 +02:00
}
2007-12-12 18:19:24 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
client_debug_arg ( $ args , "mysqlslap" ) ;
return mtr_args2str ( $ exe , @$ args ) ;
2006-10-25 14:34:18 +02:00
}
2007-12-12 18:19:24 +01:00
sub mysqldump_arguments ($) {
my ( $ group_suffix ) = @ _ ;
2022-09-23 10:28:12 +02:00
my $ exe = mtr_exe_exists ( "$path_client_bindir/mariadb-dump" ) ;
2006-11-13 13:39:49 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
2008-04-08 11:02:06 +02:00
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ group_suffix ) ;
2007-12-12 18:19:24 +01:00
client_debug_arg ( $ args , "mysqldump-$group_suffix" ) ;
return mtr_args2str ( $ exe , @$ args ) ;
}
2006-11-13 13:39:49 +01:00
2007-12-12 18:19:24 +01:00
sub mysql_client_test_arguments () {
my $ exe ;
# mysql_client_test executable may _not_ exist
if ( $ opt_embedded_server ) {
$ exe = mtr_exe_maybe_exists (
2021-10-21 14:21:44 +02:00
"$bindir/libmysqld/examples$multiconfig/mysql_client_test_embedded" ,
2011-01-29 18:51:12 +01:00
"$bindir/bin/mysql_client_test_embedded" ) ;
2007-12-12 18:19:24 +01:00
} else {
2021-10-21 14:21:44 +02:00
$ exe = mtr_exe_maybe_exists ( "$bindir/tests$multiconfig/mysql_client_test" ,
2011-01-29 18:51:12 +01:00
"$bindir/bin/mysql_client_test" ) ;
2007-12-12 18:19:24 +01:00
}
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--testcase" ) ;
mtr_add_arg ( $ args , "--vardir=$opt_vardir" ) ;
client_debug_arg ( $ args , "mysql_client_test" ) ;
2011-01-29 18:51:12 +01:00
my $ ret = mtr_args2str ( $ exe , @$ args ) ;
return $ ret ;
2006-11-13 13:39:49 +01:00
}
2009-02-12 15:08:56 +01:00
sub tool_arguments ($$) {
my ( $ sedir , $ tool_name ) = @ _ ;
2011-01-29 18:51:12 +01:00
my $ exe = my_find_bin ( $ bindir ,
2009-02-12 15:08:56 +01:00
[ $ sedir , "bin" ] ,
$ tool_name ) ;
2005-01-11 01:35:08 +01:00
2009-02-12 15:08:56 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
client_debug_arg ( $ args , $ tool_name ) ;
return mtr_args2str ( $ exe , @$ args ) ;
}
2005-01-11 01:35:08 +01:00
2009-09-03 15:05:02 +02:00
# This is not used to actually start a mysqld server, just to allow test
# scripts to run the mysqld binary to test invalid server startup options.
sub mysqld_client_arguments () {
my $ default_mysqld = default_mysqld ( ) ;
2011-01-29 18:51:12 +01:00
my $ exe = find_mysqld ( $ bindir ) ;
2009-09-03 15:05:02 +02:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--no-defaults" ) ;
mtr_add_arg ( $ args , "--basedir=%s" , $ basedir ) ;
mtr_add_arg ( $ args , "--character-sets-dir=%s" , $ default_mysqld - > value ( "character-sets-dir" ) ) ;
mtr_add_arg ( $ args , "--language=%s" , $ default_mysqld - > value ( "language" ) ) ;
return mtr_args2str ( $ exe , @$ args ) ;
}
handlerton cleanup:
duplicate fields removed, st_mysql_storage_engine added to support
run-time handlerton initialization (no compiler warnings), handler API
is now tied to MySQL version, handlerton->plugin mapping added
(slot-based), dummy default_hton removed, plugin-type-specific
initialization generalized, built-in plugins are now initialized too,
--default-storage-engine no longer needs a list of storage engines
in handle_options().
mysql-test-run.pl bugfixes
include/mysql/plugin.h:
added st_mysql_storage_engine
made handlerton tied to MySQL version
mysql-test/mysql-test-run.pl:
bugfixes (umask, --no-defaults)
mysql-test/r/ndb_dd_basic.result:
update error message
mysql-test/t/partition_mgm_err2.test:
fix typo
sql/ha_berkeley.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_berkeley.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_federated.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_heap.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisam.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisammrg.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster_binlog.cc:
no 'name' in the handlerton anymore
sql/ha_partition.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/handler.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
handlerton->plugin mapping
sql/handler.h:
handlerton cleanup: remove duplicate fields
sql/log.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/mysql_priv.h:
handler.h needs plugin.h
sql/mysqld.cc:
Convert --default-storage-engine to a handlerton* when
all storage engines are initialized and not in getopt
sql/set_var.cc:
no name in the handlerton anymore
sql/sql_parse.cc:
no default_hton anymore
sql/sql_partition.cc:
no name in the handlerton anymore
sql/sql_plugin.cc:
generalize plugin type-specific initialization.
initialize built-in plugins too
sql/sql_plugin.h:
generalize plugin type-specific initialization.
sql/sql_show.cc:
st_mysql_storage_engine structure
no name in the handlerton anymore
sql/sql_table.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_tablespace.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_yacc.yy:
no default_hton anymore
issue "unknown storage engine" warning where it is discovered
storage/archive/ha_archive.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/archive/ha_archive.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/blackhole/ha_blackhole.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/csv/ha_tina.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/example/ha_example.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
2006-05-28 14:51:01 +02:00
2009-02-12 15:08:56 +01:00
sub have_maria_support () {
2015-11-24 11:43:09 +01:00
my $ maria_var = $ mysqld_variables { 'aria-recover-options' } ;
2011-07-15 09:09:33 +02:00
return defined $ maria_var ;
2009-02-12 15:08:56 +01:00
}
2005-01-11 01:35:08 +01:00
WL#5161 : Cross-platform build with CMake
BUILD-CMAKE:
WL#5161 : Documentation on how to build with CMake on Unix/Windows
BUILD/Makefile.am:
Add new file
BUILD/autorun.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
BUILD/choose_configure.sh:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
CMakeLists.txt:
WL#5161 : Rewrite top-level CMakeLists.txt.
Remove Windows specifics
- compiler flags handling moved to configure.cmake
- storage engine/plugin stuff moved into cmake/plugin.cmake
- copy docs
Makefile.am:
Added new files
client/CMakeLists.txt:
WL#5161 : Rewrite CMakeLists.txt to be platform-independent
Handle packagng (add INSTALL commands)
cmake/Makefile.am:
WL#5161 : use choose_configure instead of autotools configure script
(choose configure will call cmake if cmake is available)
cmake/abi_check.cmake:
Custom targets for abi_check (for cmake)
cmake/bison.cmake:
- Check bison availability
- Add RUN_BISON macro (used to create sql_yacc.cc and sql_yacc.h)
cmake/cat.cmake:
Add helper script to concatenate files.
cmake/character_sets.cmake:
Handle configuration parameters WITH_EXTRA_CHARSETS
cmake/check_minimal_version.cmake:
Helper script to check the minimum required version of cmake
cmake/configure.pl:
Add perl script to convert ./configure parameters for cmake
cmake/create_initial_db.cmake.in:
Add script helper to create initial database.
(on Windows, we pack initial db with the redistribution
package)
cmake/do_abi_check.cmake:
Perform abi check
cmake/dtrace.cmake:
Handle dtrace in CMake Build.
Check for dtrace availablility,
run dtrace -G on solaris in prelink step
cmake/dtrace_prelink.cmake:
Run dtrace -G on Solaris in pre-link step,
link the object it creates together with library or
executable
cmake/install_macros.cmake:
Helper macros for packaging
(install pdb on Windows, install symlinks on Unix)
cmake/make_dist.cmake.in:
"make dist" -
- pack autotools ./configure script with the source
(renamed to configure.am)
- pack bison output
cmake/merge_archives_unix.cmake.in:
script to merge static libraries on Unix
cmake/misc.cmake:
Build helper macros
- MERGE_STATIC_LIBS
We use it when building client library and embedded
(avoid recompilation)
- Convert source file paths to absolute names.
We use it in to locate files of a different project,
when the files need to be recompiled (e.g in embedded
several storage engines are recompiled with
-DEMBEDDED_LIBRARY)
cmake/mysql_version.cmake:
Extract version info from configure.in
Handle package names.
cmake/plugin.cmake:
Rewrote storage/mysql_storage_engine.cmake to handle
other types of plugins and do it in OS-independent manner.
cmake/readline.cmake:
Macros to handle WITH_READLINE/WITH_LIBEDIT parameters
cmake/ssl.cmake:
Add macros to handle WITH_SSL parameter.
cmake/stack_direction.c:
Helper to check stack direction.
cmake/zlib.cmake:
Add macros to handle WITH_ZLIB parameter
cmd-line-utils/libedit/CMakeLists.txt:
Build libedit with cmake.
cmd-line-utils/libedit/Makefile.am:
Add new file
cmd-line-utils/readline/CMakeLists.txt:
Build readline with CMake.
cmd-line-utils/readline/Makefile.am:
Add new file
config.h.cmake:
WL#5161 : Add config.h template for cmake
configure.cmake:
WL#5161 : Add platform tests ( for cmake)
configure.in:
Added new subdirectories
dbug/CMakeLists.txt:
WL#5161
extra/CMakeLists.txt:
WL#5161
extra/yassl/CMakeLists.txt:
WL#5161
extra/yassl/taocrypt/CMakeLists.txt:
WL#5161
include/Makefile.am:
Add new file
include/keycache.h:
remove configure-win.h and remove HUGE_PTR defined there.
include/my_global.h:
use my_config.h for Windows, not config-win.h anymore
include/my_pthread.h:
- Move thread_safe_increment from config-win.h to other headers
(config-win.h is not used anymore)
- Declare pthread_cancel on Windows (it is used in daemon_example)
include/my_sys.h:
Add malloc.h on Windows (we use -D_WIN32_LEAN_AND_MEAN now, and
with this define malloc.h is not included automatically via windows.h)
include/mysql/plugin.h:
Handle pure-C plugins with Microsoft compiler.
include/thr_alarm.h:
remove rf_SetTimer that used to be defined in config-win.h
Replace with UINT_PTR (we do not use config-win.h anymore
and typedef was needed in this single place only)
libmysql/CMakeLists.txt:
Avoid pointless recompilation of source files
in client library if possible. Merge static
libs (dbug, mysys) to create static client
library.
libmysqld/CMakeLists.txt:
Avoid pointless recompilation of source files
when building embedded. Instead, merge dbug and
mysys (and some other static libs) into embedded.
libmysqld/examples/CMakeLists.txt:
Embedded compilation on Unix
libmysqld/lib_sql.cc:
Do not define THD::clear_error() in lib_sql.cc
for embedded. Instead, use the same inline
definition from sql_class.h as in none-embedded
case (fixes duplicate symbol errors on Windows
and removes pointless #ifdef EMBEDDED)
man/CMakeLists.txt:
Install man files.
man/Makefile.am:
Add new file.
mysql-test/CMakeLists.txt:
Install mysql-test files
mysql-test/Makefile.am:
Add new files
mysql-test/lib/My/ConfigFactory.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/Find.pm:
the build configurations are now also available on Unix
Xcode on Mac uses the Release, RelwithDebinfo and Debug
subdirectories for executables. Earlier, build configurations
were available only on Windows.
mysql-test/lib/My/SafeProcess.pm:
Allow testing with mtr in out-of-source builds.
mysql-test/lib/My/SafeProcess/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysql-test/lib/My/SafeProcess/safe_kill_win.cc:
add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
mysql-test/lib/My/SafeProcess/safe_process_win.cc:
Add stdlib.h (to be able to compile with -DWIN32_LEAN_AND_MEAN)
define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE if not defined
(can happen using MinGW compiler that comes with old SDK)
mysql-test/mtr.out-of-source:
Allow testing with mtr in out-of-source builds.
mysql-test/mysql-test-run.pl:
Allow testing with mtr in out-of-source builds.
Use common find_plugin macro for Windows and unix.
mysql-test/t/fulltext_plugin.test:
This test can now run on Windows as well.
mysys/CMakeLists.txt:
Port CMakeLists.txt to Unix
mysys/my_create.c:
config-win.h is dead => NO_OPEN_3 is never defined.
mysys/my_getsystime.c:
config-win.h is dead => define OFFSET_TO_EPOCH where it is used.
mysys/my_winthread.c:
Add win32 pthread_cancel - used by daemon_example
mysys/mysys_priv.h:
config-win.h is dead => include <sys/stat.h> where it is used
fix prototype of my_win_(f)stat
plugin/daemon_example/CMakeLists.txt:
Compile daemon_example with CMake
plugin/daemon_example/Makefile.am:
Add new file
plugin/fulltext/CMakeLists.txt:
Compile full-text example with CMake
plugin/fulltext/Makefile.am:
Add new file.
plugin/semisync/CMakeLists.txt:
Fix semisync to use common macro for plugins.
regex/CMakeLists.txt:
Use absolute filenames, when adding regex library
(we recompile files in embedded, and want to locate
sources via GET_TARGET_PROPERTY( ... SOURCES ..))
regex/regex2.h:
Remove pointless typedef (produces error with MinGW compiler)
scripts/CMakeLists.txt:
Add configure/install for scripts
sql-bench/CMakeLists.txt:
install sql-bench files
sql-bench/Makefile.am:
Add new file
sql/CMakeLists.txt:
Port CmakeLists.txt to Unix
sql/nt_servc.cc:
compile server with -DWIN32_LEAN_AND_MEAN
sql/share/CMakeLists.txt:
Install charsets
sql/share/Makefile.am:
Add new file
sql/sql_builtin.cc.in:
Handle pure-C plugins on Windows.
sql/sql_class.h:
Use the same clear_error macro in embedded and not embedded.
Fixes pointless #ifdef and avoids duplicate symbols when linking
on Windows.
storage/Makefile.am:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
storage/archive/CMakeLists.txt:
Add names for static and dynamic plugin libraries.
Link archive with zlib
storage/blackhole/CMakeLists.txt:
Add names for static and dynamic storage
engine libraries
storage/csv/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/example/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/federated/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/heap/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/ibmdb2i/CMakeLists.txt:
Better port for ibmdb2i plugin
storage/innobase/CMakeLists.txt:
Run system checks.
Add names for static and dynamic storage engine
libraries.
storage/innobase/include/page0page.ic:
Fix compile error on OpenSolaris.
storage/myisam/CMakeLists.txt:
Port CmakeLists.txt to Unix
storage/myisammrg/CMakeLists.txt:
Add names for static and dynamic storage engine
libraries
storage/mysql_storage_engine.cmake:
storage/mysql_storage_engine.cmake => cmake/plugin.cmake
support-files/CMakeLists.txt:
Configure and install some files from support-files.
support-files/Makefile.am:
Add new file
tests/CMakeLists.txt:
In general case, mysqlclient library can be dependent
on C++ runtime(if it includes yassl and is not compiled
with gcc or MSVC)
unittest/mysys/CMakeLists.txt:
Add unit tests
unittest/mysys/Makefile.am:
Add new file
unittest/mytap/CMakeLists.txt:
Add library for unit tests
unittest/mytap/Makefile.am:
Add new file
unittest/mytap/tap.c:
fix function definitions to match declarations
win/create_def_file.js:
Fix link error with intel compiler (icl
defines of special label for exception handler)
2009-11-09 12:32:48 +01:00
2007-12-12 18:19:24 +01:00
sub environment_setup {
2005-01-11 01:35:08 +01:00
handlerton cleanup:
duplicate fields removed, st_mysql_storage_engine added to support
run-time handlerton initialization (no compiler warnings), handler API
is now tied to MySQL version, handlerton->plugin mapping added
(slot-based), dummy default_hton removed, plugin-type-specific
initialization generalized, built-in plugins are now initialized too,
--default-storage-engine no longer needs a list of storage engines
in handle_options().
mysql-test-run.pl bugfixes
include/mysql/plugin.h:
added st_mysql_storage_engine
made handlerton tied to MySQL version
mysql-test/mysql-test-run.pl:
bugfixes (umask, --no-defaults)
mysql-test/r/ndb_dd_basic.result:
update error message
mysql-test/t/partition_mgm_err2.test:
fix typo
sql/ha_berkeley.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_berkeley.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_federated.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_heap.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_innodb.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisam.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_myisammrg.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/ha_ndbcluster_binlog.cc:
no 'name' in the handlerton anymore
sql/ha_partition.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/handler.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
handlerton->plugin mapping
sql/handler.h:
handlerton cleanup: remove duplicate fields
sql/log.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
sql/mysql_priv.h:
handler.h needs plugin.h
sql/mysqld.cc:
Convert --default-storage-engine to a handlerton* when
all storage engines are initialized and not in getopt
sql/set_var.cc:
no name in the handlerton anymore
sql/sql_parse.cc:
no default_hton anymore
sql/sql_partition.cc:
no name in the handlerton anymore
sql/sql_plugin.cc:
generalize plugin type-specific initialization.
initialize built-in plugins too
sql/sql_plugin.h:
generalize plugin type-specific initialization.
sql/sql_show.cc:
st_mysql_storage_engine structure
no name in the handlerton anymore
sql/sql_table.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_tablespace.cc:
no name in the handlerton anymore
no default_hton anymore
sql/sql_yacc.yy:
no default_hton anymore
issue "unknown storage engine" warning where it is discovered
storage/archive/ha_archive.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/archive/ha_archive.h:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/blackhole/ha_blackhole.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/csv/ha_tina.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
storage/example/ha_example.cc:
handlerton cleanup: remove duplicate fields, add st_mysql_storage_engine,
initialize handlerton run-time to avoid compiler warnings
2006-05-28 14:51:01 +02:00
umask ( 022 ) ;
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
$ ENV { 'USE_RUNNING_SERVER' } = using_extern ( ) ;
2006-09-27 13:42:16 +02:00
my @ ld_library_paths ;
2006-08-16 15:25:30 +02:00
2008-03-03 12:53:57 +01:00
if ( $ path_client_libdir )
2005-06-21 02:21:52 +02:00
{
2008-03-03 12:53:57 +01:00
# Use the --client-libdir passed on commandline
push ( @ ld_library_paths , "$path_client_libdir" ) ;
2006-08-16 15:25:30 +02:00
}
else
2005-06-21 02:21:52 +02:00
{
2008-03-03 12:53:57 +01:00
# Setup LD_LIBRARY_PATH so the libraries from this distro/clone
# are used in favor of the system installed ones
if ( $ source_dist )
{
push ( @ ld_library_paths , "$basedir/libmysql/.libs/" ,
"$basedir/libmysql_r/.libs/" ,
2010-01-22 14:12:17 +01:00
"$basedir/zlib/.libs/" ) ;
2011-05-13 17:27:43 +02:00
if ( $^O eq "darwin" )
{
# it is MAC OS and we have to add dynamic libraries paths
push @ ld_library_paths , grep { <$_/*.dylib> }
( <$bindir/storage/*/.libs/> , <$bindir/plugin/*/.libs/> ,
<$bindir/plugin/*/*/.libs/> , <$bindir/storage/*/*/.libs> ) ;
}
2008-03-03 12:53:57 +01:00
}
else
{
2010-01-22 14:12:17 +01:00
push ( @ ld_library_paths , "$basedir/lib" , "$basedir/lib/mysql" ) ;
2008-03-03 12:53:57 +01:00
}
2006-09-27 13:56:32 +02:00
}
2006-09-27 13:42:16 +02:00
$ ENV { 'LD_LIBRARY_PATH' } = join ( ":" , @ ld_library_paths ,
2007-02-23 12:13:55 +01:00
$ ENV { 'LD_LIBRARY_PATH' } ?
2006-10-11 14:50:19 +02:00
split ( ':' , $ ENV { 'LD_LIBRARY_PATH' } ) : ( ) ) ;
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
My::Debugger:: pre_setup ( ) ;
2006-09-27 13:42:16 +02:00
mtr_debug ( "LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}" ) ;
$ ENV { 'DYLD_LIBRARY_PATH' } = join ( ":" , @ ld_library_paths ,
2006-10-11 14:50:19 +02:00
$ ENV { 'DYLD_LIBRARY_PATH' } ?
split ( ':' , $ ENV { 'DYLD_LIBRARY_PATH' } ) : ( ) ) ;
2006-09-27 13:42:16 +02:00
mtr_debug ( "DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}" ) ;
2006-03-10 10:41:04 +01:00
2007-05-31 14:22:21 +02:00
# The environment variable used for shared libs on AIX
$ ENV { 'SHLIB_PATH' } = join ( ":" , @ ld_library_paths ,
$ ENV { 'SHLIB_PATH' } ?
split ( ':' , $ ENV { 'SHLIB_PATH' } ) : ( ) ) ;
mtr_debug ( "SHLIB_PATH: $ENV{'SHLIB_PATH'}" ) ;
# The environment variable used for shared libs on hp-ux
$ ENV { 'LIBPATH' } = join ( ":" , @ ld_library_paths ,
$ ENV { 'LIBPATH' } ?
split ( ':' , $ ENV { 'LIBPATH' } ) : ( ) ) ;
mtr_debug ( "LIBPATH: $ENV{'LIBPATH'}" ) ;
2006-03-10 10:41:04 +01:00
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
$ ENV { 'UMASK' } = "0660" ; # The octal *string*
$ ENV { 'UMASK_DIR' } = "0770" ; # The octal *string*
2007-12-12 18:19:24 +01:00
2007-05-23 14:32:40 +02:00
#
2017-11-05 19:05:02 +01:00
# MariaDB tests can produce output in various character sets
2007-05-23 14:32:40 +02:00
# (especially, ctype_xxx.test). To avoid confusing Perl
# with output which is incompatible with the current locale
# settings, we reset the current values of LC_ALL and LC_CTYPE to "C".
# For details, please see
# Bug#27636 tests fails if LC_* variables set to *_*.UTF-8
#
$ ENV { 'LC_ALL' } = "C" ;
$ ENV { 'LC_CTYPE' } = "C" ;
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
$ ENV { 'LC_COLLATE' } = "C" ;
2019-12-27 15:52:12 +01:00
2020-05-11 01:00:15 +02:00
$ ENV { 'OPENSSL_CONF' } = $ mysqld_variables { 'version-ssl-library' } gt 'OpenSSL 1.1.1'
? "$glob_mysql_test_dir/lib/openssl.cnf" : '/dev/null' ;
2019-12-27 15:52:12 +01:00
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
$ ENV { 'MYSQL_TEST_DIR' } = $ glob_mysql_test_dir ;
2009-12-22 10:35:56 +01:00
$ ENV { 'DEFAULT_MASTER_PORT' } = $ mysqld_variables { 'port' } ;
2008-04-21 18:32:32 +02:00
$ ENV { 'MYSQL_TMP_DIR' } = $ opt_tmpdir ;
2008-09-05 14:09:39 +02:00
$ ENV { 'MYSQLTEST_VARDIR' } = $ opt_vardir ;
2020-03-12 19:30:58 +01:00
$ ENV { 'MYSQLTEST_REAL_VARDIR' } = realpath $ opt_vardir ;
2012-03-05 17:44:26 +01:00
$ ENV { 'MYSQL_BINDIR' } = $ bindir ;
2009-12-22 10:35:56 +01:00
$ ENV { 'MYSQL_SHAREDIR' } = $ path_language ;
2009-12-25 16:49:21 +01:00
$ ENV { 'MYSQL_CHARSETSDIR' } = $ path_charsetsdir ;
2010-12-16 11:49:40 +01:00
if ( IS_WINDOWS )
{
$ ENV { 'SECURE_LOAD_PATH' } = $ glob_mysql_test_dir . "\\std_data" ;
}
else
{
$ ENV { 'SECURE_LOAD_PATH' } = $ glob_mysql_test_dir . "/std_data" ;
}
2006-10-03 16:42:59 +02:00
2009-10-05 15:22:23 +02:00
#
# Some stupid^H^H^H^H^H^Hignorant network providers set up "wildcard DNS"
# servers that return some given web server address for any lookup of a
# non-existent host name. This confuses test cases that want to test the
# behaviour when connecting to a non-existing host, so we need to be able
# to disable those tests when DNS is broken.
#
$ ENV { HAVE_BROKEN_DNS } = defined ( gethostbyname ( 'invalid_hostname' ) ) ;
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
# mysql clients
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2022-09-23 10:28:12 +02:00
$ ENV { 'MYSQL_CHECK' } = client_arguments ( "mariadb-check" ) ;
2007-12-12 18:19:24 +01:00
$ ENV { 'MYSQL_DUMP' } = mysqldump_arguments ( ".1" ) ;
$ ENV { 'MYSQL_DUMP_SLAVE' } = mysqldump_arguments ( ".2" ) ;
$ ENV { 'MYSQL_SLAP' } = mysqlslap_arguments ( ) ;
2022-09-23 10:28:12 +02:00
$ ENV { 'MYSQL_IMPORT' } = client_arguments ( "mariadb-import" ) ;
$ ENV { 'MYSQL_SHOW' } = client_arguments ( "mariadb-show" ) ;
2009-02-12 15:08:56 +01:00
$ ENV { 'MYSQL_BINLOG' } = mysqlbinlog_arguments ( ) ;
2022-09-23 10:28:12 +02:00
$ ENV { 'MYSQL' } = client_arguments ( "mariadb" ) ;
$ ENV { 'MYSQL_SLAVE' } = client_arguments ( "mariadb" , ".2" ) ;
$ ENV { 'MYSQL_UPGRADE' } = client_arguments ( "mariadb-upgrade" ) ;
$ ENV { 'MYSQLADMIN' } = client_arguments ( "mariadb-admin" ) ;
2007-12-12 18:19:24 +01:00
$ ENV { 'MYSQL_CLIENT_TEST' } = mysql_client_test_arguments ( ) ;
$ ENV { 'EXE_MYSQL' } = $ exe_mysql ;
2011-07-19 16:17:58 +02:00
$ ENV { 'MYSQL_PLUGIN' } = $ exe_mysql_plugin ;
2011-06-16 15:55:11 +02:00
$ ENV { 'MYSQL_EMBEDDED' } = $ exe_mysql_embedded ;
2021-05-20 18:33:07 +02:00
$ ENV { 'MARIADB_CONV' } = "$exe_mariadb_conv --character-sets-dir=$path_charsetsdir" ;
2018-12-06 15:09:17 +01:00
if ( IS_WINDOWS )
{
2022-09-23 10:28:12 +02:00
$ ENV { 'MYSQL_INSTALL_DB_EXE' } = mtr_exe_exists ( "$bindir/sql$multiconfig/mariadb-install-db" ,
"$bindir/bin/mariadb-install-db" ) ;
2018-12-06 15:09:17 +01:00
}
2005-08-29 20:28:42 +02:00
2017-05-03 21:22:59 +02:00
my $ client_config_exe =
2017-07-09 19:36:19 +02:00
mtr_exe_maybe_exists (
2021-10-21 14:21:44 +02:00
"$bindir/libmariadb/mariadb_config$multiconfig/mariadb_config" ,
2017-07-09 19:36:19 +02:00
"$bindir/bin/mariadb_config" ) ;
if ( $ client_config_exe )
{
my $ tls_info = `$client_config_exe --tlsinfo` ;
( $ ENV { CLIENT_TLS_LIBRARY } , $ ENV { CLIENT_TLS_LIBRARY_VERSION } ) =
split ( / / , $ tls_info , 2 ) ;
}
2011-09-14 15:26:53 +02:00
my $ exe_mysqld = find_mysqld ( $ basedir ) ;
$ ENV { 'MYSQLD' } = $ exe_mysqld ;
my $ extra_opts = join ( " " , @ opt_extra_mysqld_opt ) ;
$ ENV { 'MYSQLD_CMD' } = "$exe_mysqld --defaults-group-suffix=.1 " .
"--defaults-file=$path_config_file $extra_opts" ;
2005-08-29 20:28:42 +02:00
2006-10-04 12:47:32 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
# bug25714 executable may _not_ exist in
# some versions, test using it should be skipped
2006-11-13 13:39:49 +01:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
my $ exe_bug25714 =
2021-10-21 14:21:44 +02:00
mtr_exe_maybe_exists ( "$bindir/tests$multiconfig/bug25714" ) ;
2008-02-20 14:55:30 +01:00
$ ENV { 'MYSQL_BUG25714' } = native_path ( $ exe_bug25714 ) ;
2006-11-13 13:39:49 +01:00
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
# mysql_fix_privilege_tables.sql
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
my $ file_mysql_fix_privilege_tables =
2011-01-29 18:51:12 +01:00
mtr_file_exists ( "$bindir/scripts/mysql_fix_privilege_tables.sql" ,
"$bindir/share/mysql_fix_privilege_tables.sql" ,
"$bindir/share/mariadb/mysql_fix_privilege_tables.sql" ,
"$bindir/share/mysql/mysql_fix_privilege_tables.sql" ) ;
2007-04-04 15:40:40 +02:00
$ ENV { 'MYSQL_FIX_PRIVILEGE_TABLES' } = $ file_mysql_fix_privilege_tables ;
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
# my_print_defaults
2006-08-16 10:30:22 +02:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
my $ exe_my_print_defaults =
2021-10-21 14:21:44 +02:00
mtr_exe_exists ( "$bindir/extra$multiconfig/my_print_defaults" ,
2010-06-10 11:11:52 +02:00
"$path_client_bindir/my_print_defaults" ) ;
2008-02-20 14:55:30 +01:00
$ ENV { 'MYSQL_MY_PRINT_DEFAULTS' } = native_path ( $ exe_my_print_defaults ) ;
2006-08-16 10:30:22 +02:00
2008-02-28 11:49:14 +01:00
# ----------------------------------------------------
2009-02-12 15:08:56 +01:00
# myisam tools
2007-11-07 09:55:28 +01:00
# ----------------------------------------------------
2009-02-12 15:08:56 +01:00
$ ENV { 'MYISAMLOG' } = tool_arguments ( "storage/myisam" , "myisamlog" , ) ;
$ ENV { 'MYISAMCHK' } = tool_arguments ( "storage/myisam" , "myisamchk" ) ;
$ ENV { 'MYISAMPACK' } = tool_arguments ( "storage/myisam" , "myisampack" ) ;
$ ENV { 'MYISAM_FTDUMP' } = tool_arguments ( "storage/myisam" , "myisam_ftdump" ) ;
2006-10-04 12:47:32 +02:00
Fix for BUG#35441 "Cannot change PAGE_CHECKSUM table option".
A big test was written and is committed, which found 3 bugs in total:
- ALTER TABLE PAGE_CHECKSUM=0 sometimes had no effect
- ALTER TABLE ENGINE=MARIA sometimes changed page checksumming in
the table
- SHOW CREATE TABLE and 'maria_chk -dv' disagreed on the presence
of page checksumming.
They are all fixed here. Side-effect is that SHOW CREATE TABLE now
always prints a PAGE_CHECKSUM clause for Maria tables.
mysql-test/mysql-test-run.pl:
allow calling maria_chk and maria_pack in tests
mysql-test/r/maria.result:
PAGE_CHECKSUM=0 is now always printed
mysql-test/t/create.test:
PAGE_CHECKSUM= is now always present in SHOW CREATE TABLE of Maria tables
mysql-test/t/disabled.def:
better bug number
sql/sql_table.cc:
If ALTER TABLE PAGE_CHECKSUM=#, it affects the engine's data (structure
of data pages) so a full table rebuild is needed. We already did
so for ROW_FORMAT=#, following same logic. This fixes disagreements
between SHOW CREATE TABLE and 'maria_chk -dv' regarding the
presence of page checksums after certain ALTER TABLE (as seen
with the attached testcase).
storage/maria/ha_maria.cc:
In ALTER TABLE PAGE_CHECKSUM=0, ha_maria::update_create_info() started
with create_info->page_checksum=HA_CHOICE_NO and wrongly set it
to the table's original setting, which is HA_CHOICE_YES if the table
had page checksums, in which case the ALTER left page checksum
in the table.
The fix for this bug is: only if create_info->page_checksum is
undefined (no clause in the ALTER TABLE, or we are in SHOW CREATE TABLE)
we may set HA_CHOICE_YES.
The second bug in this file was that the code left HA_CHOICE_UNDEF if
the table didn't have page checksums originally, leading ALTER TABLE
ENGINE=MARIA to change the table's page checksum to the value of
maria_page_checksum.
This is fixed by setting create_info->page_checksum to HA_CHOICE_NO
if UNDEF and table does not have page checksum.
The side-effect of this last fix, because ha_maria::update_create_info()
is also called by SHOW CREATE TABLE, is that:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA;
SHOW CREATE TABLE t;
which used to not show a PAGE_CHECKSUM= clause, now shows PAGE_CHECKSUM=0.
I consider this side-effect good:
- clearer for users: it eliminates the differences between the
above and this:
SET GLOBAL maria_page_checksum=0;
CREATE TABLE t(a INT) ENGINE=MARIA PAGE_CHECKSUM=0;
SHOW CREATE TABLE t;
which already showed PAGE_CHECKSUM=0; difference which is not easy
to explain.
- if using mysqldump to copy from one server to another, it eliminates
the dependency on the value of maria_page_checksum being the same on
original server and new server.
mysql-test/r/maria-page-checksum.result:
Result. If you undo the code fixes and run the test, the new result
file will show bugs at:
error lineno 56 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 73 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 110 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 164 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 181 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 218 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 253 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 307 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 361 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 415 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 488 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 505 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 542 : expected PAGE_CHECKSUM=1, got Page checksums are not used
error lineno 577 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
error lineno 631 : expected PAGE_CHECKSUM=0, got ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
(lineno is line number in the result file)
mysql-test/t/maria-page-checksum.test:
Test for the 3 bugs
2008-03-20 16:05:23 +01:00
# ----------------------------------------------------
2010-09-12 18:40:01 +02:00
# aria tools
2008-02-28 11:49:14 +01:00
# ----------------------------------------------------
2009-02-12 15:08:56 +01:00
if ( have_maria_support ( ) )
2007-08-21 19:54:11 +02:00
{
2010-09-12 18:40:01 +02:00
$ ENV { 'MARIA_CHK' } = tool_arguments ( "storage/maria" , "aria_chk" ) ;
$ ENV { 'MARIA_PACK' } = tool_arguments ( "storage/maria" , "aria_pack" ) ;
2007-08-21 19:54:11 +02:00
}
2008-02-28 11:49:14 +01:00
2010-06-03 11:27:27 +02:00
# ----------------------------------------------------
# mysqlhotcopy
# ----------------------------------------------------
my $ mysqlhotcopy =
2010-08-25 15:55:22 +02:00
mtr_pl_maybe_exists ( "$bindir/scripts/mysqlhotcopy" ) ||
mtr_pl_maybe_exists ( "$path_client_bindir/mysqlhotcopy" ) ;
2010-08-23 10:48:27 +02:00
if ( $ mysqlhotcopy )
{
$ ENV { 'MYSQLHOTCOPY' } = $ mysqlhotcopy ;
}
2010-06-03 11:27:27 +02:00
2006-11-10 13:25:10 +01:00
# ----------------------------------------------------
2007-12-12 18:19:24 +01:00
# perror
2006-08-16 10:43:08 +02:00
# ----------------------------------------------------
2021-10-21 14:21:44 +02:00
my $ exe_perror = mtr_exe_exists ( "$bindir/extra$multiconfig/perror" ,
2007-12-12 18:19:24 +01:00
"$path_client_bindir/perror" ) ;
2008-02-20 14:55:30 +01:00
$ ENV { 'MY_PERROR' } = native_path ( $ exe_perror ) ;
2006-08-16 10:43:08 +02:00
2013-11-13 15:26:03 +01:00
# ----------------------------------------------------
# mysql_tzinfo_to_sql
# ----------------------------------------------------
2022-09-23 10:28:12 +02:00
my $ exe_mysql_tzinfo_to_sql = mtr_exe_exists ( "$basedir/sql$multiconfig/mariadb-tzinfo-to-sql" ,
"$path_client_bindir/mariadb-tzinfo-to-sql" ,
"$bindir/sql$multiconfig/mariadb-tzinfo-to-sql" ) ;
2013-11-13 15:26:03 +01:00
$ ENV { 'MYSQL_TZINFO_TO_SQL' } = native_path ( $ exe_mysql_tzinfo_to_sql ) ;
2014-10-21 12:55:35 +02:00
# ----------------------------------------------------
# replace
# ----------------------------------------------------
my $ exe_replace = mtr_exe_exists ( vs_config_dirs ( 'extra' , 'replace' ) ,
"$basedir/extra/replace" ,
2021-10-21 14:21:44 +02:00
"$bindir/extra$multiconfig/replace" ,
2014-10-21 12:55:35 +02:00
"$path_client_bindir/replace" ) ;
$ ENV { 'REPLACE' } = native_path ( $ exe_replace ) ;
2015-01-19 11:39:17 +01:00
# ----------------------------------------------------
# innochecksum
# ----------------------------------------------------
my $ exe_innochecksum =
2021-10-21 14:21:44 +02:00
mtr_exe_maybe_exists ( "$bindir/extra$multiconfig/innochecksum" ,
2015-01-19 11:39:17 +01:00
"$path_client_bindir/innochecksum" ) ;
2020-04-21 18:07:11 +02:00
$ ENV { 'INNOCHECKSUM' } = native_path ( $ exe_innochecksum ) if $ exe_innochecksum ;
# ----------------------------------------------------
# mariabackup
# ----------------------------------------------------
my $ exe_mariabackup = mtr_exe_maybe_exists (
2021-10-21 17:06:31 +02:00
"$bindir/extra/mariabackup$multiconfig/mariabackup" ,
2020-04-21 18:07:11 +02:00
"$path_client_bindir/mariabackup" ) ;
$ ENV { XTRABACKUP } = native_path ( $ exe_mariabackup ) if $ exe_mariabackup ;
my $ exe_xbstream = mtr_exe_maybe_exists (
2021-10-21 17:06:31 +02:00
"$bindir/extra/mariabackup/$multiconfig/mbstream" ,
2020-04-21 18:07:11 +02:00
"$path_client_bindir/mbstream" ) ;
$ ENV { XBSTREAM } = native_path ( $ exe_xbstream ) if $ exe_xbstream ;
$ ENV { INNOBACKUPEX } = "$exe_mariabackup --innobackupex" ;
2015-01-19 11:39:17 +01:00
2010-09-30 12:42:37 +02:00
# Add dir of this perl to aid mysqltest in finding perl
my $ perldir = dirname ( $^X ) ;
my $ pathsep = ":" ;
$ pathsep = ";" if IS_WINDOWS && ! IS_CYGWIN ;
$ ENV { 'PATH' } = "$ENV{'PATH'}" . $ pathsep . $ perldir ;
2005-01-11 01:35:08 +01:00
}
2010-10-13 13:07:28 +02:00
sub remove_vardir_subs () {
foreach my $ sdir ( glob ( "$opt_vardir/*" ) ) {
mtr_verbose ( "Removing subdir $sdir" ) ;
rmtree ( $ sdir ) ;
}
}
2005-04-13 11:47:28 +02:00
2006-11-28 13:57:07 +01:00
#
# Remove var and any directories in var/ created by previous
# tests
#
sub remove_stale_vardir () {
2006-10-05 14:37:46 +02:00
2007-12-12 18:19:24 +01:00
mtr_report ( "Removing old var directory..." ) ;
2004-12-30 16:34:01 +01:00
2006-11-28 13:57:07 +01:00
# Safety!
mtr_error ( "No, don't remove the vardir when running with --extern" )
2007-12-12 18:19:24 +01:00
if using_extern ( ) ;
2006-11-28 13:57:07 +01:00
mtr_verbose ( "opt_vardir: $opt_vardir" ) ;
2006-10-06 16:26:17 +02:00
if ( $ opt_vardir eq $ default_vardir )
2006-01-24 08:30:54 +01:00
{
#
# Running with "var" in mysql-test dir
#
2006-10-05 14:37:46 +02:00
if ( - l $ opt_vardir )
2006-01-24 08:30:54 +01:00
{
2006-10-05 14:37:46 +02:00
# var is a symlink
2006-11-28 16:22:59 +01:00
2008-01-08 10:50:07 +01:00
if ( $ opt_mem )
2006-10-05 14:37:46 +02:00
{
# Remove the directory which the link points at
2006-11-28 13:57:07 +01:00
mtr_verbose ( "Removing " . readlink ( $ opt_vardir ) ) ;
2007-12-12 18:19:24 +01:00
rmtree ( readlink ( $ opt_vardir ) ) ;
2006-11-28 15:39:23 +01:00
2006-10-18 13:24:06 +02:00
# Remove the "var" symlink
2006-11-28 13:57:07 +01:00
mtr_verbose ( "unlink($opt_vardir)" ) ;
2006-10-18 13:24:06 +02:00
unlink ( $ opt_vardir ) ;
2006-10-05 14:37:46 +02:00
}
else
{
# Some users creates a soft link in mysql-test/var to another area
2006-11-28 13:57:07 +01:00
# - allow it, but remove all files in it
2007-12-12 18:19:24 +01:00
mtr_report ( " - WARNING: Using the 'mysql-test/var' symlink" ) ;
2006-11-28 13:57:07 +01:00
2006-11-28 16:22:59 +01:00
# Make sure the directory where it points exist
2011-06-13 11:46:11 +02:00
if ( ! - d readlink ( $ opt_vardir ) )
{
mtr_report ( "The destination for symlink $opt_vardir does not exist; Removing it and creating a new var directory" ) ;
unlink ( $ opt_vardir ) ;
}
2010-10-13 13:07:28 +02:00
remove_vardir_subs ( ) ;
2006-10-05 14:37:46 +02:00
}
2006-01-24 08:30:54 +01:00
}
else
{
# Remove the entire "var" dir
2006-11-28 13:57:07 +01:00
mtr_verbose ( "Removing $opt_vardir/" ) ;
2007-12-12 18:19:24 +01:00
rmtree ( "$opt_vardir/" ) ;
2006-01-24 08:30:54 +01:00
}
2007-02-28 13:47:41 +01:00
if ( $ opt_mem )
{
# A symlink from var/ to $opt_mem will be set up
# remove the $opt_mem dir to assure the symlink
# won't point at an old directory
mtr_verbose ( "Removing $opt_mem" ) ;
2007-12-12 18:19:24 +01:00
rmtree ( $ opt_mem ) ;
2007-02-28 13:47:41 +01:00
}
2006-01-24 08:30:54 +01:00
}
else
{
#
# Running with "var" in some other place
#
2011-02-03 00:01:12 +01:00
# Don't remove the var/ dir in mysql-test dir as it may be in
# use by another mysql-test-run run with --vardir
# mtr_verbose("Removing $default_vardir");
# rmtree($default_vardir);
2006-01-24 08:30:54 +01:00
# Remove the "var" dir
2006-11-28 13:57:07 +01:00
mtr_verbose ( "Removing $opt_vardir/" ) ;
2007-12-12 18:19:24 +01:00
rmtree ( "$opt_vardir/" ) ;
2006-01-24 08:30:54 +01:00
}
2008-12-09 11:52:10 +01:00
# Remove the "tmp" dir
mtr_verbose ( "Removing $opt_tmpdir/" ) ;
2009-01-23 13:22:05 +01:00
rmtree ( "$opt_tmpdir/" ) ;
2006-11-28 13:57:07 +01:00
}
2010-06-10 11:11:52 +02:00
sub set_plugin_var ($) {
local $ _ = $ _ [ 0 ] ;
s/\.\w+$// ;
$ ENV { "\U${_}_SO" } = $ _ [ 0 ] ;
}
2007-12-12 18:19:24 +01:00
2006-11-28 13:57:07 +01:00
#
# Create var and the directories needed in var
#
sub setup_vardir () {
2008-04-24 13:02:53 +02:00
mtr_report ( "Creating var directory '$opt_vardir'..." ) ;
2004-12-30 16:34:01 +01:00
2006-11-28 15:51:52 +01:00
if ( $ opt_vardir eq $ default_vardir )
2006-10-05 14:37:46 +02:00
{
2006-11-28 15:51:52 +01:00
#
# Running with "var" in mysql-test dir
#
if ( - l $ opt_vardir )
{
# it's a symlink
2006-11-28 13:57:07 +01:00
2006-11-28 15:51:52 +01:00
# Make sure the directory where it points exist
2011-06-13 11:46:11 +02:00
if ( ! - d readlink ( $ opt_vardir ) )
{
mtr_report ( "The destination for symlink $opt_vardir does not exist; Removing it and creating a new var directory" ) ;
unlink ( $ opt_vardir ) ;
}
2006-11-28 15:51:52 +01:00
}
elsif ( $ opt_mem )
{
# Runinng with "var" as a link to some "memory" location, normally tmpfs
mtr_verbose ( "Creating $opt_mem" ) ;
mkpath ( $ opt_mem ) ;
2006-11-28 13:57:07 +01:00
2007-12-12 18:19:24 +01:00
mtr_report ( " - symlinking 'var' to '$opt_mem'" ) ;
2006-11-28 15:51:52 +01:00
symlink ( $ opt_mem , $ opt_vardir ) ;
}
2006-10-05 14:37:46 +02:00
}
2006-11-28 23:06:06 +01:00
if ( ! - d $ opt_vardir )
{
mtr_verbose ( "Creating $opt_vardir" ) ;
mkpath ( $ opt_vardir ) ;
}
2004-12-30 16:34:01 +01:00
2006-11-28 23:06:06 +01:00
# Ensure a proper error message if vardir couldn't be created
unless ( - d $ opt_vardir and - w $ opt_vardir )
2006-10-05 14:37:46 +02:00
{
2006-11-28 23:06:06 +01:00
mtr_error ( "Writable 'var' directory is needed, use the " .
"'--vardir=<path>' option" ) ;
2006-10-05 14:37:46 +02:00
}
2005-05-15 17:22:54 +02:00
mkpath ( "$opt_vardir/log" ) ;
mkpath ( "$opt_vardir/run" ) ;
2008-04-21 17:39:13 +02:00
2008-04-23 12:59:37 +02:00
# Create var/tmp and tmp - they might be different
mkpath ( "$opt_vardir/tmp" ) ;
mkpath ( $ opt_tmpdir ) if ( $ opt_tmpdir ne "$opt_vardir/tmp" ) ;
2004-12-30 16:34:01 +01:00
2008-04-21 23:12:28 +02:00
# On some operating systems, there is a limit to the length of a
# UNIX domain socket's path far below PATH_MAX.
# Don't allow that to happen
if ( check_socket_path_length ( "$opt_tmpdir/testsocket.sock" ) ) {
mtr_error ( "Socket path '$opt_tmpdir' too long, it would be " ,
"truncated and thus not possible to use for connection to " ,
2017-11-05 19:05:02 +01:00
"MariaDB Server. Set a shorter with --tmpdir=<path> option" ) ;
2008-04-21 23:12:28 +02:00
}
2007-12-12 18:19:24 +01:00
# copy all files from std_data into var/std_data
2008-12-18 13:58:55 +01:00
# and make them world readable
copytree ( "$glob_mysql_test_dir/std_data" , "$opt_vardir/std_data" , "0022" ) ;
2006-11-20 21:42:06 +01:00
2019-07-01 23:45:01 +02:00
unless ( $ plugindir )
2010-06-10 11:11:52 +02:00
{
2020-04-08 14:25:04 +02:00
# create a plugin dir and copy or symlink plugins into it
2019-07-01 23:45:01 +02:00
if ( $ source_dist )
2010-06-10 11:11:52 +02:00
{
2019-07-01 23:45:01 +02:00
$ plugindir = "$opt_vardir/plugins" ;
2020-04-08 14:25:04 +02:00
# Source builds collect both client plugins and server plugins in the
# same directory.
$ client_plugindir = $ plugindir ;
2019-07-01 23:45:01 +02:00
mkpath ( $ plugindir ) ;
if ( IS_WINDOWS )
2010-06-10 11:11:52 +02:00
{
2019-07-01 23:45:01 +02:00
if ( ! $ opt_embedded_server )
2015-07-24 23:58:36 +02:00
{
2021-10-21 17:06:31 +02:00
for ( <$bindir/storage/*$multiconfig/*.dll> ,
<$bindir/plugin/*$multiconfig/*.dll> ,
<$bindir/libmariadb$multiconfig/*.dll> ,
<$bindir/sql$multiconfig/*.dll> )
2019-07-01 23:45:01 +02:00
{
my $ pname = basename ( $ _ ) ;
copy rel2abs ( $ _ ) , "$plugindir/$pname" ;
set_plugin_var ( $ pname ) ;
}
2015-07-24 23:58:36 +02:00
}
2010-06-10 11:11:52 +02:00
}
2019-07-01 23:45:01 +02:00
else
2018-07-03 13:49:34 +02:00
{
2019-07-01 23:45:01 +02:00
my $ opt_use_copy = 1 ;
if ( symlink "$opt_vardir/run" , "$plugindir/symlink_test" )
2018-07-03 13:49:34 +02:00
{
2019-07-01 23:45:01 +02:00
$ opt_use_copy = 0 ;
unlink "$plugindir/symlink_test" ;
2018-07-03 13:49:34 +02:00
}
2019-07-01 23:45:01 +02:00
2021-10-21 17:06:31 +02:00
for ( <$bindir/storage/*$multiconfig/*.so> ,
<$bindir/plugin/*$multiconfig/*.so> ,
2019-07-01 23:45:01 +02:00
<$bindir/libmariadb/plugins/*/*.so> ,
2021-10-21 17:06:31 +02:00
<$bindir/libmariadb/$multiconfig/*.so> ,
<$bindir/sql$multiconfig/*.so> )
2018-07-03 13:49:34 +02:00
{
2019-07-01 23:45:01 +02:00
my $ pname = basename ( $ _ ) ;
if ( $ opt_use_copy )
{
copy rel2abs ( $ _ ) , "$plugindir/$pname" ;
}
else
{
symlink rel2abs ( $ _ ) , "$plugindir/$pname" ;
}
set_plugin_var ( $ pname ) ;
2018-07-03 13:49:34 +02:00
}
}
2019-07-01 23:45:01 +02:00
}
else
{
# hm, what paths work for debs and for rpms ?
for ( <$bindir/lib64/mysql/plugin/*.so> ,
<$bindir/lib/mysql/plugin/*.so> ,
<$bindir/lib64/mariadb/plugin/*.so> ,
<$bindir/lib/mariadb/plugin/*.so> ,
<$bindir/lib/plugin/*.so> , # bintar
<$bindir/lib/plugin/*.dll> )
2010-06-10 11:11:52 +02:00
{
2020-04-08 14:25:04 +02:00
my $ pname = basename ( $ _ ) ;
2010-06-10 11:11:52 +02:00
set_plugin_var ( $ pname ) ;
2020-04-08 14:25:04 +02:00
$ plugindir = dirname ( $ _ ) unless $ plugindir ;
2010-06-10 11:11:52 +02:00
}
2020-04-08 14:25:04 +02:00
# Note: client plugins can be installed separately from server plugins,
# as is the case for Debian packaging.
for ( <$bindir/lib/*/libmariadb3/plugin> )
{
$ client_plugindir = $ _ if <$_/*.so> ;
}
$ client_plugindir = $ plugindir unless $ client_plugindir ;
2010-06-10 11:11:52 +02:00
}
}
2006-11-20 21:42:06 +01:00
# Remove old log files
2006-11-23 15:41:21 +01:00
foreach my $ name ( glob ( "r/*.progress r/*.log r/*.warnings" ) )
2006-11-20 21:42:06 +01:00
{
unlink ( $ name ) ;
}
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
#
# Check if running as root
# i.e a file can be read regardless what mode we set it to
#
2006-04-24 10:21:09 +02:00
sub check_running_as_root () {
2006-05-04 10:28:49 +02:00
my $ test_file = "$opt_vardir/test_running_as_root.txt" ;
2006-04-24 10:21:09 +02:00
mtr_tofile ( $ test_file , "MySQL" ) ;
chmod ( oct ( "0000" ) , $ test_file ) ;
my $ result = "" ;
if ( open ( FILE , "<" , $ test_file ) )
{
$ result = join ( '' , <FILE> ) ;
close FILE ;
}
2007-05-23 12:13:49 +02:00
# Some filesystems( for example CIFS) allows reading a file
# although mode was set to 0000, but in that case a stat on
# the file will not return 0000
my $ file_mode = ( stat ( $ test_file ) ) [ 2 ] & 07777 ;
2006-04-24 10:21:09 +02:00
2007-05-23 12:13:49 +02:00
mtr_verbose ( "result: $result, file_mode: $file_mode" ) ;
if ( $ result eq "MySQL" && $ file_mode == 0 )
2006-04-24 10:21:09 +02:00
{
mtr_warning ( "running this script as _root_ will cause some " .
"tests to be skipped" ) ;
2009-09-25 16:38:02 +02:00
$ ENV { 'MYSQL_TEST_ROOT' } = "1" ;
2006-04-24 10:21:09 +02:00
}
2007-05-23 12:13:49 +02:00
chmod ( oct ( "0755" ) , $ test_file ) ;
unlink ( $ test_file ) ;
2006-04-24 10:21:09 +02:00
}
2012-02-23 07:50:11 +01:00
sub check_ssl_support {
2007-12-12 18:19:24 +01:00
if ( $ opt_skip_ssl )
2005-10-04 15:43:55 +02:00
{
2007-12-12 18:19:24 +01:00
mtr_report ( " - skipping SSL" ) ;
2005-10-04 15:43:55 +02:00
$ opt_ssl_supported = 0 ;
$ opt_ssl = 0 ;
return ;
}
2012-02-23 07:50:11 +01:00
if ( ! $ mysqld_variables { 'ssl' } )
2005-10-04 15:43:55 +02:00
{
if ( $ opt_ssl )
{
mtr_error ( "Couldn't find support for SSL" ) ;
return ;
}
2007-12-12 18:19:24 +01:00
mtr_report ( " - skipping SSL, mysqld not compiled with SSL" ) ;
2005-10-04 15:43:55 +02:00
$ opt_ssl_supported = 0 ;
$ opt_ssl = 0 ;
return ;
}
2007-12-12 18:19:24 +01:00
mtr_report ( " - SSL connections supported" ) ;
2005-10-04 15:43:55 +02:00
$ opt_ssl_supported = 1 ;
}
2012-02-23 07:50:11 +01:00
sub check_debug_support {
if ( defined $ mysqld_variables { 'debug-dbug' } )
2006-06-11 23:13:32 +02:00
{
2012-02-23 07:50:11 +01:00
mtr_report ( " - binaries are debug compiled" ) ;
}
elsif ( $ opt_debug_server )
{
mtr_error ( "Can't use --debug[-server], binary does not support it" ) ;
2006-06-11 23:13:32 +02:00
}
}
2007-12-12 18:19:24 +01:00
2006-11-02 21:05:20 +01:00
#
2021-10-21 17:06:31 +02:00
# Helper function to find the correct value for the multiconfig
2010-06-10 11:11:52 +02:00
# if it was not set explicitly.
2011-11-23 18:32:14 +01:00
#
2010-06-10 11:11:52 +02:00
# the configuration with the most recent build dir in sql/ is selected.
2006-11-02 21:05:20 +01:00
#
2010-06-10 11:11:52 +02:00
# note: looking for all BuildLog.htm files everywhere in the tree with the
# help of File::Find would be possibly more precise, but it is also
# many times slower. Thus we are only looking at the server, client
# executables, and plugins - that is, something that can affect the test suite
2006-11-02 21:05:20 +01:00
#
2010-06-10 11:11:52 +02:00
sub fix_vs_config_dir () {
2021-10-21 14:21:44 +02:00
return $ multiconfig = "/$multiconfig" if $ multiconfig ;
2006-11-02 21:05:20 +01:00
2010-06-10 11:11:52 +02:00
my $ modified = 1e30 ;
2021-10-21 14:21:44 +02:00
$ multiconfig = "" ;
2007-12-12 18:19:24 +01:00
2010-12-02 15:56:25 +01:00
2021-10-21 14:21:44 +02:00
for ( <$bindir/sql/*/mysqld.exe> ,
<$bindir/sql/*/mysqld>
) { #/
2010-12-02 15:56:25 +01:00
if ( - M $ _ < $ modified )
{
$ modified = - M _ ;
2021-10-21 14:21:44 +02:00
$ multiconfig = basename ( dirname ( $ _ ) ) ;
2010-06-10 11:11:52 +02:00
}
2006-11-02 21:05:20 +01:00
}
2021-10-21 14:21:44 +02:00
mtr_report ( "VS config: $multiconfig" ) ;
$ multiconfig = "/$multiconfig" if $ multiconfig ;
2006-11-02 21:05:20 +01:00
}
2004-12-30 16:34:01 +01:00
2006-11-02 21:05:20 +01:00
#
# Helper function to handle configuration-based subdirectories which Visual
2021-10-21 17:06:31 +02:00
# Studio uses for storing binaries. If multiconfig is set, this returns
2006-11-02 21:05:20 +01:00
# a path based on that setting; if not, it returns paths for the default
# /release/ and /debug/ subdirectories.
#
# $exe can be undefined, if the directory itself will be used
#
sub vs_config_dirs ($$) {
my ( $ path_part , $ exe ) = @ _ ;
$ exe = "" if not defined $ exe ;
2007-12-12 18:19:24 +01:00
# Don't look in these dirs when not on windows
2008-02-20 14:55:30 +01:00
return ( ) unless IS_WINDOWS ;
2007-12-12 18:19:24 +01:00
2021-10-21 14:21:44 +02:00
if ( $ multiconfig )
2006-11-02 21:05:20 +01:00
{
2021-10-21 14:21:44 +02:00
return ( "$basedir/$path_part/$multiconfig/$exe" ) ;
2006-11-02 21:05:20 +01:00
}
2007-12-12 18:19:24 +01:00
return ( "$basedir/$path_part/release/$exe" ,
"$basedir/$path_part/relwithdebinfo/$exe" ,
"$basedir/$path_part/debug/$exe" ) ;
2006-11-02 21:05:20 +01:00
}
2010-08-17 09:14:46 +02:00
sub mysql_server_start ($) {
my ( $ mysqld , $ tinfo ) = @ _ ;
if ( $ mysqld - > { proc } )
{
# Already started
# Write start of testcase to log file
2017-04-05 13:17:43 +02:00
mark_log ( $ mysqld - > value ( 'log-error' ) , $ tinfo ) ;
2010-08-17 09:14:46 +02:00
return ;
}
my $ datadir = $ mysqld - > value ( 'datadir' ) ;
if ( not $ opt_start_dirty )
{
my @ options = ( 'log-bin' , 'relay-log' ) ;
foreach my $ option_name ( @ options ) {
next unless $ mysqld - > option ( $ option_name ) ;
my $ file_name = $ mysqld - > value ( $ option_name ) ;
next unless
defined $ file_name and
- e $ file_name ;
mtr_debug ( " -removing '$file_name'" ) ;
unlink ( $ file_name ) or die ( "unable to remove file '$file_name'" ) ;
}
if ( - d $ datadir ) {
mtr_verbose ( " - removing '$datadir'" ) ;
rmtree ( $ datadir ) ;
}
}
my $ mysqld_basedir = $ mysqld - > value ( 'basedir' ) ;
2017-06-02 00:46:25 +02:00
my $ extra_opts = get_extra_opts ( $ mysqld , $ tinfo ) ;
2010-08-17 09:14:46 +02:00
if ( $ basedir eq $ mysqld_basedir )
{
if ( ! $ opt_start_dirty ) # If dirty, keep possibly grown system db
{
2017-06-02 00:46:25 +02:00
# Some InnoDB options are incompatible with the default bootstrap.
# If they are used, re-bootstrap
2017-12-14 13:39:12 +01:00
my @ rebootstrap_opts ;
@ rebootstrap_opts = grep { /$rebootstrap_re/o } @$ extra_opts if $ extra_opts ;
if ( @ rebootstrap_opts )
2017-06-02 00:46:25 +02:00
{
2017-12-14 13:39:12 +01:00
mtr_verbose ( "Re-bootstrap with @rebootstrap_opts" ) ;
mysql_install_db ( $ mysqld , undef , \ @ rebootstrap_opts ) ;
2017-06-02 00:46:25 +02:00
}
else {
# Copy datadir from installed system db
my $ path = ( $ opt_parallel == 1 ) ? "$opt_vardir" : "$opt_vardir/.." ;
my $ install_db = "$path/install.db" ;
copytree ( $ install_db , $ datadir ) if - d $ install_db ;
mtr_error ( "Failed to copy system db to '$datadir'" ) unless - d $ datadir ;
}
2010-08-17 09:14:46 +02:00
}
}
else
{
mysql_install_db ( $ mysqld ) ; # For versional testing
mtr_error ( "Failed to install system db to '$datadir'" )
unless - d $ datadir ;
}
# Create the servers tmpdir
my $ tmpdir = $ mysqld - > value ( 'tmpdir' ) ;
mkpath ( $ tmpdir ) unless - d $ tmpdir ;
# Write start of testcase to log file
2017-04-05 13:17:43 +02:00
mark_log ( $ mysqld - > value ( 'log-error' ) , $ tinfo ) ;
2010-08-17 09:14:46 +02:00
# Run <tname>-master.sh
if ( $ mysqld - > option ( '#!run-master-sh' ) and
2012-02-06 23:16:21 +01:00
defined $ tinfo - > { master_sh } and
run_system ( '/bin/sh ' . $ tinfo - > { master_sh } ) )
2010-08-17 09:14:46 +02:00
{
$ tinfo - > { 'comment' } = "Failed to execute '$tinfo->{master_sh}'" ;
return 1 ;
}
# Run <tname>-slave.sh
if ( $ mysqld - > option ( '#!run-slave-sh' ) and
2012-02-06 23:16:21 +01:00
defined $ tinfo - > { slave_sh } and
run_system ( '/bin/sh ' . $ tinfo - > { slave_sh } ) )
2010-08-17 09:14:46 +02:00
{
$ tinfo - > { 'comment' } = "Failed to execute '$tinfo->{slave_sh}'" ;
return 1 ;
}
if ( ! $ opt_embedded_server )
{
2021-07-05 22:02:23 +02:00
mysqld_start ( $ mysqld , $ extra_opts ) or
mtr_error ( "Failed to start mysqld " . $ mysqld - > name ( ) . " with command "
. $ ENV { MYSQLD_LAST_CMD } ) ;
2010-08-17 09:14:46 +02:00
# Save this test case information, so next can examine it
$ mysqld - > { 'started_tinfo' } = $ tinfo ;
}
2019-01-23 12:30:00 +01:00
# If wsrep is on, we need to wait until the first
# server starts and bootstraps the cluster before
# starting other servers. The bootsrap server in the
# configuration should always be the first which has
# wsrep_on=ON
if ( wsrep_on ( $ mysqld ) && wsrep_is_bootstrap_server ( $ mysqld ) )
{
mtr_verbose ( "Waiting for wsrep bootstrap server to start" ) ;
if ( $ mysqld - > { WAIT } - > ( $ mysqld ) )
{
return 1 ;
}
}
2010-08-17 09:14:46 +02:00
}
sub mysql_server_wait {
2019-01-23 12:30:00 +01:00
my ( $ mysqld , $ tinfo ) = @ _ ;
2021-07-05 21:46:00 +02:00
my $ expect_file = "$opt_vardir/tmp/" . $ mysqld - > name ( ) . ".expect" ;
2010-08-17 09:14:46 +02:00
2021-07-05 21:46:00 +02:00
if ( ! sleep_until_file_created ( $ mysqld - > value ( 'pid-file' ) , $ expect_file ,
$ opt_start_timeout , $ mysqld - > { 'proc' } ,
2019-01-23 12:30:00 +01:00
$ warn_seconds ) )
{
$ tinfo - > { comment } = "Failed to start " . $ mysqld - > name ( ) . "\n" ;
return 1 ;
}
if ( wsrep_on ( $ mysqld ) )
{
mtr_verbose ( "Waiting for wsrep server " . $ mysqld - > name ( ) . " to be ready" ) ;
if ( ! wait_wsrep_ready ( $ tinfo , $ mysqld ) )
{
return 1 ;
}
}
return 0 ;
2010-08-17 09:14:46 +02:00
}
2007-12-12 18:19:24 +01:00
sub create_config_file_for_extern {
my % opts =
(
socket = > '/tmp/mysqld.sock' ,
port = > 3306 ,
2008-09-05 18:28:20 +02:00
user = > $ opt_user ,
2007-12-12 18:19:24 +01:00
password = > '' ,
@ _
) ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
mtr_report ( "Creating my.cnf file for extern server..." ) ;
my $ F = IO::File - > new ( $ path_config_file , "w" )
or mtr_error ( "Can't write to $path_config_file: $!" ) ;
print $ F "[client]\n" ;
while ( my ( $ option , $ value ) = each ( % opts ) ) {
print $ F "$option= $value\n" ;
mtr_report ( " $option= $value" ) ;
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
print $ F << EOF
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
# binlog reads from [client] and [mysqlbinlog]
[ mysqlbinlog ]
character - sets - dir = $ path_charsetsdir
2009-11-19 10:10:21 +01:00
local - load = $ opt_tmpdir
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
EOF
;
2005-08-18 00:16:44 +02:00
2007-12-12 18:19:24 +01:00
$ F = undef ; # Close file
}
Behaviour change of mysql-test-run.pl:
by default we never run disabled tests (even if they're
explicitely listed on the command-line). We add an option --enable-disabled
which will run tests even though they are disabled, and will print, for each
such test, the comment explaining why it was disabled.
The reason for the change is when you want to run "all tests which are about
NDB" for example: mysql-test-run.pl t/*ndb*.test used to run some disabled
NDB tests, causing failures, causing investigations.
Code amended and approved by Kent.
mysql-test/lib/mtr_cases.pl:
always detect if a test is listed as disabled, and read the comment why is is.
If it is listed, don't run the test, except if
--enable-disabled was given, then mark the test as to-run-even-
though-it-is-listed-as-disabled.
mysql-test/lib/mtr_report.pl:
Report tests which will run though they are listed as disabled
(does something only if --enable-disabled).
mysql-test/mysql-test-run.pl:
New behaviour: by default we never run disabled tests (even if they're
explicitely listed on the command-line). We add an option --enable-disabled
which will run tests even though they are disabled, and will print, for each
such test, the comment explaining why it was disabled.
2006-07-06 17:40:36 +02:00
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
#
# Kill processes left from previous runs, normally
# there should be none so make sure to warn
# if there is one
#
sub kill_leftovers ($) {
my $ rundir = shift ;
return unless ( - d $ rundir ) ;
mtr_report ( "Checking leftover processes..." ) ;
# Scan the "run" directory for process id's to kill
opendir ( RUNDIR , $ rundir )
or mtr_error ( "kill_leftovers, can't open dir \"$rundir\": $!" ) ;
while ( my $ elem = readdir ( RUNDIR ) )
2004-12-30 16:34:01 +01:00
{
2007-12-12 18:19:24 +01:00
# Only read pid from files that end with .pid
if ( $ elem =~ /.*[.]pid$/ )
2006-08-23 15:35:24 +02:00
{
2007-12-12 18:19:24 +01:00
my $ pidfile = "$rundir/$elem" ;
next unless - f $ pidfile ;
my $ pid = mtr_fromfile ( $ pidfile ) ;
unlink ( $ pidfile ) ;
unless ( $ pid =~ /^(\d+)/ ) {
# The pid was not a valid number
mtr_warning ( "Got invalid pid '$pid' from '$elem'" ) ;
next ;
}
mtr_report ( " - found old pid $pid in '$elem', killing it..." ) ;
2004-12-30 16:34:01 +01:00
2009-01-21 10:34:01 +01:00
my $ ret = kill ( "KILL" , $ pid ) ;
2007-12-12 18:19:24 +01:00
if ( $ ret == 0 ) {
mtr_report ( " process did not exist!" ) ;
next ;
}
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
my $ check_counter = 100 ;
while ( $ ret > 0 and $ check_counter - - ) {
mtr_milli_sleep ( 100 ) ;
$ ret = kill ( 0 , $ pid ) ;
}
mtr_report ( $ check_counter ? " ok!" : " failed!" ) ;
}
else
{
mtr_warning ( "Found non pid file '$elem' in '$rundir'" )
if - f "$rundir/$elem" ;
}
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
closedir ( RUNDIR ) ;
}
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
#
# Check that all the ports that are going to
# be used are free
#
2009-03-04 11:34:47 +01:00
sub check_ports_free ($)
2007-12-12 18:19:24 +01:00
{
2009-03-04 11:34:47 +01:00
my $ bthread = shift ;
2015-03-31 15:43:38 +02:00
my $ portbase = $ bthread * $ opt_port_group_size + 10000 ;
for ( $ portbase .. $ portbase + ( $ opt_port_group_size - 1 ) ) {
2009-03-04 11:34:47 +01:00
if ( mtr_ping_port ( $ _ ) ) {
mtr_report ( " - 'localhost:$_' was not free" ) ;
return 0 ; # One port was not free
2007-12-12 18:19:24 +01:00
}
2004-12-30 16:34:01 +01:00
}
2009-03-04 11:34:47 +01:00
return 1 ; # All ports free
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
sub initialize_servers {
2006-10-06 01:22:33 +02:00
2007-12-12 18:19:24 +01:00
if ( using_extern ( ) )
2006-11-28 13:57:07 +01:00
{
# Running against an already started server, if the specified
# vardir does not already exist it should be created
if ( ! - d $ opt_vardir )
{
setup_vardir ( ) ;
}
else
{
2007-03-28 10:08:26 +02:00
mtr_verbose ( "No need to create '$opt_vardir' it already exists" ) ;
2006-11-28 13:57:07 +01:00
}
}
else
2006-04-21 18:48:49 +02:00
{
2007-12-12 18:19:24 +01:00
# Kill leftovers from previous run
# using any pidfiles found in var/run
kill_leftovers ( "$opt_vardir/run" ) ;
2006-10-12 11:29:13 +02:00
if ( ! $ opt_start_dirty )
2006-04-21 18:48:49 +02:00
{
2006-11-28 13:57:07 +01:00
remove_stale_vardir ( ) ;
setup_vardir ( ) ;
2006-04-21 18:48:49 +02:00
}
2006-11-01 18:41:09 +01:00
}
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
#
2008-04-08 16:51:26 +02:00
# Remove all newline characters expect after semicolon
2007-12-12 18:19:24 +01:00
#
2008-04-08 16:51:26 +02:00
sub sql_to_bootstrap {
my ( $ sql ) = @ _ ;
2023-08-07 21:33:58 +02:00
my @ lines = split ( /\R/ , $ sql ) ;
2008-04-08 16:51:26 +02:00
my $ result = "\n" ;
my $ delimiter = ';' ;
foreach my $ line ( @ lines ) {
# Change current delimiter if line starts with "delimiter"
if ( $ line =~ /^delimiter (.*)/ ) {
my $ new = $ 1 ;
# Remove old delimiter from end of new
$ new =~ s/\Q$delimiter\E$// ;
$ delimiter = $ new ;
mtr_debug ( "changed delimiter to $delimiter" ) ;
# No need to add the delimiter to result
next ;
}
2006-08-31 20:58:00 +02:00
2008-04-08 16:51:26 +02:00
# Add newline if line ends with $delimiter
# and convert the current delimiter to semicolon
if ( $ line =~ /\Q$delimiter\E$/ ) {
$ line =~ s/\Q$delimiter\E$/;/ ;
$ result . = "$line\n" ;
mtr_debug ( "Added default delimiter" ) ;
next ;
}
2006-08-31 20:58:00 +02:00
2008-04-08 16:51:26 +02:00
# Remove comments starting with --
if ( $ line =~ /^\s*--/ ) {
mtr_debug ( "Discarded $line" ) ;
next ;
}
2008-04-24 14:14:11 +02:00
# Replace @HOSTNAME with localhost
$ line =~ s/\'\@HOSTNAME\@\'/localhost/ ;
2008-04-08 16:51:26 +02:00
# Default, just add the line without newline
# but with a space as separator
$ result . = "$line " ;
}
return $ result ;
2006-08-31 20:58:00 +02:00
}
2008-09-20 15:51:31 +02:00
sub default_mysqld {
# Generate new config file from template
2012-03-05 17:44:26 +01:00
environment_setup ( ) ;
2008-09-20 15:51:31 +02:00
my $ config = My::ConfigFactory - > new_config
( {
basedir = > $ basedir ,
2010-06-15 11:16:38 +02:00
testdir = > $ glob_mysql_test_dir ,
2008-09-20 15:51:31 +02:00
template_path = > "include/default_my.cnf" ,
vardir = > $ opt_vardir ,
tmpdir = > $ opt_tmpdir ,
baseport = > 0 ,
user = > $ opt_user ,
password = > '' ,
}
) ;
my $ mysqld = $ config - > group ( 'mysqld.1' )
or mtr_error ( "Couldn't find mysqld.1 in default config" ) ;
return $ mysqld ;
}
2007-12-12 18:19:24 +01:00
sub mysql_install_db {
2017-06-02 00:46:25 +02:00
my ( $ mysqld , $ datadir , $ extra_opts ) = @ _ ;
2008-09-20 15:51:31 +02:00
my $ install_datadir = $ datadir || $ mysqld - > value ( 'datadir' ) ;
my $ install_basedir = $ mysqld - > value ( 'basedir' ) ;
2009-10-15 14:23:43 +02:00
my $ install_lang = $ mysqld - > value ( 'lc-messages-dir' ) ;
2008-09-20 15:51:31 +02:00
my $ install_chsdir = $ mysqld - > value ( 'character-sets-dir' ) ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
mtr_report ( "Installing system database..." ) ;
2005-02-07 20:32:56 +01:00
2007-02-26 11:49:24 +01:00
my $ args ;
2004-12-30 16:34:01 +01:00
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--no-defaults" ) ;
2017-05-04 17:18:45 +02:00
mtr_add_arg ( $ args , "--disable-getopt-prefix-matching" ) ;
2004-12-30 16:34:01 +01:00
mtr_add_arg ( $ args , "--bootstrap" ) ;
2008-09-20 15:51:31 +02:00
mtr_add_arg ( $ args , "--basedir=%s" , $ install_basedir ) ;
mtr_add_arg ( $ args , "--datadir=%s" , $ install_datadir ) ;
2017-08-24 22:15:55 +02:00
mtr_add_arg ( $ args , "--plugin-dir=%s" , $ plugindir ) ;
2010-11-25 18:17:28 +01:00
mtr_add_arg ( $ args , "--default-storage-engine=myisam" ) ;
2017-08-24 22:15:55 +02:00
mtr_add_arg ( $ args , "--loose-skip-plugin-$_" ) for @ optional_plugins ;
2012-08-22 23:32:25 +02:00
# starting from 10.0 bootstrap scripts require InnoDB
mtr_add_arg ( $ args , "--loose-innodb" ) ;
2019-10-28 16:11:10 +01:00
mtr_add_arg ( $ args , "--loose-innodb-log-file-size=10M" ) ;
2008-02-06 17:55:04 +01:00
mtr_add_arg ( $ args , "--disable-sync-frm" ) ;
2008-02-28 10:52:04 +01:00
mtr_add_arg ( $ args , "--tmpdir=%s" , "$opt_vardir/tmp/" ) ;
2006-10-24 21:02:04 +02:00
mtr_add_arg ( $ args , "--core-file" ) ;
2017-08-24 22:15:55 +02:00
mtr_add_arg ( $ args , "--console" ) ;
2020-11-23 21:33:03 +01:00
mtr_add_arg ( $ args , "--character-set-server=latin1" ) ;
2024-01-26 15:07:41 +01:00
mtr_add_arg ( $ args , "--loose-disable-performance-schema" ) ;
2004-12-30 16:34:01 +01:00
2006-09-19 18:39:04 +02:00
if ( $ opt_debug )
{
2011-12-15 22:07:58 +01:00
mtr_add_arg ( $ args , "--debug-dbug=$debug_d:t:i:A,%s/log/bootstrap.trace" ,
2007-12-12 18:19:24 +01:00
$ path_vardir_trace ) ;
2006-09-19 18:39:04 +02:00
}
2009-10-15 14:23:43 +02:00
mtr_add_arg ( $ args , "--lc-messages-dir=%s" , $ install_lang ) ;
2008-09-20 15:51:31 +02:00
mtr_add_arg ( $ args , "--character-sets-dir=%s" , $ install_chsdir ) ;
2004-12-30 16:34:01 +01:00
2010-07-28 13:28:21 +02:00
# InnoDB arguments that affect file location and sizes may
# need to be given to the bootstrap process as well as the
# server process.
foreach my $ extra_opt ( @ opt_extra_mysqld_opt ) {
if ( $ extra_opt =~ /--innodb/ ) {
mtr_add_arg ( $ args , $ extra_opt ) ;
}
}
2007-01-10 03:22:01 +01:00
# If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g.,
# configure --disable-grant-options), mysqld will not recognize the
# --bootstrap or --skip-grant-tables options. The user can set
# MYSQLD_BOOTSTRAP to the full path to a mysqld which does accept
# --bootstrap, to accommodate this.
2008-09-20 15:51:31 +02:00
my $ exe_mysqld_bootstrap =
$ ENV { 'MYSQLD_BOOTSTRAP' } || find_mysqld ( $ install_basedir ) ;
2007-01-10 03:22:01 +01:00
2007-02-20 12:48:15 +01:00
# ----------------------------------------------------------------------
# export MYSQLD_BOOTSTRAP_CMD variable containing <path>/mysqld <args>
# ----------------------------------------------------------------------
2020-04-23 03:49:24 +02:00
$ ENV { 'MYSQLD_BOOTSTRAP_CMD' } = "$exe_mysqld_bootstrap " . join ( " " , @$ args )
unless defined $ ENV { 'MYSQLD_BOOTSTRAP_CMD' } ;
2007-02-20 12:48:15 +01:00
2017-08-24 22:15:55 +02:00
# Extra options can come not only from the command line, but also
# from option files or combinations. We want them on a command line
# that is executed now, because otherwise the datadir might be
# incompatible with the test settings, but not on the general
# $MYSQLD_BOOTSTRAP_CMD line
foreach my $ extra_opt ( @$ extra_opts ) {
mtr_add_arg ( $ args , $ extra_opt ) ;
}
2008-04-24 13:02:53 +02:00
2007-02-26 11:49:24 +01:00
# ----------------------------------------------------------------------
# Create the bootstrap.sql file
# ----------------------------------------------------------------------
2017-08-24 22:15:55 +02:00
my $ bootstrap_sql_file = "$opt_vardir/log/bootstrap.sql" ;
2019-07-29 13:12:19 +02:00
$ ENV { 'MYSQL_BOOTSTRAP_SQL_FILE' } = $ bootstrap_sql_file ;
2007-02-26 11:49:24 +01:00
2017-08-24 22:15:55 +02:00
if ( ! - e $ bootstrap_sql_file )
2008-04-24 14:14:11 +02:00
{
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
My::Debugger:: setup_boot_args ( \ $ args , \ $ exe_mysqld_bootstrap , $ bootstrap_sql_file ) ;
2007-02-26 11:49:24 +01:00
2017-08-24 22:15:55 +02:00
my $ path_sql = my_find_file ( $ install_basedir ,
[ "mysql" , "sql/share" , "share/mariadb" ,
"share/mysql" , "share" , "scripts" ] ,
"mysql_system_tables.sql" ,
NOT_REQUIRED ) ;
2013-01-10 23:53:07 +01:00
2017-08-24 22:15:55 +02:00
if ( - f $ path_sql )
{
my $ sql_dir = dirname ( $ path_sql ) ;
# Use the mysql database for system tables
mtr_tofile ( $ bootstrap_sql_file , "use mysql;\n" ) ;
# Add the offical mysql system tables
# for a production system
mtr_appendfile_to_file ( "$sql_dir/mysql_system_tables.sql" ,
$ bootstrap_sql_file ) ;
2019-04-10 10:55:49 +02:00
my $ gis_sp_path = $ source_dist ? "$bindir/scripts" : $ sql_dir ;
mtr_appendfile_to_file ( "$gis_sp_path/maria_add_gis_sp_bootstrap.sql" ,
$ bootstrap_sql_file ) ;
2017-08-24 22:15:55 +02:00
# Add the performance tables
# for a production system
mtr_appendfile_to_file ( "$sql_dir/mysql_performance_tables.sql" ,
$ bootstrap_sql_file ) ;
# Add the mysql system tables initial data
# for a production system
mtr_appendfile_to_file ( "$sql_dir/mysql_system_tables_data.sql" ,
$ bootstrap_sql_file ) ;
# Add test data for timezone - this is just a subset, on a real
# system these tables will be populated either by mysql_tzinfo_to_sql
# or by downloading the timezone table package from our website
mtr_appendfile_to_file ( "$sql_dir/mysql_test_data_timezone.sql" ,
$ bootstrap_sql_file ) ;
# Fill help tables, just an empty file when running from bk repo
# but will be replaced by a real fill_help_tables.sql when
# building the source dist
mtr_appendfile_to_file ( "$sql_dir/fill_help_tables.sql" ,
$ bootstrap_sql_file ) ;
2021-03-03 10:30:29 +01:00
# Append sys schema
mtr_appendfile_to_file ( "$gis_sp_path/mysql_sys_schema.sql" ,
$ bootstrap_sql_file ) ;
2018-04-11 14:50:32 +02:00
# Create test database
mtr_appendfile_to_file ( "$sql_dir/mysql_test_db.sql" ,
$ bootstrap_sql_file ) ;
2017-08-24 22:15:55 +02:00
# mysql.gtid_slave_pos was created in InnoDB, but many tests
2018-08-02 16:59:11 +02:00
# run without InnoDB. Alter it to Aria now
mtr_tofile ( $ bootstrap_sql_file , "ALTER TABLE gtid_slave_pos ENGINE=Aria transactional=0;\n" ) ;
2017-08-24 22:15:55 +02:00
}
else
{
# Install db from init_db.sql that exist in early 5.1 and 5.0
# versions of MySQL
my $ init_file = "$install_basedir/mysql-test/lib/init_db.sql" ;
mtr_report ( " - from '$init_file'" ) ;
my $ text = mtr_grab_file ( $ init_file ) or
mtr_error ( "Can't open '$init_file': $!" ) ;
2013-01-10 23:53:07 +01:00
2017-08-24 22:15:55 +02:00
mtr_tofile ( $ bootstrap_sql_file ,
sql_to_bootstrap ( $ text ) ) ;
}
2007-02-28 14:26:58 +01:00
2018-04-11 14:50:32 +02:00
# Remove anonymous users
mtr_tofile ( $ bootstrap_sql_file ,
2018-11-24 14:13:41 +01:00
"DELETE FROM mysql.global_priv where user= '';\n" ) ;
2018-04-11 14:50:32 +02:00
2017-08-24 22:15:55 +02:00
# Create mtr database
mtr_tofile ( $ bootstrap_sql_file ,
"CREATE DATABASE mtr CHARSET=latin1;\n" ) ;
2008-04-24 14:14:11 +02:00
2017-08-24 22:15:55 +02:00
# Add help tables and data for warning detection and supression
mtr_tofile ( $ bootstrap_sql_file ,
sql_to_bootstrap ( mtr_grab_file ( "include/mtr_warnings.sql" ) ) ) ;
2008-04-24 14:14:11 +02:00
2017-08-24 22:15:55 +02:00
# Add procedures for checking server is restored after testcase
2008-04-24 14:14:11 +02:00
mtr_tofile ( $ bootstrap_sql_file ,
2017-08-24 22:15:55 +02:00
sql_to_bootstrap ( mtr_grab_file ( "include/mtr_check.sql" ) ) ) ;
2008-04-24 14:14:11 +02:00
}
2007-02-26 11:49:24 +01:00
2006-04-24 11:26:41 +02:00
# Log bootstrap command
my $ path_bootstrap_log = "$opt_vardir/log/bootstrap.log" ;
mtr_tofile ( $ path_bootstrap_log ,
2007-01-10 03:22:01 +01:00
"$exe_mysqld_bootstrap " . join ( " " , @$ args ) . "\n" ) ;
2006-04-24 11:26:41 +02:00
2019-08-30 15:06:54 +02:00
# Create directories mysql
2008-09-20 15:51:31 +02:00
mkpath ( "$install_datadir/mysql" ) ;
2007-12-12 18:19:24 +01:00
2018-10-10 16:27:17 +02:00
my $ realtime = gettimeofday ( ) ;
2007-12-12 18:19:24 +01:00
if ( My::SafeProcess - > run
(
name = > "bootstrap" ,
path = > $ exe_mysqld_bootstrap ,
args = > \ $ args ,
input = > $ bootstrap_sql_file ,
output = > $ path_bootstrap_log ,
error = > $ path_bootstrap_log ,
append = > 1 ,
2008-02-28 10:52:04 +01:00
verbose = > $ opt_verbose ,
2007-12-12 18:19:24 +01:00
) != 0 )
2004-12-30 16:34:01 +01:00
{
2022-07-18 22:16:18 +02:00
find (
{
no_chdir = > 1 ,
wanted = > sub
{
My::CoreDump:: core_wanted ( \ $ num_saved_cores ,
$ opt_max_save_core ,
@ opt_cases == 0 ,
$ exe_mysqld_bootstrap , $ opt_parallel ) ;
}
} ,
$ install_datadir ) ;
MDEV-4011 Added per thread memory counting and usage
Base code and idea from a patch from by plinux at Taobao.
The idea is that we mark all memory that are thread specific with MY_THREAD_SPECIFIC.
Memory counting is done per thread in the my_malloc_size_cb_func callback function from my_malloc().
There are plenty of new asserts to ensure that for a debug server the counting is correct.
Information_schema.processlist gets two new columns: MEMORY_USED and EXAMINED_ROWS.
- The later is there mainly to show how query is progressing.
The following changes in interfaces was needed to get this to work:
- init_alloc_root() amd init_sql_alloc() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- One now have to use alloc_root_set_min_malloc() to set min memory to be allocated by alloc_root()
- my_init_dynamic_array() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- my_net_init() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- Added flag for hash_init() so that one can mark hash table to be thread specific.
- Added flags to init_tree() so that one can mark tree to be thread specific.
- Removed with_delete option to init_tree(). Now one should instead use MY_TREE_WITH_DELETE_FLAG.
- Added flag to Warning_info::Warning_info() if the structure should be fully initialized.
- String elements can now be marked as thread specific.
- Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
- Changed type of myf from int to ulong, as this is always a set of bit flags.
Other things:
- Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
- We now also show EXAMINED_ROWS in SHOW PROCESSLIST
- Added new variable 'memory_used'
- Fixed bug where kill_threads_for_user() was using the wrong mem_root to allocate memory.
- Removed calls to the obsoleted function init_dynamic_array()
- Use set_current_thd() instead of my_pthread_setspecific_ptr(THR_THD,...)
client/completion_hash.cc:
Updated call to init_alloc_root()
client/mysql.cc:
Updated call to init_alloc_root()
client/mysqlbinlog.cc:
init_dynamic_array() -> my_init_dynamic_array()
Updated call to init_alloc_root()
client/mysqlcheck.c:
Updated call to my_init_dynamic_array()
client/mysqldump.c:
Updated call to init_alloc_root()
client/mysqltest.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Fixed compiler warnings
extra/comp_err.c:
Updated call to my_init_dynamic_array()
extra/resolve_stack_dump.c:
Updated call to my_init_dynamic_array()
include/hash.h:
Added HASH_THREAD_SPECIFIC
include/heap.h:
Added flag is internal temporary table.
include/my_dir.h:
Safety fix: Ensure that MY_DONT_SORT and MY_WANT_STAT don't interfer with other mysys flags
include/my_global.h:
Changed type of myf from int to ulong, as this is always a set of bit flags.
include/my_sys.h:
Added MY_THREAD_SPECIFIC and MY_THREAD_MOVE
Added malloc_flags to DYNAMIC_ARRAY
Added extra mysys flag argument to my_init_dynamic_array()
Removed deprecated functions init_dynamic_array() and my_init_dynamic_array.._ci
Updated paramaters for init_alloc_root()
include/my_tree.h:
Added my_flags to allow one to use MY_THREAD_SPECIFIC with hash tables.
Removed with_delete. One should now instead use MY_TREE_WITH_DELETE_FLAG
Updated parameters to init_tree()
include/myisamchk.h:
Added malloc_flags to allow one to use MY_THREAD_SPECIFIC for checks.
include/mysql.h:
Added MYSQL_THREAD_SPECIFIC_MALLOC
Used 'unused1' to mark memory as thread specific.
include/mysql.h.pp:
Updated file
include/mysql_com.h:
Used 'unused1' to mark memory as thread specific.
Updated parameters for my_net_init()
libmysql/libmysql.c:
Updated call to init_alloc_root() to mark memory thread specific.
libmysqld/emb_qcache.cc:
Updated call to init_alloc_root()
libmysqld/lib_sql.cc:
Updated call to init_alloc_root()
mysql-test/r/create.result:
Updated results
mysql-test/r/user_var.result:
Updated results
mysql-test/suite/funcs_1/datadict/processlist_priv.inc:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/datadict/processlist_val.inc:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/r/is_columns_is.result:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result:
Updated results
mysql-test/suite/funcs_1/r/processlist_val_no_prot.result:
Updated results
mysql-test/t/show_explain.test:
Fixed usage of debug variable so that one can run test with --debug
mysql-test/t/user_var.test:
Added test of memory_usage variable.
mysys/array.c:
Added extra my_flags option to init_dynamic_array() and init_dynamic_array2() so that one can mark memory with MY_THREAD_SPECIFIC
All allocated memory is marked with the given my_flags.
Removed obsolete function init_dynamic_array()
mysys/default.c:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
mysys/hash.c:
Updated call to my_init_dynamic_array_ci().
Allocated memory is marked with MY_THREAD_SPECIFIC if HASH_THREAD_SPECIFIC is used.
mysys/ma_dyncol.c:
init_dynamic_array() -> my_init_dynamic_array()
Added #if to get rid of compiler warnings
mysys/mf_tempdir.c:
Updated call to my_init_dynamic_array()
mysys/my_alloc.c:
Added extra parameter to init_alloc_root() so that one can mark memory with MY_THREAD_SPECIFIC
Extend MEM_ROOT with a flag if memory is thread specific.
This is stored in block_size, to keep the size of the MEM_ROOT object identical as before.
Allocated memory is marked with MY_THREAD_SPECIFIC if used with init_alloc_root()
mysys/my_chmod.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_chsize.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_copy.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_create.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_delete.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_error.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_fopen.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_fstream.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_getwd.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_lib.c:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Updated DBUG_PRINT because of change of myf type
mysys/my_lock.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_malloc.c:
Store at start of each allocated memory block the size of the block and if the block is thread specific.
Call malloc_size_cb_func, if set, with the memory allocated/freed.
Updated DBUG_PRINT because of change of myf type
mysys/my_open.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_pread.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_read.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_redel.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_rename.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_seek.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_sync.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_thr_init.c:
Ensure that one can call my_thread_dbug_id() even if thread is not properly initialized.
mysys/my_write.c:
Updated DBUG_PRINT because of change of myf type
mysys/mysys_priv.h:
Updated parameters to sf_malloc and sf_realloc()
mysys/safemalloc.c:
Added checking that for memory marked with MY_THREAD_SPECIFIC that it's the same thread that is allocation and freeing the memory.
Added sf_malloc_dbug_id() to allow MariaDB to specify which THD is handling the memory.
Added my_flags arguments to sf_malloc() and sf_realloc() to be able to mark memory with MY_THREAD_SPECIFIC.
Added sf_report_leaked_memory() to get list of memory not freed by a thread.
mysys/tree.c:
Added flags to init_tree() so that one can mark tree to be thread specific.
Removed with_delete option to init_tree(). Now one should instead use MY_TREE_WITH_DELETE_FLAG.
Updated call to init_alloc_root()
All allocated memory is marked with the given malloc flags
mysys/waiting_threads.c:
Updated call to my_init_dynamic_array()
sql-common/client.c:
Updated call to init_alloc_root() and my_net_init() to mark memory thread specific.
Updated call to my_init_dynamic_array().
Added MYSQL_THREAD_SPECIFIC_MALLOC so that client can mark memory as MY_THREAD_SPECIFIC.
sql-common/client_plugin.c:
Updated call to init_alloc_root()
sql/debug_sync.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/event_scheduler.cc:
Removed calls to net_end() as this is now done in ~THD()
Call set_current_thd() to ensure that memory is assigned to right thread.
sql/events.cc:
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/filesort.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/filesort_utils.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/ha_ndbcluster.cc:
Updated call to init_alloc_root()
Updated call to my_net_init()
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
sql/ha_ndbcluster_binlog.cc:
Updated call to my_net_init()
Updated call to init_sql_alloc()
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
sql/ha_partition.cc:
Updated call to init_alloc_root()
sql/handler.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
Added missing call to my_dir_end()
sql/item_func.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/item_subselect.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/item_sum.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/log.cc:
More DBUG
Updated call to init_alloc_root()
sql/mdl.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/mysqld.cc:
Added total_memory_used
Updated call to init_alloc_root()
Move mysql_cond_broadcast() before my_thread_end()
Added mariadb_dbug_id() to count memory per THD instead of per thread.
Added my_malloc_size_cb_func() callback function for my_malloc() to count memory.
Move initialization of mysqld_server_started and mysqld_server_initialized earlier.
Updated call to my_init_dynamic_array().
Updated call to my_net_init().
Call my_pthread_setspecific_ptr(THR_THD,...) to ensure that memory is assigned to right thread.
Added status variable 'memory_used'.
Updated call to init_alloc_root()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/mysqld.h:
Added set_current_thd()
sql/net_serv.cc:
Added new parameter to my_net_init() so that one can mark memory with MY_THREAD_SPECIFIC.
Store in net->thread_specific_malloc if memory is thread specific.
Mark memory to be thread specific if requested.
sql/opt_range.cc:
Updated call to my_init_dynamic_array()
Updated call to init_sql_alloc()
Added MY_THREAD_SPECIFIC to allocated memory.
sql/opt_subselect.cc:
Updated call to init_sql_alloc() to mark memory thread specific.
sql/protocol.cc:
Fixed compiler warning
sql/records.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/rpl_filter.cc:
Updated call to my_init_dynamic_array()
sql/rpl_handler.cc:
Updated call to my_init_dynamic_array2()
sql/rpl_handler.h:
Updated call to init_sql_alloc()
sql/rpl_mi.cc:
Updated call to my_init_dynamic_array()
sql/rpl_tblmap.cc:
Updated call to init_alloc_root()
sql/rpl_utility.cc:
Updated call to my_init_dynamic_array()
sql/slave.cc:
Initialize things properly before calling functions that allocate memory.
Removed calls to net_end() as this is now done in ~THD()
sql/sp_head.cc:
Updated call to init_sql_alloc()
Updated call to my_init_dynamic_array()
Added parameter to warning_info() that it should be fully initialized.
sql/sp_pcontext.cc:
Updated call to my_init_dynamic_array()
sql/sql_acl.cc:
Updated call to init_sql_alloc()
Updated call to my_init_dynamic_array()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_admin.cc:
Added parameter to warning_info() that it should be fully initialized.
sql/sql_analyse.h:
Updated call to init_tree() to mark memory thread specific.
sql/sql_array.h:
Updated call to my_init_dynamic_array() to mark memory thread specific.
sql/sql_audit.cc:
Updated call to my_init_dynamic_array()
sql/sql_base.cc:
Updated call to init_sql_alloc()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_cache.cc:
Updated comment
sql/sql_class.cc:
Added parameter to warning_info() that not initialize it until THD is fully created.
Updated call to init_sql_alloc()
Mark THD::user_vars has to be thread specific.
Updated call to my_init_dynamic_array()
Ensure that memory allocated by THD is assigned to the THD.
More DBUG
Always acll net_end() in ~THD()
Assert that all memory signed to this THD is really deleted at ~THD.
Fixed set_status_var_init() to not reset memory_used.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_class.h:
Added MY_THREAD_SPECIFIC to allocated memory.
Added malloc_size to THD to record allocated memory per THD.
sql/sql_delete.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_error.cc:
Added 'initialize' parameter to Warning_info() to say if should allocate memory for it's structures.
This is used by THD::THD() to not allocate memory until THD is ready.
Added Warning_info::free_memory()
sql/sql_error.h:
Updated Warning_info() class.
sql/sql_handler.cc:
Updated call to init_alloc_root() to mark memory thread specific.
sql/sql_insert.cc:
More DBUG
sql/sql_join_cache.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_lex.cc:
Updated call to my_init_dynamic_array()
sql/sql_lex.h:
Updated call to my_init_dynamic_array()
sql/sql_load.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_parse.cc:
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
Ensure that examined_row_count() is reset before query.
Fixed bug where kill_threads_for_user() was using the wrong mem_root to allocate memory.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
Don't restore thd->status_var.memory_used when restoring thd->status_var
sql/sql_plugin.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Don't allocate THD on the stack, as this causes problems with valgrind when doing thd memory counting.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_prepare.cc:
Added parameter to warning_info() that it should be fully initialized.
Updated call to init_sql_alloc() to mark memory thread specific.
sql/sql_reload.cc:
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_select.cc:
Updated call to my_init_dynamic_array() and init_sql_alloc() to mark memory thread specific.
Added MY_THREAD_SPECIFIC to allocated memory.
More DBUG
sql/sql_servers.cc:
Updated call to init_sql_alloc() to mark memory some memory thread specific.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_show.cc:
Updated call to my_init_dynamic_array()
Mark my_dir() memory thread specific.
Use my_pthread_setspecific_ptr(THR_THD,...) to mark that allocated memory should be allocated to calling thread.
More DBUG.
Added malloc_size and examined_row_count to SHOW PROCESSLIST.
Added MY_THREAD_SPECIFIC to allocated memory.
Updated call to init_sql_alloc()
Added parameter to warning_info() that it should be fully initialized.
sql/sql_statistics.cc:
Fixed compiler warning
sql/sql_string.cc:
String elements can now be marked as thread specific.
sql/sql_string.h:
String elements can now be marked as thread specific.
sql/sql_table.cc:
Updated call to init_sql_alloc() and my_malloc() to mark memory thread specific
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
Fixed compiler warning
sql/sql_test.cc:
Updated call to my_init_dynamic_array() to mark memory thread specific.
sql/sql_trigger.cc:
Updated call to init_sql_alloc()
sql/sql_udf.cc:
Updated call to init_sql_alloc()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_update.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/table.cc:
Updated call to init_sql_alloc().
Mark memory used by temporary tables, that are not for slave threads, as MY_THREAD_SPECIFIC
Updated call to init_sql_alloc()
sql/thr_malloc.cc:
Added my_flags argument to init_sql_alloc() to be able to mark memory as MY_THREAD_SPECIFIC.
sql/thr_malloc.h:
Updated prototype for init_sql_alloc()
sql/tztime.cc:
Updated call to init_sql_alloc()
Updated call to init_alloc_root() to mark memory thread specific.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/uniques.cc:
Updated calls to init_tree(), my_init_dynamic_array() and my_malloc() to mark memory thread specific.
sql/unireg.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
storage/csv/ha_tina.cc:
Updated call to init_alloc_root()
storage/federated/ha_federated.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Ensure that memory allocated by fedarated is registered for the system, not for the thread.
storage/federatedx/federatedx_io_mysql.cc:
Updated call to my_init_dynamic_array()
storage/federatedx/ha_federatedx.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
storage/heap/ha_heap.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
storage/heap/heapdef.h:
Added parameter to hp_get_new_block() to be able to do thread specific memory tagging.
storage/heap/hp_block.c:
Added parameter to hp_get_new_block() to be able to do thread specific memory tagging.
storage/heap/hp_create.c:
- Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
- Use MY_TREE_WITH_DELETE instead of removed option 'with_delete'.
storage/heap/hp_open.c:
Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
storage/heap/hp_write.c:
Added new parameter to hp_get_new_block()
storage/maria/ma_bitmap.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_blockrec.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_check.c:
Updated call to init_alloc_root()
storage/maria/ma_ft_boolean_search.c:
Updated calls to init_tree() and init_alloc_root()
storage/maria/ma_ft_nlq_search.c:
Updated call to init_tree()
storage/maria/ma_ft_parser.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/maria/ma_loghandler.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_open.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_sort.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_write.c:
Updated calls to my_init_dynamic_array() and init_tree()
storage/maria/maria_pack.c:
Updated call to init_tree()
storage/maria/unittest/sequence_storage.c:
Updated call to my_init_dynamic_array()
storage/myisam/ft_boolean_search.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/myisam/ft_nlq_search.c:
Updated call to init_tree()
storage/myisam/ft_parser.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/myisam/ft_stopwords.c:
Updated call to init_tree()
storage/myisam/mi_check.c:
Updated call to init_alloc_root()
storage/myisam/mi_write.c:
Updated call to my_init_dynamic_array()
Updated call to init_tree()
storage/myisam/myisamlog.c:
Updated call to init_tree()
storage/myisam/myisampack.c:
Updated call to init_tree()
storage/myisam/sort.c:
Updated call to my_init_dynamic_array()
storage/myisammrg/ha_myisammrg.cc:
Updated call to init_sql_alloc()
storage/perfschema/pfs_check.cc:
Rest current_thd
storage/perfschema/pfs_instr.cc:
Removed DBUG_ENTER/DBUG_VOID_RETURN as at this point my_thread_var is not allocated anymore, which can cause problems.
support-files/compiler_warnings.supp:
Disable compiler warning from offsetof macro.
2013-01-23 16:16:14 +01:00
my $ data = mtr_grab_file ( $ path_bootstrap_log ) ;
2021-03-18 08:47:30 +01:00
mtr_error ( "Error executing mariadbd --bootstrap\n" .
2007-02-28 14:26:58 +01:00
"Could not install system database from $bootstrap_sql_file\n" .
MDEV-4011 Added per thread memory counting and usage
Base code and idea from a patch from by plinux at Taobao.
The idea is that we mark all memory that are thread specific with MY_THREAD_SPECIFIC.
Memory counting is done per thread in the my_malloc_size_cb_func callback function from my_malloc().
There are plenty of new asserts to ensure that for a debug server the counting is correct.
Information_schema.processlist gets two new columns: MEMORY_USED and EXAMINED_ROWS.
- The later is there mainly to show how query is progressing.
The following changes in interfaces was needed to get this to work:
- init_alloc_root() amd init_sql_alloc() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- One now have to use alloc_root_set_min_malloc() to set min memory to be allocated by alloc_root()
- my_init_dynamic_array() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- my_net_init() has extra option so that one can mark memory with MY_THREAD_SPECIFIC
- Added flag for hash_init() so that one can mark hash table to be thread specific.
- Added flags to init_tree() so that one can mark tree to be thread specific.
- Removed with_delete option to init_tree(). Now one should instead use MY_TREE_WITH_DELETE_FLAG.
- Added flag to Warning_info::Warning_info() if the structure should be fully initialized.
- String elements can now be marked as thread specific.
- Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
- Changed type of myf from int to ulong, as this is always a set of bit flags.
Other things:
- Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
- We now also show EXAMINED_ROWS in SHOW PROCESSLIST
- Added new variable 'memory_used'
- Fixed bug where kill_threads_for_user() was using the wrong mem_root to allocate memory.
- Removed calls to the obsoleted function init_dynamic_array()
- Use set_current_thd() instead of my_pthread_setspecific_ptr(THR_THD,...)
client/completion_hash.cc:
Updated call to init_alloc_root()
client/mysql.cc:
Updated call to init_alloc_root()
client/mysqlbinlog.cc:
init_dynamic_array() -> my_init_dynamic_array()
Updated call to init_alloc_root()
client/mysqlcheck.c:
Updated call to my_init_dynamic_array()
client/mysqldump.c:
Updated call to init_alloc_root()
client/mysqltest.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Fixed compiler warnings
extra/comp_err.c:
Updated call to my_init_dynamic_array()
extra/resolve_stack_dump.c:
Updated call to my_init_dynamic_array()
include/hash.h:
Added HASH_THREAD_SPECIFIC
include/heap.h:
Added flag is internal temporary table.
include/my_dir.h:
Safety fix: Ensure that MY_DONT_SORT and MY_WANT_STAT don't interfer with other mysys flags
include/my_global.h:
Changed type of myf from int to ulong, as this is always a set of bit flags.
include/my_sys.h:
Added MY_THREAD_SPECIFIC and MY_THREAD_MOVE
Added malloc_flags to DYNAMIC_ARRAY
Added extra mysys flag argument to my_init_dynamic_array()
Removed deprecated functions init_dynamic_array() and my_init_dynamic_array.._ci
Updated paramaters for init_alloc_root()
include/my_tree.h:
Added my_flags to allow one to use MY_THREAD_SPECIFIC with hash tables.
Removed with_delete. One should now instead use MY_TREE_WITH_DELETE_FLAG
Updated parameters to init_tree()
include/myisamchk.h:
Added malloc_flags to allow one to use MY_THREAD_SPECIFIC for checks.
include/mysql.h:
Added MYSQL_THREAD_SPECIFIC_MALLOC
Used 'unused1' to mark memory as thread specific.
include/mysql.h.pp:
Updated file
include/mysql_com.h:
Used 'unused1' to mark memory as thread specific.
Updated parameters for my_net_init()
libmysql/libmysql.c:
Updated call to init_alloc_root() to mark memory thread specific.
libmysqld/emb_qcache.cc:
Updated call to init_alloc_root()
libmysqld/lib_sql.cc:
Updated call to init_alloc_root()
mysql-test/r/create.result:
Updated results
mysql-test/r/user_var.result:
Updated results
mysql-test/suite/funcs_1/datadict/processlist_priv.inc:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/datadict/processlist_val.inc:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/r/is_columns_is.result:
Update to handle new format of SHOW PROCESSLIST
mysql-test/suite/funcs_1/r/processlist_priv_no_prot.result:
Updated results
mysql-test/suite/funcs_1/r/processlist_val_no_prot.result:
Updated results
mysql-test/t/show_explain.test:
Fixed usage of debug variable so that one can run test with --debug
mysql-test/t/user_var.test:
Added test of memory_usage variable.
mysys/array.c:
Added extra my_flags option to init_dynamic_array() and init_dynamic_array2() so that one can mark memory with MY_THREAD_SPECIFIC
All allocated memory is marked with the given my_flags.
Removed obsolete function init_dynamic_array()
mysys/default.c:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
mysys/hash.c:
Updated call to my_init_dynamic_array_ci().
Allocated memory is marked with MY_THREAD_SPECIFIC if HASH_THREAD_SPECIFIC is used.
mysys/ma_dyncol.c:
init_dynamic_array() -> my_init_dynamic_array()
Added #if to get rid of compiler warnings
mysys/mf_tempdir.c:
Updated call to my_init_dynamic_array()
mysys/my_alloc.c:
Added extra parameter to init_alloc_root() so that one can mark memory with MY_THREAD_SPECIFIC
Extend MEM_ROOT with a flag if memory is thread specific.
This is stored in block_size, to keep the size of the MEM_ROOT object identical as before.
Allocated memory is marked with MY_THREAD_SPECIFIC if used with init_alloc_root()
mysys/my_chmod.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_chsize.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_copy.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_create.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_delete.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_error.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_fopen.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_fstream.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_getwd.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_lib.c:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Updated DBUG_PRINT because of change of myf type
mysys/my_lock.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_malloc.c:
Store at start of each allocated memory block the size of the block and if the block is thread specific.
Call malloc_size_cb_func, if set, with the memory allocated/freed.
Updated DBUG_PRINT because of change of myf type
mysys/my_open.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_pread.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_read.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_redel.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_rename.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_seek.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_sync.c:
Updated DBUG_PRINT because of change of myf type
mysys/my_thr_init.c:
Ensure that one can call my_thread_dbug_id() even if thread is not properly initialized.
mysys/my_write.c:
Updated DBUG_PRINT because of change of myf type
mysys/mysys_priv.h:
Updated parameters to sf_malloc and sf_realloc()
mysys/safemalloc.c:
Added checking that for memory marked with MY_THREAD_SPECIFIC that it's the same thread that is allocation and freeing the memory.
Added sf_malloc_dbug_id() to allow MariaDB to specify which THD is handling the memory.
Added my_flags arguments to sf_malloc() and sf_realloc() to be able to mark memory with MY_THREAD_SPECIFIC.
Added sf_report_leaked_memory() to get list of memory not freed by a thread.
mysys/tree.c:
Added flags to init_tree() so that one can mark tree to be thread specific.
Removed with_delete option to init_tree(). Now one should instead use MY_TREE_WITH_DELETE_FLAG.
Updated call to init_alloc_root()
All allocated memory is marked with the given malloc flags
mysys/waiting_threads.c:
Updated call to my_init_dynamic_array()
sql-common/client.c:
Updated call to init_alloc_root() and my_net_init() to mark memory thread specific.
Updated call to my_init_dynamic_array().
Added MYSQL_THREAD_SPECIFIC_MALLOC so that client can mark memory as MY_THREAD_SPECIFIC.
sql-common/client_plugin.c:
Updated call to init_alloc_root()
sql/debug_sync.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/event_scheduler.cc:
Removed calls to net_end() as this is now done in ~THD()
Call set_current_thd() to ensure that memory is assigned to right thread.
sql/events.cc:
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/filesort.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/filesort_utils.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/ha_ndbcluster.cc:
Updated call to init_alloc_root()
Updated call to my_net_init()
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
sql/ha_ndbcluster_binlog.cc:
Updated call to my_net_init()
Updated call to init_sql_alloc()
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
sql/ha_partition.cc:
Updated call to init_alloc_root()
sql/handler.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
Added missing call to my_dir_end()
sql/item_func.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/item_subselect.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/item_sum.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/log.cc:
More DBUG
Updated call to init_alloc_root()
sql/mdl.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/mysqld.cc:
Added total_memory_used
Updated call to init_alloc_root()
Move mysql_cond_broadcast() before my_thread_end()
Added mariadb_dbug_id() to count memory per THD instead of per thread.
Added my_malloc_size_cb_func() callback function for my_malloc() to count memory.
Move initialization of mysqld_server_started and mysqld_server_initialized earlier.
Updated call to my_init_dynamic_array().
Updated call to my_net_init().
Call my_pthread_setspecific_ptr(THR_THD,...) to ensure that memory is assigned to right thread.
Added status variable 'memory_used'.
Updated call to init_alloc_root()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/mysqld.h:
Added set_current_thd()
sql/net_serv.cc:
Added new parameter to my_net_init() so that one can mark memory with MY_THREAD_SPECIFIC.
Store in net->thread_specific_malloc if memory is thread specific.
Mark memory to be thread specific if requested.
sql/opt_range.cc:
Updated call to my_init_dynamic_array()
Updated call to init_sql_alloc()
Added MY_THREAD_SPECIFIC to allocated memory.
sql/opt_subselect.cc:
Updated call to init_sql_alloc() to mark memory thread specific.
sql/protocol.cc:
Fixed compiler warning
sql/records.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/rpl_filter.cc:
Updated call to my_init_dynamic_array()
sql/rpl_handler.cc:
Updated call to my_init_dynamic_array2()
sql/rpl_handler.h:
Updated call to init_sql_alloc()
sql/rpl_mi.cc:
Updated call to my_init_dynamic_array()
sql/rpl_tblmap.cc:
Updated call to init_alloc_root()
sql/rpl_utility.cc:
Updated call to my_init_dynamic_array()
sql/slave.cc:
Initialize things properly before calling functions that allocate memory.
Removed calls to net_end() as this is now done in ~THD()
sql/sp_head.cc:
Updated call to init_sql_alloc()
Updated call to my_init_dynamic_array()
Added parameter to warning_info() that it should be fully initialized.
sql/sp_pcontext.cc:
Updated call to my_init_dynamic_array()
sql/sql_acl.cc:
Updated call to init_sql_alloc()
Updated call to my_init_dynamic_array()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_admin.cc:
Added parameter to warning_info() that it should be fully initialized.
sql/sql_analyse.h:
Updated call to init_tree() to mark memory thread specific.
sql/sql_array.h:
Updated call to my_init_dynamic_array() to mark memory thread specific.
sql/sql_audit.cc:
Updated call to my_init_dynamic_array()
sql/sql_base.cc:
Updated call to init_sql_alloc()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_cache.cc:
Updated comment
sql/sql_class.cc:
Added parameter to warning_info() that not initialize it until THD is fully created.
Updated call to init_sql_alloc()
Mark THD::user_vars has to be thread specific.
Updated call to my_init_dynamic_array()
Ensure that memory allocated by THD is assigned to the THD.
More DBUG
Always acll net_end() in ~THD()
Assert that all memory signed to this THD is really deleted at ~THD.
Fixed set_status_var_init() to not reset memory_used.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_class.h:
Added MY_THREAD_SPECIFIC to allocated memory.
Added malloc_size to THD to record allocated memory per THD.
sql/sql_delete.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_error.cc:
Added 'initialize' parameter to Warning_info() to say if should allocate memory for it's structures.
This is used by THD::THD() to not allocate memory until THD is ready.
Added Warning_info::free_memory()
sql/sql_error.h:
Updated Warning_info() class.
sql/sql_handler.cc:
Updated call to init_alloc_root() to mark memory thread specific.
sql/sql_insert.cc:
More DBUG
sql/sql_join_cache.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_lex.cc:
Updated call to my_init_dynamic_array()
sql/sql_lex.h:
Updated call to my_init_dynamic_array()
sql/sql_load.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/sql_parse.cc:
Removed calls to net_end() and thd->cleanup() as these are now done in ~THD()
Ensure that examined_row_count() is reset before query.
Fixed bug where kill_threads_for_user() was using the wrong mem_root to allocate memory.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
Don't restore thd->status_var.memory_used when restoring thd->status_var
sql/sql_plugin.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Don't allocate THD on the stack, as this causes problems with valgrind when doing thd memory counting.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_prepare.cc:
Added parameter to warning_info() that it should be fully initialized.
Updated call to init_sql_alloc() to mark memory thread specific.
sql/sql_reload.cc:
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_select.cc:
Updated call to my_init_dynamic_array() and init_sql_alloc() to mark memory thread specific.
Added MY_THREAD_SPECIFIC to allocated memory.
More DBUG
sql/sql_servers.cc:
Updated call to init_sql_alloc() to mark memory some memory thread specific.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_show.cc:
Updated call to my_init_dynamic_array()
Mark my_dir() memory thread specific.
Use my_pthread_setspecific_ptr(THR_THD,...) to mark that allocated memory should be allocated to calling thread.
More DBUG.
Added malloc_size and examined_row_count to SHOW PROCESSLIST.
Added MY_THREAD_SPECIFIC to allocated memory.
Updated call to init_sql_alloc()
Added parameter to warning_info() that it should be fully initialized.
sql/sql_statistics.cc:
Fixed compiler warning
sql/sql_string.cc:
String elements can now be marked as thread specific.
sql/sql_string.h:
String elements can now be marked as thread specific.
sql/sql_table.cc:
Updated call to init_sql_alloc() and my_malloc() to mark memory thread specific
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
Fixed compiler warning
sql/sql_test.cc:
Updated call to my_init_dynamic_array() to mark memory thread specific.
sql/sql_trigger.cc:
Updated call to init_sql_alloc()
sql/sql_udf.cc:
Updated call to init_sql_alloc()
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/sql_update.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
sql/table.cc:
Updated call to init_sql_alloc().
Mark memory used by temporary tables, that are not for slave threads, as MY_THREAD_SPECIFIC
Updated call to init_sql_alloc()
sql/thr_malloc.cc:
Added my_flags argument to init_sql_alloc() to be able to mark memory as MY_THREAD_SPECIFIC.
sql/thr_malloc.h:
Updated prototype for init_sql_alloc()
sql/tztime.cc:
Updated call to init_sql_alloc()
Updated call to init_alloc_root() to mark memory thread specific.
my_pthread_setspecific_ptr(THR_THD,...) -> set_current_thd()
sql/uniques.cc:
Updated calls to init_tree(), my_init_dynamic_array() and my_malloc() to mark memory thread specific.
sql/unireg.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
storage/csv/ha_tina.cc:
Updated call to init_alloc_root()
storage/federated/ha_federated.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
Ensure that memory allocated by fedarated is registered for the system, not for the thread.
storage/federatedx/federatedx_io_mysql.cc:
Updated call to my_init_dynamic_array()
storage/federatedx/ha_federatedx.cc:
Updated call to init_alloc_root()
Updated call to my_init_dynamic_array()
storage/heap/ha_heap.cc:
Added MY_THREAD_SPECIFIC to allocated memory.
storage/heap/heapdef.h:
Added parameter to hp_get_new_block() to be able to do thread specific memory tagging.
storage/heap/hp_block.c:
Added parameter to hp_get_new_block() to be able to do thread specific memory tagging.
storage/heap/hp_create.c:
- Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
- Use MY_TREE_WITH_DELETE instead of removed option 'with_delete'.
storage/heap/hp_open.c:
Internal HEAP tables are now marking it's memory as MY_THREAD_SPECIFIC.
storage/heap/hp_write.c:
Added new parameter to hp_get_new_block()
storage/maria/ma_bitmap.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_blockrec.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_check.c:
Updated call to init_alloc_root()
storage/maria/ma_ft_boolean_search.c:
Updated calls to init_tree() and init_alloc_root()
storage/maria/ma_ft_nlq_search.c:
Updated call to init_tree()
storage/maria/ma_ft_parser.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/maria/ma_loghandler.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_open.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_sort.c:
Updated call to my_init_dynamic_array()
storage/maria/ma_write.c:
Updated calls to my_init_dynamic_array() and init_tree()
storage/maria/maria_pack.c:
Updated call to init_tree()
storage/maria/unittest/sequence_storage.c:
Updated call to my_init_dynamic_array()
storage/myisam/ft_boolean_search.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/myisam/ft_nlq_search.c:
Updated call to init_tree()
storage/myisam/ft_parser.c:
Updated call to init_tree()
Updated call to init_alloc_root()
storage/myisam/ft_stopwords.c:
Updated call to init_tree()
storage/myisam/mi_check.c:
Updated call to init_alloc_root()
storage/myisam/mi_write.c:
Updated call to my_init_dynamic_array()
Updated call to init_tree()
storage/myisam/myisamlog.c:
Updated call to init_tree()
storage/myisam/myisampack.c:
Updated call to init_tree()
storage/myisam/sort.c:
Updated call to my_init_dynamic_array()
storage/myisammrg/ha_myisammrg.cc:
Updated call to init_sql_alloc()
storage/perfschema/pfs_check.cc:
Rest current_thd
storage/perfschema/pfs_instr.cc:
Removed DBUG_ENTER/DBUG_VOID_RETURN as at this point my_thread_var is not allocated anymore, which can cause problems.
support-files/compiler_warnings.supp:
Disable compiler warning from offsetof macro.
2013-01-23 16:16:14 +01:00
"The $path_bootstrap_log file contains:\n$data\n" ) ;
2004-12-30 16:34:01 +01:00
}
2018-10-10 16:27:17 +02:00
else
{
mtr_verbose ( "Spent " . sprintf ( "%.3f" , ( gettimeofday ( ) - $ realtime ) ) . " seconds in bootstrap" ) ;
}
2004-12-30 16:34:01 +01:00
}
2006-08-21 09:53:04 +02:00
sub run_testcase_check_skip_test ($)
{
my ( $ tinfo ) = @ _ ;
2005-02-08 06:11:05 +01:00
2008-10-15 12:46:40 +02:00
# ----------------------------------------------------------------------
# Skip some tests silently
# ----------------------------------------------------------------------
2009-02-15 11:58:34 +01:00
my $ start_from = $ mtr_cases:: start_from ;
if ( $ start_from )
2008-10-15 12:46:40 +02:00
{
2009-02-15 11:58:34 +01:00
if ( $ tinfo - > { 'name' } eq $ start_from ||
$ tinfo - > { 'shortname' } eq $ start_from )
2008-10-15 12:46:40 +02:00
{
## Found parting test. Run this test and all tests after this one
2009-02-15 11:58:34 +01:00
$ mtr_cases:: start_from = "" ;
2008-10-15 12:46:40 +02:00
}
else
{
$ tinfo - > { 'result' } = 'MTR_RES_SKIPPED' ;
return 1 ;
}
}
2004-12-30 16:34:01 +01:00
# ----------------------------------------------------------------------
# If marked to skip, just print out and return.
# Note that a test case not marked as 'skip' can still be
# skipped later, because of the test case itself in cooperation
# with the mysqltest program tells us so.
# ----------------------------------------------------------------------
if ( $ tinfo - > { 'skip' } )
{
2009-08-18 09:38:18 +02:00
mtr_report_test_skipped ( $ tinfo ) unless $ start_only ;
2006-08-21 09:53:04 +02:00
return 1 ;
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
return 0 ;
}
2007-12-19 11:08:41 +01:00
2008-01-07 19:44:48 +01:00
sub run_query {
my ( $ tinfo , $ mysqld , $ query ) = @ _ ;
2007-12-19 11:08:41 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
2008-01-07 19:44:48 +01:00
mtr_add_arg ( $ args , "-e %s" , $ query ) ;
2007-12-19 11:08:41 +01:00
my $ res = My::SafeProcess - > run
(
2008-01-07 19:44:48 +01:00
name = > "run_query -> " . $ mysqld - > name ( ) ,
2007-12-19 11:08:41 +01:00
path = > $ exe_mysql ,
args = > \ $ args ,
2008-01-07 19:44:48 +01:00
output = > '/dev/null' ,
error = > '/dev/null'
2007-12-12 18:19:24 +01:00
) ;
2008-01-07 19:44:48 +01:00
return $ res
2006-08-21 09:53:04 +02:00
}
2004-12-30 16:34:01 +01:00
2008-01-07 19:44:48 +01:00
2006-08-23 15:35:24 +02:00
sub do_before_run_mysqltest ($)
{
my $ tinfo = shift ;
2012-02-06 23:16:21 +01:00
my $ resfile = $ tinfo - > { result_file } ;
2012-02-07 16:22:36 +01:00
return unless defined $ resfile ;
2006-08-23 15:35:24 +02:00
2006-10-06 00:57:10 +02:00
# Remove old files produced by mysqltest
2012-02-06 23:16:21 +01:00
die "unsupported result file name $resfile, stoping" unless
2012-03-09 08:06:59 +01:00
$ resfile =~ /^(.*?)((?:,\w+)*)\.(rdiff|result|result~)$/ ;
2012-02-23 07:50:11 +01:00
my ( $ base_file , $ suites , $ ext ) = ( $ 1 , $ 2 , $ 3 ) ;
2012-02-06 23:16:21 +01:00
# if the result file is a diff, make a proper result file
2012-02-23 07:50:11 +01:00
if ( $ ext eq 'rdiff' ) {
my $ base_result = $ tinfo - > { base_result } ;
2012-02-06 23:16:21 +01:00
my $ resdir = dirname ( $ resfile ) ;
# we'll use a separate extension for generated result files
2012-02-23 07:50:11 +01:00
# to be able to distinguish them from manually created
2015-06-27 09:40:42 +02:00
# version-controlled results, and to ignore them in git.
2012-02-23 07:50:11 +01:00
my $ dest = "$base_file$suites.result~" ;
2020-03-31 02:39:36 +02:00
my @ cmd = ( $ exe_patch ) ;
if ( $^O eq "MSWin32" ) {
push @ cmd , '--binary' ;
}
2022-06-15 14:53:51 +02:00
push @ cmd , ( qw/-r - -f -s -o/ , $ dest . $$ , $ base_result , $ resfile ) ;
2012-02-06 23:16:21 +01:00
if ( - w $ resdir ) {
# don't rebuild a file if it's up to date
2012-02-23 07:50:11 +01:00
unless ( - e $ dest and - M $ dest < - M $ resfile
and - M $ dest < - M $ base_result ) {
run_system ( @ cmd ) ;
2022-06-15 14:53:51 +02:00
rename $ cmd [ - 3 ] , $ dest or unlink $ cmd [ - 3 ] ;
2012-02-06 23:16:21 +01:00
}
} else {
2022-06-15 14:53:51 +02:00
$ dest = $ opt_tmpdir . '/' . basename ( $ dest ) ;
$ cmd [ - 3 ] = $ dest . $$ ;
2012-02-23 07:50:11 +01:00
run_system ( @ cmd ) ;
2022-06-15 14:53:51 +02:00
rename $ cmd [ - 3 ] , $ dest or unlink $ cmd [ - 3 ] ;
2012-02-06 23:16:21 +01:00
}
2022-06-15 14:53:51 +02:00
2012-02-06 23:16:21 +01:00
$ tinfo - > { result_file } = $ dest ;
2008-09-11 22:05:44 +02:00
}
2012-02-06 23:16:21 +01:00
unlink ( "$base_file.reject" ) ;
unlink ( "$base_file.progress" ) ;
unlink ( "$base_file.log" ) ;
unlink ( "$base_file.warnings" ) ;
2006-08-23 15:35:24 +02:00
}
2005-03-21 16:01:39 +01:00
2006-08-25 15:17:03 +02:00
2008-04-27 21:31:32 +02:00
#
# Check all server for sideffects
#
# RETURN VALUE
# 0 ok
# 1 Check failed
# >1 Fatal errro
2008-04-08 16:51:26 +02:00
sub check_testcase ($$)
2006-11-28 19:54:16 +01:00
{
2007-12-12 18:19:24 +01:00
my ( $ tinfo , $ mode ) = @ _ ;
2008-04-27 21:31:32 +02:00
my $ tname = $ tinfo - > { name } ;
2006-11-28 19:54:16 +01:00
2008-04-27 21:31:32 +02:00
# Start the mysqltest processes in parallel to save time
# also makes it possible to wait for any process to exit during the check
my % started ;
2007-12-12 18:19:24 +01:00
foreach my $ mysqld ( mysqlds ( ) )
2007-04-16 16:08:29 +02:00
{
2010-07-28 12:24:38 +02:00
# Skip if server has been restarted with additional options
if ( defined $ mysqld - > { 'proc' } && ! exists $ mysqld - > { 'restart_opts' } )
2007-12-12 18:19:24 +01:00
{
2008-04-27 21:31:32 +02:00
my $ proc = start_check_testcase ( $ tinfo , $ mode , $ mysqld ) ;
$ started { $ proc - > pid ( ) } = $ proc ;
}
}
2008-04-28 12:20:42 +02:00
# Return immediately if no check proceess was started
return 0 unless ( keys % started ) ;
2011-05-25 16:07:16 +02:00
my $ timeout = start_timer ( check_timeout ( $ tinfo ) ) ;
2008-11-21 13:45:28 +01:00
2008-04-27 21:31:32 +02:00
while ( 1 ) {
my $ result ;
2009-11-24 09:12:48 +01:00
my $ proc = My::SafeProcess - > wait_any_timeout ( $ timeout ) ;
2008-04-27 21:31:32 +02:00
mtr_report ( "Got $proc" ) ;
if ( delete $ started { $ proc - > pid ( ) } ) {
2008-04-28 15:03:30 +02:00
my $ err_file = $ proc - > user_data ( ) ;
my $ base_file = mtr_match_extension ( $ err_file , "err" ) ; # Trim extension
2008-04-27 21:31:32 +02:00
# One check testcase process returned
my $ res = $ proc - > exit_status ( ) ;
if ( $ res == 0 ) {
# Check completed without problem
2008-04-28 15:03:30 +02:00
# Remove the .err file the check generated
unlink ( $ err_file ) ;
2008-05-02 12:11:04 +02:00
# Remove the .result file the check generated
if ( $ mode eq 'after' ) {
unlink ( "$base_file.result" ) ;
}
2008-04-27 21:31:32 +02:00
if ( keys ( % started ) == 0 ) {
# All checks completed
2010-10-19 14:08:46 +02:00
mark_time_used ( 'check' ) ;
2008-04-27 21:31:32 +02:00
return 0 ;
}
# Wait for next process to exit
next ;
}
else
2007-12-12 18:19:24 +01:00
{
2008-04-27 21:31:32 +02:00
if ( $ mode eq "after" and $ res == 1 )
{
# Test failed, grab the report mysqltest has created
2008-04-28 15:03:30 +02:00
my $ report = mtr_grab_file ( $ err_file ) ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { check } . =
2008-11-25 17:51:02 +01:00
" \ nMTR 's internal check of the test case ' $ tname ' failed .
This means that the test case does not preserve the state that existed
before the test case was executed . Most likely the test case did not
2010-10-19 14:01:14 +02:00
do a proper clean - up . It could also be caused by the previous test run
by this thread , if the server wasn ' t restarted .
2008-11-25 17:51:02 +01:00
This is the diff of the states of the servers before and after the
test case was executed: \ n " ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { check } . = $ report ;
# Check failed, mark the test case with that info
$ tinfo - > { 'check_testcase_failed' } = 1 ;
$ result = 1 ;
}
elsif ( $ res )
{
2008-04-28 15:03:30 +02:00
my $ report = mtr_grab_file ( $ err_file ) ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { comment } . =
2008-11-14 13:19:37 +01:00
"Could not execute 'check-testcase' $mode " .
"testcase '$tname' (res: $res):\n" ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { comment } . = $ report ;
$ result = 2 ;
}
2009-02-15 11:58:34 +01:00
else
{
# Remove the .result file the check generated
unlink ( "$base_file.result" ) ;
}
2008-04-28 15:03:30 +02:00
# Remove the .err file the check generated
unlink ( $ err_file ) ;
2008-05-02 12:11:04 +02:00
2007-12-12 18:19:24 +01:00
}
}
2009-11-24 09:12:48 +01:00
elsif ( $ proc - > { timeout } ) {
$ tinfo - > { comment } . = "Timeout for 'check-testcase' expired after "
2011-05-25 16:07:16 +02:00
. check_timeout ( $ tinfo ) . " seconds" ;
2008-11-21 13:45:28 +01:00
$ result = 4 ;
}
2008-04-27 21:31:32 +02:00
else {
# Unknown process returned, most likley a crash, abort everything
$ tinfo - > { comment } =
2008-09-11 18:30:30 +02:00
"The server $proc crashed while running " .
2009-10-14 09:31:34 +02:00
"'check testcase $mode test'" .
get_log_from_proc ( $ proc , $ tinfo - > { name } ) ;
2008-04-27 21:31:32 +02:00
$ result = 3 ;
}
# Kill any check processes still running
map ( $ _ - > kill ( ) , values ( % started ) ) ;
2010-10-19 14:01:14 +02:00
mtr_warning ( "Check-testcase failed, this could also be caused by the" .
" previous test run by this worker thread" )
if $ result > 1 && $ mode eq "before" ;
2010-10-19 14:08:46 +02:00
mark_time_used ( 'check' ) ;
2010-10-19 14:01:14 +02:00
2008-04-27 21:31:32 +02:00
return $ result ;
2007-04-16 16:08:29 +02:00
}
2008-11-21 13:45:28 +01:00
mtr_error ( "INTERNAL_ERROR: check_testcase" ) ;
2007-12-12 18:19:24 +01:00
}
2007-04-16 16:08:29 +02:00
2006-11-28 19:54:16 +01:00
2008-08-04 21:54:44 +02:00
# Start run mysqltest on one server
#
# RETURN VALUE
# 0 OK
# 1 Check failed
#
sub start_run_one ($$) {
my ( $ mysqld , $ run ) = @ _ ;
my $ name = "$run-" . $ mysqld - > name ( ) ;
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
mtr_add_arg ( $ args , "--silent" ) ;
mtr_add_arg ( $ args , "--test-file=%s" , "include/$run.test" ) ;
my $ errfile = "$opt_vardir/tmp/$name.err" ;
my $ proc = My::SafeProcess - > new
(
name = > $ name ,
path = > $ exe_mysqltest ,
error = > $ errfile ,
output = > $ errfile ,
args = > \ $ args ,
user_data = > $ errfile ,
2009-01-27 10:39:42 +01:00
verbose = > $ opt_verbose ,
2008-08-04 21:54:44 +02:00
) ;
mtr_verbose ( "Started $proc" ) ;
return $ proc ;
}
#
# Run script on all servers, collect results
#
# RETURN VALUE
# 0 ok
# 1 Failure
sub run_on_all ($$)
{
my ( $ tinfo , $ run ) = @ _ ;
# Start the mysqltest processes in parallel to save time
# also makes it possible to wait for any process to exit during the check
# and to have a timeout process
my % started ;
foreach my $ mysqld ( mysqlds ( ) )
{
if ( defined $ mysqld - > { 'proc' } )
{
my $ proc = start_run_one ( $ mysqld , $ run ) ;
$ started { $ proc - > pid ( ) } = $ proc ;
}
}
# Return immediately if no check proceess was started
return 0 unless ( keys % started ) ;
2011-05-25 16:07:16 +02:00
my $ timeout = start_timer ( check_timeout ( $ tinfo ) ) ;
2008-08-04 21:54:44 +02:00
while ( 1 ) {
my $ result ;
2009-11-24 09:12:48 +01:00
my $ proc = My::SafeProcess - > wait_any_timeout ( $ timeout ) ;
2008-08-04 21:54:44 +02:00
mtr_report ( "Got $proc" ) ;
if ( delete $ started { $ proc - > pid ( ) } ) {
# One mysqltest process returned
my $ err_file = $ proc - > user_data ( ) ;
my $ res = $ proc - > exit_status ( ) ;
# Append the report from .err file
$ tinfo - > { comment } . = " == $err_file ==\n" ;
$ tinfo - > { comment } . = mtr_grab_file ( $ err_file ) ;
$ tinfo - > { comment } . = "\n" ;
# Remove the .err file
unlink ( $ err_file ) ;
if ( keys ( % started ) == 0 ) {
# All completed
return 0 ;
}
# Wait for next process to exit
next ;
}
2009-11-24 09:12:48 +01:00
elsif ( $ proc - > { timeout } ) {
$ tinfo - > { comment } . = "Timeout for '$run' expired after "
2011-05-25 16:07:16 +02:00
. check_timeout ( $ tinfo ) . " seconds" ;
2008-08-04 21:54:44 +02:00
}
else {
# Unknown process returned, most likley a crash, abort everything
$ tinfo - > { comment } . =
2009-10-14 09:31:34 +02:00
"The server $proc crashed while running '$run'" .
get_log_from_proc ( $ proc , $ tinfo - > { name } ) ;
2008-08-04 21:54:44 +02:00
}
# Kill any check processes still running
map ( $ _ - > kill ( ) , values ( % started ) ) ;
return 1 ;
}
2008-11-21 13:45:28 +01:00
mtr_error ( "INTERNAL_ERROR: run_on_all" ) ;
2008-08-04 21:54:44 +02:00
}
2007-12-12 18:19:24 +01:00
sub mark_log {
my ( $ log , $ tinfo ) = @ _ ;
my $ log_msg = "CURRENT_TEST: $tinfo->{name}\n" ;
2009-03-20 15:18:22 +01:00
pre_write_errorlog ( $ log , $ tinfo - > { name } ) ;
2007-12-12 18:19:24 +01:00
mtr_tofile ( $ log , $ log_msg ) ;
2006-11-28 19:54:16 +01:00
}
2007-12-12 18:19:24 +01:00
2006-10-13 10:41:40 +02:00
sub find_testcase_skipped_reason ($)
{
my ( $ tinfo ) = @ _ ;
2007-06-13 10:35:20 +02:00
# Set default message
$ tinfo - > { 'comment' } = "Detected by testcase(no log file)" ;
2008-02-25 16:41:59 +01:00
# Open the test log file
my $ F = IO::File - > new ( $ path_current_testlog )
2007-06-13 10:35:20 +02:00
or return ;
2006-10-13 10:41:40 +02:00
my $ reason ;
while ( my $ line = <$F> )
{
2006-11-23 15:41:21 +01:00
# Look for "reason: <reason for skipping test>"
2006-10-13 10:41:40 +02:00
if ( $ line =~ /reason: (.*)/ )
2004-12-30 16:34:01 +01:00
{
2006-10-13 10:41:40 +02:00
$ reason = $ 1 ;
}
}
2006-02-09 09:40:48 +01:00
2006-10-13 10:41:40 +02:00
if ( ! $ reason )
{
2008-02-25 16:41:59 +01:00
mtr_warning ( "Could not find reason for skipping test in $path_current_testlog" ) ;
2006-10-13 10:41:40 +02:00
$ reason = "Detected by testcase(reason unknown) " ;
2006-08-23 15:35:24 +02:00
}
2006-10-13 10:41:40 +02:00
$ tinfo - > { 'comment' } = $ reason ;
}
2008-08-04 21:54:44 +02:00
sub find_analyze_request
{
# Open the test log file
my $ F = IO::File - > new ( $ path_current_testlog )
or return ;
my $ analyze ;
while ( my $ line = <$F> )
{
# Look for "reason: <reason for skipping test>"
if ( $ line =~ /analyze: (.*)/ )
{
$ analyze = $ 1 ;
}
}
return $ analyze ;
}
2019-07-11 06:13:58 +02:00
# The test can leave a file in var/tmp/ to signal
# that all servers should be restarted
sub restart_forced_by_test ($)
{
my $ file = shift ;
my $ restart = 0 ;
foreach my $ mysqld ( mysqlds ( ) )
{
my $ datadir = $ mysqld - > value ( 'datadir' ) ;
my $ force_restart_file = "$datadir/mtr/$file" ;
if ( - f $ force_restart_file )
{
mtr_verbose ( "Restart of servers forced by test" ) ;
$ restart = 1 ;
last ;
}
}
return $ restart ;
}
2008-08-04 21:54:44 +02:00
2007-12-12 18:19:24 +01:00
# Return timezone value of tinfo or default value
sub timezone {
my ( $ tinfo ) = @ _ ;
2010-08-17 09:14:46 +02:00
local $ _ = $ tinfo - > { timezone } ;
return 'DEFAULT' unless defined $ _ ;
2010-08-25 22:22:33 +02:00
no warnings 'uninitialized' ;
s/\$\{(\w+)\}/$ENV{$1}/ge ;
s/\$(\w+)/$ENV{$1}/ge ;
2010-08-17 09:14:46 +02:00
$ _ ;
2007-12-12 18:19:24 +01:00
}
2006-08-21 09:53:04 +02:00
2010-08-17 09:14:46 +02:00
sub mycnf_create {
my ( $ config ) = @ _ ;
my $ res ;
2012-02-23 07:50:11 +01:00
foreach my $ group ( $ config - > option_groups ( ) ) {
2010-08-17 09:14:46 +02:00
$ res . = "[$group->{name}]\n" ;
foreach my $ option ( $ group - > options ( ) ) {
$ res . = $ option - > name ( ) ;
my $ value = $ option - > value ( ) ;
if ( defined $ value ) {
$ res . = "=$value" ;
}
$ res . = "\n" ;
}
$ res . = "\n" ;
}
$ res ;
2007-12-12 18:19:24 +01:00
}
2006-08-21 09:53:04 +02:00
2010-08-17 09:14:46 +02:00
sub config_files ($) {
my ( $ tinfo ) = @ _ ;
(
'my.cnf' = > \ & mycnf_create ,
2012-02-06 20:29:13 +01:00
$ tinfo - > { suite } - > config_files ( )
2010-08-17 09:14:46 +02:00
) ;
}
sub _like { return $ config ? $ config - > like ( $ _ [ 0 ] ) : ( ) ; }
sub mysqlds { return _like ( 'mysqld\.' ) ; }
sub fix_servers ($) {
my ( $ tinfo ) = @ _ ;
return ( ) unless $ config ;
my % servers = (
qr/mysqld\./ = > {
SORT = > 300 ,
START = > \ & mysql_server_start ,
WAIT = > \ & mysql_server_wait ,
} ,
2012-02-06 20:29:13 +01:00
$ tinfo - > { suite } - > servers ( )
2010-08-17 09:14:46 +02:00
) ;
for ( $ config - > groups ( ) ) {
while ( my ( $ re , $ prop ) = each % servers ) {
@$ _ { keys %$ prop } = values %$ prop if $ _ - > { name } =~ /^$re/ ;
}
}
2007-12-12 18:19:24 +01:00
}
2006-08-21 09:53:04 +02:00
2010-08-17 09:14:46 +02:00
sub all_servers {
return unless $ config ;
( sort { $ a - > { SORT } <=> $ b - > { SORT } }
grep { defined $ _ - > { SORT } } $ config - > groups ( ) ) ;
}
2006-08-21 09:53:04 +02:00
2007-12-12 18:19:24 +01:00
# Storage for changed environment variables
2011-07-02 22:12:12 +02:00
our % old_env ;
2006-08-21 09:53:04 +02:00
2011-05-09 16:07:43 +02:00
sub resfile_report_test ($) {
my $ tinfo = shift ;
resfile_new_test ( ) ;
resfile_test_info ( "name" , $ tinfo - > { name } ) ;
resfile_test_info ( "variation" , $ tinfo - > { combination } )
if $ tinfo - > { combination } ;
resfile_test_info ( "start_time" , isotime time ) ;
}
2007-12-12 18:19:24 +01:00
#
# Run a single test case
#
2008-01-10 10:44:18 +01:00
# RETURN VALUE
# 0 OK
# > 0 failure
#
2009-03-20 15:18:22 +01:00
sub run_testcase ($$) {
my ( $ tinfo , $ server_socket ) = @ _ ;
2013-02-06 08:32:14 +01:00
my $ print_freq = 20 ;
2023-04-20 02:10:23 +02:00
mtr_verbose ( "Running test:" , $ tinfo - > { name } ) ;
2016-07-22 01:19:35 +02:00
$ ENV { 'MTR_TEST_NAME' } = $ tinfo - > { name } ;
2011-05-09 16:07:43 +02:00
resfile_report_test ( $ tinfo ) if $ opt_resfile ;
2007-12-12 18:19:24 +01:00
2017-12-03 19:25:07 +01:00
for my $ key ( grep { /^MTR_COMBINATION/ } keys % ENV )
2009-10-08 11:14:42 +02:00
{
2017-12-03 19:25:07 +01:00
delete $ ENV { $ key } ;
2009-10-08 11:14:42 +02:00
}
2017-12-03 19:25:07 +01:00
if ( ref $ tinfo - > { combinations } eq 'ARRAY' )
{
for ( my $ i = 0 ; $ i < @ { $ tinfo - > { combinations } } ; + + $ i )
{
my $ combination = $ tinfo - > { combinations } - > [ $ i ] ;
# Allow only alphanumerics plus _ - + . in combination names,
# or anything beginning with -- (the latter comes from --combination)
if ( $ combination && $ combination !~ /^\w[-\w\.\+]*$/
&& $ combination !~ /^--/ )
{
mtr_error ( "Combination '$combination' contains illegal characters" ) ;
}
$ ENV { "MTR_COMBINATION_" . uc ( $ { combination } ) } = 1 ;
}
$ ENV { "MTR_COMBINATIONS" } = join ( ',' , @ { $ tinfo - > { combinations } } ) ;
}
elsif ( exists $ tinfo - > { combinations } )
{
die 'Unexpected type of $tinfo->{combinations}' ;
}
2006-10-20 17:09:07 +02:00
# -------------------------------------------------------
# Init variables that can change between each test case
# -------------------------------------------------------
2007-12-12 18:19:24 +01:00
my $ timezone = timezone ( $ tinfo ) ;
2010-01-19 11:36:52 +01:00
if ( $ timezone ne 'DEFAULT' ) {
$ ENV { 'TZ' } = $ timezone ;
2010-01-27 18:41:05 +01:00
} else {
delete ( $ ENV { 'TZ' } ) ;
2010-01-19 11:36:52 +01:00
}
2012-02-23 07:50:11 +01:00
$ ENV { MTR_SUITE_DIR } = $ tinfo - > { suite } - > { dir } ;
2007-12-12 18:19:24 +01:00
mtr_verbose ( "Setting timezone: $timezone" ) ;
2006-10-20 17:09:07 +02:00
2007-12-12 18:19:24 +01:00
if ( ! using_extern ( ) )
2006-08-16 10:30:22 +02:00
{
2007-12-12 18:19:24 +01:00
my @ restart = servers_need_restart ( $ tinfo ) ;
if ( @ restart != 0 ) {
2009-03-20 15:18:22 +01:00
# Remember that we restarted for this test case (count restarts)
$ tinfo - > { 'restarted' } = 1 ;
2010-08-17 09:14:46 +02:00
stop_servers ( reverse @ restart ) ;
2009-03-20 15:18:22 +01:00
if ( $ opt_warnings ) {
check_warnings_post_shutdown ( $ server_socket ) ;
}
2005-08-29 20:28:42 +02:00
}
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
if ( started ( all_servers ( ) ) == 0 )
{
2008-04-27 15:32:12 +02:00
# Remove old datadirs
2009-04-30 13:23:36 +02:00
clean_datadir ( ) unless $ opt_start_dirty ;
2008-04-27 15:32:12 +02:00
2007-12-12 18:19:24 +01:00
# Restore old ENV
while ( my ( $ option , $ value ) = each ( % old_env ) ) {
if ( defined $ value ) {
mtr_verbose ( "Restoring $option to $value" ) ;
$ ENV { $ option } = $ value ;
2008-08-04 07:04:47 +02:00
2007-12-12 18:19:24 +01:00
} else {
mtr_verbose ( "Removing $option" ) ;
delete ( $ ENV { $ option } ) ;
}
}
% old_env = ( ) ;
mtr_verbose ( "Generating my.cnf from '$tinfo->{template_path}'" ) ;
# Generate new config file from template
$ config = My::ConfigFactory - > new_config
( {
2011-02-23 01:00:30 +01:00
testname = > $ tinfo - > { name } ,
2007-12-12 18:19:24 +01:00
basedir = > $ basedir ,
2010-06-15 11:16:38 +02:00
testdir = > $ glob_mysql_test_dir ,
2007-12-12 18:19:24 +01:00
template_path = > $ tinfo - > { template_path } ,
extra_template_path = > $ tinfo - > { extra_template_path } ,
vardir = > $ opt_vardir ,
tmpdir = > $ opt_tmpdir ,
2008-08-10 19:46:43 +02:00
baseport = > $ baseport ,
2007-12-12 18:19:24 +01:00
user = > $ opt_user ,
password = > '' ,
2007-12-13 15:02:50 +01:00
ssl = > $ opt_ssl_supported ,
2008-02-22 15:38:10 +01:00
embedded = > $ opt_embedded_server ,
2007-12-12 18:19:24 +01:00
}
) ;
2006-11-28 19:54:16 +01:00
2010-08-17 09:14:46 +02:00
fix_servers ( $ tinfo ) ;
# Write config files:
my % config_files = config_files ( $ tinfo ) ;
while ( my ( $ file , $ generate ) = each % config_files ) {
2011-07-16 09:59:15 +02:00
next unless $ generate ;
2010-08-17 09:14:46 +02:00
my ( $ path ) = "$opt_vardir/$file" ;
open ( F , '>' , $ path ) or die "Could not open '$path': $!" ;
print F & $ generate ( $ config ) ;
close F ;
}
2006-11-28 19:54:16 +01:00
2007-12-12 18:19:24 +01:00
# Remember current config so a restart can occur when a test need
# to use a different one
$ current_config_name = $ tinfo - > { template_path } ;
#
# Set variables in the ENV section
#
foreach my $ option ( $ config - > options_in_group ( "ENV" ) )
{
2013-12-25 10:13:15 +01:00
my ( $ name , $ val ) = ( $ option - > name ( ) , $ option - > value ( ) ) ;
2007-12-12 18:19:24 +01:00
2013-12-25 10:13:15 +01:00
# Save old value to restore it before next time
$ old_env { $ name } = $ ENV { $ name } ;
unless ( defined $ val ) {
mtr_warning ( "Uninitialized value for " , $ name ,
", group [ENV], file " , $ current_config_name ) ;
} else {
mtr_verbose ( $ name , "=" , $ val ) ;
$ ENV { $ name } = $ val ;
}
2007-12-12 18:19:24 +01:00
}
}
# Write start of testcase to log
2008-02-25 16:41:59 +01:00
mark_log ( $ path_current_testlog , $ tinfo ) ;
2007-12-12 18:19:24 +01:00
2010-10-19 15:58:35 +02:00
# Make sure the safe_process also exits from now on
if ( $ opt_start_exit ) {
My::SafeProcess - > start_exit ( ) ;
}
2007-12-12 18:19:24 +01:00
if ( start_servers ( $ tinfo ) )
2004-12-30 16:34:01 +01:00
{
2006-10-06 17:15:26 +02:00
report_failure_and_restart ( $ tinfo ) ;
2020-11-09 11:58:49 +01:00
unlink $ path_current_testlog ;
2006-10-06 17:15:26 +02:00
return 1 ;
2004-12-30 16:34:01 +01:00
}
2006-08-16 10:30:22 +02:00
}
2010-10-19 14:08:46 +02:00
mark_time_used ( 'restart' ) ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
# --------------------------------------------------------------------
# If --start or --start-dirty given, stop here to let user manually
2006-04-21 04:17:14 +02:00
# run tests
2009-04-29 16:13:38 +02:00
# If --wait-all is also given, do the same, but don't die if one
# server exits
2005-08-17 03:35:50 +02:00
# ----------------------------------------------------------------------
2009-04-29 16:13:38 +02:00
2009-08-18 09:38:18 +02:00
if ( $ start_only )
2005-08-17 03:35:50 +02:00
{
2008-05-09 11:50:36 +02:00
mtr_print ( "\nStarted" , started ( all_servers ( ) ) ) ;
2009-08-18 09:38:18 +02:00
mtr_print ( "Using config for test" , $ tinfo - > { name } ) ;
mtr_print ( "Port and socket path for server(s):" ) ;
foreach my $ mysqld ( mysqlds ( ) )
{
mtr_print ( $ mysqld - > name ( ) . " " . $ mysqld - > value ( 'port' ) .
" " . $ mysqld - > value ( 'socket' ) ) ;
}
2010-03-16 10:45:32 +01:00
if ( $ opt_start_exit )
{
mtr_print ( "Server(s) started, not waiting for them to finish" ) ;
if ( IS_WINDOWS )
{
POSIX:: _exit ( 0 ) ; # exit hangs here in ActiveState Perl
}
else
{
exit ( 0 ) ;
}
}
2008-05-09 11:50:36 +02:00
mtr_print ( "Waiting for server(s) to exit..." ) ;
2009-04-29 16:13:38 +02:00
if ( $ opt_wait_all ) {
My::SafeProcess - > wait_all ( ) ;
mtr_print ( "All servers exited" ) ;
exit ( 1 ) ;
}
else {
my $ proc = My::SafeProcess - > wait_any ( ) ;
if ( grep ( $ proc eq $ _ , started ( all_servers ( ) ) ) )
{
mtr_print ( "Server $proc died" ) ;
exit ( 1 ) ;
}
mtr_print ( "Unknown process $proc died" ) ;
2008-01-18 22:30:38 +01:00
exit ( 1 ) ;
}
2005-08-17 03:35:50 +02:00
}
2010-08-30 11:25:10 +02:00
my $ test_timeout = start_timer ( testcase_timeout ( $ tinfo ) ) ;
2007-12-12 18:19:24 +01:00
do_before_run_mysqltest ( $ tinfo ) ;
2011-04-07 10:12:52 +02:00
mark_time_used ( 'admin' ) ;
2010-10-19 14:08:46 +02:00
2008-04-27 21:31:32 +02:00
if ( $ opt_check_testcases and check_testcase ( $ tinfo , "before" ) ) {
# Failed to record state of server or server crashed
report_failure_and_restart ( $ tinfo ) ;
2008-04-28 08:17:23 +02:00
2008-04-27 21:31:32 +02:00
return 1 ;
2007-12-12 18:19:24 +01:00
}
2006-11-21 22:12:45 +01:00
2012-02-06 20:29:13 +01:00
my $ test = $ tinfo - > { suite } - > start_test ( $ tinfo ) ;
2018-03-19 08:41:33 +01:00
# Set to a list of processes we have to keep waiting (expectedly died servers)
my % keep_waiting_proc = ( ) ;
2013-02-05 07:28:21 +01:00
my $ print_timeout = start_timer ( $ print_freq * 60 ) ;
2006-11-21 21:32:58 +01:00
2007-12-12 18:19:24 +01:00
while ( 1 )
{
2009-04-08 14:54:36 +02:00
my $ proc ;
2018-08-31 13:45:49 +02:00
if ( % keep_waiting_proc )
2009-04-08 14:54:36 +02:00
{
# Any other process exited?
$ proc = My::SafeProcess - > check_any ( ) ;
if ( $ proc )
{
mtr_verbose ( "Found exited process $proc" ) ;
}
else
{
2009-11-24 09:12:48 +01:00
# Also check if timer has expired, if so cancel waiting
if ( has_expired ( $ test_timeout ) )
{
2018-03-19 08:41:33 +01:00
% keep_waiting_proc = ( ) ;
2009-11-24 09:12:48 +01:00
}
2009-04-08 14:54:36 +02:00
}
}
2018-08-31 13:45:49 +02:00
if ( ! % keep_waiting_proc && ! $ proc )
2009-04-08 14:54:36 +02:00
{
2018-03-19 08:41:33 +01:00
if ( $ test_timeout > $ print_timeout )
2013-02-05 07:28:21 +01:00
{
2018-03-19 08:41:33 +01:00
$ proc = My::SafeProcess - > wait_any_timeout ( $ print_timeout ) ;
if ( $ proc - > { timeout } )
{
#print out that the test is still on
mtr_print ( "Test still running: $tinfo->{name}" ) ;
#reset the timer
$ print_timeout = start_timer ( $ print_freq * 60 ) ;
next ;
}
2013-02-05 07:28:21 +01:00
}
else
{
2018-03-19 08:41:33 +01:00
$ proc = My::SafeProcess - > wait_any_timeout ( $ test_timeout ) ;
2013-02-05 07:28:21 +01:00
}
2009-04-08 14:54:36 +02:00
}
2018-08-31 13:45:49 +02:00
if ( $ proc and $ proc eq $ test ) # mysqltest itself exited
2018-04-28 19:28:50 +02:00
{
my $ res = $ test - > exit_status ( ) ;
2007-12-12 18:19:24 +01:00
2018-04-28 19:28:50 +02:00
if ( ( $ res == 0 or $ res == 62 ) and $ opt_warnings and check_warnings ( $ tinfo ) )
{
# If test case suceeded, but it has produced unexpected
# warnings, continue with $res == 1;
# but if the test was skipped, it should remain skipped
$ res = 1 if $ res == 0 ;
resfile_output ( $ tinfo - > { 'warnings' } ) if $ opt_resfile ;
}
2018-03-19 08:41:33 +01:00
2018-04-28 19:28:50 +02:00
if ( $ res == 0 )
{
2018-03-19 08:41:33 +01:00
my $ check_res ;
2019-07-11 06:13:58 +02:00
if ( restart_forced_by_test ( 'force_restart' ) )
{
stop_all_servers ( $ opt_shutdown_timeout ) ;
}
elsif ( $ opt_check_testcases and
$ check_res = check_testcase ( $ tinfo , "after" ) )
2018-03-19 08:41:33 +01:00
{
if ( $ check_res == 1 ) {
# Test case had sideeffects, not fatal error, just continue
2018-04-28 19:28:50 +02:00
if ( $ opt_warnings ) {
# Checking error logs for warnings, so need to stop server
# gracefully so that memory leaks etc. can be properly detected.
stop_servers ( reverse all_servers ( ) ) ;
check_warnings_post_shutdown ( $ server_socket ) ;
# Even if we got warnings here, we should not fail this
# particular test, as the warnings may be caused by an earlier
# test.
} else {
# Not checking warnings, so can do a hard shutdown.
2018-03-19 08:41:33 +01:00
stop_all_servers ( $ opt_shutdown_timeout ) ;
2018-03-19 08:41:33 +01:00
}
2018-03-19 08:41:33 +01:00
mtr_report ( "Resuming tests...\n" ) ;
resfile_output ( $ tinfo - > { 'check' } ) if $ opt_resfile ;
}
else {
# Test case check failed fatally, probably a server crashed
report_failure_and_restart ( $ tinfo ) ;
return 1 ;
}
}
mtr_report_test_passed ( $ tinfo ) ;
2007-12-12 18:19:24 +01:00
}
2018-04-28 19:28:50 +02:00
elsif ( $ res == 62 )
2007-12-12 18:19:24 +01:00
{
2018-03-19 08:41:33 +01:00
# Testcase itself tell us to skip this one
$ tinfo - > { skip_detected_by_test } = 1 ;
# Try to get reason from test log file
find_testcase_skipped_reason ( $ tinfo ) ;
mtr_report_test_skipped ( $ tinfo ) ;
# Restart if skipped due to missing perl, it may have had side effects
2019-07-11 06:13:58 +02:00
if ( restart_forced_by_test ( 'force_restart_if_skipped' ) ||
$ tinfo - > { 'comment' } =~ /^perl not found/ )
2018-03-19 08:41:33 +01:00
{
stop_all_servers ( $ opt_shutdown_timeout ) ;
}
2007-12-12 18:19:24 +01:00
}
2018-04-28 19:28:50 +02:00
elsif ( $ res == 65 )
2008-02-25 16:41:59 +01:00
{
2018-03-19 08:41:33 +01:00
# Testprogram killed by signal
$ tinfo - > { comment } =
"testprogram crashed(returned code $res)" ;
report_failure_and_restart ( $ tinfo ) ;
2018-03-19 08:41:33 +01:00
}
2018-04-28 19:28:50 +02:00
elsif ( $ res == 1 )
2018-03-19 08:41:33 +01:00
{
2018-03-19 08:41:33 +01:00
# Check if the test tool requests that
# an analyze script should be run
my $ analyze = find_analyze_request ( ) ;
if ( $ analyze ) {
run_on_all ( $ tinfo , "analyze-$analyze" ) ;
}
2018-04-28 19:28:50 +02:00
2018-03-19 08:41:33 +01:00
# Wait a bit and see if a server died, if so report that instead
mtr_milli_sleep ( 100 ) ;
my $ srvproc = My::SafeProcess:: check_any ( ) ;
if ( $ srvproc && grep ( $ srvproc eq $ _ , started ( all_servers ( ) ) ) ) {
$ proc = $ srvproc ;
goto SRVDIED ;
}
2018-04-28 19:28:50 +02:00
2018-03-19 08:41:33 +01:00
# Test case failure reported by mysqltest
report_failure_and_restart ( $ tinfo ) ;
2018-04-28 19:28:50 +02:00
}
else
{
2018-03-19 08:41:33 +01:00
# mysqltest failed, probably crashed
$ tinfo - > { comment } =
"mysqltest failed with unexpected return code $res\n" ;
report_failure_and_restart ( $ tinfo ) ;
2018-04-28 19:28:50 +02:00
}
# Save info from this testcase run to mysqltest.log
if ( - f $ path_current_testlog )
{
2018-03-19 08:41:33 +01:00
if ( $ opt_resfile && $ res && $ res != 62 ) {
resfile_output_file ( $ path_current_testlog ) ;
}
mtr_appendfile_to_file ( $ path_current_testlog , $ path_testlog ) ;
unlink ( $ path_current_testlog ) ;
2008-02-25 16:41:59 +01:00
}
2018-04-28 19:28:50 +02:00
return ( $ res == 62 ) ? 0 : $ res ;
2023-08-04 11:10:34 +02:00
} # if ($proc and $proc eq $test)
elsif ( $ proc )
2018-04-28 19:28:50 +02:00
{
2018-03-19 08:41:33 +01:00
# It was not mysqltest that exited, add to a wait-to-be-started-again list.
$ keep_waiting_proc { $ proc } = 1 ;
2005-08-18 00:16:44 +02:00
}
2007-12-12 18:19:24 +01:00
2018-03-19 08:41:33 +01:00
mtr_verbose ( "Got " . join ( "," , keys ( % keep_waiting_proc ) ) ) ;
mark_time_used ( 'test' ) ;
foreach my $ wait_for_proc ( keys ( % keep_waiting_proc ) ) {
# ----------------------------------------------------
# Check if it was an expected crash
# ----------------------------------------------------
2021-07-05 22:02:23 +02:00
my @ mysqld = grep ( $ wait_for_proc eq $ _ - > { proc } , mysqlds ( ) ) ;
goto SRVDIED unless @ mysqld ;
my $ check_crash = check_expected_crash_and_restart ( $ mysqld [ 0 ] ) ;
2018-03-19 08:41:33 +01:00
if ( $ check_crash == 0 ) # unexpected exit/crash of $wait_for_proc
{
2021-07-05 22:02:23 +02:00
$ proc = $ mysqld [ 0 ] - > { proc } ;
2018-08-31 13:45:49 +02:00
goto SRVDIED ;
2018-03-19 08:41:33 +01:00
}
elsif ( $ check_crash == 1 ) # $wait_for_proc was started again by check_expected_crash_and_restart()
{
delete $ keep_waiting_proc { $ wait_for_proc } ;
}
elsif ( $ check_crash == 2 ) # we must keep waiting
{
# do nothing
}
2023-08-04 11:10:34 +02:00
} # foreach my $wait_for_proc
2007-12-12 18:19:24 +01:00
2018-08-31 13:45:49 +02:00
next ;
2007-12-12 18:19:24 +01:00
2010-11-24 10:22:03 +01:00
SRVDIED:
2008-04-10 13:16:32 +02:00
# ----------------------------------------------------
# Stop the test case timer
# ----------------------------------------------------
2009-11-24 09:12:48 +01:00
$ test_timeout = 0 ;
2008-04-10 13:16:32 +02:00
2007-12-12 18:19:24 +01:00
# ----------------------------------------------------
# Check if it was a server that died
# ----------------------------------------------------
if ( grep ( $ proc eq $ _ , started ( all_servers ( ) ) ) )
2004-12-30 16:34:01 +01:00
{
2007-12-12 18:19:24 +01:00
# Server failed, probably crashed
$ tinfo - > { comment } =
2009-10-14 09:31:34 +02:00
"Server $proc failed during test run" .
get_log_from_proc ( $ proc , $ tinfo - > { name } ) ;
2007-12-12 18:19:24 +01:00
2009-01-21 10:34:01 +01:00
# ----------------------------------------------------
# It's not mysqltest that has exited, kill it
# ----------------------------------------------------
$ test - > kill ( ) ;
2006-10-17 10:31:06 +02:00
report_failure_and_restart ( $ tinfo ) ;
2008-01-10 10:44:18 +01:00
return 1 ;
2006-10-17 10:31:06 +02:00
}
2007-12-12 18:19:24 +01:00
2009-01-21 10:34:01 +01:00
# Try to dump core for mysqltest and all servers
2016-08-21 19:14:13 +02:00
foreach my $ proc ( $ test , started ( all_servers ( ) ) )
2009-01-21 10:34:01 +01:00
{
mtr_print ( "Trying to dump core for $proc" ) ;
if ( $ proc - > dump_core ( ) )
{
$ proc - > wait_one ( 20 ) ;
}
}
# ----------------------------------------------------
# It's not mysqltest that has exited, kill it
# ----------------------------------------------------
$ test - > kill ( ) ;
2007-12-12 18:19:24 +01:00
# ----------------------------------------------------
# Check if testcase timer expired
# ----------------------------------------------------
2009-11-24 09:12:48 +01:00
if ( $ proc - > { timeout } )
2004-12-30 16:34:01 +01:00
{
2008-11-14 21:35:32 +01:00
my $ log_file_name = $ opt_vardir . "/log/" . $ tinfo - > { shortname } . ".log" ;
2008-08-04 21:54:44 +02:00
$ tinfo - > { comment } =
2010-08-30 11:25:10 +02:00
"Test case timeout after " . testcase_timeout ( $ tinfo ) .
2008-11-21 13:45:28 +01:00
" seconds\n\n" ;
2008-11-15 12:40:40 +01:00
# Add 20 last executed commands from test case log file
2008-11-14 21:35:32 +01:00
if ( - e $ log_file_name )
{
$ tinfo - > { comment } . =
2008-11-21 13:45:28 +01:00
"== $log_file_name == \n" .
mtr_lastlinesfromfile ( $ log_file_name , 20 ) . "\n" ;
2008-11-14 21:35:32 +01:00
}
2010-08-30 11:25:10 +02:00
$ tinfo - > { 'timeout' } = testcase_timeout ( $ tinfo ) ; # Mark as timeout
2008-08-04 21:54:44 +02:00
run_on_all ( $ tinfo , 'analyze-timeout' ) ;
2009-01-21 10:34:01 +01:00
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
report_failure_and_restart ( $ tinfo ) ;
2008-01-10 10:44:18 +01:00
return 1 ;
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
}
2005-08-29 20:28:42 +02:00
2007-12-12 18:19:24 +01:00
mtr_error ( "Unhandled process $proc exited" ) ;
2005-08-29 20:28:42 +02:00
}
2008-01-10 10:44:18 +01:00
mtr_error ( "Should never come here" ) ;
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
}
2004-12-30 16:34:01 +01:00
2006-03-13 10:30:36 +01:00
2009-03-20 15:18:22 +01:00
# Keep track of last position in mysqld error log where we scanned for
# warnings, so we can attribute any warnings found to the correct test
# suite or server restart.
2011-07-02 22:12:12 +02:00
our $ last_warning_position = { } ;
2009-03-20 15:18:22 +01:00
# Called just before a mysqld server is started or a testcase is run,
# to keep track of which tests have been run since last restart, and
# of when the error log is reset.
#
# Second argument $test_name is test name, or undef for server restart.
sub pre_write_errorlog {
my ( $ error_log , $ test_name ) = @ _ ;
if ( ! - e $ error_log ) {
# If the error log is moved away, reset the warning parse position.
delete $ last_warning_position - > { $ error_log } ;
}
if ( defined ( $ test_name ) ) {
$ last_warning_position - > { $ error_log } { test_names } = []
unless exists ( $ last_warning_position - > { $ error_log } { test_names } ) ;
push @ { $ last_warning_position - > { $ error_log } { test_names } } , $ test_name ;
} else {
# Server restart, so clear the list of tests run since last restart.
# (except the last one (if any), which is the test about to be run).
if ( defined ( $ last_warning_position - > { $ error_log } { test_names } ) &&
@ { $ last_warning_position - > { $ error_log } { test_names } } ) {
$ last_warning_position - > { $ error_log } { test_names } =
[ $ last_warning_position - > { $ error_log } { test_names } [ - 1 ] ] ;
} else {
$ last_warning_position - > { $ error_log } { test_names } = [] ;
}
}
}
2009-10-14 09:31:34 +02:00
# Extract server log from after the last occurrence of named test
# Return as an array of lines
2009-01-27 14:53:58 +01:00
#
2009-10-14 09:31:34 +02:00
sub extract_server_log ($$) {
2009-08-28 15:02:48 +02:00
my ( $ error_log , $ tname ) = @ _ ;
2010-08-17 09:14:46 +02:00
return unless $ error_log ;
2009-01-27 14:53:58 +01:00
# Open the servers .err log file and read all lines
2009-11-11 12:17:49 +01:00
# belonging to current test into @lines
2009-01-27 14:53:58 +01:00
my $ Ferr = IO::File - > new ( $ error_log )
or mtr_error ( "Could not open file '$error_log' for reading: $!" ) ;
my @ lines ;
2009-08-28 15:02:48 +02:00
my $ found_test = 0 ; # Set once we've found the log of this test
2009-01-27 14:53:58 +01:00
while ( my $ line = <$Ferr> )
{
2009-08-28 15:02:48 +02:00
if ( $ found_test )
2009-01-27 14:53:58 +01:00
{
2009-08-28 15:02:48 +02:00
# If test wasn't last after all, discard what we found, test again.
if ( $ line =~ /^CURRENT_TEST:/ )
{
@ lines = ( ) ;
$ found_test = $ line =~ /^CURRENT_TEST: $tname/ ;
}
else
{
push ( @ lines , $ line ) ;
2011-09-19 16:06:35 +02:00
if ( scalar ( @ lines ) > 1000000 ) {
$ Ferr = undef ;
2017-03-29 22:10:42 +02:00
mtr_warning ( "Too much log in $error_log, bailing out from extracting" ) ;
2011-09-19 16:06:35 +02:00
return ( ) ;
}
2009-08-28 15:02:48 +02:00
}
}
else
2009-01-27 14:53:58 +01:00
{
2009-08-28 15:02:48 +02:00
# Search for beginning of test, until found
$ found_test = 1 if ( $ line =~ /^CURRENT_TEST: $tname/ ) ;
2009-01-27 14:53:58 +01:00
}
}
$ Ferr = undef ; # Close error log file
2009-10-14 09:31:34 +02:00
return @ lines ;
}
# Get log from server identified from its $proc object, from named test
# Return as a single string
#
sub get_log_from_proc ($$) {
my ( $ proc , $ name ) = @ _ ;
my $ srv_log = "" ;
2010-08-17 09:14:46 +02:00
foreach my $ mysqld ( all_servers ( ) ) {
2009-10-14 09:31:34 +02:00
if ( $ mysqld - > { proc } eq $ proc ) {
2017-04-05 13:17:43 +02:00
my @ srv_lines = extract_server_log ( $ mysqld - > if_exist ( 'log-error' ) , $ name ) ;
2010-10-19 14:01:14 +02:00
$ srv_log = "\nServer log from this test:\n" .
"----------SERVER LOG START-----------\n" . join ( "" , @ srv_lines ) .
"----------SERVER LOG END-------------\n" ;
2009-10-14 09:31:34 +02:00
last ;
}
}
return $ srv_log ;
}
2009-11-23 15:04:17 +01:00
#
2009-10-14 09:31:34 +02:00
# Perform a rough examination of the servers
# error log and write all lines that look
# suspicious into $error_log.warnings
#
2011-05-10 17:17:43 +02:00
sub extract_warning_lines ($$) {
my ( $ error_log , $ append ) = @ _ ;
2009-10-14 09:31:34 +02:00
2009-11-23 15:04:17 +01:00
# Open the servers .err log file and read all lines
# belonging to current tets into @lines
my $ Ferr = IO::File - > new ( $ error_log )
or return [] ;
my $ last_pos = $ last_warning_position - > { $ error_log } { seek_pos } ;
$ Ferr - > seek ( $ last_pos , 0 ) if defined ( $ last_pos ) ;
# If the seek fails, we will parse the whole error log, at least we will not
# miss any warnings.
my @ lines = <$Ferr> ;
$ last_warning_position - > { $ error_log } { seek_pos } = $ Ferr - > tell ( ) ;
$ Ferr = undef ; # Close error log file
# mysql_client_test.test sends a COM_DEBUG packet to the server
2011-12-11 09:00:12 +01:00
# to provoke a safemalloc leak report, ignore any warnings
2009-11-23 15:04:17 +01:00
# between "Begin/end safemalloc memory dump"
if ( grep ( /Begin safemalloc memory dump:/ , @ lines ) > 0 )
{
my $ discard_lines = 1 ;
foreach my $ line ( @ lines )
{
if ( $ line =~ /Begin safemalloc memory dump:/ ) {
$ discard_lines = 1 ;
} elsif ( $ line =~ /End safemalloc memory dump./ ) {
$ discard_lines = 0 ;
}
2009-10-14 09:31:34 +02:00
2009-11-23 15:04:17 +01:00
if ( $ discard_lines ) {
$ line = "ignored" ;
}
}
}
2009-01-27 14:53:58 +01:00
2009-11-23 15:04:17 +01:00
# Write all suspicious lines to $error_log.warnings file
2009-01-27 14:53:58 +01:00
my $ warning_log = "$error_log.warnings" ;
2011-05-10 17:17:43 +02:00
my $ Fwarn = IO::File - > new ( $ warning_log , $ append ? "a+" : "w" )
2009-01-27 14:53:58 +01:00
or die ( "Could not open file '$warning_log' for writing: $!" ) ;
2011-05-10 17:17:43 +02:00
if ( ! $ append )
{
print $ Fwarn "Suspicious lines from $error_log\n" ;
}
2009-01-27 14:53:58 +01:00
my @ patterns =
(
2020-04-07 06:53:40 +02:00
qr/^Warning|(mysqld|mariadbd): Warning|\[Warning\]/ ,
2009-08-25 15:56:50 +02:00
qr/^Error:|\[ERROR\]/ ,
2009-11-12 11:04:01 +01:00
qr/^==\d+==\s+\S/ , # valgrind errors
2009-01-27 14:53:58 +01:00
qr/InnoDB: Warning|InnoDB: Error/ ,
qr/^safe_mutex:|allocated at line/ ,
qr/missing DBUG_RETURN/ ,
qr/Attempting backtrace/ ,
qr/Assertion .* failed/ ,
2019-12-04 16:29:33 +01:00
qr/Sanitizer/ ,
qr/runtime error:/ ,
2009-01-27 14:53:58 +01:00
) ;
2009-03-20 15:18:22 +01:00
# These are taken from the include/mtr_warnings.sql global suppression
# list. They occur delayed, so they can be parsed during shutdown rather
# than during the per-test check.
#
# ToDo: having the warning suppressions inside the mysqld we are trying to
# check is in any case horrible. We should change it to all be done here
# within the Perl code, which is both simpler, easier, faster, and more
# robust. We could still have individual test cases put in suppressions by
# parsing statically or by writing dynamically to a CSV table read by the
# Perl code.
my @ antipatterns =
(
2014-09-26 10:22:44 +02:00
@ global_suppressions ,
2009-11-16 21:49:51 +01:00
qr/error .*connecting to master/ ,
2009-03-20 15:18:22 +01:00
qr/InnoDB: Error: in ALTER TABLE `test`.`t[12]`/ ,
2012-03-16 17:47:31 +01:00
qr/InnoDB: Error: table `test`.`t[12]` .*does not exist in the InnoDB internal/ ,
2011-02-03 00:01:12 +01:00
qr/InnoDB: Warning: a long semaphore wait:/ ,
2015-05-31 07:10:07 +02:00
qr/InnoDB: Dumping buffer pool.*/ ,
qr/InnoDB: Buffer pool.*/ ,
2024-01-26 10:21:14 +01:00
qr/InnoDB: Could not free any blocks in the buffer pool!/ ,
2017-02-17 19:09:14 +01:00
qr/InnoDB: Warning: Writer thread is waiting this semaphore:/ ,
2019-08-30 15:06:54 +02:00
qr/InnoDB: innodb_open_files .* should not be greater than/ ,
2013-05-03 00:54:47 +02:00
qr/Slave: Unknown table 't1' .* 1051/ ,
qr/Slave SQL:.*(Internal MariaDB error code: [[:digit:]]+|Query:.*)/ ,
2009-11-24 10:34:42 +01:00
qr/slave SQL thread aborted/ ,
2010-08-17 09:14:46 +02:00
qr/unknown option '--loose[-_]/ ,
qr/unknown variable 'loose[-_]/ ,
2013-11-04 21:37:29 +01:00
#qr/Invalid .*old.* table or database name/,
2009-11-24 10:34:42 +01:00
qr/Now setting lower_case_table_names to [02]/ ,
2009-11-26 08:45:54 +01:00
qr/Setting lower_case_table_names=2/ ,
2010-08-11 12:55:54 +02:00
qr/You have forced lower_case_table_names to 0/ ,
2009-11-24 10:34:42 +01:00
qr/deprecated/ ,
2009-11-25 12:06:01 +01:00
qr/Slave SQL thread retried transaction/ ,
2009-11-26 09:02:33 +01:00
qr/Slave \(additional info\)/ ,
qr/Incorrect information in file/ ,
2020-10-15 01:25:57 +02:00
qr/Simulating error for/ ,
2009-11-27 14:20:59 +01:00
qr/Slave I\/ O: Get master SERVER_ID failed with error: . * / ,
qr/Slave I\/ O: Get master clock failed with error: . * / ,
qr/Slave I\/ O: Get master COLLATION_SERVER failed with error: . * / ,
qr/Slave I\/ O: Get master TIME_ZONE failed with error: . * / ,
2015-04-14 13:03:11 +02:00
qr/Slave I\/ O: Get master \ @ \ @ GLOBAL . gtid_domain_id failed with error: . * / ,
qr/Slave I\/ O: Setting \ @ slave_connect_state failed with error: . * / ,
qr/Slave I\/ O: Setting \ @ slave_gtid_strict_mode failed with error: . * / ,
qr/Slave I\/ O: Setting \ @ slave_gtid_ignore_duplicates failed with error: . * / ,
qr/Slave I\/ O: Setting \ @ slave_until_gtid failed with error: . * / ,
qr/Slave I\/ O: Get master GTID position failed with error: . * / ,
2009-11-27 14:20:59 +01:00
qr/Slave I\/ O: error reconnecting to master '.*' - retry - time : [ 1 - 3 ] retries / ,
2010-04-07 17:26:30 +02:00
qr/Slave I\/ 0 : Master command COM_BINLOG_DUMP failed / ,
2009-12-03 12:19:05 +01:00
qr/Error reading packet/ ,
2017-11-05 19:05:02 +01:00
qr/Lost connection to MariaDB server at 'reading initial communication packet'/ ,
2024-03-01 17:16:33 +01:00
qr/Could not read packet:.* state: [2-3] / ,
qr/Could not read packet:.* errno: 104 / ,
qr/Could not read packet:.* errno: 0 .* length: 0/ ,
qr/Could not write packet:.* errno: 32 / ,
qr/Could not write packet:.* errno: 104 / ,
qr/Semisync ack receiver got error 1158/ ,
2024-03-06 14:06:48 +01:00
qr/Semisync ack receiver got hangup/ ,
2024-03-01 17:16:33 +01:00
qr/Connection was killed/ ,
2010-04-07 17:26:30 +02:00
qr/Failed on request_dump/ ,
2009-12-03 12:19:05 +01:00
qr/Slave: Can't drop database.* database doesn't exist/ ,
2010-01-06 22:27:53 +01:00
qr/Slave: Operation DROP USER failed for 'create_rout_db'/ ,
2012-02-21 00:44:50 +01:00
qr|Checking table: '\..mtr.test_suppressions'| ,
2017-11-05 19:05:02 +01:00
qr|Table \./test/bug53592 has a primary key in InnoDB data dictionary, but not in| ,
2012-02-21 13:17:33 +01:00
qr|Table '\..mtr.test_suppressions' is marked as crashed and should be repaired| ,
2016-12-19 23:32:45 +01:00
qr|Table 'test_suppressions' is marked as crashed and should be repaired| ,
2012-06-13 11:59:45 +02:00
qr|Can't open shared library| ,
qr|Couldn't load plugin named .*EXAMPLE.*| ,
2010-09-20 15:17:59 +02:00
qr|InnoDB: Error: table 'test/bug39438'| ,
2011-07-02 22:12:12 +02:00
qr| entry '.*' ignored in --skip-name-resolve mode| ,
2011-04-25 17:22:25 +02:00
qr|mysqld got signal 6| ,
qr|Error while setting value 'pool-of-threads' to 'thread_handling'| ,
2011-09-13 17:46:47 +02:00
qr|Access denied for user| ,
qr|Aborted connection| ,
2011-07-24 10:25:28 +02:00
qr|table.*is full| ,
2020-04-07 06:53:40 +02:00
qr/\[ERROR\] (mysqld|mariadbd): \Z/ , # Warning from Aria recovery
2012-06-08 14:50:50 +02:00
qr|Linux Native AIO| , # warning that aio does not work on /dev/shm
2016-09-29 15:25:45 +02:00
qr|InnoDB: io_setup\(\) attempt| ,
qr|InnoDB: io_setup\(\) failed with EAGAIN| ,
2021-03-15 10:30:17 +01:00
qr|io_uring_queue_init\(\) failed with| ,
qr|InnoDB: liburing disabled| ,
2024-01-15 08:04:19 +01:00
qr/InnoDB: Failed to set O_DIRECT on file/ ,
2013-02-14 13:27:55 +01:00
qr|setrlimit could not change the size of core files to 'infinity';| ,
2013-04-16 09:42:09 +02:00
qr|feedback plugin: failed to retrieve the MAC address| ,
qr|Plugin 'FEEDBACK' init function returned error| ,
qr|Plugin 'FEEDBACK' registration as a INFORMATION SCHEMA failed| ,
2017-11-30 16:03:55 +01:00
qr|'log-bin-use-v1-row-events' is MySQL .* compatible option| ,
2013-12-22 17:06:50 +01:00
qr|InnoDB: Setting thread \d+ nice to \d+ failed, current nice \d+, errno 13| , # setpriority() fails under valgrind
2014-11-18 17:57:06 +01:00
qr|Failed to setup SSL| ,
qr|SSL error: Failed to set ciphers to use| ,
2015-07-21 11:12:58 +02:00
qr/Plugin 'InnoDB' will be forced to shutdown/ ,
2015-09-03 18:06:55 +02:00
qr|Could not increase number of max_open_files to more than| ,
2018-03-22 19:03:54 +01:00
qr|Changed limits: max_open_files| ,
2015-08-16 08:53:27 +02:00
qr/InnoDB: Error table encrypted but encryption service not available.*/ ,
qr/InnoDB: Could not find a valid tablespace file for*/ ,
qr/InnoDB: Tablespace open failed for*/ ,
qr/InnoDB: Failed to find tablespace for table*/ ,
qr/InnoDB: Space */ ,
qr|InnoDB: You may have to recover from a backup| ,
qr|InnoDB: It is also possible that your operatingsystem has corrupted its own file cache| ,
qr|InnoDB: and rebooting your computer removes the error| ,
qr|InnoDB: If the corrupt page is an index page you can also try to| ,
qr|nnoDB: fix the corruption by dumping, dropping, and reimporting| ,
qr|InnoDB: the corrupt table. You can use CHECK| ,
qr|InnoDB: TABLE to scan your table for corruption| ,
2016-08-12 10:17:45 +02:00
qr/InnoDB: See also */ ,
qr/InnoDB: Cannot open .*ib_buffer_pool.* for reading: No such file or directory*/ ,
qr/InnoDB: Table .*mysql.*innodb_table_stats.* not found./ ,
2019-03-07 05:12:26 +01:00
qr/InnoDB: User stopword table .* does not exist./ ,
2020-02-11 14:40:35 +01:00
qr/Dump thread [0-9]+ last sent to server [0-9]+ binlog file:pos .+/ ,
2019-12-30 13:11:31 +01:00
qr/Detected table cache mutex contention at instance .* waits. Additional table cache instance cannot be activated: consider raising table_open_cache_instances. Number of active instances/ ,
qr/WSREP: Failed to guess base node address/ ,
qr/WSREP: Guessing address for incoming client/ ,
Fix all warnings given by UBSAN
The easiest way to compile and test the server with UBSAN is to run:
./BUILD/compile-pentium64-ubsan
and then run mysql-test-run.
After this commit, one should be able to run this without any UBSAN
warnings. There is still a few compiler warnings that should be fixed
at some point, but these do not expose any real bugs.
The 'special' cases where we disable, suppress or circumvent UBSAN are:
- ref10 source (as here we intentionally do some shifts that UBSAN
complains about.
- x86 version of optimized int#korr() methods. UBSAN do not like unaligned
memory access of integers. Fixed by using byte_order_generic.h when
compiling with UBSAN
- We use smaller thread stack with ASAN and UBSAN, which forced me to
disable a few tests that prints the thread stack size.
- Verifying class types does not work for shared libraries. I added
suppression in mysql-test-run.pl for this case.
- Added '#ifdef WITH_UBSAN' when using integer arithmetic where it is
safe to have overflows (two cases, in item_func.cc).
Things fixed:
- Don't left shift signed values
(byte_order_generic.h, mysqltest.c, item_sum.cc and many more)
- Don't assign not non existing values to enum variables.
- Ensure that bool and enum values are properly initialized in
constructors. This was needed as UBSAN checks that these types has
correct values when one copies an object.
(gcalc_tools.h, ha_partition.cc, item_sum.cc, partition_element.h ...)
- Ensure we do not called handler functions on unallocated objects or
deleted objects.
(events.cc, sql_acl.cc).
- Fixed bugs in Item_sp::Item_sp() where we did not call constructor
on Query_arena object.
- Fixed several cast of objects to an incompatible class!
(Item.cc, Item_buff.cc, item_timefunc.cc, opt_subselect.cc, sql_acl.cc,
sql_select.cc ...)
- Ensure we do not do integer arithmetic that causes over or underflows.
This includes also ++ and -- of integers.
(Item_func.cc, Item_strfunc.cc, item_timefunc.cc, sql_base.cc ...)
- Added JSON_VALUE_UNITIALIZED to json_value_types and ensure that
value_type is initialized to this instead of to -1, which is not a valid
enum value for json_value_types.
- Ensure we do not call memcpy() when second argument could be null.
- Fixed that Item_func_str::make_empty_result() creates an empty string
instead of a null string (safer as it ensures we do not do arithmetic
on null strings).
Other things:
- Changed struct st_position to an OBJECT and added an initialization
function to it to ensure that we do not copy or use uninitialized
members. The change to a class was also motived that we used "struct
st_position" and POSITION randomly trough the code which was
confusing.
- Notably big rewrite in sql_acl.cc to avoid using deleted objects.
- Changed in sql_partition to use '^' instead of '-'. This is safe as
the operator is either 0 or 0x8000000000000000ULL.
- Added check for select_nr < INT_MAX in JOIN::build_explain() to
avoid bug when get_select() could return NULL.
- Reordered elements in POSITION for better alignment.
- Changed sql_test.cc::print_plan() to use pointers instead of objects.
- Fixed bug in find_set() where could could execute '1 << -1'.
- Added variable have_sanitizer, used by mtr. (This variable was before
only in 10.5 and up). It can now have one of two values:
ASAN or UBSAN.
- Moved ~Archive_share() from ha_archive.cc to ha_archive.h and marked
it virtual. This was an effort to get UBSAN to work with loaded storage
engines. I kept the change as the new place is better.
- Added in CONNECT engine COLBLK::SetName(), to get around a wrong cast
in tabutil.cpp.
- Added HAVE_REPLICATION around usage of rgi_slave, to get embedded
server to compile with UBSAN. (Patch from Marko).
- Added #ifdef for powerpc64 to avoid a bug in old gcc versions related
to integer arithmetic.
Changes that should not be needed but had to be done to suppress warnings
from UBSAN:
- Added static_cast<<uint16_t>> around shift to get rid of a LOT of
compiler warnings when using UBSAN.
- Had to change some '/' of 2 base integers to shift to get rid of
some compile time warnings.
Reviewed by:
- Json changes: Alexey Botchkov
- Charset changes in ctype-uca.c: Alexander Barkov
- InnoDB changes & Embedded server: Marko Mäkelä
- sql_acl.cc changes: Vicențiu Ciorbaru
- build_explain() changes: Sergey Petrunia
2021-04-18 14:29:13 +02:00
2024-03-13 10:11:24 +01:00
qr/InnoDB: Difficult to find free blocks in the buffer pool*/ ,
Fix all warnings given by UBSAN
The easiest way to compile and test the server with UBSAN is to run:
./BUILD/compile-pentium64-ubsan
and then run mysql-test-run.
After this commit, one should be able to run this without any UBSAN
warnings. There is still a few compiler warnings that should be fixed
at some point, but these do not expose any real bugs.
The 'special' cases where we disable, suppress or circumvent UBSAN are:
- ref10 source (as here we intentionally do some shifts that UBSAN
complains about.
- x86 version of optimized int#korr() methods. UBSAN do not like unaligned
memory access of integers. Fixed by using byte_order_generic.h when
compiling with UBSAN
- We use smaller thread stack with ASAN and UBSAN, which forced me to
disable a few tests that prints the thread stack size.
- Verifying class types does not work for shared libraries. I added
suppression in mysql-test-run.pl for this case.
- Added '#ifdef WITH_UBSAN' when using integer arithmetic where it is
safe to have overflows (two cases, in item_func.cc).
Things fixed:
- Don't left shift signed values
(byte_order_generic.h, mysqltest.c, item_sum.cc and many more)
- Don't assign not non existing values to enum variables.
- Ensure that bool and enum values are properly initialized in
constructors. This was needed as UBSAN checks that these types has
correct values when one copies an object.
(gcalc_tools.h, ha_partition.cc, item_sum.cc, partition_element.h ...)
- Ensure we do not called handler functions on unallocated objects or
deleted objects.
(events.cc, sql_acl.cc).
- Fixed bugs in Item_sp::Item_sp() where we did not call constructor
on Query_arena object.
- Fixed several cast of objects to an incompatible class!
(Item.cc, Item_buff.cc, item_timefunc.cc, opt_subselect.cc, sql_acl.cc,
sql_select.cc ...)
- Ensure we do not do integer arithmetic that causes over or underflows.
This includes also ++ and -- of integers.
(Item_func.cc, Item_strfunc.cc, item_timefunc.cc, sql_base.cc ...)
- Added JSON_VALUE_UNITIALIZED to json_value_types and ensure that
value_type is initialized to this instead of to -1, which is not a valid
enum value for json_value_types.
- Ensure we do not call memcpy() when second argument could be null.
- Fixed that Item_func_str::make_empty_result() creates an empty string
instead of a null string (safer as it ensures we do not do arithmetic
on null strings).
Other things:
- Changed struct st_position to an OBJECT and added an initialization
function to it to ensure that we do not copy or use uninitialized
members. The change to a class was also motived that we used "struct
st_position" and POSITION randomly trough the code which was
confusing.
- Notably big rewrite in sql_acl.cc to avoid using deleted objects.
- Changed in sql_partition to use '^' instead of '-'. This is safe as
the operator is either 0 or 0x8000000000000000ULL.
- Added check for select_nr < INT_MAX in JOIN::build_explain() to
avoid bug when get_select() could return NULL.
- Reordered elements in POSITION for better alignment.
- Changed sql_test.cc::print_plan() to use pointers instead of objects.
- Fixed bug in find_set() where could could execute '1 << -1'.
- Added variable have_sanitizer, used by mtr. (This variable was before
only in 10.5 and up). It can now have one of two values:
ASAN or UBSAN.
- Moved ~Archive_share() from ha_archive.cc to ha_archive.h and marked
it virtual. This was an effort to get UBSAN to work with loaded storage
engines. I kept the change as the new place is better.
- Added in CONNECT engine COLBLK::SetName(), to get around a wrong cast
in tabutil.cpp.
- Added HAVE_REPLICATION around usage of rgi_slave, to get embedded
server to compile with UBSAN. (Patch from Marko).
- Added #ifdef for powerpc64 to avoid a bug in old gcc versions related
to integer arithmetic.
Changes that should not be needed but had to be done to suppress warnings
from UBSAN:
- Added static_cast<<uint16_t>> around shift to get rid of a LOT of
compiler warnings when using UBSAN.
- Had to change some '/' of 2 base integers to shift to get rid of
some compile time warnings.
Reviewed by:
- Json changes: Alexey Botchkov
- Charset changes in ctype-uca.c: Alexander Barkov
- InnoDB changes & Embedded server: Marko Mäkelä
- sql_acl.cc changes: Vicențiu Ciorbaru
- build_explain() changes: Sergey Petrunia
2021-04-18 14:29:13 +02:00
# Disable test for UBSAN on dynamically loaded objects
qr/runtime error: member call.*object.*'Handler_share'/ ,
qr/sql_type\.cc.* runtime error: member call.*object.* 'Type_collection'/ ,
2009-03-20 15:18:22 +01:00
) ;
2009-01-27 14:53:58 +01:00
2024-03-28 18:23:11 +01:00
push @ antipatterns , qr/though there are still open handles to table/
if $ mysql_version_id < 100600 ;
2009-12-03 12:19:05 +01:00
my $ matched_lines = [] ;
2009-03-20 15:18:22 +01:00
LINE: foreach my $ line ( @ lines )
2009-01-27 14:53:58 +01:00
{
2009-03-20 15:18:22 +01:00
PAT: foreach my $ pat ( @ patterns )
2009-01-27 14:53:58 +01:00
{
if ( $ line =~ /$pat/ )
{
2009-03-20 15:18:22 +01:00
foreach my $ apat ( @ antipatterns )
{
next LINE if $ line =~ $ apat ;
}
2009-01-27 14:53:58 +01:00
print $ Fwarn $ line ;
2009-12-03 12:19:05 +01:00
push @$ matched_lines , $ line ;
2009-03-20 15:18:22 +01:00
last PAT ;
2009-01-27 14:53:58 +01:00
}
}
}
$ Fwarn = undef ; # Close file
2009-12-03 12:19:05 +01:00
if ( scalar ( @$ matched_lines ) > 0 &&
2009-03-20 15:18:22 +01:00
defined ( $ last_warning_position - > { $ error_log } { test_names } ) ) {
2009-12-03 12:19:05 +01:00
return ( $ last_warning_position - > { $ error_log } { test_names } , $ matched_lines ) ;
2009-03-20 15:18:22 +01:00
} else {
2009-12-03 12:19:05 +01:00
return ( [] , $ matched_lines ) ;
2009-03-20 15:18:22 +01:00
}
2009-01-27 14:53:58 +01:00
}
2008-04-08 16:51:26 +02:00
# Run include/check-warnings.test
#
# RETURN VALUE
# 0 OK
# 1 Check failed
#
2008-04-27 21:31:32 +02:00
sub start_check_warnings ($$) {
2008-04-08 16:51:26 +02:00
my $ tinfo = shift ;
my $ mysqld = shift ;
my $ name = "warnings-" . $ mysqld - > name ( ) ;
2017-04-05 13:17:43 +02:00
my $ log_error = $ mysqld - > value ( 'log-error' ) ;
2009-03-02 13:48:35 +01:00
# To be communicated to the test
$ ENV { MTR_LOG_ERROR } = $ log_error ;
2011-05-10 17:17:43 +02:00
extract_warning_lines ( $ log_error , 0 ) ;
2009-01-27 14:53:58 +01:00
2008-04-08 16:51:26 +02:00
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
mtr_add_arg ( $ args , "--test-file=%s" , "include/check-warnings.test" ) ;
2008-07-24 22:21:19 +02:00
if ( $ opt_embedded_server )
{
# Get the args needed for the embedded server
# and append them to args prefixed
# with --sever-arg=
my $ mysqld = $ config - > group ( 'embedded' )
or mtr_error ( "Could not get [embedded] section" ) ;
my $ mysqld_args ;
mtr_init_args ( \ $ mysqld_args ) ;
my $ extra_opts = get_extra_opts ( $ mysqld , $ tinfo ) ;
mysqld_arguments ( $ mysqld_args , $ mysqld , $ extra_opts ) ;
mtr_add_arg ( $ args , "--server-arg=%s" , $ _ ) for @$ mysqld_args ;
}
2008-04-08 16:51:26 +02:00
my $ errfile = "$opt_vardir/tmp/$name.err" ;
2008-04-27 21:31:32 +02:00
my $ proc = My::SafeProcess - > new
2008-04-08 16:51:26 +02:00
(
name = > $ name ,
path = > $ exe_mysqltest ,
error = > $ errfile ,
output = > $ errfile ,
args = > \ $ args ,
2010-03-10 11:32:14 +01:00
user_data = > [ $ errfile , $ mysqld ] ,
2009-01-27 10:39:42 +01:00
verbose = > $ opt_verbose ,
2008-04-08 16:51:26 +02:00
) ;
2008-04-27 21:31:32 +02:00
mtr_verbose ( "Started $proc" ) ;
return $ proc ;
2008-04-08 16:51:26 +02:00
}
#
# Loop through our list of processes and check the error log
2009-11-16 21:49:51 +01:00
# for unexpected errors and warnings
2008-04-08 16:51:26 +02:00
#
sub check_warnings ($) {
my ( $ tinfo ) = @ _ ;
my $ res = 0 ;
2008-04-27 21:31:32 +02:00
my $ tname = $ tinfo - > { name } ;
2008-04-08 16:51:26 +02:00
# Clear previous warnings
2008-04-24 13:02:53 +02:00
delete ( $ tinfo - > { warnings } ) ;
2008-04-08 16:51:26 +02:00
2008-04-27 21:31:32 +02:00
# Start the mysqltest processes in parallel to save time
# also makes it possible to wait for any process to exit during the check
my % started ;
2008-04-08 16:51:26 +02:00
foreach my $ mysqld ( mysqlds ( ) )
{
2008-04-27 21:31:32 +02:00
if ( defined $ mysqld - > { 'proc' } )
{
my $ proc = start_check_warnings ( $ tinfo , $ mysqld ) ;
$ started { $ proc - > pid ( ) } = $ proc ;
}
}
2008-04-28 12:20:42 +02:00
# Return immediately if no check proceess was started
return 0 unless ( keys % started ) ;
2011-05-25 16:07:16 +02:00
my $ timeout = start_timer ( check_timeout ( $ tinfo ) ) ;
2008-11-21 13:45:28 +01:00
2017-09-13 22:45:20 +02:00
my $ result = 0 ;
2008-04-27 21:31:32 +02:00
while ( 1 ) {
2009-11-24 09:12:48 +01:00
my $ proc = My::SafeProcess - > wait_any_timeout ( $ timeout ) ;
2008-04-27 21:31:32 +02:00
mtr_report ( "Got $proc" ) ;
if ( delete $ started { $ proc - > pid ( ) } ) {
# One check warning process returned
my $ res = $ proc - > exit_status ( ) ;
2010-03-10 11:32:14 +01:00
my ( $ err_file , $ mysqld ) = @ { $ proc - > user_data ( ) } ;
2008-04-27 21:31:32 +02:00
if ( $ res == 0 or $ res == 62 ) {
if ( $ res == 0 ) {
# Check completed with problem
2008-04-28 15:03:30 +02:00
my $ report = mtr_grab_file ( $ err_file ) ;
2008-04-27 21:31:32 +02:00
# Log to var/log/warnings file
mtr_tofile ( "$opt_vardir/log/warnings" ,
$ tname . "\n" . $ report ) ;
$ tinfo - > { 'warnings' } . = $ report ;
$ result = 1 ;
}
if ( $ res == 62 ) {
# Test case was ok and called "skip"
2009-02-13 16:27:33 +01:00
# Remove the .err file the check generated
unlink ( $ err_file ) ;
2008-04-27 21:31:32 +02:00
}
if ( keys ( % started ) == 0 ) {
# All checks completed
2010-10-19 14:08:46 +02:00
mark_time_used ( 'ch-warn' ) ;
2008-04-27 21:31:32 +02:00
return $ result ;
}
# Wait for next process to exit
next ;
}
else
{
2008-04-28 15:03:30 +02:00
my $ report = mtr_grab_file ( $ err_file ) ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { comment } . =
2008-11-14 13:19:37 +01:00
"Could not execute 'check-warnings' for " .
2010-03-10 11:32:14 +01:00
"testcase '$tname' (res: $res) server: '" .
2022-08-10 08:59:28 +02:00
$ mysqld - > name ( ) . "':\n" ;
2008-04-27 21:31:32 +02:00
$ tinfo - > { comment } . = $ report ;
$ result = 2 ;
}
}
2009-11-24 09:12:48 +01:00
elsif ( $ proc - > { timeout } ) {
$ tinfo - > { comment } . = "Timeout for 'check warnings' expired after "
2011-05-25 16:07:16 +02:00
. check_timeout ( $ tinfo ) . " seconds" ;
2008-11-21 13:45:28 +01:00
$ result = 4 ;
}
2008-04-27 21:31:32 +02:00
else {
# Unknown process returned, most likley a crash, abort everything
$ tinfo - > { comment } =
2009-10-14 09:31:34 +02:00
"The server $proc crashed while running 'check warnings'" .
get_log_from_proc ( $ proc , $ tinfo - > { name } ) ;
2008-04-27 21:31:32 +02:00
$ result = 3 ;
2008-04-08 16:51:26 +02:00
}
2008-04-27 21:31:32 +02:00
# Kill any check processes still running
map ( $ _ - > kill ( ) , values ( % started ) ) ;
2010-10-19 14:08:46 +02:00
mark_time_used ( 'ch-warn' ) ;
2008-04-27 21:31:32 +02:00
return $ result ;
2008-04-08 16:51:26 +02:00
}
2008-04-27 21:31:32 +02:00
2008-11-21 13:45:28 +01:00
mtr_error ( "INTERNAL_ERROR: check_warnings" ) ;
2008-04-08 16:51:26 +02:00
}
2009-03-20 15:18:22 +01:00
# Check for warnings generated during shutdown of a mysqld server.
2009-11-16 21:49:51 +01:00
# If any, report them to master server, and return true; else just return
# false.
2009-03-20 15:18:22 +01:00
sub check_warnings_post_shutdown {
my ( $ server_socket ) = @ _ ;
my $ testname_hash = { } ;
2009-12-03 12:19:05 +01:00
my $ report = '' ;
2009-03-20 15:18:22 +01:00
foreach my $ mysqld ( mysqlds ( ) )
{
2009-12-03 12:19:05 +01:00
my ( $ testlist , $ match_lines ) =
2017-04-05 13:17:43 +02:00
extract_warning_lines ( $ mysqld - > value ( 'log-error' ) , 1 ) ;
2009-03-20 15:18:22 +01:00
$ testname_hash - > { $ _ } = 1 for @$ testlist ;
2009-12-03 12:19:05 +01:00
$ report . = join ( '' , @$ match_lines ) ;
2009-03-20 15:18:22 +01:00
}
my @ warning_tests = keys ( %$ testname_hash ) ;
if ( @ warning_tests ) {
my $ fake_test = My::Test - > new ( testnames = > \ @ warning_tests ) ;
2009-12-03 12:19:05 +01:00
$ fake_test - > { 'warnings' } = $ report ;
2009-03-20 15:18:22 +01:00
$ fake_test - > write_test ( $ server_socket , 'WARNINGS' ) ;
}
}
2008-04-08 16:51:26 +02:00
2006-03-13 10:30:36 +01:00
#
2021-07-05 22:02:23 +02:00
# Check for the file indicating expected crash and restart it.
2006-03-13 10:30:36 +01:00
#
2007-12-12 18:19:24 +01:00
sub check_expected_crash_and_restart {
2021-07-05 22:02:23 +02:00
my $ mysqld = shift ;
2006-03-13 10:30:36 +01:00
2021-07-05 22:02:23 +02:00
# Check if crash expected by looking at the .expect file
# in var/tmp
my $ expect_file = "$opt_vardir/tmp/" . $ mysqld - > name ( ) . ".expect" ;
if ( - f $ expect_file )
2006-03-13 10:30:36 +01:00
{
2021-07-05 22:02:23 +02:00
mtr_verbose ( "Crash was expected, file '$expect_file' exists" ) ;
2007-12-12 18:19:24 +01:00
2021-07-05 22:02:23 +02:00
for ( my $ waits = 0 ; $ waits < 50 ; mtr_milli_sleep ( 100 ) , $ waits + + )
2007-12-12 18:19:24 +01:00
{
2021-07-05 22:02:23 +02:00
# Race condition seen on Windows: try again until file not empty
next if - z $ expect_file ;
# If last line in expect file starts with "wait"
# sleep a little and try again, thus allowing the
# test script to control when the server should start
# up again. Keep trying for up to 5s at a time.
my $ last_line = mtr_lastlinesfromfile ( $ expect_file , 1 ) ;
if ( $ last_line =~ /^wait/ )
2009-04-08 14:54:36 +02:00
{
2021-07-05 22:02:23 +02:00
mtr_verbose ( "Test says wait before restart" ) if $ waits == 0 ;
next ;
}
2022-12-26 22:02:01 +01:00
delete $ ENV { MTR_BINDIR_FORCED } ;
2008-08-09 11:16:12 +02:00
2021-07-05 22:02:23 +02:00
# Ignore any partial or unknown command
next unless $ last_line =~ /^restart/ ;
# If last line begins "restart:", the rest of the line is read as
# extra command line options to add to the restarted mysqld.
# Anything other than 'wait' or 'restart:' (with a colon) will
# result in a restart with original mysqld options.
2022-12-26 22:02:01 +01:00
if ( $ last_line =~ /restart_bindir\s+(\S+)(:.+)?/ ) {
$ ENV { MTR_BINDIR_FORCED } = $ 1 ;
if ( $ 2 ) {
my @ rest_opt = split ( ' ' , $ 2 ) ;
$ mysqld - > { 'restart_opts' } = \ @ rest_opt ;
}
} elsif ( $ last_line =~ /restart:(.+)/ ) {
2021-07-05 22:02:23 +02:00
my @ rest_opt = split ( ' ' , $ 1 ) ;
$ mysqld - > { 'restart_opts' } = \ @ rest_opt ;
} else {
delete $ mysqld - > { 'restart_opts' } ;
2008-08-09 11:16:12 +02:00
}
2021-07-05 22:02:23 +02:00
unlink ( $ expect_file ) ;
# Start server with same settings as last time
return mysqld_start ( $ mysqld , $ mysqld - > { 'started_opts' } ) ;
2007-12-12 18:19:24 +01:00
}
2021-07-05 22:02:23 +02:00
# Loop ran through: we should keep waiting after a re-check
return 2 ;
2006-03-13 10:30:36 +01:00
}
2007-12-12 18:19:24 +01:00
# Not an expected crash
return 0 ;
2006-03-13 10:30:36 +01:00
}
2006-03-22 22:34:48 +01:00
2008-05-05 00:21:12 +02:00
# Remove all files and subdirectories of a directory
sub clean_dir {
my ( $ dir ) = @ _ ;
2008-05-09 11:50:36 +02:00
mtr_verbose ( "clean_dir: $dir" ) ;
2008-05-05 00:21:12 +02:00
finddepth (
{ no_chdir = > 1 ,
wanted = > sub {
if ( - d $ _ ) {
# A dir
if ( $ _ eq $ dir ) {
# The dir to clean
return ;
} else {
2008-05-09 11:50:36 +02:00
mtr_verbose ( "rmdir: '$_'" ) ;
2008-05-05 13:47:43 +02:00
rmdir ( $ _ ) or mtr_warning ( "rmdir($_) failed: $!" ) ;
2008-05-05 00:21:12 +02:00
}
} else {
# Hopefully a file
2008-05-09 11:50:36 +02:00
mtr_verbose ( "unlink: '$_'" ) ;
2008-05-05 13:47:43 +02:00
unlink ( $ _ ) or mtr_warning ( "unlink($_) failed: $!" ) ;
2008-05-05 00:21:12 +02:00
}
}
} ,
$ dir ) ;
}
2008-04-27 15:32:12 +02:00
sub clean_datadir {
mtr_verbose ( "Cleaning datadirs..." ) ;
2008-05-05 22:55:47 +02:00
if ( started ( all_servers ( ) ) != 0 ) {
mtr_error ( "Trying to clean datadir before all servers stopped" ) ;
}
2010-08-17 09:14:46 +02:00
for ( all_servers ( ) )
2008-04-27 15:32:12 +02:00
{
2010-08-17 09:14:46 +02:00
my $ dir = "$opt_vardir/" . $ _ - > { name } ;
mtr_verbose ( " - removing '$dir'" ) ;
rmtree ( $ dir ) ;
2008-04-27 15:32:12 +02:00
}
# Remove all files in tmp and var/tmp
2008-05-05 00:21:12 +02:00
clean_dir ( "$opt_vardir/tmp" ) ;
2008-04-27 15:32:12 +02:00
if ( $ opt_tmpdir ne "$opt_vardir/tmp" ) {
2008-05-05 00:21:12 +02:00
clean_dir ( $ opt_tmpdir ) ;
2008-04-27 15:32:12 +02:00
}
}
#
# Save datadir before it's removed
#
sub save_datadir_after_failure ($$) {
my ( $ dir , $ savedir ) = @ _ ;
2006-04-24 10:39:56 +02:00
2008-04-27 23:35:38 +02:00
mtr_report ( " - saving '$dir'" ) ;
my $ dir_name = basename ( $ dir ) ;
rename ( "$dir" , "$savedir/$dir_name" ) ;
2008-04-27 15:32:12 +02:00
}
2006-03-13 11:30:16 +01:00
2008-04-27 15:32:12 +02:00
sub after_failure ($) {
my ( $ tinfo ) = @ _ ;
mtr_report ( "Saving datadirs..." ) ;
my $ save_dir = "$opt_vardir/log/" ;
$ save_dir . = $ tinfo - > { name } ;
# Add combination name if any
2012-02-06 21:36:56 +01:00
$ save_dir . = '-' . join ( ',' , sort @ { $ tinfo - > { combinations } } )
if defined $ tinfo - > { combinations } ;
2008-04-27 15:32:12 +02:00
2008-04-27 23:35:38 +02:00
# Save savedir path for server
$ tinfo - > { savedir } = $ save_dir ;
2008-04-27 15:32:12 +02:00
mkpath ( $ save_dir ) if ! - d $ save_dir ;
2011-01-18 14:02:00 +01:00
#
# Create a log of files in vardir (good for buildbot)
#
if ( ! IS_WINDOWS )
{
my $ Flog = IO::File - > new ( "$opt_vardir/log/files.log" , "w" ) ;
if ( $ Flog )
{
print $ Flog scalar ( `/bin/ls -Rl $opt_vardir/*` ) ;
close ( $ Flog ) ;
}
}
2010-08-17 09:14:46 +02:00
# Save the used config files
my % config_files = config_files ( $ tinfo ) ;
while ( my ( $ file , $ generate ) = each % config_files ) {
copy ( "$opt_vardir/$file" , $ save_dir ) ;
}
2008-04-27 15:32:12 +02:00
2008-04-28 14:37:40 +02:00
# Copy the tmp dir
copytree ( "$opt_vardir/tmp/" , "$save_dir/tmp/" ) ;
2010-08-17 09:14:46 +02:00
foreach ( all_servers ( ) ) {
my $ dir = "$opt_vardir/" . $ _ - > { name } ;
save_datadir_after_failure ( $ dir , $ save_dir ) ;
2008-04-23 12:59:37 +02:00
}
2006-03-13 10:30:36 +01:00
}
2007-12-12 18:19:24 +01:00
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
sub report_failure_and_restart ($) {
my $ tinfo = shift ;
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
if ( $ opt_valgrind && ( $ tinfo - > { 'warnings' } || $ tinfo - > { 'timeout' } ) &&
2016-08-21 19:14:13 +02:00
$ opt_core_on_failure == 0 )
{
2010-11-23 14:34:00 +01:00
# In these cases we may want valgrind report from normal termination
$ tinfo - > { 'dont_kill_server' } = 1 ;
}
2014-03-24 07:18:01 +01:00
# Shutdown properly if not to be killed (for valgrind)
2010-11-23 14:34:00 +01:00
stop_all_servers ( $ tinfo - > { 'dont_kill_server' } ? $ opt_shutdown_timeout : 0 ) ;
2006-06-10 20:59:14 +02:00
2008-04-27 23:35:38 +02:00
$ tinfo - > { 'result' } = 'MTR_RES_FAILED' ;
my $ test_failures = $ tinfo - > { 'failures' } || 0 ;
$ tinfo - > { 'failures' } = $ test_failures + 1 ;
if ( $ tinfo - > { comment } )
{
# The test failure has been detected by mysql-test-run.pl
# when starting the servers or due to other error, the reason for
# failing the test is saved in "comment"
;
}
2008-08-04 21:54:44 +02:00
if ( ! defined $ tinfo - > { logfile } )
2008-04-27 23:35:38 +02:00
{
2008-08-04 21:54:44 +02:00
my $ logfile = $ path_current_testlog ;
2008-08-29 12:25:19 +02:00
if ( defined $ logfile )
2008-08-04 21:54:44 +02:00
{
2008-08-29 12:25:19 +02:00
if ( - f $ logfile )
{
# Test failure was detected by test tool and its report
# about what failed has been saved to file. Save the report
# in tinfo
$ tinfo - > { logfile } = mtr_fromfile ( $ logfile ) ;
2009-12-15 10:12:24 +01:00
# If no newlines in the test log:
2010-01-06 09:52:55 +01:00
# (it will contain the CURRENT_TEST written by mtr, so is not empty)
2009-12-15 10:12:24 +01:00
if ( $ tinfo - > { logfile } !~ /\n/ )
{
# Show how far it got before suddenly failing
$ tinfo - > { comment } . = "mysqltest failed but provided no output\n" ;
my $ log_file_name = $ opt_vardir . "/log/" . $ tinfo - > { shortname } . ".log" ;
if ( - e $ log_file_name ) {
$ tinfo - > { comment } . =
"The result from queries just before the failure was:" .
"\n< snip >\n" .
2017-04-29 21:28:32 +02:00
mtr_lastlinesfromfile ( $ log_file_name , $ opt_tail_lines ) . "\n" ;
2009-12-15 10:12:24 +01:00
}
}
2008-08-29 12:25:19 +02:00
}
else
{
# The test tool report didn't exist, display an
# error message
$ tinfo - > { logfile } = "Could not open test tool report '$logfile'" ;
}
2008-08-04 21:54:44 +02:00
}
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
}
2008-04-27 23:35:38 +02:00
2008-04-27 15:43:22 +02:00
after_failure ( $ tinfo ) ;
2008-04-24 13:02:53 +02:00
2008-04-27 23:35:38 +02:00
mtr_report_test ( $ tinfo ) ;
2007-05-01 20:05:09 +02:00
}
2012-02-23 07:50:11 +01:00
sub run_system (@) {
mtr_verbose ( "Running '$_[0]'" ) ;
my $ ret = system ( @ _ ) >> 8 ;
2007-12-12 18:19:24 +01:00
return $ ret ;
2004-12-30 16:34:01 +01:00
}
2006-04-24 10:39:56 +02:00
2007-12-12 18:19:24 +01:00
sub mysqld_stop {
my $ mysqld = shift or die "usage: mysqld_stop(<mysqld>)" ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
2007-05-28 18:03:24 +02:00
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--no-defaults" ) ;
2009-10-06 10:35:35 +02:00
mtr_add_arg ( $ args , "--character-sets-dir=%s" , $ mysqld - > value ( 'character-sets-dir' ) ) ;
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--user=%s" , $ opt_user ) ;
mtr_add_arg ( $ args , "--password=" ) ;
mtr_add_arg ( $ args , "--port=%d" , $ mysqld - > value ( 'port' ) ) ;
mtr_add_arg ( $ args , "--host=%s" , $ mysqld - > value ( '#host' ) ) ;
mtr_add_arg ( $ args , "--connect_timeout=20" ) ;
mtr_add_arg ( $ args , "--protocol=tcp" ) ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "shutdown" ) ;
2006-10-04 23:05:12 +02:00
2007-12-12 18:19:24 +01:00
My::SafeProcess - > run
(
name = > "mysqladmin shutdown " . $ mysqld - > name ( ) ,
path = > $ exe_mysqladmin ,
args = > \ $ args ,
2010-08-07 16:42:30 +02:00
error = > "$opt_vardir/log/mysqladmin.err" ,
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
) ;
2004-12-30 16:34:01 +01:00
}
2006-04-24 10:39:56 +02:00
2007-12-12 18:19:24 +01:00
sub mysqld_arguments ($$$) {
mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_io.pl:
Remove starting/ending space reading server options from file
mysql-test/lib/mtr_report.pl:
Added option to disable test cases using <testcase>.disabled file
If --timer, only try to open file with time data if it exists
mysql-test/lib/mtr_process.pl:
Find out if port is still in use, using simple TCP connect
Use non blocking waitpid() to catch terminations early
Make a special case spawning the 'mysqltest' application
Redo the fork() if it returns EAGAIN
Make sure to record if master or slave terminated
Improved debugging output
Improved code that remove PID files to avoid race
Abort if we can't stop all mysqld servers using our ports
Many improvements in killing mysqld servers
Let sleep_until_file_created() catch if server died early
mysql-test/mysql-test-run.pl:
Let --start-and-exit actually start a server
Added that test case names can be specified on the comman line
Added embedded server support
Added environment variables UMASK, UMASK_DIR
Added missing MASTER_MYSOCK1, MASTER_MYPORT1, USE_RUNNING_SERVER
Added missing CHARSETSDIR, MYSQL_FIX_SYSTEM_TABLES, MYSQL_CLIENT_TEST
Pass on return value from sleep_until_file_created(), to fail test
Fail test if early termination of mysqld servers
Create intial databases for the second master, and two additional slaves
2005-02-03 21:13:27 +01:00
my $ args = shift ;
2007-03-15 09:58:39 +01:00
my $ mysqld = shift ;
2008-01-07 19:44:48 +01:00
my $ extra_opts = shift ;
2004-12-30 16:34:01 +01:00
2010-11-04 11:00:59 +01:00
my @ defaults = grep ( /^--defaults-file=/ , @$ extra_opts ) ;
if ( @ defaults > 0 ) {
mtr_add_arg ( $ args , pop ( @ defaults ) )
}
else {
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
}
2007-09-21 17:52:02 +02:00
2007-10-30 15:22:52 +01:00
# When mysqld is run by a root user(euid is 0), it will fail
2007-11-23 15:54:11 +01:00
# to start unless we specify what user to run as, see BUG#30630
my $ euid = $> ;
2008-02-20 14:55:30 +01:00
if ( ! IS_WINDOWS and $ euid == 0 and
2008-01-07 19:44:48 +01:00
( grep ( /^--user/ , @$ extra_opts ) ) == 0 ) {
2008-02-22 15:38:10 +01:00
mtr_add_arg ( $ args , "--user=root" ) ;
2007-10-30 15:22:52 +01:00
}
2012-02-23 07:50:11 +01:00
if ( ! using_extern ( ) and ! $ opt_user_args )
2007-03-15 09:58:39 +01:00
{
2011-04-25 17:22:25 +02:00
# Turn on logging to file
mtr_add_arg ( $ args , "%s--log-output=file" ) ;
2007-03-15 09:58:39 +01:00
}
2010-08-17 09:14:46 +02:00
# Check if "extra_opt" contains --log-bin
my $ skip_binlog = not grep /^--(loose-)?log-bin/ , @$ extra_opts ;
2004-12-30 16:34:01 +01:00
2006-09-17 20:54:06 +02:00
my $ found_skip_core = 0 ;
2008-01-07 19:44:48 +01:00
foreach my $ arg ( @$ extra_opts )
2004-12-30 16:34:01 +01:00
{
2010-11-04 11:00:59 +01:00
# Skip --defaults-file option since it's handled above.
next if $ arg =~ /^--defaults-file/ ;
2007-03-15 09:58:39 +01:00
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2006-09-17 20:54:06 +02:00
if ( $ arg eq "--skip-core-file" )
{
$ found_skip_core = 1 ;
}
2007-02-06 14:19:07 +01:00
elsif ( $ skip_binlog and mtr_match_prefix ( $ arg , "--binlog-format" ) )
{
; # Dont add --binlog-format when running without binlog
}
2008-08-29 14:46:22 +02:00
elsif ( $ arg eq "--loose-skip-log-bin" and
$ mysqld - > option ( "log-slave-updates" ) )
{
; # Dont add --skip-log-bin when mysqld have --log-slave-updates in config
}
2006-09-17 20:54:06 +02:00
else
{
2008-02-22 15:38:10 +01:00
mtr_add_arg ( $ args , "%s" , $ arg ) ;
2006-09-17 20:54:06 +02:00
}
}
2009-03-09 14:31:39 +01:00
$ opt_skip_core = $ found_skip_core ;
2010-06-09 10:21:46 +02:00
if ( ! $ found_skip_core && ! $ opt_user_args )
2006-09-17 20:54:06 +02:00
{
2008-02-22 15:38:10 +01:00
mtr_add_arg ( $ args , "%s" , "--core-file" ) ;
2004-12-30 16:34:01 +01:00
}
2009-09-29 17:38:40 +02:00
# Enable the debug sync facility, set default wait timeout.
# Facility stays disabled if timeout value is zero.
mtr_add_arg ( $ args , "--loose-debug-sync-timeout=%s" ,
2010-06-09 10:21:46 +02:00
$ opt_debug_sync_timeout ) unless $ opt_user_args ;
2009-09-29 17:38:40 +02:00
2004-12-30 16:34:01 +01:00
return $ args ;
}
2008-01-07 19:44:48 +01:00
2007-12-12 18:19:24 +01:00
sub mysqld_start ($$) {
2006-05-18 23:35:17 +02:00
my $ mysqld = shift ;
2008-01-07 19:44:48 +01:00
my $ extra_opts = shift ;
mtr_verbose ( My::Options:: toStr ( "mysqld_start" , @$ extra_opts ) ) ;
2004-12-30 16:34:01 +01:00
2008-03-25 09:19:03 +01:00
my $ exe = find_mysqld ( $ mysqld - > value ( 'basedir' ) ) ;
2006-05-18 23:35:17 +02:00
2006-10-20 17:09:07 +02:00
mtr_error ( "Internal error: mysqld should never be started for embedded" )
2007-12-12 18:19:24 +01:00
if $ opt_embedded_server ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
my $ args ;
2004-12-30 16:34:01 +01:00
mtr_init_args ( \ $ args ) ;
2008-02-22 15:38:10 +01:00
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
2010-07-28 12:24:38 +02:00
# Add any additional options from an in-test restart
my @ all_opts = @$ extra_opts ;
if ( exists $ mysqld - > { 'restart_opts' } ) {
push ( @ all_opts , @ { $ mysqld - > { 'restart_opts' } } ) ;
2011-01-21 13:57:21 +01:00
mtr_verbose ( My::Options:: toStr ( "mysqld_start restart" ,
@ { $ mysqld - > { 'restart_opts' } } ) ) ;
2010-07-28 12:24:38 +02:00
}
mysqld_arguments ( $ args , $ mysqld , \ @ all_opts ) ;
2004-12-30 16:34:01 +01:00
2008-02-22 15:38:10 +01:00
if ( $ opt_debug )
{
2011-12-15 22:07:58 +01:00
mtr_add_arg ( $ args , "--debug-dbug=$debug_d:t:i:A,%s/log/%s.trace" ,
2008-02-22 15:38:10 +01:00
$ path_vardir_trace , $ mysqld - > name ( ) ) ;
}
2009-03-02 13:48:35 +01:00
2017-10-04 18:32:45 +02:00
# Command line for mysqld started for *this particular test*.
# Differs from "generic" MYSQLD_CMD by including all command line
# options from *.opt and *.combination files.
2017-08-31 13:22:05 +02:00
$ ENV { 'MYSQLD_LAST_CMD' } = "$exe @$args" ;
2021-11-26 17:15:41 +01:00
my $ oldexe = $ exe ;
2017-08-31 13:22:05 +02:00
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
My::Debugger:: setup_args ( \ $ args , \ $ exe , $ mysqld - > name ( ) ) ;
2021-02-25 14:10:25 +01:00
$ ENV { 'VALGRIND_TEST' } = $ opt_valgrind = int ( ( $ exe || '' ) eq 'valgrind' ) ;
2006-03-23 15:07:39 +01:00
2007-12-12 18:19:24 +01:00
# Remove the old pidfile if any
unlink ( $ mysqld - > value ( 'pid-file' ) ) ;
2007-08-29 17:54:02 +02:00
2017-04-05 13:17:43 +02:00
my $ output = $ mysqld - > value ( 'log-error' ) ;
2011-07-02 22:08:51 +02:00
2007-12-12 18:19:24 +01:00
if ( $ opt_valgrind and $ opt_debug )
2004-12-30 16:34:01 +01:00
{
2007-12-12 18:19:24 +01:00
# When both --valgrind and --debug is selected, send
# all output to the trace file, making it possible to
# see the exact location where valgrind complains
2006-05-18 23:35:17 +02:00
2009-02-12 15:08:56 +01:00
# Write a message about this to the normal log file
my $ trace_name = "$opt_vardir/log/" . $ mysqld - > name ( ) . ".trace" ;
mtr_tofile ( $ output ,
2011-12-13 13:00:20 +01:00
"NOTE: When running with --valgrind --debug the output from " ,
"mysqld (where the valgrind messages shows up) is stored " ,
2009-02-12 15:08:56 +01:00
"together with the trace file to make it " ,
"easier to find the exact position of valgrind errors." ,
"See trace file $trace_name.\n" ) ;
$ output = $ trace_name ;
2006-05-18 23:35:17 +02:00
2004-12-30 16:34:01 +01:00
}
2009-11-12 11:04:01 +01:00
# Remember this log file for valgrind error report search
$ mysqld_logs { $ output } = 1 if $ opt_valgrind ;
2010-01-05 21:35:50 +01:00
# Remember data dir for gmon.out files if using gprof
$ gprof_dirs { $ mysqld - > value ( 'datadir' ) } = 1 if $ opt_gprof ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
if ( defined $ exe )
2004-12-30 16:34:01 +01:00
{
2021-07-05 22:02:23 +02:00
mtr_tofile ( $ output , "\$ $exe @$args\n" ) ;
2009-03-20 15:18:22 +01:00
pre_write_errorlog ( $ output ) ;
2007-12-12 18:19:24 +01:00
$ mysqld - > { 'proc' } = My::SafeProcess - > new
(
name = > $ mysqld - > name ( ) ,
path = > $ exe ,
args = > \ $ args ,
output = > $ output ,
error = > $ output ,
append = > 1 ,
verbose = > $ opt_verbose ,
2009-03-09 14:31:39 +01:00
nocore = > $ opt_skip_core ,
2007-12-12 18:19:24 +01:00
host = > undef ,
shutdown = > sub { mysqld_stop ( $ mysqld ) } ,
2011-01-27 14:42:08 +01:00
envs = > \ @ opt_mysqld_envs ,
2007-12-12 18:19:24 +01:00
) ;
mtr_verbose ( "Started $mysqld->{proc}" ) ;
2004-12-30 16:34:01 +01:00
}
2008-01-07 19:44:48 +01:00
$ mysqld - > { 'started_opts' } = $ extra_opts ;
2006-06-11 10:10:55 +02:00
2021-07-05 21:46:00 +02:00
my $ expect_file = "$opt_vardir/tmp/" . $ mysqld - > name ( ) . ".expect" ;
2021-12-07 22:11:30 +01:00
my $ rc = $ oldexe eq ( $ exe || '' ) ||
2021-11-26 17:15:41 +01:00
sleep_until_file_created ( $ mysqld - > value ( 'pid-file' ) , $ expect_file ,
2021-07-05 22:02:23 +02:00
$ opt_start_timeout , $ mysqld - > { 'proc' } , $ warn_seconds ) ;
2021-08-02 10:11:41 +02:00
if ( ! $ rc )
2007-12-12 18:19:24 +01:00
{
2021-05-03 09:43:43 +02:00
# Report failure about the last test case before exit
2023-04-20 02:10:23 +02:00
my $ test_name = mtr_grab_file ( $ path_current_testlog ) ;
$ test_name =~ s/^CURRENT_TEST:\s// ;
my $ tinfo = My::Test - > new ( name = > $ test_name ) ;
2021-05-03 09:43:43 +02:00
$ tinfo - > { result } = 'MTR_RES_FAILED' ;
$ tinfo - > { failures } = 1 ;
2023-04-20 02:10:23 +02:00
$ tinfo - > { logfile } = get_log_from_proc ( $ mysqld - > { 'proc' } , $ tinfo - > { name } ) ;
2021-05-03 09:43:43 +02:00
report_option ( 'verbose' , 1 ) ;
mtr_report_test ( $ tinfo ) ;
2007-12-12 18:19:24 +01:00
}
2021-08-02 10:11:41 +02:00
return $ rc ;
2004-12-30 16:34:01 +01:00
}
2006-04-24 10:39:56 +02:00
2006-05-18 23:35:17 +02:00
sub stop_all_servers () {
2009-10-06 10:35:35 +02:00
my $ shutdown_timeout = $ _ [ 0 ] or 0 ;
2004-12-30 16:34:01 +01:00
2008-05-09 11:50:36 +02:00
mtr_verbose ( "Stopping all servers..." ) ;
2006-05-18 23:35:17 +02:00
2007-12-12 18:19:24 +01:00
# Kill all started servers
2009-10-06 10:35:35 +02:00
My::SafeProcess:: shutdown ( $ shutdown_timeout ,
2007-12-12 18:19:24 +01:00
started ( all_servers ( ) ) ) ;
2006-05-18 23:35:17 +02:00
2008-01-08 11:11:06 +01:00
# Remove pidfiles
foreach my $ server ( all_servers ( ) )
{
my $ pid_file = $ server - > if_exist ( 'pid-file' ) ;
unlink ( $ pid_file ) if defined $ pid_file ;
}
2007-12-12 18:19:24 +01:00
# Mark servers as stopped
map ( $ _ - > { proc } = undef , all_servers ( ) ) ;
2006-05-18 23:35:17 +02:00
2004-12-30 16:34:01 +01:00
}
2006-04-24 10:39:56 +02:00
2007-12-12 18:19:24 +01:00
# Find out if server should be restarted for this test
sub server_need_restart {
my ( $ tinfo , $ server ) = @ _ ;
2004-12-30 16:34:01 +01:00
2007-12-12 18:19:24 +01:00
if ( using_extern ( ) )
2006-05-18 23:35:17 +02:00
{
2008-02-04 09:15:44 +01:00
mtr_verbose_restart ( $ server , "no restart for --extern server" ) ;
2007-12-12 18:19:24 +01:00
return 0 ;
2006-10-11 14:50:19 +02:00
}
2007-12-12 18:19:24 +01:00
2019-07-11 06:13:58 +02:00
if ( $ tinfo - > { 'force_restart' } ) {
mtr_verbose_restart ( $ server , "forced in .opt file" ) ;
return 1 ;
}
2010-08-31 11:27:57 +02:00
if ( $ opt_force_restart ) {
mtr_verbose_restart ( $ server , "forced restart turned on" ) ;
return 1 ;
}
2007-12-12 18:19:24 +01:00
if ( $ tinfo - > { template_path } ne $ current_config_name )
2006-06-11 10:10:55 +02:00
{
2008-02-04 09:15:44 +01:00
mtr_verbose_restart ( $ server , "using different config file" ) ;
2007-12-12 18:19:24 +01:00
return 1 ;
2006-06-11 10:10:55 +02:00
}
2007-12-12 18:19:24 +01:00
if ( $ tinfo - > { 'master_sh' } || $ tinfo - > { 'slave_sh' } )
2004-12-30 16:34:01 +01:00
{
2008-02-04 09:15:44 +01:00
mtr_verbose_restart ( $ server , "sh script to run" ) ;
2007-12-12 18:19:24 +01:00
return 1 ;
2006-05-18 23:35:17 +02:00
}
2007-12-12 18:19:24 +01:00
if ( ! started ( $ server ) )
2006-05-19 17:19:57 +02:00
{
2008-02-04 09:15:44 +01:00
mtr_verbose_restart ( $ server , "not started" ) ;
2007-12-12 18:19:24 +01:00
return 1 ;
2006-05-19 17:19:57 +02:00
}
2007-12-12 18:19:24 +01:00
my $ started_tinfo = $ server - > { 'started_tinfo' } ;
if ( defined $ started_tinfo )
2006-10-06 11:23:19 +02:00
{
2007-12-12 18:19:24 +01:00
# Check if timezone of test that server was started
# with differs from timezone of next test
if ( timezone ( $ started_tinfo ) ne timezone ( $ tinfo ) )
2006-11-17 10:46:21 +01:00
{
2008-02-04 09:15:44 +01:00
mtr_verbose_restart ( $ server , "different timezone" ) ;
2007-12-12 18:19:24 +01:00
return 1 ;
2006-11-17 10:46:21 +01:00
}
2006-10-06 11:23:19 +02:00
}
2006-08-16 10:30:22 +02:00
2010-08-17 09:14:46 +02:00
if ( $ server - > name ( ) =~ /^mysqld\./ )
2007-12-19 11:08:41 +01:00
{
2007-12-12 18:19:24 +01:00
2007-12-19 11:08:41 +01:00
# Check that running process was started with same options
# as the current test requires
2008-01-07 19:44:48 +01:00
my $ extra_opts = get_extra_opts ( $ server , $ tinfo ) ;
2007-12-19 11:08:41 +01:00
my $ started_opts = $ server - > { 'started_opts' } ;
2008-01-07 19:44:48 +01:00
2010-07-28 12:24:38 +02:00
# Also, always restart if server had been restarted with additional
# options within test.
if ( ! My::Options:: same ( $ started_opts , $ extra_opts ) ||
exists $ server - > { 'restart_opts' } )
2007-12-19 11:08:41 +01:00
{
2017-03-24 11:51:23 +01:00
delete $ server - > { 'restart_opts' } ;
2008-01-09 13:47:09 +01:00
my $ use_dynamic_option_switch = 0 ;
2019-12-23 21:39:10 +01:00
my $ restart_opts = delete $ server - > { 'restart_opts' } || [] ;
2008-02-04 09:15:44 +01:00
if ( ! $ use_dynamic_option_switch )
{
mtr_verbose_restart ( $ server , "running with different options '" .
join ( " " , @ { $ extra_opts } ) . "' != '" .
2019-12-23 21:39:10 +01:00
join ( " " , @ { $ started_opts } , @ { $ restart_opts } ) . "'" ) ;
2008-02-04 09:15:44 +01:00
return 1 ;
}
2008-01-09 13:47:09 +01:00
2008-01-07 19:44:48 +01:00
mtr_verbose ( My::Options:: toStr ( "started_opts" , @$ started_opts ) ) ;
mtr_verbose ( My::Options:: toStr ( "extra_opts" , @$ extra_opts ) ) ;
# Get diff and check if dynamic switch is possible
my @ diff_opts = My::Options:: diff ( $ started_opts , $ extra_opts ) ;
mtr_verbose ( My::Options:: toStr ( "diff_opts" , @ diff_opts ) ) ;
my $ query = My::Options:: toSQL ( @ diff_opts ) ;
mtr_verbose ( "Attempting dynamic switch '$query'" ) ;
if ( run_query ( $ tinfo , $ server , $ query ) ) {
2007-12-19 11:08:41 +01:00
mtr_verbose ( "Restart: running with different options '" .
2008-01-07 19:44:48 +01:00
join ( " " , @ { $ extra_opts } ) . "' != '" .
2008-02-04 09:15:44 +01:00
join ( " " , @ { $ started_opts } ) . "'" ) ;
2007-12-19 11:08:41 +01:00
return 1 ;
}
2008-01-08 15:47:04 +01:00
# Remember the dynamically set options
$ server - > { 'started_opts' } = $ extra_opts ;
2006-10-06 11:23:19 +02:00
}
2004-12-30 16:34:01 +01:00
}
2006-08-16 10:30:22 +02:00
2007-12-12 18:19:24 +01:00
# Default, no restart
return 0 ;
2006-08-16 10:30:22 +02:00
}
2006-05-18 23:35:17 +02:00
2007-12-12 18:19:24 +01:00
sub servers_need_restart ($) {
my ( $ tinfo ) = @ _ ;
return grep { server_need_restart ( $ tinfo , $ _ ) ; } all_servers ( ) ;
}
2006-05-18 23:35:17 +02:00
2010-08-17 09:14:46 +02:00
############################################
2006-05-18 23:35:17 +02:00
2010-08-17 09:14:46 +02:00
############################################
2006-05-18 23:35:17 +02:00
2007-12-12 18:19:24 +01:00
#
# Filter a list of servers and return the SafeProcess
# for only those that are started or stopped
#
sub started { return grep ( defined $ _ , map ( $ _ - > { proc } , @ _ ) ) ; }
sub stopped { return grep ( ! defined $ _ , map ( $ _ - > { proc } , @ _ ) ) ; }
2006-06-11 10:10:55 +02:00
2006-05-18 23:35:17 +02:00
2008-01-07 19:44:48 +01:00
sub get_extra_opts {
2010-06-09 10:21:46 +02:00
# No extra options if --user-args
return \ @ opt_extra_mysqld_opt if $ opt_user_args ;
2007-12-12 18:19:24 +01:00
my ( $ mysqld , $ tinfo ) = @ _ ;
2006-05-18 23:35:17 +02:00
2008-04-24 13:02:53 +02:00
my $ opts =
2007-12-12 18:19:24 +01:00
$ mysqld - > option ( "#!use-slave-opt" ) ?
$ tinfo - > { slave_opt } : $ tinfo - > { master_opt } ;
2008-04-24 13:02:53 +02:00
# Expand environment variables
foreach my $ opt ( @$ opts )
{
2010-08-25 22:22:33 +02:00
no warnings 'uninitialized' ;
$ opt =~ s/\$\{(\w+)\}/$ENV{$1}/ge ;
$ opt =~ s/\$(\w+)/$ENV{$1}/ge ;
2008-04-24 13:02:53 +02:00
}
return $ opts ;
2007-12-12 18:19:24 +01:00
}
2006-05-18 23:35:17 +02:00
2007-12-12 18:19:24 +01:00
sub stop_servers ($$) {
2009-03-20 15:18:22 +01:00
my ( @ servers ) = @ _ ;
2006-06-11 10:10:55 +02:00
2014-08-10 14:36:17 +02:00
mtr_report ( "Stopping " , started ( @ servers ) ) ;
2008-01-09 13:47:09 +01:00
2010-08-17 09:14:46 +02:00
My::SafeProcess:: shutdown ( $ opt_shutdown_timeout ,
started ( @ servers ) ) ;
2005-02-08 06:11:05 +01:00
2007-12-12 18:19:24 +01:00
foreach my $ server ( @ servers )
2006-05-18 23:35:17 +02:00
{
2007-12-12 18:19:24 +01:00
# Mark server as stopped
$ server - > { proc } = undef ;
# Forget history
delete $ server - > { 'started_tinfo' } ;
delete $ server - > { 'started_opts' } ;
delete $ server - > { 'started_cnf' } ;
2006-05-18 23:35:17 +02:00
}
2004-12-30 16:34:01 +01:00
}
2019-01-23 12:30:00 +01:00
#
# run_query_output
#
# Run a query against a server using mysql client. The output of
# the query will be written into outfile.
#
sub run_query_output {
my ( $ mysqld , $ query , $ outfile ) = @ _ ;
my $ args ;
mtr_init_args ( \ $ args ) ;
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
mtr_add_arg ( $ args , "--silent" ) ;
mtr_add_arg ( $ args , "--execute=%s" , $ query ) ;
my $ res = My::SafeProcess - > run
(
name = > "run_query_output -> " . $ mysqld - > name ( ) ,
path = > $ exe_mysql ,
args = > \ $ args ,
output = > $ outfile ,
error = > $ outfile
) ;
return $ res
}
#
# wsrep_wait_ready
#
# Wait until the server has been joined to the cluster and is
# ready for operation.
#
# RETURN
# 1 Server is ready
# 0 Server didn't transition to ready state within start timeout
#
sub wait_wsrep_ready ($$) {
my ( $ tinfo , $ mysqld ) = @ _ ;
my $ sleeptime = 100 ; # Milliseconds
my $ loops = ( $ opt_start_timeout * 1000 ) / $ sleeptime ;
my $ name = $ mysqld - > name ( ) ;
my $ outfile = "$opt_vardir/tmp/$name.wsrep_ready" ;
my $ query = " SET SESSION wsrep_sync_wait = 0 ;
SELECT VARIABLE_NAME , VARIABLE_VALUE
FROM INFORMATION_SCHEMA . GLOBAL_STATUS
WHERE VARIABLE_NAME = 'wsrep_ready' " ;
for ( my $ loop = 1 ; $ loop <= $ loops ; $ loop + + )
{
# Careful... if MTR runs with option 'verbose' then the
# file contains also SafeProcess verbose output
if ( run_query_output ( $ mysqld , $ query , $ outfile ) == 0 &&
mtr_grab_file ( $ outfile ) =~ /WSREP_READY\s+ON/ )
{
unlink ( $ outfile ) ;
return 1 ;
}
mtr_milli_sleep ( $ sleeptime ) ;
}
$ tinfo - > { logfile } = "WSREP did not transition to state READY" ;
return 0 ;
}
#
# wsrep_is_bootstrap_server
#
# Check if the server is the first one to be started in the
# cluster.
#
# RETURN
# 1 The server is a bootstrap server
# 0 The server is not a bootstrap server
#
sub wsrep_is_bootstrap_server ($) {
my $ mysqld = shift ;
my $ cluster_address = $ mysqld - > if_exist ( 'wsrep-cluster-address' ) ||
$ mysqld - > if_exist ( 'wsrep_cluster_address' ) ;
if ( defined $ cluster_address )
{
return $ cluster_address eq "gcomm://" || $ cluster_address eq "'gcomm://'" ;
}
return 0 ;
}
#
# wsrep_on
#
# Check if wsrep has been enabled for a server.
#
# RETURN
# 1 Wsrep has been enabled
# 0 Wsrep is not enabled
#
sub wsrep_on ($) {
my $ mysqld = shift ;
#check if wsrep_on= is set in configuration
if ( $ mysqld - > if_exist ( 'wsrep-on' ) ) {
my $ on = "" . $ mysqld - > value ( 'wsrep-on' ) ;
if ( $ on eq "1" || $ on eq "ON" ) {
return 1 ;
}
}
return 0 ;
}
2006-05-02 14:46:18 +02:00
2006-10-06 17:15:26 +02:00
#
2007-12-12 18:19:24 +01:00
# start_servers
2006-10-06 17:15:26 +02:00
#
2007-12-12 18:19:24 +01:00
# Start servers not already started
2006-10-06 17:15:26 +02:00
#
# RETURN
# 0 OK
# 1 Start failed
#
2007-12-12 18:19:24 +01:00
sub start_servers ($) {
my ( $ tinfo ) = @ _ ;
2006-10-06 17:15:26 +02:00
2010-08-17 09:14:46 +02:00
for ( all_servers ( ) ) {
$ _ - > { START } - > ( $ _ , $ tinfo ) if $ _ - > { START } ;
2006-01-12 19:51:02 +01:00
}
2010-08-17 09:14:46 +02:00
for ( all_servers ( ) ) {
next unless $ _ - > { WAIT } and started ( $ _ ) ;
2019-01-23 12:30:00 +01:00
if ( $ _ - > { WAIT } - > ( $ _ , $ tinfo ) ) {
2006-10-06 17:15:26 +02:00
return 1 ;
2006-05-23 15:27:56 +02:00
}
2006-05-18 23:35:17 +02:00
}
2006-10-06 17:15:26 +02:00
return 0 ;
2004-12-30 16:34:01 +01:00
}
2007-12-12 18:19:24 +01:00
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
#
# Run include/check-testcase.test
2007-12-12 18:19:24 +01:00
# Before a testcase, run in record mode and save result file to var/tmp
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
# After testcase, run and compare with the recorded file, they should be equal!
#
2006-10-08 17:48:01 +02:00
# RETURN VALUE
2008-04-27 21:31:32 +02:00
# The newly started process
2006-10-08 17:48:01 +02:00
#
2008-04-27 21:31:32 +02:00
sub start_check_testcase ($$$) {
2007-12-12 18:19:24 +01:00
my $ tinfo = shift ;
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
my $ mode = shift ;
2006-06-10 19:33:37 +02:00
my $ mysqld = shift ;
2007-12-12 18:19:24 +01:00
my $ name = "check-" . $ mysqld - > name ( ) ;
2008-09-05 16:22:02 +02:00
# Replace dots in name with underscore to avoid that mysqltest
# misinterpret's what the filename extension is :(
$ name =~ s/\./_/g ;
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
my $ args ;
mtr_init_args ( \ $ args ) ;
2008-04-08 16:51:26 +02:00
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
mtr_add_arg ( $ args , "--defaults-group-suffix=%s" , $ mysqld - > after ( 'mysqld' ) ) ;
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--result-file=%s" , "$opt_vardir/tmp/$name.result" ) ;
mtr_add_arg ( $ args , "--test-file=%s" , "include/check-testcase.test" ) ;
2009-02-13 16:27:33 +01:00
mtr_add_arg ( $ args , "--verbose" ) ;
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
if ( $ mode eq "before" )
{
mtr_add_arg ( $ args , "--record" ) ;
}
2007-12-12 18:19:24 +01:00
my $ errfile = "$opt_vardir/tmp/$name.err" ;
2024-06-01 00:04:45 +02:00
2024-09-18 20:54:38 +02:00
my $ exe = $ exe_mysqltest ;
My::Debugger:: setup_client_args ( \ $ args , \ $ exe ) ;
2008-04-27 21:31:32 +02:00
my $ proc = My::SafeProcess - > new
2007-12-12 18:19:24 +01:00
(
name = > $ name ,
2024-09-18 20:54:38 +02:00
path = > $ exe ,
2007-12-12 18:19:24 +01:00
error = > $ errfile ,
2009-01-21 10:32:05 +01:00
output = > $ errfile ,
2007-12-12 18:19:24 +01:00
args = > \ $ args ,
2008-04-27 21:31:32 +02:00
user_data = > $ errfile ,
2008-10-06 19:34:00 +02:00
verbose = > $ opt_verbose ,
2007-12-12 18:19:24 +01:00
) ;
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
2008-04-27 21:31:32 +02:00
mtr_report ( "Started $proc" ) ;
return $ proc ;
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
}
2006-11-10 13:12:08 +01:00
2007-12-12 18:19:24 +01:00
sub run_mysqltest ($) {
my $ proc = start_mysqltest ( @ _ ) ;
$ proc - > wait ( ) ;
2006-11-10 13:12:08 +01:00
}
2006-04-24 10:39:56 +02:00
2006-07-10 12:06:30 +02:00
2007-12-12 18:19:24 +01:00
sub start_mysqltest ($) {
2006-08-16 10:30:22 +02:00
my ( $ tinfo ) = @ _ ;
2005-01-01 19:27:41 +01:00
my $ exe = $ exe_mysqltest ;
my $ args ;
2004-12-30 16:34:01 +01:00
2011-04-07 10:12:52 +02:00
mark_time_used ( 'admin' ) ;
2010-10-19 14:08:46 +02:00
2004-12-30 16:34:01 +01:00
mtr_init_args ( \ $ args ) ;
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--defaults-file=%s" , $ path_config_file ) ;
2023-08-04 11:10:34 +02:00
if ( $ opt_verbose > 1 ) {
mtr_add_arg ( $ args , "--verbose" ) ;
} else {
mtr_add_arg ( $ args , "--silent" ) ;
}
2004-12-30 16:34:01 +01:00
mtr_add_arg ( $ args , "--tmpdir=%s" , $ opt_tmpdir ) ;
2006-11-08 22:53:40 +01:00
mtr_add_arg ( $ args , "--character-sets-dir=%s" , $ path_charsetsdir ) ;
2006-11-21 21:32:58 +01:00
mtr_add_arg ( $ args , "--logdir=%s/log" , $ opt_vardir ) ;
2005-08-29 20:28:42 +02:00
2006-12-20 16:53:06 +01:00
# Log line number and time for each line in .test file
mtr_add_arg ( $ args , "--mark-progress" )
if $ opt_mark_progress ;
2007-12-12 18:19:24 +01:00
mtr_add_arg ( $ args , "--database=test" ) ;
2004-12-30 16:34:01 +01:00
2005-01-01 19:27:41 +01:00
if ( $ opt_ps_protocol )
{
mtr_add_arg ( $ args , "--ps-protocol" ) ;
}
2005-11-03 19:00:37 +01:00
if ( $ opt_sp_protocol )
{
mtr_add_arg ( $ args , "--sp-protocol" ) ;
}
if ( $ opt_view_protocol )
{
mtr_add_arg ( $ args , "--view-protocol" ) ;
}
if ( $ opt_cursor_protocol )
{
mtr_add_arg ( $ args , "--cursor-protocol" ) ;
}
2011-09-20 12:49:25 +02:00
if ( $ opt_non_blocking_api )
{
mtr_add_arg ( $ args , "--non-blocking-api" ) ;
}
2008-05-04 21:40:40 +02:00
mtr_add_arg ( $ args , "--timer-file=%s/log/timer" , $ opt_vardir ) ;
2004-12-30 16:34:01 +01:00
if ( $ opt_compress )
{
mtr_add_arg ( $ args , "--compress" ) ;
}
if ( $ opt_sleep )
{
mtr_add_arg ( $ args , "--sleep=%d" , $ opt_sleep ) ;
}
2005-10-04 15:43:55 +02:00
if ( $ opt_ssl )
{
2006-08-16 10:30:22 +02:00
# Turn on SSL for _all_ test cases if option --ssl was used
2006-11-08 22:56:06 +01:00
mtr_add_arg ( $ args , "--ssl" ) ;
2005-10-04 15:43:55 +02:00
}
2007-12-20 18:42:23 +01:00
2010-02-17 16:28:02 +01:00
if ( $ opt_max_connections ) {
mtr_add_arg ( $ args , "--max-connections=%d" , $ opt_max_connections ) ;
}
2008-02-22 15:38:10 +01:00
if ( $ opt_embedded_server )
{
# Get the args needed for the embedded server
# and append them to args prefixed
# with --sever-arg=
2008-02-04 09:15:44 +01:00
2008-02-22 15:38:10 +01:00
my $ mysqld = $ config - > group ( 'embedded' )
or mtr_error ( "Could not get [embedded] section" ) ;
my $ mysqld_args ;
mtr_init_args ( \ $ mysqld_args ) ;
my $ extra_opts = get_extra_opts ( $ mysqld , $ tinfo ) ;
mysqld_arguments ( $ mysqld_args , $ mysqld , $ extra_opts ) ;
mtr_add_arg ( $ args , "--server-arg=%s" , $ _ ) for @$ mysqld_args ;
}
2004-12-30 16:34:01 +01:00
2005-07-15 17:51:43 +02:00
# ----------------------------------------------------------------------
# export MYSQL_TEST variable containing <path>/mysqltest <args>
# ----------------------------------------------------------------------
2008-02-20 14:55:30 +01:00
$ ENV { 'MYSQL_TEST' } = mtr_args2str ( $ exe_mysqltest , @$ args ) ;
2005-07-15 17:51:43 +02:00
2012-05-15 19:35:57 +02:00
if ( $ opt_force > 1 )
{
mtr_add_arg ( $ args , "--continue-on-error" ) ;
}
2012-02-23 07:50:11 +01:00
my $ suite = $ tinfo - > { suite } ;
if ( $ suite - > { parent } ) {
mtr_add_arg ( $ args , "--overlay-dir=%s/" , $ suite - > { dir } ) ;
mtr_add_arg ( $ args , "--suite-dir=%s/" , $ suite - > { parent } - > { dir } ) ;
} else {
mtr_add_arg ( $ args , "--suite-dir=%s/" , $ suite - > { dir } ) ;
}
2007-06-26 12:26:21 +02:00
mtr_add_arg ( $ args , "--test-file=%s" , $ tinfo - > { 'path' } ) ;
2006-03-23 15:07:39 +01:00
2007-08-03 13:12:53 +02:00
# Number of lines of resut to include in failure report
2017-04-29 21:28:32 +02:00
mtr_add_arg ( $ args , "--tail-lines=%d" , $ opt_tail_lines ) ;
2007-08-03 13:12:53 +02:00
2006-11-10 13:12:08 +01:00
if ( defined $ tinfo - > { 'result_file' } ) {
2007-06-26 12:26:21 +02:00
mtr_add_arg ( $ args , "--result-file=%s" , $ tinfo - > { 'result_file' } ) ;
2006-11-10 13:12:08 +01:00
}
2005-09-21 10:24:46 +02:00
2024-04-06 00:31:08 +02:00
mtr_add_arg ( $ args , "--wait-for-pos-timeout=%d" , $ opt_debug_sync_timeout ) ;
2008-08-04 21:54:44 +02:00
client_debug_arg ( $ args , "mysqltest" ) ;
2005-09-21 10:24:46 +02:00
if ( $ opt_record )
{
mtr_add_arg ( $ args , "--record" ) ;
2008-11-10 14:53:21 +01:00
2008-11-10 14:53:53 +01:00
# When recording to a non existing result file
# the name of that file is in "record_file"
if ( defined $ tinfo - > { 'record_file' } ) {
mtr_add_arg ( $ args , "--result-file=%s" , $ tinfo - > { record_file } ) ;
}
2005-09-21 10:24:46 +02:00
}
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
My::Debugger:: setup_client_args ( \ $ args , \ $ exe ) ;
2006-03-23 15:30:21 +01:00
2007-12-12 18:19:24 +01:00
my $ proc = My::SafeProcess - > new
(
name = > "mysqltest" ,
path = > $ exe ,
args = > \ $ args ,
2008-02-25 16:41:59 +01:00
append = > 1 ,
error = > $ path_current_testlog ,
2007-12-12 18:19:24 +01:00
verbose = > $ opt_verbose ,
) ;
mtr_verbose ( "Started $proc" ) ;
return $ proc ;
2004-12-30 16:34:01 +01:00
}
2005-01-02 16:57:21 +01:00
2009-11-12 11:04:01 +01:00
#
# Search server logs for valgrind reports printed at mysqld termination
#
sub valgrind_exit_reports () {
2010-11-23 14:34:00 +01:00
my $ found_err = 0 ;
2009-11-12 11:04:01 +01:00
foreach my $ log_file ( keys % mysqld_logs )
{
my @ culprits = ( ) ;
my $ valgrind_rep = "" ;
my $ found_report = 0 ;
my $ err_in_report = 0 ;
my $ LOGF = IO::File - > new ( $ log_file )
or mtr_error ( "Could not open file '$log_file' for reading: $!" ) ;
while ( my $ line = <$LOGF> )
{
if ( $ line =~ /^CURRENT_TEST: (.+)$/ )
{
my $ testname = $ 1 ;
# If we have a report, report it if needed and start new list of tests
if ( $ found_report )
{
if ( $ err_in_report )
{
mtr_print ( "Valgrind report from $log_file after tests:\n" ,
@ culprits ) ;
mtr_print_line ( ) ;
print ( "$valgrind_rep\n" ) ;
2011-04-27 09:45:23 +02:00
$ found_err = 1 ;
2009-11-12 11:04:01 +01:00
$ err_in_report = 0 ;
}
# Make ready to collect new report
@ culprits = ( ) ;
$ found_report = 0 ;
$ valgrind_rep = "" ;
}
push ( @ culprits , $ testname ) ;
next ;
}
# This line marks the start of a valgrind report
2010-11-23 14:34:00 +01:00
$ found_report = 1 if $ line =~ /^==\d+== .* SUMMARY:/ ;
2009-11-12 11:04:01 +01:00
if ( $ found_report ) {
$ line =~ s/^==\d+== // ;
$ valgrind_rep . = $ line ;
$ err_in_report = 1 if $ line =~ /ERROR SUMMARY: [1-9]/ ;
$ err_in_report = 1 if $ line =~ /definitely lost: [1-9]/ ;
$ err_in_report = 1 if $ line =~ /possibly lost: [1-9]/ ;
}
}
$ LOGF = undef ;
if ( $ err_in_report ) {
mtr_print ( "Valgrind report from $log_file after tests:\n" , @ culprits ) ;
mtr_print_line ( ) ;
print ( "$valgrind_rep\n" ) ;
2010-11-23 14:34:00 +01:00
$ found_err = 1 ;
2009-11-12 11:04:01 +01:00
}
}
2010-11-23 14:34:00 +01:00
return $ found_err ;
2009-11-12 11:04:01 +01:00
}
2005-09-17 01:09:32 +02:00
2005-01-02 16:57:21 +01:00
#
2007-12-12 18:19:24 +01:00
# Usage
2005-01-02 16:57:21 +01:00
#
2005-06-21 20:25:50 +02:00
sub usage ($) {
2008-09-05 14:09:39 +02:00
my ( $ message ) = @ _ ;
2006-06-08 19:55:22 +02:00
if ( $ message )
{
2007-02-23 12:13:55 +01:00
print STDERR "$message\n" ;
2010-02-10 20:06:24 +01:00
print STDERR "For full list of options, use $0 --help\n" ;
2022-04-11 15:43:02 +02:00
exit ( 1 ) ;
2006-06-08 19:55:22 +02:00
}
2013-11-27 21:58:36 +01:00
local $" = ',' ; # for @DEFAULT_SUITES below
2022-07-18 22:16:17 +02:00
print << HERE . My::Debugger:: help ( ) . My::CoreDump:: help ( ) . << HERE ;
2005-01-02 16:57:21 +01:00
2006-10-04 12:47:32 +02:00
$ 0 [ OPTIONS ] [ TESTCASE ]
2005-01-02 16:57:21 +01:00
2014-01-09 21:01:12 +01:00
Where test case can be specified as:
testcase [ . test ] Runs the test case named 'testcase' from all suits
path - to - testcase
[ suite . ] testcase [ , combination ]
Examples:
alias
2018-03-09 13:05:35 +01:00
main . alias 'main' is the name of the main test suite
2017-06-21 12:44:16 +02:00
rpl . rpl_invoked_features , mix , innodb
2014-01-09 21:01:12 +01:00
suite /rpl/ t / rpl . rpl_invoked_features
Options to control what engine / variation to run:
2005-01-02 16:57:21 +01:00
embedded - server Use the embedded server , i . e . no mysqld daemons
ps - protocol Use the binary protocol between client and server
2005-11-03 19:00:37 +01:00
cursor - protocol Use the cursor protocol between client and server
( implies - - ps - protocol )
view - protocol Create a view to execute all non updating queries
sp - protocol Create a stored procedure to execute all queries
2011-09-20 12:49:25 +02:00
non - blocking - api Use the non - blocking client API
2005-10-04 15:43:55 +02:00
compress Use the compressed protocol between client and server
ssl Use ssl protocol between client and server
2015-12-09 18:22:38 +01:00
skip - ssl Don ' t start server with support for ssl connections
2006-11-02 21:05:20 +01:00
vs - config Visual Studio configuration used to create executables
( default: MTR_VS_CONFIG environment variable )
2015-12-09 18:22:38 +01:00
parallel = # How many parallel test should be run
2009-05-12 14:53:46 +02:00
defaults - file = < config template > Use fixed config template for all
2007-12-12 18:19:24 +01:00
tests
2010-12-09 14:40:36 +01:00
defaults - extra - file = < config template > Extra config template to add to
2007-12-12 18:19:24 +01:00
all generated configs
2009-09-07 22:50:10 +02:00
combination = <opt> Use at least twice to run tests with specified
2009-05-12 14:53:46 +02:00
options to mysqld
2013-04-09 16:20:54 +02:00
dry - run Don ' t run any tests , print the list of tests
that were selected for execution
2007-12-12 18:19:24 +01:00
2006-03-23 16:39:51 +01:00
Options to control directories to use
tmpdir = DIR The directory where temporary files are stored
( default: . /var/ tmp ) .
2006-04-19 23:09:49 +02:00
vardir = DIR The directory where files generated from the test run
is stored ( default: . / var ) . Specifying a ramdisk or
tmpfs will speed up tests .
2017-02-20 00:43:42 +01:00
mem [ = DIR ] Run testsuite in "memory" using tmpfs or ramdisk
Attempts to use DIR first if specified else
uses a builtin list of standard locations
2015-04-27 13:15:23 +02:00
for tmpfs ( /run/s hm , /dev/s hm , / tmp )
2006-11-08 23:16:44 +01:00
The option can also be set using environment
variable MTR_MEM = [ DIR ]
2010-10-13 13:07:28 +02:00
clean - vardir Clean vardir if tests were successful and if
running in "memory" . Otherwise this option is ignored
2008-03-03 12:53:57 +01:00
client - bindir = PATH Path to the directory where client binaries are located
client - libdir = PATH Path to the directory where client libraries are located
2006-03-23 16:39:51 +01:00
2005-01-02 16:57:21 +01:00
Options to control what test suites or cases to run
2012-05-15 19:35:57 +02:00
force Continue after a failure . When specified once , a
failure in a test file will abort this test file , and
the execution will continue from the next test file .
When specified twice , execution will continue executing
the failed test file from the next command .
2023-10-23 12:15:46 +02:00
skip - not - found It is not an error if a test was not found in a
specified test suite . Test will be marked as skipped .
2007-10-05 19:23:44 +02:00
do - test = PREFIX or REGEX
Run test cases which name are prefixed with PREFIX
or fulfills REGEX
skip - test = PREFIX or REGEX
Skip test cases which name are prefixed with PREFIX
or fulfills REGEX
2008-01-11 10:44:16 +01:00
start - from = PREFIX Run test cases starting test prefixed with PREFIX where
prefix may be suite . testname or just testname
suite [ s ] = NAME1 , .. , NAMEN
Collect tests in suites from the comma separated
2007-06-27 14:28:02 +02:00
list of suite names .
2013-11-27 21:58:36 +01:00
The default is: "@DEFAULT_SUITES"
2005-01-02 16:57:21 +01:00
skip - rpl Skip the replication test cases .
2012-01-25 11:34:43 +01:00
big - test Also run tests marked as "big" . Repeat this option
twice to run only "big" tests .
Added option --staging-run to mysql-test-run to mark slow, not important tests, to not be run in staging trees
Use MY_MUTEX_INIT_FAST for pool mutex
mysql-test/mysql-test-run.pl:
Added option --staging-run
Added information about --parallell=# to help message
mysql-test/suite/federated/federated_server.test:
Slow test, don't run with --staging-run
mysql-test/suite/maria/t/maria-preload.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_optimize.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_001.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Slow test, don't run with --staging-run
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Slow test, don't run with --staging-run
mysql-test/t/compress.test:
Slow test, don't run with --staging-run
mysql-test/t/count_distinct3.test:
Slow test, don't run with --staging-run
mysql-test/t/index_merge_innodb.test:
Slow test, don't run with --staging-run
mysql-test/t/information_schema_all_engines.test:
Slow test, don't run with --staging-run
mysql-test/t/innodb_mysql.test:
Slow test, don't run with --staging-run
mysql-test/t/pool_of_threads.test:
Slow test, don't run with --staging-run
mysql-test/t/preload.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl.test:
Slow test, don't run with --staging-run
mysql-test/t/ssl_compress.test:
Slow test, don't run with --staging-run
mysql-test/valgrind.supp:
Suppress warnings from SuSE 11.1 on x86
sql/scheduler.cc:
Use MY_MUTEX_INIT_FAST for pool mutex
2009-06-05 17:35:22 +02:00
staging - run Run a limited number of tests ( no slow tests ) . Used
for running staging trees with valgrind .
2009-05-12 14:53:46 +02:00
enable - disabled Run also tests marked as disabled
2009-06-22 16:29:02 +02:00
print - testcases Don ' t run the tests but print details about all the
2009-05-12 14:53:46 +02:00
selected tests , in the order they would be run .
2010-06-02 14:01:42 +02:00
skip - test - list = FILE Skip the tests listed in FILE . Each line in the file
is an entry and should be formatted as:
<TESTNAME> : <COMMENT>
2015-07-10 11:49:05 +02:00
force - restart Always restart servers between tests . This makes it
easier to see from which test warnings may come from .
2005-01-02 16:57:21 +01:00
Options that specify ports
2010-01-25 11:20:52 +01:00
mtr - port - base = # Base for port numbers, ports from this number to
port - base = # number+9 are reserved. Should be divisible by 10;
if not it will be rounded down . May be set with
environment variable MTR_PORT_BASE . If this value is
set and is not "auto" , it overrides build - thread .
2007-12-12 18:19:24 +01:00
mtr - build - thread = # Specify unique number to calculate port number(s) from.
2007-12-19 12:58:06 +01:00
build - thread = # Can be set in environment variable MTR_BUILD_THREAD.
2007-12-12 18:19:24 +01:00
Set MTR_BUILD_THREAD = "auto" to automatically aquire
a build thread id that is unique to current host
2015-03-31 15:43:38 +02:00
port - group - size = N Reserve groups of TCP ports of size N for each MTR thread
2005-01-02 16:57:21 +01:00
Options for test case authoring
record TESTNAME ( Re ) genereate the result file for TESTNAME
Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
2006-01-26 17:54:34 +01:00
check - testcases Check testcases for sideeffects
2006-12-20 16:53:06 +01:00
mark - progress Log line number and elapsed time to <testname> . progress
2005-01-02 16:57:21 +01:00
2011-01-27 14:42:08 +01:00
Options that pass on options ( these may be repeated )
2005-01-02 16:57:21 +01:00
2021-03-31 12:06:12 +02:00
mariadbd = ARGS Specify additional arguments to "mariadbd"
mysqld Alias for mariadbd .
mariadbd - env = VAR = VAL Specify additional environment settings for "mariadbd"
mysqld - env Alias for mariadbd - env .
2005-01-02 16:57:21 +01:00
Options to run test on running server
2007-12-12 18:19:24 +01:00
extern option = value Run only the tests against an already started server
the options to use for connection to the extern server
must be specified using name - value pair notation
For example:
. /$0 --extern socket=/ tmp / mysqld . sock
2005-01-02 16:57:21 +01:00
Options for debugging the product
2006-04-19 23:09:49 +02:00
debug Dump trace output for all servers and client programs
2010-12-09 12:10:49 +01:00
debug - common Same as debug , but sets 'd' debug flags to
"query,info,error,enter,exit"
2011-02-07 12:42:21 +01:00
debug - server Use debug version of server , but without turning on
tracing
2007-01-19 09:41:08 +01:00
max - save - core Limit the number of core files saved ( to avoid filling
up disks for heavily crashing server ) . Defaults to
2020-07-22 07:22:14 +02:00
$ opt_max_save_core . Set its default with
MTR_MAX_SAVE_CORE
2008-04-27 15:32:12 +02:00
max - save - datadir Limit the number of datadir saved ( to avoid filling
up disks for heavily crashing server ) . Defaults to
2020-07-22 07:22:14 +02:00
$ opt_max_save_datadir . Set its default with
MTR_MAX_SAVE_DATADIR
2015-12-09 18:22:38 +01:00
max - test - fail Limit the number of test failures before aborting
2008-04-28 09:24:30 +02:00
the current test run . Defaults to
$ opt_max_test_fail , set to 0 for no limit . Set
it ' s default with MTR_MAX_TEST_FAIL
2016-08-21 19:14:13 +02:00
core - in - failure Generate a core even if run server is run with valgrind
unify mtr handling of debuggers
"debugger" is anything that wraps execution of a target
binary (mysqld or mysqltest). Currently the list includes:
gdb, ddd, dbx, lldb, valgrind, strace, ktrace, rr,
devenv, windbg, vsjitdebugger.
for every debugger xxx, mtr will recognize four options:
--xxx, --boot-xxx, --manual-xxx, --client-xxx.
They all support an optional "=string" argument. String
being a semicolon-separated list of commands (e.g. for gdb)
or one (not semicolon-separated) command line of options
(e.g. for valgrind). Or both (e.g. --gdb='-quiet -nh;info files'
In embedded both --xxx and --client-xxx work.
Functionality changed/removed:
* --rr-args is gone
* --rr-dir is gone
* --manual-debug is gone
* --debugger={devenv|vc|windbg|vc_express|vsjitdebugger} is gone
* --strace-option is gone
* --stracer={strace|ktrace} is gone
* --valgrind only enables it for the server, not for everything
* --valgrind-all is gone
* --valgrind-mysqltest is gone
* --valgrind-mysqld is gone
* --valgrind-options is gone
* --valgrind-option is gone
* --valgrind-path is gone
* --callgrind is gone
* one cannot combine --valgrind --gdb anymore
* valgrind report doesn't add a fake test line to the output
* vc and vcexpress on windows are no longer supported
2021-01-25 13:16:04 +01:00
HERE
2020-04-17 13:02:51 +02:00
2005-01-02 16:57:21 +01:00
Misc options
2008-09-05 18:28:20 +02:00
user = USER User for connecting to mysqld ( default: $ opt_user )
2006-03-01 13:29:37 +01:00
comment = STR Write STR to the output
2010-12-09 14:40:36 +01:00
timer Show test case execution time .
2007-12-12 18:19:24 +01:00
verbose More verbose output ( use multiple times for even more )
2009-05-12 14:53:46 +02:00
verbose - restart Write when and why servers are restarted
2007-12-12 18:19:24 +01:00
start Only initialize and start the servers , using the
startup settings for the first specified test case
Example:
$ 0 - - start alias &
2010-06-09 10:21:46 +02:00
start - and - exit Same as - - start , but mysql - test - run terminates and
leaves just the server running
2006-04-21 04:17:14 +02:00
start - dirty Only start the servers ( without initialization ) for
2007-12-12 18:19:24 +01:00
the first specified test case
2010-06-09 10:21:46 +02:00
user - args In combination with start * and no test name , drops
2021-03-31 12:06:12 +02:00
arguments to mariadbd except those specified with
- - mariadbd ( if any )
2009-04-29 16:13:38 +02:00
wait - all If - - start or - - start - dirty option is used , wait for all
servers to exit before finishing the process
2015-12-09 18:22:38 +01:00
fast Run as fast as possible , don ' t wait for servers
2007-12-12 18:19:24 +01:00
to shutdown etc .
2019-07-11 06:13:58 +02:00
force - restart Always restart servers between tests
2009-12-06 18:34:54 +01:00
parallel = N Run tests in N parallel threads ( default 1 )
2009-06-03 12:46:04 +02:00
Use parallel = auto for auto - setting of N
2008-01-10 10:44:18 +01:00
repeat = N Run each test N number of times
2009-12-06 18:34:54 +01:00
retry = N Retry tests that fail up to N times ( default $ opt_retry ) .
Retries are also limited by the maximum number of
failures before stopping , set with the - - retry - failure
option
retry - failure = N When using the - - retry option to retry failed tests ,
2016-03-04 01:09:37 +01:00
stop when N failures have occurred ( default $ opt_retry_failure )
2006-04-21 04:17:14 +02:00
reorder Reorder tests to get fewer server restarts
2005-01-02 16:57:21 +01:00
help Get this help text
2007-12-12 18:19:24 +01:00
testcase - timeout = MINUTES Max test case run time ( default $ opt_testcase_timeout )
suite - timeout = MINUTES Max test suite run time ( default $ opt_suite_timeout )
shutdown - timeout = SECONDS Max number of seconds to wait for server shutdown
before killing servers ( default $ opt_shutdown_timeout )
warnings Scan the log files for warnings . Use - - nowarnings
to turn off .
2005-08-18 00:16:44 +02:00
2009-09-24 14:19:15 +02:00
stop - file = file ( also MTR_STOP_FILE environment variable ) if this
file detected mysql test will not start new tests
until the file will be removed .
stop - keep - alive = sec ( also MTR_STOP_KEEP_ALIVE environment variable )
works with stop - file , print messages every sec
seconds when mysql test is waiting to removing
the file ( for buildbot )
2006-11-17 13:36:10 +01:00
sleep = SECONDS Passed to mysqltest , will be used as fixed sleep time
2009-09-29 17:38:40 +02:00
debug - sync - timeout = NUM Set default timeout for WAIT_FOR debug sync
actions . Disable facility with NUM = 0 .
2009-02-27 12:20:53 +01:00
gcov Collect coverage information after the test .
The result is a gcov file per source and header file .
2010-12-09 14:40:36 +01:00
gprof Collect profiling information using gprof .
2009-05-12 14:53:46 +02:00
experimental = <file> Refer to list of tests considered experimental ;
failures will be marked exp - fail instead of fail .
timestamp Print timestamp before each test report line
timediff With - - timestamp , also print time passed since
* previous * test started
2010-02-17 16:28:02 +01:00
max - connections = N Max number of open connection to server in mysqltest
2010-10-19 14:08:46 +02:00
report - times Report how much time has been spent on different
phases of test execution .
2011-09-15 12:34:32 +02:00
stress = ARGS Run stress test , providing options to
mysql - stress - test . pl . Options are separated by comma .
2020-04-07 09:45:49 +02:00
xml - report = <file> Output jUnit xml file of the results .
2017-04-29 21:28:32 +02:00
tail - lines = N Number of lines of the result to include in a failure
report .
2006-06-14 21:45:15 +02:00
2010-12-09 14:40:36 +01:00
Some options that control enabling a feature for normal test runs ,
can be turned off by prepending 'no' to the option , e . g . - - notimer .
This applies to reorder , timer , check - testcases and warnings .
2005-01-02 16:57:21 +01:00
HERE
2007-12-12 18:19:24 +01:00
exit ( 1 ) ;
2005-08-18 00:16:44 +02:00
2005-01-02 16:57:21 +01:00
}
2007-12-12 18:19:24 +01:00
2009-12-22 10:35:56 +01:00
sub list_options ($) {
my $ hash = shift ;
for ( keys %$ hash ) {
s/([:=].*|[+!])$// ;
s/\|/\n--/g ;
2009-01-16 20:27:45 +01:00
print "--$_\n" ;
2009-12-22 10:35:56 +01:00
}
exit ( 1 ) ;
}