mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-18565 Galera mtr-suite fails if galera library is not installed
revert/simplify f5390eea9a
remove galera-specific checks from mtr and the main suite
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
--let $galera_have_debug_sync = `SELECT 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters'`
|
--let $galera_have_debug_sync = `SELECT 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters'`
|
||||||
|
|
||||||
--if (!$galera_have_debug_sync) {
|
--if (!$galera_have_debug_sync) {
|
||||||
--skip "Test requires Galera debug library with debug_sync functionality"
|
--skip Test requires Galera debug library with debug_sync functionality
|
||||||
}
|
}
|
||||||
|
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
#
|
|
||||||
# suite.pm will make sure that all tests including this file
|
|
||||||
# will be skipped as needed
|
|
||||||
#
|
|
@ -1,4 +0,0 @@
|
|||||||
#
|
|
||||||
# suite.pm will make sure that all tests including this file
|
|
||||||
# will be skipped as needed
|
|
||||||
#
|
|
@ -100,8 +100,6 @@ else
|
|||||||
$bindir = getcwd();
|
$bindir = getcwd();
|
||||||
}
|
}
|
||||||
|
|
||||||
our $wsrep_check_version;
|
|
||||||
|
|
||||||
# Find the safe process binary or script
|
# Find the safe process binary or script
|
||||||
sub find_bin {
|
sub find_bin {
|
||||||
if (IS_WIN32PERL or IS_CYGWIN)
|
if (IS_WIN32PERL or IS_CYGWIN)
|
||||||
@ -121,10 +119,6 @@ sub find_bin {
|
|||||||
"my_safe_process");
|
"my_safe_process");
|
||||||
push(@safe_process_cmd, $exe);
|
push(@safe_process_cmd, $exe);
|
||||||
}
|
}
|
||||||
# Wsrep version check utility:
|
|
||||||
$wsrep_check_version=
|
|
||||||
my_find_bin($bindir, ["lib/My/SafeProcess", "My/SafeProcess"],
|
|
||||||
"wsrep_check_version", NOT_REQUIRED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
|
||||||
|
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
|
||||||
|
|
||||||
IF (WIN32)
|
IF (WIN32)
|
||||||
ADD_EXECUTABLE(my_safe_process safe_process_win.cc)
|
ADD_EXECUTABLE(my_safe_process safe_process_win.cc)
|
||||||
ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc)
|
ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc)
|
||||||
|
@ -13,122 +13,39 @@
|
|||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <my_global.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <windows.h>
|
|
||||||
#define dlsym(lib, name) GetProcAddress((HMODULE)lib, name)
|
|
||||||
#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0)
|
|
||||||
#define dlclose(lib) FreeLibrary((HMODULE)lib)
|
|
||||||
#elif defined(HAVE_DLFCN_H)
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#else
|
|
||||||
#define NO_DLL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NO_DLL
|
|
||||||
|
|
||||||
#include "../../../../wsrep-lib/wsrep-API/v26/wsrep_api.h"
|
#include "../../../../wsrep-lib/wsrep-API/v26/wsrep_api.h"
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* Library loader
|
|
||||||
**************************************************************************/
|
|
||||||
|
|
||||||
static int wsrep_check_iface_version(const char *found, const char *iface_ver)
|
|
||||||
{
|
|
||||||
if (strcmp(found, iface_ver)) {
|
|
||||||
return ERANGE;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef int (*wsrep_loader_fun)(wsrep_t*);
|
|
||||||
|
|
||||||
static wsrep_loader_fun wsrep_dlf(void *dlh, const char *sym)
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
wsrep_loader_fun dlfun;
|
|
||||||
void *obj;
|
|
||||||
} alias;
|
|
||||||
alias.obj = dlsym(dlh, sym);
|
|
||||||
return alias.dlfun;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int wsrep_check_version_symbol(void *dlh)
|
|
||||||
{
|
|
||||||
char** dlversion = NULL;
|
|
||||||
dlversion = (char**) dlsym(dlh, "wsrep_interface_version");
|
|
||||||
if (dlversion == NULL)
|
|
||||||
return EINVAL;
|
|
||||||
return wsrep_check_iface_version(*dlversion, WSREP_INTERFACE_VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int wsrep_print_version(void *dlh)
|
|
||||||
{
|
|
||||||
char** dlversion = NULL;
|
|
||||||
dlversion = (char**) dlsym(dlh, "wsrep_interface_version");
|
|
||||||
if (dlversion == NULL)
|
|
||||||
return EINVAL;
|
|
||||||
printf("found: %s, need: %s\n", *dlversion, WSREP_INTERFACE_VERSION);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int rc = EINVAL;
|
int rc= 1;
|
||||||
void *dlh;
|
void *dlh;
|
||||||
wsrep_loader_fun dlfun;
|
const char *provider= getenv("WSREP_PROVIDER");
|
||||||
const char *provider= getenv("WSREP_PROVIDER");
|
char** dlversion= NULL;
|
||||||
|
|
||||||
if (!provider)
|
if (!provider || !*provider)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "WSREP_PROVIDER is not set\n");
|
printf("WSREP_PROVIDER is not set\n");
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (!(dlh = dlopen(provider, RTLD_NOW | RTLD_LOCAL)))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Can't open WSREP_PROVIDER (%s) library, error: %s\n",
|
|
||||||
provider, dlerror());
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(dlfun = wsrep_dlf(dlh, "wsrep_loader")))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Can't find 'wsrep_loader' symbol in %s\n",
|
|
||||||
provider);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc < 2 || strcmp(argv[1], "-p")) {
|
|
||||||
rc = wsrep_check_version_symbol(dlh);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rc = wsrep_print_version(dlh);
|
|
||||||
}
|
|
||||||
|
|
||||||
err:
|
|
||||||
if (dlh) dlclose(dlh);
|
|
||||||
|
|
||||||
if (rc == 0)
|
|
||||||
return 0;
|
|
||||||
else if (rc == ERANGE)
|
|
||||||
return 2;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (!(dlh= dlopen(provider, RTLD_NOW | RTLD_LOCAL)))
|
||||||
|
{
|
||||||
|
printf("Can't open WSREP_PROVIDER (%s) library, error: %s\n",
|
||||||
|
provider, dlerror());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
dlversion= (char**) dlsym(dlh, "wsrep_interface_version");
|
||||||
|
if (dlversion && *dlversion)
|
||||||
|
{
|
||||||
|
rc= strcmp(*dlversion, WSREP_INTERFACE_VERSION) ? 2 : 0;
|
||||||
|
if (rc)
|
||||||
|
printf("Wrong wsrep provider library version, found: %s, need: %s\n", *dlversion, WSREP_INTERFACE_VERSION);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Galera library does not contain a version symbol");
|
||||||
|
|
||||||
|
dlclose(dlh);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
@ -140,10 +140,6 @@ my $opt_start_dirty;
|
|||||||
my $opt_start_exit;
|
my $opt_start_exit;
|
||||||
my $start_only;
|
my $start_only;
|
||||||
my $file_wsrep_provider;
|
my $file_wsrep_provider;
|
||||||
my $extra_path;
|
|
||||||
my $mariabackup_path;
|
|
||||||
my $mariabackup_exe;
|
|
||||||
my $garbd_exe;
|
|
||||||
|
|
||||||
our @global_suppressions;
|
our @global_suppressions;
|
||||||
|
|
||||||
@ -379,170 +375,6 @@ $| = 1; # Automatically flush STDOUT
|
|||||||
|
|
||||||
main();
|
main();
|
||||||
|
|
||||||
sub have_wsrep() {
|
|
||||||
my $wsrep_on= $mysqld_variables{'wsrep-on'};
|
|
||||||
return defined $wsrep_on
|
|
||||||
}
|
|
||||||
|
|
||||||
sub have_wsrep_provider() {
|
|
||||||
return $file_wsrep_provider ne "";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub have_mariabackup() {
|
|
||||||
return $mariabackup_path ne "";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub have_garbd() {
|
|
||||||
return $garbd_exe ne "";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub check_wsrep_version() {
|
|
||||||
if ($My::SafeProcess::wsrep_check_version ne "") {
|
|
||||||
system($My::SafeProcess::wsrep_check_version);
|
|
||||||
return ($? >> 8) == 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub wsrep_version_message() {
|
|
||||||
if ($My::SafeProcess::wsrep_check_version ne "") {
|
|
||||||
my $output= `$My::SafeProcess::wsrep_check_version -p`;
|
|
||||||
if (($? >> 8) == 0) {
|
|
||||||
$output =~ s/\s+\z//;
|
|
||||||
return "Wsrep provider version mismatch (".$output.")";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return "Galera library does not contain a version symbol";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return "Unable to find a wsrep version check utility";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub which($) { return `sh -c "command -v $_[0]"` }
|
|
||||||
|
|
||||||
sub check_garbd_support() {
|
|
||||||
if (defined $ENV{'MTR_GARBD_EXE'}) {
|
|
||||||
if (mtr_file_exists($ENV{'MTR_GARBD_EXE'}) ne "") {
|
|
||||||
$garbd_exe= $ENV{'MTR_GARBD_EXE'};
|
|
||||||
} else {
|
|
||||||
mtr_error("MTR_GARBD_EXE env set to an invalid path");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
my $wsrep_path= dirname($file_wsrep_provider);
|
|
||||||
$garbd_exe=
|
|
||||||
mtr_file_exists($wsrep_path."/garb/garbd",
|
|
||||||
$wsrep_path."/../../bin/garb/garbd");
|
|
||||||
if ($garbd_exe ne "") {
|
|
||||||
$ENV{MTR_GARBD_EXE}= $garbd_exe;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub check_wsrep_support() {
|
|
||||||
$garbd_exe= "";
|
|
||||||
if (have_wsrep()) {
|
|
||||||
mtr_report(" - binaries built with wsrep patch");
|
|
||||||
|
|
||||||
# ADD scripts to $PATH to that wsrep_sst_* can be found
|
|
||||||
my ($spath) = grep { -f "$_/wsrep_sst_rsync"; } "$bindir/scripts", $path_client_bindir;
|
|
||||||
mtr_error("No SST scripts") unless $spath;
|
|
||||||
my $separator= (IS_WINDOWS) ? ';' : ':';
|
|
||||||
$ENV{PATH}="$spath$separator$ENV{PATH}";
|
|
||||||
|
|
||||||
# ADD mysql client library path to path so that wsrep_notify_cmd can find mysql
|
|
||||||
# client for loading the tables. (Don't assume each machine has mysql install)
|
|
||||||
my ($cpath) = grep { -f "$_/mysql"; } "$bindir/scripts", $path_client_bindir;
|
|
||||||
mtr_error("No scritps") unless $cpath;
|
|
||||||
$ENV{PATH}="$cpath$separator$ENV{PATH}" unless $cpath eq $spath;
|
|
||||||
|
|
||||||
# ADD my_print_defaults script path to path so that SST scripts can find it
|
|
||||||
my $my_print_defaults_exe=
|
|
||||||
mtr_exe_maybe_exists(
|
|
||||||
"$bindir/extra/my_print_defaults",
|
|
||||||
"$path_client_bindir/my_print_defaults");
|
|
||||||
my $epath= "";
|
|
||||||
if ($my_print_defaults_exe ne "") {
|
|
||||||
$epath= dirname($my_print_defaults_exe);
|
|
||||||
}
|
|
||||||
mtr_error("No my_print_defaults") unless $epath;
|
|
||||||
$ENV{PATH}="$epath$separator$ENV{PATH}" unless ($epath eq $spath) or
|
|
||||||
($epath eq $cpath);
|
|
||||||
|
|
||||||
$extra_path= $epath;
|
|
||||||
|
|
||||||
if (!IS_WINDOWS) {
|
|
||||||
if (which("socat")) {
|
|
||||||
$ENV{MTR_GALERA_TFMT}="socat";
|
|
||||||
} elsif (which("nc")) {
|
|
||||||
$ENV{MTR_GALERA_TFMT}="nc";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check whether WSREP_PROVIDER environment variable is set.
|
|
||||||
if (defined $ENV{'WSREP_PROVIDER'}) {
|
|
||||||
$file_wsrep_provider= "";
|
|
||||||
if ($ENV{'WSREP_PROVIDER'} ne "none") {
|
|
||||||
if (mtr_file_exists($ENV{'WSREP_PROVIDER'}) ne "") {
|
|
||||||
$file_wsrep_provider= $ENV{'WSREP_PROVIDER'};
|
|
||||||
} else {
|
|
||||||
mtr_error("WSREP_PROVIDER env set to an invalid path");
|
|
||||||
}
|
|
||||||
check_garbd_support();
|
|
||||||
}
|
|
||||||
# WSREP_PROVIDER is valid; set to a valid path or "none").
|
|
||||||
mtr_verbose("WSREP_PROVIDER env set to $ENV{'WSREP_PROVIDER'}");
|
|
||||||
} else {
|
|
||||||
# WSREP_PROVIDER env not defined. Lets try to locate the wsrep provider
|
|
||||||
# library.
|
|
||||||
$file_wsrep_provider=
|
|
||||||
mtr_file_exists("/usr/lib64/galera-4/libgalera_smm.so",
|
|
||||||
"/usr/lib64/galera/libgalera_smm.so",
|
|
||||||
"/usr/lib/galera-4/libgalera_smm.so",
|
|
||||||
"/usr/lib/galera/libgalera_smm.so");
|
|
||||||
if ($file_wsrep_provider ne "") {
|
|
||||||
# wsrep provider library found !
|
|
||||||
mtr_verbose("wsrep provider library found : $file_wsrep_provider");
|
|
||||||
$ENV{'WSREP_PROVIDER'}= $file_wsrep_provider;
|
|
||||||
check_garbd_support();
|
|
||||||
} else {
|
|
||||||
mtr_verbose("Could not find wsrep provider library, setting it to 'none'");
|
|
||||||
$ENV{'WSREP_PROVIDER'}= "none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$file_wsrep_provider= "";
|
|
||||||
$extra_path= "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub check_mariabackup_support() {
|
|
||||||
$mariabackup_path= "";
|
|
||||||
$mariabackup_exe=
|
|
||||||
mtr_exe_maybe_exists(
|
|
||||||
"$bindir/extra/mariabackup$opt_vs_config/mariabackup",
|
|
||||||
"$path_client_bindir/mariabackup");
|
|
||||||
if ($mariabackup_exe ne "") {
|
|
||||||
my $bpath= dirname($mariabackup_exe);
|
|
||||||
my $separator= (IS_WINDOWS) ? ';' : ':';
|
|
||||||
$ENV{PATH}="$bpath$separator$ENV{PATH}" unless $bpath eq $extra_path;
|
|
||||||
|
|
||||||
$mariabackup_path= $bpath;
|
|
||||||
|
|
||||||
$ENV{XTRABACKUP}= $mariabackup_exe;
|
|
||||||
|
|
||||||
$ENV{XBSTREAM}= mtr_exe_maybe_exists(
|
|
||||||
"$bindir/extra/mariabackup/$opt_vs_config/mbstream",
|
|
||||||
"$path_client_bindir/mbstream");
|
|
||||||
|
|
||||||
$ENV{INNOBACKUPEX}= "$mariabackup_exe --innobackupex";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
$ENV{MTR_PERL}=$^X;
|
$ENV{MTR_PERL}=$^X;
|
||||||
|
|
||||||
@ -587,8 +419,7 @@ sub main {
|
|||||||
}
|
}
|
||||||
check_ssl_support();
|
check_ssl_support();
|
||||||
check_debug_support();
|
check_debug_support();
|
||||||
check_wsrep_support();
|
environment_setup();
|
||||||
check_mariabackup_support();
|
|
||||||
|
|
||||||
if (!$opt_suites) {
|
if (!$opt_suites) {
|
||||||
$opt_suites= join ',', collect_default_suites(@DEFAULT_SUITES);
|
$opt_suites= join ',', collect_default_suites(@DEFAULT_SUITES);
|
||||||
@ -2578,10 +2409,23 @@ sub environment_setup {
|
|||||||
my $exe_innochecksum=
|
my $exe_innochecksum=
|
||||||
mtr_exe_maybe_exists("$bindir/extra$opt_vs_config/innochecksum",
|
mtr_exe_maybe_exists("$bindir/extra$opt_vs_config/innochecksum",
|
||||||
"$path_client_bindir/innochecksum");
|
"$path_client_bindir/innochecksum");
|
||||||
if ($exe_innochecksum)
|
$ENV{'INNOCHECKSUM'}= native_path($exe_innochecksum) if $exe_innochecksum;
|
||||||
{
|
|
||||||
$ENV{'INNOCHECKSUM'}= native_path($exe_innochecksum);
|
# ----------------------------------------------------
|
||||||
}
|
# mariabackup
|
||||||
|
# ----------------------------------------------------
|
||||||
|
my $exe_mariabackup= mtr_exe_maybe_exists(
|
||||||
|
"$bindir/extra/mariabackup$opt_vs_config/mariabackup",
|
||||||
|
"$path_client_bindir/mariabackup");
|
||||||
|
|
||||||
|
$ENV{XTRABACKUP}= native_path($exe_mariabackup) if $exe_mariabackup;
|
||||||
|
|
||||||
|
my $exe_xbstream= mtr_exe_maybe_exists(
|
||||||
|
"$bindir/extra/mariabackup/$opt_vs_config/mbstream",
|
||||||
|
"$path_client_bindir/mbstream");
|
||||||
|
$ENV{XBSTREAM}= native_path($exe_xbstream) if $exe_xbstream;
|
||||||
|
|
||||||
|
$ENV{INNOBACKUPEX}= "$exe_mariabackup --innobackupex";
|
||||||
|
|
||||||
# Create an environment variable to make it possible
|
# Create an environment variable to make it possible
|
||||||
# to detect that valgrind is being used from test cases
|
# to detect that valgrind is being used from test cases
|
||||||
|
@ -47,21 +47,6 @@ sub skip_combinations {
|
|||||||
$skip{'main/plugin_loaderr.test'} = 'needs compiled-in innodb'
|
$skip{'main/plugin_loaderr.test'} = 'needs compiled-in innodb'
|
||||||
unless $::mysqld_variables{'innodb'} eq "ON";
|
unless $::mysqld_variables{'innodb'} eq "ON";
|
||||||
|
|
||||||
$skip{'include/have_mariabackup.inc'} = 'Need mariabackup'
|
|
||||||
unless ::have_mariabackup();
|
|
||||||
|
|
||||||
$skip{'include/have_mariabackup.inc'} = 'Need socket statistics utility'
|
|
||||||
unless IS_WINDOWS || ::which("ss");
|
|
||||||
|
|
||||||
$skip{'include/have_mariabackup.inc'} = 'Need socat or nc'
|
|
||||||
unless IS_WINDOWS || $ENV{MTR_GALERA_TFMT};
|
|
||||||
|
|
||||||
$skip{'include/have_garbd.inc'} = 'Need garbd'
|
|
||||||
unless ::have_garbd();
|
|
||||||
|
|
||||||
$skip{'include/have_file_key_management.inc'} = 'Needs file_key_management plugin'
|
|
||||||
unless $ENV{FILE_KEY_MANAGEMENT_SO};
|
|
||||||
|
|
||||||
# disable tests that use ipv6, if unsupported
|
# disable tests that use ipv6, if unsupported
|
||||||
sub ipv6_ok() {
|
sub ipv6_ok() {
|
||||||
use Socket;
|
use Socket;
|
||||||
|
7
mysql-test/suite/galera/include/have_mariabackup.inc
Normal file
7
mysql-test/suite/galera/include/have_mariabackup.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
if (!$XTRABACKUP) {
|
||||||
|
skip Needs mariabackup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$MTR_GALERA_TFMT) {
|
||||||
|
skip Needs socat or nc;
|
||||||
|
}
|
@ -1,16 +1,11 @@
|
|||||||
package My::Suite::Galera;
|
package My::Suite::Galera;
|
||||||
use File::Basename;
|
|
||||||
use My::Find;
|
use lib 'suite';
|
||||||
|
use wsrep::common;
|
||||||
|
|
||||||
@ISA = qw(My::Suite);
|
@ISA = qw(My::Suite);
|
||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
return wsrep_not_ok() if wsrep_not_ok();
|
||||||
|
|
||||||
return "WSREP is not compiled in" if not ::have_wsrep();
|
|
||||||
|
|
||||||
return "No wsrep provider library" unless ::have_wsrep_provider();
|
|
||||||
|
|
||||||
return ::wsrep_version_message() unless ::check_wsrep_version();
|
|
||||||
|
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
@ -69,4 +64,10 @@ push @::global_suppressions,
|
|||||||
qr(WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to .*),
|
qr(WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to .*),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sub skip_combinations {
|
||||||
|
my %skip = ();
|
||||||
|
$skip{'include/have_mariabackup.inc'} = 'Need ss' unless `ss -V`;
|
||||||
|
%skip;
|
||||||
|
}
|
||||||
|
|
||||||
bless { };
|
bless { };
|
||||||
|
@ -10,3 +10,6 @@ wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true'
|
|||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true'
|
wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true'
|
||||||
|
|
||||||
|
[sst]
|
||||||
|
transferfmt=@ENV.MTR_GALERA_TFMT
|
||||||
|
streamfmt=xbstream
|
||||||
|
@ -12,3 +12,6 @@ wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true'
|
|||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true'
|
wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true'
|
||||||
|
|
||||||
|
[sst]
|
||||||
|
transferfmt=@ENV.MTR_GALERA_TFMT
|
||||||
|
streamfmt=xbstream
|
||||||
|
3
mysql-test/suite/galera_3nodes/include/have_garbd.inc
Normal file
3
mysql-test/suite/galera_3nodes/include/have_garbd.inc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
if (!$MTR_GARBD_EXE) {
|
||||||
|
skip Needs garbd;
|
||||||
|
}
|
@ -1,16 +1,11 @@
|
|||||||
package My::Suite::GALERA_3NODES;
|
package My::Suite::GALERA_3NODES;
|
||||||
use File::Basename;
|
|
||||||
use My::Find;
|
use lib 'suite';
|
||||||
|
use wsrep::common;
|
||||||
|
|
||||||
@ISA = qw(My::Suite);
|
@ISA = qw(My::Suite);
|
||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
return wsrep_not_ok() if wsrep_not_ok();
|
||||||
|
|
||||||
return "WSREP is not compiled in" if not ::have_wsrep();
|
|
||||||
|
|
||||||
return "No wsrep provider library" unless ::have_wsrep_provider();
|
|
||||||
|
|
||||||
return ::wsrep_version_message() unless ::check_wsrep_version();
|
|
||||||
|
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_mariabackup.inc
|
--source suite/galera/include/have_mariabackup.inc
|
||||||
|
|
||||||
--let $galera_connection_name = node_3
|
--let $galera_connection_name = node_3
|
||||||
--let $galera_server_number = 3
|
--let $galera_server_number = 3
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
package My::Suite::Galera_sr;
|
package My::Suite::Galera_sr;
|
||||||
use File::Basename;
|
|
||||||
use My::Find;
|
use lib 'suite';
|
||||||
|
use wsrep::common;
|
||||||
|
|
||||||
@ISA = qw(My::Suite);
|
@ISA = qw(My::Suite);
|
||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
return wsrep_not_ok() if wsrep_not_ok();
|
||||||
|
|
||||||
return "WSREP is not compiled in" if not ::have_wsrep();
|
|
||||||
|
|
||||||
return "No wsrep provider library" unless ::have_wsrep_provider();
|
|
||||||
|
|
||||||
return ::wsrep_version_message() unless ::check_wsrep_version();
|
|
||||||
|
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
|
@ -7,12 +7,13 @@ use strict;
|
|||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
return "Not run for embedded server" if $::opt_embedded_server;
|
||||||
|
|
||||||
return "No mariabackup" unless ::have_mariabackup();
|
return "No mariabackup" unless $ENV{XTRABACKUP};
|
||||||
|
|
||||||
my $have_qpress = index(`qpress 2>&1`,"Compression") > 0;
|
my $have_qpress = index(`qpress 2>&1`,"Compression") > 0;
|
||||||
|
|
||||||
sub skip_combinations {
|
sub skip_combinations {
|
||||||
my %skip;
|
my %skip;
|
||||||
|
$skip{'include/have_file_key_management.inc'} = 'needs file_key_management plugin' unless $ENV{FILE_KEY_MANAGEMENT_SO};
|
||||||
$skip{'compress_qpress.test'}= 'needs qpress executable in PATH' unless $have_qpress;
|
$skip{'compress_qpress.test'}= 'needs qpress executable in PATH' unless $have_qpress;
|
||||||
%skip;
|
%skip;
|
||||||
}
|
}
|
||||||
|
117
mysql-test/suite/wsrep/common.pm
Normal file
117
mysql-test/suite/wsrep/common.pm
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package wsrep::common;
|
||||||
|
|
||||||
|
use base qw(Exporter);
|
||||||
|
our @EXPORT= qw(wsrep_not_ok);
|
||||||
|
|
||||||
|
use File::Basename;
|
||||||
|
use Memoize;
|
||||||
|
memoize 'wrong_wsrep_version';
|
||||||
|
memoize 'check_garbd_support';
|
||||||
|
memoize 'check_wsrep_support';
|
||||||
|
memoize 'wsrep_not_ok';
|
||||||
|
|
||||||
|
use mtr_report;
|
||||||
|
|
||||||
|
my $extra_path;
|
||||||
|
my $mariabackup_path;
|
||||||
|
my $mariabackup_exe;
|
||||||
|
my $garbd_exe;
|
||||||
|
my $file_wsrep_provider;
|
||||||
|
|
||||||
|
sub wrong_wsrep_version() {
|
||||||
|
my $check_version= dirname($My::SafeProcess::safe_process_cmd[0]) . '/wsrep_check_version';
|
||||||
|
my $checked = `$check_version -p`;
|
||||||
|
chomp($checked);
|
||||||
|
return $? ? $checked : undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub which($) { return `sh -c "command -v $_[0]"` }
|
||||||
|
|
||||||
|
sub check_garbd_support() {
|
||||||
|
my $wsrep_path= dirname($file_wsrep_provider);
|
||||||
|
$garbd_exe= ::mtr_file_exists($wsrep_path."/garb/garbd",
|
||||||
|
$wsrep_path."/../../bin/garb/garbd",
|
||||||
|
'/usr/bin/garbd');
|
||||||
|
$ENV{MTR_GARBD_EXE}= $garbd_exe if $garbd_exe;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_wsrep_support() {
|
||||||
|
mtr_report(" - binaries built with wsrep patch");
|
||||||
|
|
||||||
|
# ADD scripts to $PATH to that wsrep_sst_* can be found
|
||||||
|
my ($spath) = grep { -f "$_/wsrep_sst_rsync"; } "$::bindir/scripts", $::path_client_bindir;
|
||||||
|
mtr_error("No SST scripts") unless $spath;
|
||||||
|
$ENV{PATH}="$spath:$ENV{PATH}";
|
||||||
|
|
||||||
|
# ADD mysql client library path to path so that wsrep_notify_cmd can find mysql
|
||||||
|
# client for loading the tables. (Don't assume each machine has mysql install)
|
||||||
|
my ($cpath) = grep { -f "$_/mysql"; } "$::bindir/scripts", $::path_client_bindir;
|
||||||
|
mtr_error("No scritps") unless $cpath;
|
||||||
|
$ENV{PATH}="$cpath:$ENV{PATH}" unless $cpath eq $spath;
|
||||||
|
|
||||||
|
# ADD my_print_defaults script path to path so that SST scripts can find it
|
||||||
|
my $my_print_defaults_exe=
|
||||||
|
::mtr_exe_maybe_exists(
|
||||||
|
"$::bindir/extra/my_print_defaults",
|
||||||
|
"$::path_client_bindir/my_print_defaults");
|
||||||
|
my $epath= "";
|
||||||
|
if ($my_print_defaults_exe ne "") {
|
||||||
|
$epath= dirname($my_print_defaults_exe);
|
||||||
|
}
|
||||||
|
mtr_error("No my_print_defaults") unless $epath;
|
||||||
|
$ENV{PATH}="$epath:$ENV{PATH}" unless ($epath eq $spath) or
|
||||||
|
($epath eq $cpath);
|
||||||
|
|
||||||
|
$extra_path= $epath;
|
||||||
|
|
||||||
|
if (which("socat")) {
|
||||||
|
$ENV{MTR_GALERA_TFMT}="socat";
|
||||||
|
} elsif (which("nc")) {
|
||||||
|
$ENV{MTR_GALERA_TFMT}="nc";
|
||||||
|
}
|
||||||
|
|
||||||
|
$ENV{PATH}=dirname($ENV{XTRABACKUP}).":$ENV{PATH}" if $ENV{XTRABACKUP};
|
||||||
|
|
||||||
|
# Check whether WSREP_PROVIDER environment variable is set.
|
||||||
|
if (defined $ENV{'WSREP_PROVIDER'}) {
|
||||||
|
$file_wsrep_provider= "";
|
||||||
|
if ($ENV{'WSREP_PROVIDER'} ne "none") {
|
||||||
|
if (::mtr_file_exists($ENV{'WSREP_PROVIDER'}) ne "") {
|
||||||
|
$file_wsrep_provider= $ENV{'WSREP_PROVIDER'};
|
||||||
|
} else {
|
||||||
|
mtr_error("WSREP_PROVIDER env set to an invalid path");
|
||||||
|
}
|
||||||
|
check_garbd_support();
|
||||||
|
}
|
||||||
|
# WSREP_PROVIDER is valid; set to a valid path or "none").
|
||||||
|
mtr_verbose("WSREP_PROVIDER env set to $ENV{'WSREP_PROVIDER'}");
|
||||||
|
} else {
|
||||||
|
# WSREP_PROVIDER env not defined. Lets try to locate the wsrep provider
|
||||||
|
# library.
|
||||||
|
$file_wsrep_provider=
|
||||||
|
::mtr_file_exists("/usr/lib64/galera-4/libgalera_smm.so",
|
||||||
|
"/usr/lib64/galera/libgalera_smm.so",
|
||||||
|
"/usr/lib/galera-4/libgalera_smm.so",
|
||||||
|
"/usr/lib/galera/libgalera_smm.so");
|
||||||
|
if ($file_wsrep_provider ne "") {
|
||||||
|
# wsrep provider library found !
|
||||||
|
mtr_verbose("wsrep provider library found : $file_wsrep_provider");
|
||||||
|
$ENV{'WSREP_PROVIDER'}= $file_wsrep_provider;
|
||||||
|
check_garbd_support();
|
||||||
|
} else {
|
||||||
|
mtr_verbose("Could not find wsrep provider library, setting it to 'none'");
|
||||||
|
$ENV{'WSREP_PROVIDER'}= "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wsrep_not_ok() {
|
||||||
|
return "Not run for embedded server" if $::opt_embedded_server;
|
||||||
|
return "WSREP is not compiled in" if not $::mysqld_variables{'wsrep-on'};
|
||||||
|
check_wsrep_support();
|
||||||
|
return "No wsrep provider library" unless $file_wsrep_provider;
|
||||||
|
return wrong_wsrep_version() if wrong_wsrep_version();
|
||||||
|
undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
@ -1,16 +1,11 @@
|
|||||||
package My::Suite::WSREP;
|
package My::Suite::WSREP;
|
||||||
use File::Basename;
|
|
||||||
use My::Find;
|
use lib 'suite';
|
||||||
|
use wsrep::common;
|
||||||
|
|
||||||
@ISA = qw(My::Suite);
|
@ISA = qw(My::Suite);
|
||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
return wsrep_not_ok() if wsrep_not_ok();
|
||||||
|
|
||||||
return "WSREP is not compiled in" unless ::have_wsrep();
|
|
||||||
|
|
||||||
return "No wsrep provider library" unless ::have_wsrep_provider();
|
|
||||||
|
|
||||||
return ::wsrep_version_message() unless ::check_wsrep_version();
|
|
||||||
|
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
|
@ -4,15 +4,9 @@ use My::Find;
|
|||||||
|
|
||||||
@ISA = qw(My::Suite);
|
@ISA = qw(My::Suite);
|
||||||
|
|
||||||
return "Not run for embedded server" if $::opt_embedded_server;
|
use lib 'suite';
|
||||||
|
use wsrep::common;
|
||||||
return "WSREP is not compiled in" if not ::have_wsrep();
|
return wsrep_not_ok() if wsrep_not_ok();
|
||||||
|
|
||||||
return "No wsrep provider library" unless ::have_wsrep_provider();
|
|
||||||
|
|
||||||
return ::wsrep_version_message() unless ::check_wsrep_version();
|
|
||||||
|
|
||||||
return "No WSREP_INFO plugin" unless $ENV{WSREP_INFO_SO};
|
|
||||||
|
|
||||||
push @::global_suppressions,
|
push @::global_suppressions,
|
||||||
(
|
(
|
||||||
|
Reference in New Issue
Block a user