Commit c515b1d0 authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.4 into 10.5

parents baff3ba6 205b0ce6
...@@ -112,6 +112,8 @@ bool ibx_partial_backup = false; ...@@ -112,6 +112,8 @@ bool ibx_partial_backup = false;
char *ibx_position_arg = NULL; char *ibx_position_arg = NULL;
char *ibx_backup_directory = NULL; char *ibx_backup_directory = NULL;
extern bool xb_opt_destroy_password;
/* copy of proxied xtrabackup options */ /* copy of proxied xtrabackup options */
my_bool ibx_xb_close_files; my_bool ibx_xb_close_files;
const char *ibx_xtrabackup_compress_alg; const char *ibx_xtrabackup_compress_alg;
...@@ -770,18 +772,7 @@ ibx_get_one_option(const struct my_option *opt, ...@@ -770,18 +772,7 @@ ibx_get_one_option(const struct my_option *opt,
xtrabackup_compress = TRUE; xtrabackup_compress = TRUE;
break; break;
case 'p': case 'p':
if (argument) opt_ibx_password= argument;
{
char *start = argument;
my_free(opt_ibx_password);
opt_ibx_password= my_strdup(PSI_NOT_INSTRUMENTED,
argument, MYF(MY_FAE));
/* Destroy argument */
while (*argument)
*argument++= 'x';
if (*start)
start[1]=0 ;
}
break; break;
} }
return(0); return(0);
......
...@@ -118,6 +118,7 @@ my_bool xtrabackup_copy_back; ...@@ -118,6 +118,7 @@ my_bool xtrabackup_copy_back;
my_bool xtrabackup_move_back; my_bool xtrabackup_move_back;
my_bool xtrabackup_decrypt_decompress; my_bool xtrabackup_decrypt_decompress;
my_bool xtrabackup_print_param; my_bool xtrabackup_print_param;
my_bool xtrabackup_mysqld_args;
my_bool xtrabackup_export; my_bool xtrabackup_export;
...@@ -797,7 +798,8 @@ enum options_xtrabackup ...@@ -797,7 +798,8 @@ enum options_xtrabackup
OPT_LOCK_DDL_PER_TABLE, OPT_LOCK_DDL_PER_TABLE,
OPT_ROCKSDB_DATADIR, OPT_ROCKSDB_DATADIR,
OPT_BACKUP_ROCKSDB, OPT_BACKUP_ROCKSDB,
OPT_XTRA_CHECK_PRIVILEGES OPT_XTRA_CHECK_PRIVILEGES,
OPT_XTRA_MYSQLD_ARGS
}; };
struct my_option xb_client_options[]= { struct my_option xb_client_options[]= {
...@@ -1191,7 +1193,6 @@ struct my_option xb_client_options[]= { ...@@ -1191,7 +1193,6 @@ struct my_option xb_client_options[]= {
#define MYSQL_CLIENT #define MYSQL_CLIENT
#include "sslopt-longopts.h" #include "sslopt-longopts.h"
#undef MYSQL_CLIENT #undef MYSQL_CLIENT
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}}; {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}};
uint xb_client_options_count = array_elements(xb_client_options); uint xb_client_options_count = array_elements(xb_client_options);
...@@ -1407,6 +1408,13 @@ struct my_option xb_server_options[] = ...@@ -1407,6 +1408,13 @@ struct my_option xb_server_options[] =
&opt_check_privileges, &opt_check_privileges, &opt_check_privileges, &opt_check_privileges,
0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 }, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 },
{"mysqld-args", OPT_XTRA_MYSQLD_ARGS,
"All arguments that follow this argument are considered as server "
"options, and if some of them are not supported by mariabackup, they "
"will be ignored.",
(G_PTR *) &xtrabackup_mysqld_args, (G_PTR *) &xtrabackup_mysqld_args, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}; };
...@@ -1574,24 +1582,11 @@ static int prepare_export() ...@@ -1574,24 +1582,11 @@ static int prepare_export()
return err; return err;
} }
static const char *xb_client_default_groups[]= {
"client", "client-server", "client-mariadb", 0, 0, 0};
static const char *xb_client_default_groups[]={ static const char *backup_default_groups[]= {
"xtrabackup", "mariabackup", "xtrabackup", "mariabackup", "mariadb-backup", 0, 0, 0};
"client", "client-server",
"client-mariadb",
0, 0, 0
};
static const char *xb_server_default_groups[]={
"xtrabackup", "mariabackup",
"mysqld", "server", MYSQL_BASE_VERSION,
"mariadb", MARIADB_BASE_VERSION,
"client-server",
#ifdef WITH_WSREP
"galera",
#endif
0, 0, 0
};
static void print_version(void) static void print_version(void)
{ {
...@@ -1619,7 +1614,7 @@ GNU General Public License for more details.\n\ ...@@ -1619,7 +1614,7 @@ GNU General Public License for more details.\n\
You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt\n"); You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt\n");
printf("Usage: %s [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]\n",my_progname); printf("Usage: %s [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]\n",my_progname);
print_defaults("my", xb_server_default_groups); print_defaults("my", load_default_groups);
my_print_help(xb_client_options); my_print_help(xb_client_options);
my_print_help(xb_server_options); my_print_help(xb_server_options);
my_print_variables(xb_server_options); my_print_variables(xb_server_options);
...@@ -1754,15 +1749,7 @@ xb_get_one_option(const struct my_option *opt, ...@@ -1754,15 +1749,7 @@ xb_get_one_option(const struct my_option *opt,
} }
break; break;
case 'p': case 'p':
if (argument) opt_password = argument;
{
char *start= argument;
my_free(opt_password);
opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; // Destroy argument
if (*start)
start[1]=0 ;
}
break; break;
case OPT_PROTOCOL: case OPT_PROTOCOL:
if (argument) if (argument)
...@@ -5801,11 +5788,23 @@ void setup_error_messages() ...@@ -5801,11 +5788,23 @@ void setup_error_messages()
die("could not initialize error messages"); die("could not initialize error messages");
} }
void /** Handle mariabackup options. The options are handled with the following
handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) order:
1) Load server groups and process server options, ignore unknown options
2) Load client groups and process client options, ignore unknown options
3) Load backup groups and process client-server options, exit on unknown option
4) Process --mysqld-args options, ignore unknown options
@param[in] argc arguments count
@param[in] argv arguments array
@param[out] argv_server server options including loaded from server groups
@param[out] argv_client client options including loaded from client groups
@param[out] argv_backup backup options including loaded from backup groups */
void handle_options(int argc, char **argv, char ***argv_server,
char ***argv_client, char ***argv_backup)
{ {
/* Setup some variables for Innodb.*/ /* Setup some variables for Innodb.*/
srv_operation = SRV_OPERATION_RESTORE; srv_operation = SRV_OPERATION_RESTORE;
files_charset_info = &my_charset_utf8mb3_general_ci; files_charset_info = &my_charset_utf8mb3_general_ci;
...@@ -5832,49 +5831,64 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5832,49 +5831,64 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
bool prepare = false; bool prepare = false;
char conf_file[FN_REFLEN]; char conf_file[FN_REFLEN];
int argc_client = argc;
int argc_server = argc;
/* scan options for group and config file to load defaults from */ // array_elements() will not work for load_defaults, as it is defined
for (i = 1; i < argc; i++) { // as external symbol, so let's use dynamic array to have ability to
// add new server default groups
std::vector<const char *> server_default_groups;
for (const char **default_group= load_default_groups; *default_group;
++default_group)
server_default_groups.push_back(*default_group);
char *optend = strcend(argv[i], '='); std::vector<char *> mysqld_args;
std::vector<char *> mariabackup_args;
mysqld_args.push_back(argv[0]);
mariabackup_args.push_back(argv[0]);
if (strncmp(argv[i], "--defaults-group", /* scan options for group and config file to load defaults from */
optend - argv[i]) == 0) { for (i= 1; i < argc; i++)
defaults_group = optend + 1; {
append_defaults_group(defaults_group, char *optend= strcend(argv[i], '=');
xb_server_default_groups, if (mysqld_args.size() > 1 ||
array_elements(xb_server_default_groups)); strncmp(argv[i], "--mysqld-args", optend - argv[i]) == 0)
{
mysqld_args.push_back(argv[i]);
continue;
} }
else
mariabackup_args.push_back(argv[i]);
if (strncmp(argv[i], "--login-path", if (strncmp(argv[i], "--defaults-group", optend - argv[i]) == 0)
optend - argv[i]) == 0) { {
append_defaults_group(optend + 1, defaults_group= optend + 1;
xb_client_default_groups, server_default_groups.push_back(defaults_group);
}
else if (strncmp(argv[i], "--login-path", optend - argv[i]) == 0)
{
append_defaults_group(optend + 1, xb_client_default_groups,
array_elements(xb_client_default_groups)); array_elements(xb_client_default_groups));
} }
else if (!strncmp(argv[i], "--prepare", optend - argv[i]))
if (!strncmp(argv[i], "--prepare", {
optend - argv[i])) { prepare= true;
prepare = true;
} }
else if (!strncmp(argv[i], "--apply-log", optend - argv[i]))
if (!strncmp(argv[i], "--apply-log", {
optend - argv[i])) { prepare= true;
prepare = true;
} }
else if (!strncmp(argv[i], "--target-dir", optend - argv[i]) &&
if (!strncmp(argv[i], "--target-dir", *optend)
optend - argv[i]) && *optend) { {
target_dir = optend + 1; target_dir= optend + 1;
} }
else if (!*optend && argv[i][0] != '-')
if (!*optend && argv[i][0] != '-') { {
target_dir = argv[i]; target_dir= argv[i];
} }
} }
server_default_groups.push_back(NULL);
snprintf(conf_file, sizeof(conf_file), "my"); snprintf(conf_file, sizeof(conf_file), "my");
if (prepare && target_dir) { if (prepare && target_dir) {
...@@ -5890,9 +5904,15 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5890,9 +5904,15 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
} }
} }
*argv_client = argv; *argv_client= *argv_server= *argv_backup= &mariabackup_args[0];
*argv_server = argv; int argc_backup= static_cast<int>(mariabackup_args.size());
load_defaults_or_exit(conf_file, xb_server_default_groups, int argc_client= argc_backup;
int argc_server= argc_backup;
/* 1) Load server groups and process server options, ignore unknown
options */
load_defaults_or_exit(conf_file, &server_default_groups[0],
&argc_server, argv_server); &argc_server, argv_server);
int n; int n;
...@@ -5913,7 +5933,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5913,7 +5933,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
optp->u_max_value = (G_PTR *) &global_max_value; optp->u_max_value = (G_PTR *) &global_max_value;
} }
/* Throw a descriptive error if --defaults-file or --defaults-extra-file /* Throw a descriptive error if --defaults-file or --defaults-extra-file
is not the first command line argument */ is not the first command line argument */
for (int i = 2 ; i < argc ; i++) { for (int i = 2 ; i < argc ; i++) {
...@@ -5935,6 +5954,9 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5935,6 +5954,9 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
xb_server_options, xb_get_one_option))) xb_server_options, xb_get_one_option)))
exit(ho_error); exit(ho_error);
/* 2) Load client groups and process client options, ignore unknown
options */
load_defaults_or_exit(conf_file, xb_client_default_groups, load_defaults_or_exit(conf_file, xb_client_default_groups,
&argc_client, argv_client); &argc_client, argv_client);
...@@ -5942,8 +5964,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5942,8 +5964,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
argc_client = n; argc_client = n;
if (innobackupex_mode && argc_client > 0) { if (innobackupex_mode && argc_client > 0) {
/* emulate innobackupex script */
innobackupex_mode = true;
if (!ibx_handle_options(&argc_client, argv_client)) { if (!ibx_handle_options(&argc_client, argv_client)) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -5954,18 +5974,76 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server) ...@@ -5954,18 +5974,76 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
xb_client_options, xb_get_one_option))) xb_client_options, xb_get_one_option)))
exit(ho_error); exit(ho_error);
/* 3) Load backup groups and process client-server options, exit on
unknown option */
load_defaults_or_exit(conf_file, backup_default_groups, &argc_backup,
argv_backup);
for (n= 0; (*argv_backup)[n]; n++)
{
};
argc_backup= n;
my_handle_options_init_variables = FALSE;
if (argc_backup > 0 &&
(ho_error= handle_options(&argc_backup, argv_backup,
xb_server_options, xb_get_one_option)))
exit(ho_error);
/* Add back the program name handle_options removes */
++argc_backup;
--(*argv_backup);
if (innobackupex_mode && argc_backup > 0 &&
!ibx_handle_options(&argc_backup, argv_backup))
exit(EXIT_FAILURE);
my_getopt_skip_unknown = FALSE;
if (argc_backup > 0 &&
(ho_error= handle_options(&argc_backup, argv_backup,
xb_client_options, xb_get_one_option)))
exit(ho_error);
if (opt_password)
{
char *argument= opt_password;
char *start= argument;
opt_password= my_strdup(PSI_NOT_INSTRUMENTED, opt_password, MYF(MY_FAE));
while (*argument)
*argument++= 'x'; // Destroy argument
if (*start)
start[1]= 0;
}
/* 4) Process --mysqld-args options, ignore unknown options */
my_getopt_skip_unknown = TRUE;
int argc_mysqld = static_cast<int>(mysqld_args.size());
if (argc_mysqld > 1)
{
char **argv_mysqld= &mysqld_args[0];
if ((ho_error= handle_options(&argc_mysqld, &argv_mysqld,
xb_server_options, xb_get_one_option)))
exit(ho_error);
}
my_handle_options_init_variables = TRUE;
/* Reject command line arguments that don't look like options, i.e. are /* Reject command line arguments that don't look like options, i.e. are
not of the form '-X' (single-character options) or '--option' (long not of the form '-X' (single-character options) or '--option' (long
options) */ options) */
for (int i = 0 ; i < argc_client ; i++) { for (int i = 0 ; i < argc_backup ; i++) {
const char * const opt = (*argv_client)[i]; const char * const opt = (*argv_backup)[i];
if (strncmp(opt, "--", 2) && if (strncmp(opt, "--", 2) &&
!(strlen(opt) == 2 && opt[0] == '-')) { !(strlen(opt) == 2 && opt[0] == '-')) {
bool server_option = true; bool server_option = true;
for (int j = 0; j < argc_server; j++) { for (int j = 0; j < argc_backup; j++) {
if (opt == (*argv_server)[j]) { if (opt == (*argv_backup)[j]) {
server_option = false; server_option = false;
break; break;
} }
...@@ -5986,7 +6064,9 @@ static int get_exepath(char *buf, size_t size, const char *argv0); ...@@ -5986,7 +6064,9 @@ static int get_exepath(char *buf, size_t size, const char *argv0);
/* ================= main =================== */ /* ================= main =================== */
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
char **client_defaults, **server_defaults; char **server_defaults;
char **client_defaults;
char **backup_defaults;
if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0])) if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0]))
strncpy(mariabackup_exe,argv[0], FN_REFLEN-1); strncpy(mariabackup_exe,argv[0], FN_REFLEN-1);
...@@ -6037,7 +6117,8 @@ int main(int argc, char **argv) ...@@ -6037,7 +6117,8 @@ int main(int argc, char **argv)
mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log, mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log,
MY_MUTEX_INIT_FAST); MY_MUTEX_INIT_FAST);
handle_options(argc, argv, &client_defaults, &server_defaults); handle_options(argc, argv, &server_defaults, &client_defaults,
&backup_defaults);
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (dbug_option) { if (dbug_option) {
...@@ -6057,8 +6138,9 @@ int main(int argc, char **argv) ...@@ -6057,8 +6138,9 @@ int main(int argc, char **argv)
ibx_cleanup(); ibx_cleanup();
} }
free_defaults(client_defaults);
free_defaults(server_defaults); free_defaults(server_defaults);
free_defaults(client_defaults);
free_defaults(backup_defaults);
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (dbug_option) { if (dbug_option) {
......
...@@ -106,6 +106,7 @@ extern char *autoset_my_option; ...@@ -106,6 +106,7 @@ extern char *autoset_my_option;
extern my_bool my_getopt_print_errors; extern my_bool my_getopt_print_errors;
extern my_bool my_getopt_skip_unknown; extern my_bool my_getopt_skip_unknown;
extern my_bool my_getopt_prefix_matching; extern my_bool my_getopt_prefix_matching;
extern my_bool my_handle_options_init_variables;
extern my_error_reporter my_getopt_error_reporter; extern my_error_reporter my_getopt_error_reporter;
extern my_getopt_value my_getopt_get_addr; extern my_getopt_value my_getopt_get_addr;
......
...@@ -174,6 +174,8 @@ struct st_VioSSLFd ...@@ -174,6 +174,8 @@ struct st_VioSSLFd
int sslaccept(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr); int sslaccept(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
int sslconnect(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr); int sslconnect(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
void vio_check_ssl_init();
struct st_VioSSLFd struct st_VioSSLFd
*new_VioSSLConnectorFd(const char *key_file, const char *cert_file, *new_VioSSLConnectorFd(const char *key_file, const char *cert_file,
const char *ca_file, const char *ca_path, const char *ca_file, const char *ca_path,
......
connect con1,localhost,root,,;
SET DEBUG_DBUG='+d,mark_busy_mdev_22370';
FLUSH TABLES WITH READ LOCK;
connection default;
# restart
#
# MDEV-22370 safe_mutex: Trying to lock uninitialized mutex at
# /data/src/10.4-bug/sql/rpl_parallel.cc, line 470 upon shutdown during FTWRL
#
# Purpose of this test case to test crash while FTWRL and shutdown is in race
# condition
# Shutdown can execute first and destroy the mutex making mutex_lock in pool_mark_busy
# to crash
--source include/have_debug.inc
--connect (con1,localhost,root,,)
SET DEBUG_DBUG='+d,mark_busy_mdev_22370';
--send
FLUSH TABLES WITH READ LOCK;
--connection default
--source include/restart_mysqld.inc
...@@ -36,7 +36,7 @@ connection default; ...@@ -36,7 +36,7 @@ connection default;
--disable_result_log --disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir ; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir ;
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir ; exec $XTRABACKUP --prepare --verbose --target-dir=$basedir ;
--enable_result_log --enable_result_log
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
...@@ -44,7 +44,7 @@ let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; ...@@ -44,7 +44,7 @@ let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
--source include/search_pattern_in_file.inc --source include/search_pattern_in_file.inc
--echo # expect NOT FOUND --echo # expect NOT FOUND
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ; exec $XTRABACKUP --prepare --verbose --target-dir=$basedir --incremental-dir=$incremental_dir ;
--source include/search_pattern_in_file.inc --source include/search_pattern_in_file.inc
--echo # expect NOT FOUND --echo # expect NOT FOUND
......
...@@ -11,7 +11,7 @@ INSERT INTO t VALUES(1); ...@@ -11,7 +11,7 @@ INSERT INTO t VALUES(1);
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
--enable_result_log --enable_result_log
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir ; exec $XTRABACKUP --prepare --target-dir=$basedir ;
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
--let SEARCH_PATTERN= Rolled back recovered transaction --let SEARCH_PATTERN= Rolled back recovered transaction
......
...@@ -12,7 +12,7 @@ SHOW VARIABLES like 'log_bin'; ...@@ -12,7 +12,7 @@ SHOW VARIABLES like 'log_bin';
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
--enable_result_log --enable_result_log
exec $XTRABACKUP --prepare --binlog-info=1 --apply-log-only --target-dir=$basedir ; exec $XTRABACKUP --prepare --binlog-info=1 --target-dir=$basedir ;
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test; let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
--let SEARCH_PATTERN= Last binlog file .*, position .* --let SEARCH_PATTERN= Last binlog file .*, position .*
......
...@@ -33,7 +33,7 @@ select count(*) from t7; ...@@ -33,7 +33,7 @@ select count(*) from t7;
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir;
--echo # XTRABACKUP PREPARE --echo # XTRABACKUP PREPARE
exec $XTRABACKUP --apply-log-only --prepare --target-dir=$basedir; exec $XTRABACKUP --prepare --target-dir=$basedir;
--echo # XTRABACKUP INCREMENTAL PREPARE --echo # XTRABACKUP INCREMENTAL PREPARE
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir; exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir;
......
...@@ -25,7 +25,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir ...@@ -25,7 +25,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir
--let after_load_tablespaces= --let after_load_tablespaces=
--disable_result_log --disable_result_log
echo # Prepare full backup, apply incremental one; echo # Prepare full backup, apply incremental one;
exec $XTRABACKUP --apply-log-only --prepare --target-dir=$basedir; exec $XTRABACKUP --prepare --target-dir=$basedir;
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ; exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ;
echo # Restore and check results; echo # Restore and check results;
......
...@@ -30,9 +30,9 @@ remove_file $backuplog; ...@@ -30,9 +30,9 @@ remove_file $backuplog;
--disable_result_log --disable_result_log
echo # Prepare full backup, apply incremental one; echo # Prepare full backup, apply incremental one;
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir; exec $XTRABACKUP --prepare --verbose --target-dir=$basedir;
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ; exec $XTRABACKUP --prepare --verbose --target-dir=$basedir --incremental-dir=$incremental_dir ;
echo # Restore and check results; echo # Restore and check results;
let $targetdir=$basedir; let $targetdir=$basedir;
......
# Check for unknown options in command-line
# Check for unknown options in "mariabackup" group
# Check for unknown options in "xtrabackup" group
# Check for unknown options in "mariadb-backup" group
# Check for options overwriting
# Check if uknown options that follow --mysqld-args are ingored
# Check if [mariadb-client] group is not loaded (MDEV-22894)
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
--let $custom_cnf=$MYSQLTEST_VARDIR/tmp/custom_my.cnf
--echo # Check for unknown options in command-line
--disable_result_log
--error 7
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --unknown-option=xxx --target-dir=$targetdir;
--error 2
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --unknown-option --target-dir=$targetdir;
--enable_result_log
--echo # Check for unknown options in "mariabackup" group
--write_file $custom_cnf
[mariabackup]
unknown-option=XXX
EOF
--error 7
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
--remove_file $custom_cnf
--echo # Check for unknown options in "xtrabackup" group
--write_file $custom_cnf
[xtrabackup]
unknown-option=XXX
EOF
--error 7
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
--remove_file $custom_cnf
--echo # Check for unknown options in "mariadb-backup" group
--write_file $custom_cnf
[mariadb-backup]
unknown-option=XXX
EOF
--error 7
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
--remove_file $custom_cnf
--echo # Check for options overwriting
--write_file $custom_cnf
[mariadbd]
innodb-flush-method=O_DIRECT
[mariabackup]
innodb-flush-method=blablabla
EOF
--error 13
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
--remove_file $custom_cnf
--echo # Check if uknown options that follow --mysqld-args are ingored
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --mysqld-args --unknown-option;
--rmdir $targetdir
--echo # Check if [mariadb-client] group is not loaded (MDEV-22894)
--copy_file $MYSQLTEST_VARDIR/my.cnf $custom_cnf
--append_file $custom_cnf
[mariadb-client]
user=bla
password=bla
EOF
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
--remove_file $custom_cnf
--rmdir $targetdir
...@@ -17,7 +17,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir ...@@ -17,7 +17,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir
list_files $basedir undo*; list_files $basedir undo*;
--echo # xtrabackup prepare --echo # xtrabackup prepare
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir; exec $XTRABACKUP --prepare --target-dir=$basedir;
--echo # Display undo log files from targer directory --echo # Display undo log files from targer directory
list_files $basedir undo*; list_files $basedir undo*;
......
...@@ -16,7 +16,7 @@ let $targetdir=$MYSQLTEST_VARDIR/tmp/backup; ...@@ -16,7 +16,7 @@ let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
--disable_result_log --disable_result_log
exec $INNOBACKUPEX --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp $targetdir; exec $INNOBACKUPEX --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp $targetdir;
exec $INNOBACKUPEX --apply-log --rebuild-indexes --rebuild-threads=2 $targetdir; exec $INNOBACKUPEX --apply-log $targetdir;
--source include/restart_and_restore.inc --source include/restart_and_restore.inc
--enable_result_log --enable_result_log
......
...@@ -38,7 +38,7 @@ INSERT INTO isam_p VALUES (1), (101), (201), (301); ...@@ -38,7 +38,7 @@ INSERT INTO isam_p VALUES (1), (101), (201), (301);
let $targetdir=$MYSQLTEST_VARDIR/tmp; let $targetdir=$MYSQLTEST_VARDIR/tmp;
--disable_result_log --disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp --backup --target-dir=$targetdir/full; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir/full;
--enable_result_log --enable_result_log
DROP TABLE t1; DROP TABLE t1;
......
/* /*
Copyright (c) 2002, 2013, Oracle and/or its affiliates Copyright (c) 2002, 2013, Oracle and/or its affiliates
Copyright (c) 2009, 2015, MariaDB Copyright (c) 2009, 2020, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
...@@ -79,6 +79,12 @@ my_bool my_getopt_skip_unknown= 0; ...@@ -79,6 +79,12 @@ my_bool my_getopt_skip_unknown= 0;
*/ */
my_bool my_getopt_prefix_matching= 1; my_bool my_getopt_prefix_matching= 1;
/*
This is a flag that can be set in client programs. 1 means that
handle_options() will not initialize options to default values.
*/
my_bool my_handle_options_init_variables = 1;
my_getopt_value my_getopt_get_addr= 0; my_getopt_value my_getopt_get_addr= 0;
static void default_reporter(enum loglevel level, const char *format, ...) static void default_reporter(enum loglevel level, const char *format, ...)
...@@ -205,6 +211,7 @@ int handle_options(int *argc, char ***argv, const struct my_option *longopts, ...@@ -205,6 +211,7 @@ int handle_options(int *argc, char ***argv, const struct my_option *longopts,
DBUG_ASSERT(*argv); DBUG_ASSERT(*argv);
(*argc)--; /* Skip the program name */ (*argc)--; /* Skip the program name */
(*argv)++; /* --- || ---- */ (*argv)++; /* --- || ---- */
if (my_handle_options_init_variables)
init_variables(longopts, init_one_value); init_variables(longopts, init_one_value);
is_cmdline_arg= !is_file_marker(**argv); is_cmdline_arg= !is_file_marker(**argv);
......
...@@ -56,8 +56,6 @@ sfmt="tar" ...@@ -56,8 +56,6 @@ sfmt="tar"
strmcmd="" strmcmd=""
tfmt="" tfmt=""
tcmd="" tcmd=""
rebuild=0
rebuildcmd=""
payload=0 payload=0
pvformat="-F '%N => Rate:%r Avg:%a Elapsed:%t %e Bytes: %b %p' " pvformat="-F '%N => Rate:%r Avg:%a Elapsed:%t %e Bytes: %b %p' "
pvopts="-f -i 10 -N $WSREP_SST_OPT_ROLE " pvopts="-f -i 10 -N $WSREP_SST_OPT_ROLE "
...@@ -339,7 +337,6 @@ read_cnf() ...@@ -339,7 +337,6 @@ read_cnf()
encrypt=$(parse_cnf sst encrypt 0) encrypt=$(parse_cnf sst encrypt 0)
sockopt=$(parse_cnf sst sockopt "") sockopt=$(parse_cnf sst sockopt "")
progress=$(parse_cnf sst progress "") progress=$(parse_cnf sst progress "")
rebuild=$(parse_cnf sst rebuild 0)
ttime=$(parse_cnf sst time 0) ttime=$(parse_cnf sst time 0)
cpat=$(parse_cnf sst cpat '.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$') cpat=$(parse_cnf sst cpat '.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$')
[[ $OS == "FreeBSD" ]] && cpat=$(parse_cnf sst cpat '.*galera\.cache$|.*sst_in_progress$|.*\.sst$|.*gvwstate\.dat$|.*grastate\.dat$|.*\.err$|.*\.log$|.*RPM_UPGRADE_MARKER$|.*RPM_UPGRADE_HISTORY$') [[ $OS == "FreeBSD" ]] && cpat=$(parse_cnf sst cpat '.*galera\.cache$|.*sst_in_progress$|.*\.sst$|.*gvwstate\.dat$|.*grastate\.dat$|.*\.err$|.*\.log$|.*RPM_UPGRADE_MARKER$|.*RPM_UPGRADE_HISTORY$')
...@@ -708,7 +705,7 @@ if [[ ${FORCE_FTWRL:-0} -eq 1 ]];then ...@@ -708,7 +705,7 @@ if [[ ${FORCE_FTWRL:-0} -eq 1 ]];then
iopts+=" --no-backup-locks " iopts+=" --no-backup-locks "
fi fi
INNOEXTRA=$WSREP_SST_OPT_MYSQLD INNOEXTRA=
INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""} INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
# Try to set INNODB_DATA_HOME_DIR from the command line: # Try to set INNODB_DATA_HOME_DIR from the command line:
...@@ -754,9 +751,9 @@ if [[ $ssyslog -eq 1 ]];then ...@@ -754,9 +751,9 @@ if [[ $ssyslog -eq 1 ]];then
logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@" logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
} }
INNOAPPLY="${INNOBACKUPEX_BIN} --innobackupex $disver $iapts \$INNOEXTRA --apply-log \$rebuildcmd \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply" INNOAPPLY="${INNOBACKUPEX_BIN} --prepare $disver $iapts \$INNOEXTRA --target-dir=\${DATA} --mysqld-args \$WSREP_SST_OPT_MYSQLD 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply"
INNOMOVE="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move" INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --move-back $disver $impts --force-non-empty-directories --target-dir=\${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move"
INNOBACKUP="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)" INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --backup $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt --target-dir=\$itmpdir --mysqld-args \$WSREP_SST_OPT_MYSQLD 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)"
fi fi
else else
...@@ -818,9 +815,9 @@ then ...@@ -818,9 +815,9 @@ then
fi fi
INNOAPPLY="${INNOBACKUPEX_BIN} --innobackupex $disver $iapts \$INNOEXTRA --apply-log \$rebuildcmd \${DATA} &> ${INNOAPPLYLOG}" INNOAPPLY="${INNOBACKUPEX_BIN} --prepare $disver $iapts \$INNOEXTRA --target-dir=\${DATA} --mysqld-args \$WSREP_SST_OPT_MYSQLD &> ${INNOAPPLYLOG}"
INNOMOVE="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} &> ${INNOMOVELOG}" INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --move-back $disver $impts --move-back --force-non-empty-directories --target-dir=\${DATA} &> ${INNOMOVELOG}"
INNOBACKUP="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> ${INNOBACKUPLOG}" INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --backup $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt --target-dir=\$itmpdir --mysqld-args \$WSREP_SST_OPT_MYSQLD 2> ${INNOBACKUPLOG}"
fi fi
get_stream get_stream
...@@ -862,15 +859,6 @@ then ...@@ -862,15 +859,6 @@ then
INNOEXTRA+=" --password=" INNOEXTRA+=" --password="
fi fi
get_keys
if [[ $encrypt -eq 1 ]];then
if [[ -n $ekey ]];then
INNOEXTRA+=" --encrypt=$ealgo --encrypt-key=$ekey"
else
INNOEXTRA+=" --encrypt=$ealgo --encrypt-key-file=$ekeyfile"
fi
fi
check_extra check_extra
wsrep_log_info "Streaming GTID file before SST" wsrep_log_info "Streaming GTID file before SST"
...@@ -1091,18 +1079,6 @@ then ...@@ -1091,18 +1079,6 @@ then
exit 2 exit 2
fi fi
# Rebuild indexes for compact backups
if grep -q 'compact = 1' ${DATA}/xtrabackup_checkpoints;then
wsrep_log_info "Index compaction detected"
rebuild=1
fi
if [[ $rebuild -eq 1 ]];then
nthreads=$(parse_cnf xtrabackup rebuild-threads $nproc)
wsrep_log_info "Rebuilding during prepare with $nthreads threads"
rebuildcmd="--rebuild-indexes --rebuild-threads=$nthreads"
fi
if test -n "$(find ${DATA} -maxdepth 1 -type f -name '*.qp' -print -quit)";then if test -n "$(find ${DATA} -maxdepth 1 -type f -name '*.qp' -print -quit)";then
wsrep_log_info "Compressed qpress files found" wsrep_log_info "Compressed qpress files found"
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "log.h" #include "log.h"
#include "sql_plugin.h" #include "sql_plugin.h"
#include <my_crypt.h> #include <my_crypt.h>
#include <violite.h>
/* there can be only one encryption plugin enabled */ /* there can be only one encryption plugin enabled */
static plugin_ref encryption_manager= 0; static plugin_ref encryption_manager= 0;
...@@ -63,6 +64,8 @@ int initialize_encryption_plugin(st_plugin_int *plugin) ...@@ -63,6 +64,8 @@ int initialize_encryption_plugin(st_plugin_int *plugin)
if (encryption_manager) if (encryption_manager)
return 1; return 1;
vio_check_ssl_init();
if (plugin->plugin->init && plugin->plugin->init(plugin)) if (plugin->plugin->init && plugin->plugin->init(plugin))
{ {
sql_print_error("Plugin '%s' init function returned error.", sql_print_error("Plugin '%s' init function returned error.",
......
...@@ -15942,15 +15942,6 @@ static void print_key_value(String *out, const KEY_PART_INFO *key_part, ...@@ -15942,15 +15942,6 @@ static void print_key_value(String *out, const KEY_PART_INFO *key_part,
{ {
field= key_part->field; field= key_part->field;
store_length= key_part->store_length; store_length= key_part->store_length;
if (field->flags & BLOB_FLAG)
{
// Byte 0 of a nullable key is the null-byte. If set, key is NULL.
if (field->real_maybe_null() && *key)
{
out->append(STRING_WITH_LEN("NULL"));
goto next;
}
}
if (field->real_maybe_null()) if (field->real_maybe_null())
{ {
......
...@@ -467,6 +467,7 @@ pool_mark_busy(rpl_parallel_thread_pool *pool, THD *thd) ...@@ -467,6 +467,7 @@ pool_mark_busy(rpl_parallel_thread_pool *pool, THD *thd)
So we protect the infrequent operations of FLUSH TABLES WITH READ LOCK and So we protect the infrequent operations of FLUSH TABLES WITH READ LOCK and
pool size changes with this condition wait. pool size changes with this condition wait.
*/ */
DBUG_EXECUTE_IF("mark_busy_mdev_22370",my_sleep(1000000););
mysql_mutex_lock(&pool->LOCK_rpl_thread_pool); mysql_mutex_lock(&pool->LOCK_rpl_thread_pool);
if (thd) if (thd)
{ {
...@@ -2012,10 +2013,24 @@ rpl_parallel_thread_pool::init(uint32 size) ...@@ -2012,10 +2013,24 @@ rpl_parallel_thread_pool::init(uint32 size)
void void
rpl_parallel_thread_pool::destroy() rpl_parallel_thread_pool::destroy()
{
deactivate();
destroy_cond_mutex();
}
void
rpl_parallel_thread_pool::deactivate()
{ {
if (!inited) if (!inited)
return; return;
rpl_parallel_change_thread_count(this, 0, 1); rpl_parallel_change_thread_count(this, 0, 1);
}
void
rpl_parallel_thread_pool::destroy_cond_mutex()
{
if (!inited)
return;
mysql_mutex_destroy(&LOCK_rpl_thread_pool); mysql_mutex_destroy(&LOCK_rpl_thread_pool);
mysql_cond_destroy(&COND_rpl_thread_pool); mysql_cond_destroy(&COND_rpl_thread_pool);
inited= false; inited= false;
......
...@@ -244,6 +244,8 @@ struct rpl_parallel_thread_pool { ...@@ -244,6 +244,8 @@ struct rpl_parallel_thread_pool {
rpl_parallel_thread_pool(); rpl_parallel_thread_pool();
int init(uint32 size); int init(uint32 size);
void destroy(); void destroy();
void deactivate();
void destroy_cond_mutex();
struct rpl_parallel_thread *get_thread(rpl_parallel_thread **owner, struct rpl_parallel_thread *get_thread(rpl_parallel_thread **owner,
rpl_parallel_entry *entry); rpl_parallel_entry *entry);
void release_thread(rpl_parallel_thread *rpt); void release_thread(rpl_parallel_thread *rpt);
......
...@@ -1448,7 +1448,7 @@ void slave_prepare_for_shutdown() ...@@ -1448,7 +1448,7 @@ void slave_prepare_for_shutdown()
mysql_mutex_unlock(&LOCK_active_mi); mysql_mutex_unlock(&LOCK_active_mi);
// It's safe to destruct worker pool now when // It's safe to destruct worker pool now when
// all driver threads are gone. // all driver threads are gone.
global_rpl_thread_pool.destroy(); global_rpl_thread_pool.deactivate();
stop_slave_background_thread(); stop_slave_background_thread();
} }
......
...@@ -158,7 +158,7 @@ btr_pcur_store_position( ...@@ -158,7 +158,7 @@ btr_pcur_store_position(
ut_ad(index->is_instant()); ut_ad(index->is_instant());
ut_ad(page_get_n_recs(block->frame) == 1); ut_ad(page_get_n_recs(block->frame) == 1);
ut_ad(page_is_leaf(block->frame)); ut_ad(page_is_leaf(block->frame));
ut_ad(!page_has_siblings(block->frame)); ut_ad(!page_has_prev(block->frame));
cursor->rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE; cursor->rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE;
return; return;
} }
......
...@@ -840,14 +840,9 @@ static trx_rseg_t* trx_assign_rseg_low() ...@@ -840,14 +840,9 @@ static trx_rseg_t* trx_assign_rseg_low()
/* Choose a rollback segment evenly distributed between 0 and /* Choose a rollback segment evenly distributed between 0 and
innodb_undo_logs-1 in a round-robin fashion, skipping those innodb_undo_logs-1 in a round-robin fashion, skipping those
undo tablespaces that are scheduled for truncation. undo tablespaces that are scheduled for truncation. */
static Atomic_counter<unsigned> rseg_slot;
Because rseg_slot is not protected by atomics or any mutex, race unsigned slot = rseg_slot++ % TRX_SYS_N_RSEGS;
conditions are possible, meaning that multiple transactions
that start modifications concurrently will write their undo
log to the same rollback segment. */
static ulong rseg_slot;
ulint slot = rseg_slot++ % TRX_SYS_N_RSEGS;
ut_d(if (trx_rseg_n_slots_debug) slot = 0); ut_d(if (trx_rseg_n_slots_debug) slot = 0);
trx_rseg_t* rseg; trx_rseg_t* rseg;
...@@ -926,11 +921,8 @@ trx_t::assign_temp_rseg() ...@@ -926,11 +921,8 @@ trx_t::assign_temp_rseg()
compile_time_assert(ut_is_2pow(TRX_SYS_N_RSEGS)); compile_time_assert(ut_is_2pow(TRX_SYS_N_RSEGS));
/* Choose a temporary rollback segment between 0 and 127 /* Choose a temporary rollback segment between 0 and 127
in a round-robin fashion. Because rseg_slot is not protected by in a round-robin fashion. */
atomics or any mutex, race conditions are possible, meaning that static Atomic_counter<unsigned> rseg_slot;
multiple transactions that start modifications concurrently
will write their undo log to the same rollback segment. */
static ulong rseg_slot;
trx_rseg_t* rseg = trx_sys.temp_rsegs[ trx_rseg_t* rseg = trx_sys.temp_rsegs[
rseg_slot++ & (TRX_SYS_N_RSEGS - 1)]; rseg_slot++ & (TRX_SYS_N_RSEGS - 1)];
ut_ad(!rseg->is_persistent()); ut_ad(!rseg->is_persistent());
......
...@@ -150,7 +150,7 @@ vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file, ...@@ -150,7 +150,7 @@ vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file,
} }
static void check_ssl_init() void vio_check_ssl_init()
{ {
if (!ssl_algorithms_added) if (!ssl_algorithms_added)
{ {
...@@ -243,7 +243,7 @@ new_VioSSLFd(const char *key_file, const char *cert_file, ...@@ -243,7 +243,7 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
crl_file ? crl_file : "NULL", crl_file ? crl_file : "NULL",
crl_path ? crl_path : "NULL")); crl_path ? crl_path : "NULL"));
check_ssl_init(); vio_check_ssl_init();
if (!(ssl_fd= ((struct st_VioSSLFd*) if (!(ssl_fd= ((struct st_VioSSLFd*)
my_malloc(key_memory_vio_ssl_fd, my_malloc(key_memory_vio_ssl_fd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment