summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/mariabackup/CMakeLists.txt26
-rw-r--r--extra/mariabackup/backup_copy.cc130
-rw-r--r--extra/mariabackup/backup_mysql.cc113
-rw-r--r--extra/mariabackup/changed_page_bitmap.cc26
-rw-r--r--extra/mariabackup/common.h71
-rw-r--r--extra/mariabackup/datasink.cc (renamed from extra/mariabackup/datasink.c)11
-rw-r--r--extra/mariabackup/ds_archive.cc (renamed from extra/mariabackup/ds_archive.c)0
-rw-r--r--extra/mariabackup/ds_buffer.cc (renamed from extra/mariabackup/ds_buffer.c)4
-rw-r--r--extra/mariabackup/ds_compress.cc (renamed from extra/mariabackup/ds_compress.c)8
-rw-r--r--extra/mariabackup/ds_stdout.cc (renamed from extra/mariabackup/ds_stdout.c)2
-rw-r--r--extra/mariabackup/ds_tmpfile.cc (renamed from extra/mariabackup/ds_tmpfile.c)22
-rw-r--r--extra/mariabackup/ds_xbstream.cc (renamed from extra/mariabackup/ds_xbstream.c)12
-rw-r--r--extra/mariabackup/encryption_plugin.cc9
-rw-r--r--extra/mariabackup/fil_cur.cc32
-rw-r--r--extra/mariabackup/innobackupex.cc2
-rw-r--r--extra/mariabackup/write_filt.cc11
-rw-r--r--extra/mariabackup/wsrep.cc7
-rw-r--r--extra/mariabackup/xbstream.cc (renamed from extra/mariabackup/xbstream.c)37
-rw-r--r--extra/mariabackup/xbstream.h2
-rw-r--r--extra/mariabackup/xbstream_read.cc (renamed from extra/mariabackup/xbstream_read.c)24
-rw-r--r--extra/mariabackup/xbstream_write.cc (renamed from extra/mariabackup/xbstream_write.c)6
-rw-r--r--extra/mariabackup/xtrabackup.cc389
-rw-r--r--extra/mariabackup/xtrabackup.h14
-rw-r--r--mysql-test/main/subselect_exists2in.result4
-rw-r--r--mysql-test/main/union.result38
-rw-r--r--mysql-test/main/union.test35
-rw-r--r--mysql-test/main/view.result4
-rw-r--r--mysql-test/suite/encryption/r/innodb-encryption-alter.result28
-rw-r--r--mysql-test/suite/encryption/t/innodb-encryption-alter.test38
-rw-r--r--mysql-test/suite/galera/r/galera_FK_duplicate_client_insert.result380
-rw-r--r--mysql-test/suite/galera/r/galera_gtid_slave_sst_rsync.result1
-rw-r--r--mysql-test/suite/galera/t/galera_FK_duplicate_client_insert.test161
-rw-r--r--mysql-test/suite/galera/t/galera_gtid_slave_sst_rsync.test3
-rw-r--r--mysql-test/suite/innodb/r/innodb-virtual-columns.result13
-rw-r--r--mysql-test/suite/innodb/t/innodb-virtual-columns.test11
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded.result2
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result2
-rw-r--r--mysql-test/suite/sys_vars/r/table_definition_cache_basic.result16
-rw-r--r--mysql-test/suite/sys_vars/t/table_definition_cache_basic.test6
-rw-r--r--mysys/safemalloc.c2
-rw-r--r--sql/sql_class.cc21
-rw-r--r--sql/sql_lex.cc1
-rw-r--r--sql/sys_vars.cc8
-rw-r--r--storage/innobase/fil/fil0crypt.cc11
-rw-r--r--storage/innobase/include/buf0buf.h6
-rw-r--r--storage/innobase/include/dict0mem.h15
-rw-r--r--storage/innobase/include/fil0fil.h4
-rw-r--r--storage/innobase/include/univ.i11
-rw-r--r--storage/innobase/os/os0proc.cc3
-rw-r--r--storage/innobase/row/row0ftsort.cc11
50 files changed, 1193 insertions, 600 deletions
diff --git a/extra/mariabackup/CMakeLists.txt b/extra/mariabackup/CMakeLists.txt
index 7df5fa17903..02f2d1a3690 100644
--- a/extra/mariabackup/CMakeLists.txt
+++ b/extra/mariabackup/CMakeLists.txt
@@ -61,19 +61,19 @@ MYSQL_ADD_EXECUTABLE(mariabackup
xtrabackup.cc
innobackupex.cc
changed_page_bitmap.cc
- datasink.c
- ds_buffer.c
- ds_compress.c
+ datasink.cc
+ ds_buffer.cc
+ ds_compress.cc
ds_local.cc
- ds_stdout.c
- ds_tmpfile.c
- ds_xbstream.c
+ ds_stdout.cc
+ ds_tmpfile.cc
+ ds_xbstream.cc
fil_cur.cc
quicklz/quicklz.c
read_filt.cc
write_filt.cc
wsrep.cc
- xbstream_write.c
+ xbstream_write.cc
backup_mysql.cc
backup_copy.cc
encryption_plugin.cc
@@ -100,13 +100,13 @@ ENDIF()
# xbstream binary
########################################################################
MYSQL_ADD_EXECUTABLE(mbstream
- ds_buffer.c
+ ds_buffer.cc
ds_local.cc
- ds_stdout.c
- datasink.c
- xbstream.c
- xbstream_read.c
- xbstream_write.c
+ ds_stdout.cc
+ datasink.cc
+ xbstream.cc
+ xbstream_read.cc
+ xbstream_write.cc
COMPONENT backup
)
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc
index 4573c1977e7..fcbecd6dfe8 100644
--- a/extra/mariabackup/backup_copy.cc
+++ b/extra/mariabackup/backup_copy.cc
@@ -236,7 +236,7 @@ datadir_iter_next_database(datadir_iter_t *it)
if (os_file_closedir(it->dbdir) != 0) {
msg("Warning: could not"
- " close database directory %s\n", it->dbpath);
+ " close database directory %s", it->dbpath);
it->err = DB_ERROR;
@@ -277,7 +277,7 @@ datadir_iter_next_database(datadir_iter_t *it)
}
if (check_if_skip_database_by_path(it->dbpath)) {
- msg("Skipping db: %s\n", it->dbpath);
+ msg("Skipping db: %s", it->dbpath);
continue;
}
@@ -521,19 +521,15 @@ datafile_open(const char *file, datafile_cur_t *cursor, uint thread_n)
/* The following call prints an error message */
os_file_get_last_error(TRUE);
- msg("[%02u] error: cannot open "
- "file %s\n",
- thread_n, cursor->abs_path);
+ msg(thread_n,"error: cannot open "
+ "file %s", cursor->abs_path);
return(false);
}
if (!my_stat(cursor->abs_path, &cursor->statinfo, 0)) {
- msg("[%02u] error: cannot stat %s\n",
- thread_n, cursor->abs_path);
-
+ msg(thread_n, "error: cannot stat %s", cursor->abs_path);
datafile_close(cursor);
-
return(false);
}
@@ -724,9 +720,8 @@ directory_exists(const char *dir, bool create)
if (mkdirp(dir, 0777, MYF(0)) < 0) {
my_strerror(errbuf, sizeof(errbuf), my_errno);
- msg("Can not create directory %s: %s\n", dir, errbuf);
+ msg("Can not create directory %s: %s", dir, errbuf);
return(false);
-
}
}
@@ -735,7 +730,7 @@ directory_exists(const char *dir, bool create)
if (os_dir == NULL) {
my_strerror(errbuf, sizeof(errbuf), my_errno);
- msg("Can not open directory %s: %s\n", dir,
+ msg("Can not open directory %s: %s", dir,
errbuf);
return(false);
@@ -764,7 +759,7 @@ directory_exists_and_empty(const char *dir, const char *comment)
os_dir = os_file_opendir(dir, FALSE);
if (os_dir == NULL) {
- msg("%s can not open directory %s\n", comment, dir);
+ msg("%s can not open directory %s", comment, dir);
return(false);
}
@@ -773,7 +768,7 @@ directory_exists_and_empty(const char *dir, const char *comment)
os_file_closedir(os_dir);
if (!empty) {
- msg("%s directory %s is not empty!\n", comment, dir);
+ msg("%s directory %s is not empty!", comment, dir);
}
return(empty);
@@ -822,7 +817,7 @@ datafile_copy_backup(const char *filepath, uint thread_n)
of the filters value. */
if (check_if_skip_table(filepath)) {
- msg_ts("[%02u] Skipping %s.\n", thread_n, filepath);
+ msg(thread_n,"Skipping %s.", filepath);
return(true);
}
@@ -888,14 +883,13 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap)
dstfile = ds_open(ds_data, filename, &stat);
if (dstfile == NULL) {
- msg("[%02u] error: "
- "cannot open the destination stream for %s\n",
- 0, filename);
+ msg("error: Can't open the destination stream for %s",
+ filename);
goto error;
}
action = xb_get_copy_action("Writing");
- msg_ts("[%02u] %s %s\n", 0, action, filename);
+ msg("%s %s", action, filename);
if (buf_len == -1) {
goto error;
@@ -906,7 +900,7 @@ backup_file_vprintf(const char *filename, const char *fmt, va_list ap)
}
/* close */
- msg_ts("[%02u] ...done\n", 0);
+ msg(" ...done");
free(buf);
if (ds_close(dstfile)) {
@@ -922,7 +916,7 @@ error:
}
error_close:
- msg("[%02u] Error: backup file failed.\n", 0);
+ msg("Error: backup file failed.");
return(false); /*ERROR*/
}
@@ -982,7 +976,7 @@ run_data_threads(datadir_iter_t *it, os_thread_func_t func, uint n)
for (i = 0; i < n; i++) {
ret = data_threads[i].ret && ret;
if (!data_threads[i].ret) {
- msg("Error: thread %u failed.\n", i);
+ msg("Error: thread %u failed.", i);
}
}
@@ -1017,14 +1011,12 @@ copy_file(ds_ctxt_t *datasink,
dstfile = ds_open(datasink, dst_path, &cursor.statinfo);
if (dstfile == NULL) {
- msg("[%02u] error: "
- "cannot open the destination stream for %s\n",
- thread_n, dst_name);
+ msg(thread_n,"error: "
+ "cannot open the destination stream for %s", dst_name);
goto error;
}
- msg_ts("[%02u] %s %s to %s\n",
- thread_n, xb_get_copy_action(), src_file_path, dstfile->path);
+ msg(thread_n, "%s %s to %s", xb_get_copy_action(), src_file_path, dstfile->path);
/* The main copy loop */
while ((res = datafile_read(&cursor)) == XB_FIL_CUR_SUCCESS) {
@@ -1039,7 +1031,7 @@ copy_file(ds_ctxt_t *datasink,
}
/* close */
- msg_ts("[%02u] ...done\n", thread_n);
+ msg(thread_n," ...done");
datafile_close(&cursor);
if (ds_close(dstfile)) {
goto error_close;
@@ -1053,7 +1045,7 @@ error:
}
error_close:
- msg("[%02u] Error: copy_file() failed.\n", thread_n);
+ msg(thread_n,"Error: copy_file() failed.");
return(false); /*ERROR*/
}
@@ -1085,36 +1077,34 @@ move_file(ds_ctxt_t *datasink,
if (file_exists(dst_file_path_abs)) {
msg("Error: Move file %s to %s failed: Destination "
- "file exists\n",
- src_file_path, dst_file_path_abs);
+ "file exists", src_file_path, dst_file_path_abs);
return(false);
}
- msg_ts("[%02u] Moving %s to %s\n",
- thread_n, src_file_path, dst_file_path_abs);
+ msg(thread_n,"Moving %s to %s", src_file_path, dst_file_path_abs);
if (my_rename(src_file_path, dst_file_path_abs, MYF(0)) != 0) {
if (my_errno == EXDEV) {
bool ret;
ret = copy_file(datasink, src_file_path,
dst_file_path, thread_n);
- msg_ts("[%02u] Removing %s\n", thread_n, src_file_path);
+ msg(thread_n,"Removing %s", src_file_path);
if (unlink(src_file_path) != 0) {
my_strerror(errbuf, sizeof(errbuf), errno);
- msg("Error: unlink %s failed: %s\n",
+ msg("Error: unlink %s failed: %s",
src_file_path,
errbuf);
}
return(ret);
}
my_strerror(errbuf, sizeof(errbuf), my_errno);
- msg("Can not move file %s to %s: %s\n",
+ msg("Can not move file %s to %s: %s",
src_file_path, dst_file_path_abs,
errbuf);
return(false);
}
- msg_ts("[%02u] ...done\n", thread_n);
+ msg(thread_n," ...done");
return(true);
}
@@ -1266,13 +1256,13 @@ backup_files(const char *from, bool prep_mode)
prep_mode ? 1 : 2);
rsync_tmpfile = fopen(rsync_tmpfile_name, "w");
if (rsync_tmpfile == NULL) {
- msg("Error: can't create file %s\n",
+ msg("Error: can't create file %s",
rsync_tmpfile_name);
return(false);
}
}
- msg_ts("Starting %s non-InnoDB tables and files\n",
+ msg("Starting %s non-InnoDB tables and files",
prep_mode ? "prep copy of" : "to backup");
datadir_node_init(&node);
@@ -1288,7 +1278,7 @@ backup_files(const char *from, bool prep_mode)
ret = datafile_copy_backup(node.filepath, 1);
}
if (!ret) {
- msg("Failed to copy file %s\n", node.filepath);
+ msg("Failed to copy file %s", node.filepath);
goto out;
}
} else if (!prep_mode) {
@@ -1298,7 +1288,7 @@ backup_files(const char *from, bool prep_mode)
"%s/db.opt", node.filepath);
if (!(ret = backup_file_printf(
trim_dotslash(path), "%s", ""))) {
- msg("Failed to create file %s\n", path);
+ msg("Failed to create file %s", path);
goto out;
}
}
@@ -1323,13 +1313,13 @@ backup_files(const char *from, bool prep_mode)
cmd << "rsync -t . --files-from=" << rsync_tmpfile_name
<< " " << xtrabackup_target_dir;
- msg_ts("Starting rsync as: %s\n", cmd.str().c_str());
+ msg("Starting rsync as: %s", cmd.str().c_str());
if ((err = system(cmd.str().c_str()) && !prep_mode) != 0) {
- msg_ts("Error: rsync failed with error code %d\n", err);
+ msg("Error: rsync failed with error code %d", err);
ret = false;
goto out;
}
- msg_ts("rsync finished successfully.\n");
+ msg("rsync finished successfully.");
if (!prep_mode && !opt_no_lock) {
char path[FN_REFLEN];
@@ -1345,7 +1335,7 @@ backup_files(const char *from, bool prep_mode)
rsync_tmpfile = fopen(rsync_tmpfile_name, "r");
if (rsync_tmpfile == NULL) {
- msg("Error: can't open file %s\n",
+ msg("Error: can't open file %s",
rsync_tmpfile_name);
ret = false;
goto out;
@@ -1361,7 +1351,7 @@ backup_files(const char *from, bool prep_mode)
snprintf(dst_path, sizeof(dst_path),
"%s/%s", xtrabackup_target_dir,
path);
- msg_ts("Removing %s\n", dst_path);
+ msg("Removing %s", dst_path);
unlink(dst_path);
}
}
@@ -1371,7 +1361,7 @@ backup_files(const char *from, bool prep_mode)
}
}
- msg_ts("Finished %s non-InnoDB tables and files\n",
+ msg("Finished %s non-InnoDB tables and files",
prep_mode ? "a prep copy of" : "backing up");
out:
@@ -1443,7 +1433,7 @@ bool backup_start()
rocksdb_create_checkpoint();
}
- msg_ts("Waiting for log copy thread to read lsn %llu\n", (ulonglong)server_lsn_after_lock);
+ msg("Waiting for log copy thread to read lsn %llu", (ulonglong)server_lsn_after_lock);
backup_wait_for_lsn(server_lsn_after_lock);
backup_fix_ddl();
@@ -1486,7 +1476,7 @@ bool backup_start()
}
if (have_flush_engine_logs && !opt_no_lock) {
- msg_ts("Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...\n");
+ msg("Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...");
xb_mysql_query(mysql_connection,
"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS", false);
}
@@ -1510,7 +1500,7 @@ void backup_release()
}
if (opt_safe_slave_backup && sql_thread_started) {
- msg("Starting slave SQL thread\n");
+ msg("Starting slave SQL thread");
xb_mysql_query(mysql_connection,
"START SLAVE SQL_THREAD", false);
}
@@ -1536,12 +1526,12 @@ bool backup_finish()
rocksdb_backup_checkpoint();
}
- msg_ts("Backup created in directory '%s'\n", xtrabackup_target_dir);
+ msg("Backup created in directory '%s'", xtrabackup_target_dir);
if (mysql_binlog_position != NULL) {
- msg("MySQL binlog position: %s\n", mysql_binlog_position);
+ msg("MySQL binlog position: %s", mysql_binlog_position);
}
if (mysql_slave_position && opt_slave_info) {
- msg("MySQL slave binlog position: %s\n",
+ msg("MySQL slave binlog position: %s",
mysql_slave_position);
}
@@ -1601,7 +1591,7 @@ ibx_copy_incremental_over_full()
if (!(ret = copy_file(ds_data, node.filepath,
node.filepath_rel, 1))) {
- msg("Failed to copy file %s\n",
+ msg("Failed to copy file %s",
node.filepath);
goto cleanup;
}
@@ -1741,7 +1731,7 @@ copy_back()
/* cd to backup directory */
if (my_setwd(xtrabackup_target_dir, MYF(MY_WME)))
{
- msg("cannot my_setwd %s\n", xtrabackup_target_dir);
+ msg("Can't my_setwd %s", xtrabackup_target_dir);
return(false);
}
@@ -1754,7 +1744,7 @@ copy_back()
srv_sys_space.set_path(".");
if (!srv_sys_space.parse_params(innobase_data_file_path, true)) {
- msg("syntax error in innodb_data_file_path\n");
+ msg("syntax error in innodb_data_file_path");
return(false);
}
@@ -1868,12 +1858,12 @@ copy_back()
snprintf(path, sizeof(path), "%s/%s",
mysql_data_home, node.filepath_rel);
- msg_ts("[%02u] Creating directory %s\n", 1, path);
+ msg("Creating directory %s", path);
if (mkdirp(path, 0777, MYF(0)) < 0) {
char errbuf[MYSYS_STRERROR_SIZE];
my_strerror(errbuf, sizeof(errbuf), my_errno);
- msg("Can not create directory %s: %s\n",
+ msg("Can not create directory %s: %s",
path, errbuf);
ret = false;
@@ -1881,7 +1871,7 @@ copy_back()
}
- msg_ts("[%02u] ...done.", 1);
+ msg(" ...done.");
continue;
}
@@ -1991,14 +1981,14 @@ decrypt_decompress_file(const char *filepath, uint thread_n)
if (needs_action) {
- msg_ts("[%02u] %s\n", thread_n, message.str().c_str());
+ msg(thread_n,"%s\n", message.str().c_str());
if (system(cmd.str().c_str()) != 0) {
return(false);
}
if (opt_remove_original) {
- msg_ts("[%02u] removing %s\n", thread_n, filepath);
+ msg(thread_n, "Removing %s", filepath);
if (my_delete(filepath, MYF(MY_WME)) != 0) {
return(false);
}
@@ -2061,7 +2051,7 @@ decrypt_decompress()
/* cd to backup directory */
if (my_setwd(xtrabackup_target_dir, MYF(MY_WME)))
{
- msg("cannot my_setwd %s\n", xtrabackup_target_dir);
+ msg("Can't my_setwd %s", xtrabackup_target_dir);
return(false);
}
@@ -2211,8 +2201,7 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo
rc = make_hardlink(from_path, to_path);
if (rc)
{
- msg_ts("[%02u] Creating hardlink from %s to %s\n",
- 1, from_path, to_path);
+ msg("Creating hardlink from %s to %s",from_path, to_path);
}
else
{
@@ -2228,7 +2217,7 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo
to, 1));
}
if (!rc)
- exit(EXIT_FAILURE);
+ die("copy or move file failed");
}
datadir_iter_free(it);
datadir_node_free(&node);
@@ -2246,14 +2235,14 @@ static void copy_or_move_dir(const char *from, const char *to, bool do_copy, boo
*/
static void rocksdb_lock_checkpoint()
{
- msg_ts("Obtaining rocksdb checkpoint lock.\n");
+ msg("Obtaining rocksdb checkpoint lock.");
MYSQL_RES *res =
xb_mysql_query(mysql_connection, "SELECT GET_LOCK('mariabackup_rocksdb_checkpoint',3600)", true, true);
MYSQL_ROW r = mysql_fetch_row(res);
if (r && r[0] && strcmp(r[0], "1"))
{
- msg_ts("Could not obtain rocksdb checkpont lock\n");
+ msg("Could not obtain rocksdb checkpont lock.");
exit(EXIT_FAILURE);
}
mysql_free_result(res);
@@ -2307,7 +2296,7 @@ static void rocksdb_create_checkpoint()
if (!access(rocksdb_checkpoint_dir, 0))
{
- msg_ts("Removing rocksdb checkpoint from previous backup attempt.\n");
+ msg("Removing rocksdb checkpoint from previous backup attempt.");
rocksdb_remove_checkpoint_directory();
}
@@ -2323,15 +2312,14 @@ static void rocksdb_create_checkpoint()
*/
static void rocksdb_backup_checkpoint()
{
- msg_ts("Backing up rocksdb files.\n");
+ msg("Backing up rocksdb files.");
char rocksdb_backup_dir[FN_REFLEN];
snprintf(rocksdb_backup_dir, sizeof(rocksdb_backup_dir), "%s/" ROCKSDB_BACKUP_DIR , xtrabackup_target_dir);
bool backup_to_directory = xtrabackup_backup && xtrabackup_stream_fmt == XB_STREAM_FMT_NONE;
if (backup_to_directory)
{
if (my_mkdir(rocksdb_backup_dir, 0777, MYF(0))){
- msg_ts("Can't create rocksdb backup directory %s\n", rocksdb_backup_dir);
- exit(EXIT_FAILURE);
+ die("Can't create rocksdb backup directory %s", rocksdb_backup_dir);
}
}
copy_or_move_dir(rocksdb_checkpoint_dir, ROCKSDB_BACKUP_DIR, true, backup_to_directory);
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index a142ad70b26..3fa4d88a10a 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -105,7 +105,7 @@ xb_mysql_connect()
sprintf(mysql_port_str, "%d", opt_port);
if (connection == NULL) {
- msg("Failed to init MySQL struct: %s.\n",
+ msg("Failed to init MySQL struct: %s.",
mysql_error(connection));
return(NULL);
}
@@ -121,8 +121,8 @@ xb_mysql_connect()
mysql_options(connection, MYSQL_OPT_PROTOCOL, &opt_protocol);
mysql_options(connection,MYSQL_SET_CHARSET_NAME, "utf8");
- msg_ts("Connecting to MySQL server host: %s, user: %s, password: %s, "
- "port: %s, socket: %s\n", opt_host ? opt_host : "localhost",
+ msg("Connecting to MySQL server host: %s, user: %s, password: %s, "
+ "port: %s, socket: %s", opt_host ? opt_host : "localhost",
opt_user ? opt_user : "not set",
opt_password ? "set" : "not set",
opt_port != 0 ? mysql_port_str : "not set",
@@ -148,8 +148,7 @@ xb_mysql_connect()
opt_password,
"" /*database*/, opt_port,
opt_socket, 0)) {
- msg("Failed to connect to MySQL server: %s.\n",
- mysql_error(connection));
+ msg("Failed to connect to MySQL server: %s.", mysql_error(connection));
mysql_close(connection);
return(NULL);
}
@@ -169,10 +168,10 @@ xb_mysql_query(MYSQL *connection, const char *query, bool use_result,
MYSQL_RES *mysql_result = NULL;
if (mysql_query(connection, query)) {
- msg("Error: failed to execute query %s: %s\n", query,
- mysql_error(connection));
if (die_on_error) {
- exit(EXIT_FAILURE);
+ die("failed to execute query %s: %s", query, mysql_error(connection));
+ } else {
+ msg("Error: failed to execute query %s: %s", query, mysql_error(connection));
}
return(NULL);
}
@@ -180,9 +179,8 @@ xb_mysql_query(MYSQL *connection, const char *query, bool use_result,
/* store result set on client if there is a result */
if (mysql_field_count(connection) > 0) {
if ((mysql_result = mysql_store_result(connection)) == NULL) {
- msg("Error: failed to fetch query result %s: %s\n",
+ die("failed to fetch query result %s: %s",
query, mysql_error(connection));
- exit(EXIT_FAILURE);
}
if (!use_result) {
@@ -317,11 +315,11 @@ check_server_version(unsigned long version_number,
msg("Error: Built-in InnoDB in MySQL 5.1 is not "
"supported in this release. You can either use "
"Percona XtraBackup 2.0, or upgrade to InnoDB "
- "plugin.\n");
+ "plugin.");
} else if (!version_supported) {
msg("Error: Unsupported server version: '%s'. Please "
"report a bug at "
- "https://bugs.launchpad.net/percona-xtrabackup\n",
+ "https://bugs.launchpad.net/percona-xtrabackup",
version_string);
}
@@ -408,7 +406,7 @@ get_mysql_vars(MYSQL *connection)
opt_binlog_info == BINLOG_INFO_LOCKLESS) {
msg("Error: --binlog-info=LOCKLESS is not supported by the "
- "server\n");
+ "server");
return(false);
}
@@ -446,7 +444,7 @@ get_mysql_vars(MYSQL *connection)
have_gtid_slave = true;
}
- msg("Using server version %s\n", version_var);
+ msg("Using server version %s", version_var);
if (!(ret = detect_mysql_capabilities_for_backup())) {
goto out;
@@ -456,17 +454,17 @@ get_mysql_vars(MYSQL *connection)
if (check_if_param_set("datadir")) {
if (!directory_exists(mysql_data_home, false)) {
msg("Warning: option 'datadir' points to "
- "nonexistent directory '%s'\n", mysql_data_home);
+ "nonexistent directory '%s'", mysql_data_home);
}
if (!directory_exists(datadir_var, false)) {
msg("Warning: MySQL variable 'datadir' points to "
- "nonexistent directory '%s'\n", datadir_var);
+ "nonexistent directory '%s'", datadir_var);
}
if (!equal_paths(mysql_data_home, datadir_var)) {
msg("Warning: option 'datadir' has different "
"values:\n"
" '%s' in defaults file\n"
- " '%s' in SHOW VARIABLES\n",
+ " '%s' in SHOW VARIABLES",
mysql_data_home, datadir_var);
}
}
@@ -565,14 +563,14 @@ detect_mysql_capabilities_for_backup()
if (opt_galera_info && !have_galera_enabled) {
msg("--galera-info is specified on the command "
"line, but the server does not support Galera "
- "replication. Ignoring the option.\n");
+ "replication. Ignoring the option.");
opt_galera_info = false;
}
if (opt_slave_info && have_multi_threaded_slave &&
!have_gtid_slave) {
msg("The --slave-info option requires GTID enabled for a "
- "multi-threaded slave.\n");
+ "multi-threaded slave.");
return(false);
}
@@ -619,7 +617,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
const MYSQL_ROW row = mysql_fetch_row(mysql_result);
if (row) {
*incremental_lsn = strtoull(row[0], NULL, 10);
- msg("Found and using lsn: " LSN_PF " for %s %s\n",
+ msg("Found and using lsn: " LSN_PF " for %s %s",
*incremental_lsn,
opt_incremental_history_uuid ? "uuid" : "name",
opt_incremental_history_uuid ?
@@ -627,7 +625,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
opt_incremental_history_name);
} else {
msg("Error while attempting to find history record "
- "for %s %s\n",
+ "for %s %s",
opt_incremental_history_uuid ? "uuid" : "name",
opt_incremental_history_uuid ?
opt_incremental_history_uuid :
@@ -737,7 +735,7 @@ have_queries_to_wait_for(MYSQL *connection, uint threshold)
&& duration >= (int)threshold
&& ((all_queries && is_query(info))
|| is_update_query(info))) {
- msg_ts("Waiting for query %s (duration %d sec): %s",
+ msg("Waiting for query %s (duration %d sec): %s",
id, duration, info);
have_to_wait = true;
break;
@@ -766,7 +764,7 @@ kill_long_queries(MYSQL *connection, time_t timeout)
(time_t)duration >= timeout &&
((all_queries && is_query(info)) ||
is_select_query(info))) {
- msg_ts("Killing query %s (duration %d sec): %s\n",
+ msg("Killing query %s (duration %d sec): %s",
id, (int)duration, info);
snprintf(kill_stmt, sizeof(kill_stmt),
"KILL %s", id);
@@ -785,8 +783,8 @@ wait_for_no_updates(MYSQL *connection, uint timeout, uint threshold)
start_time = time(NULL);
- msg_ts("Waiting %u seconds for queries running longer than %u seconds "
- "to finish\n", timeout, threshold);
+ msg("Waiting %u seconds for queries running longer than %u seconds "
+ "to finish", timeout, threshold);
while (time(NULL) <= (time_t)(start_time + timeout)) {
if (!have_queries_to_wait_for(connection, threshold)) {
@@ -795,7 +793,7 @@ wait_for_no_updates(MYSQL *connection, uint timeout, uint threshold)
os_thread_sleep(1000000);
}
- msg_ts("Unable to obtain lock. Please try again later.");
+ msg("Unable to obtain lock. Please try again later.");
return(false);
}
@@ -813,7 +811,7 @@ DECLARE_THREAD(kill_query_thread)(
os_event_set(kill_query_thread_started);
- msg_ts("Kill query timeout %d seconds.\n",
+ msg("Kill query timeout %d seconds.",
opt_kill_long_queries_timeout);
while (time(NULL) - start_time <
@@ -825,7 +823,7 @@ DECLARE_THREAD(kill_query_thread)(
}
if ((mysql = xb_mysql_connect()) == NULL) {
- msg("Error: kill query thread failed\n");
+ msg("Error: kill query thread failed");
goto stop_thread;
}
@@ -840,7 +838,7 @@ DECLARE_THREAD(kill_query_thread)(
mysql_close(mysql);
stop_thread:
- msg_ts("Kill query thread stopped\n");
+ msg("Kill query thread stopped");
os_event_set(kill_query_thread_stopped);
@@ -890,7 +888,7 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
{
MYSQL *mysql;
if ((mysql = xb_mysql_connect()) == NULL) {
- msg("Error: kill mdl waiters thread failed to connect\n");
+ msg("Error: kill mdl waiters thread failed to connect");
goto stop_thread;
}
@@ -909,12 +907,11 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
if (row[1] && !strcmp(row[1], "Killed"))
continue;
- msg_ts("Killing MDL waiting %s ('%s') on connection %s\n",
+ msg("Killing MDL waiting %s ('%s') on connection %s",
row[1], row[2], row[0]);
snprintf(query, sizeof(query), "KILL QUERY %s", row[0]);
if (mysql_query(mysql, query) && (mysql_errno(mysql) != ER_NO_SUCH_THREAD)) {
- msg("Error: failed to execute query %s: %s\n", query,mysql_error(mysql));
- exit(EXIT_FAILURE);
+ die("failed to execute query %s: %s", query,mysql_error(mysql));
}
}
mysql_free_result(result);
@@ -923,7 +920,7 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *))
mysql_close(mysql);
stop_thread:
- msg_ts("Kill mdl waiters thread stopped\n");
+ msg("Kill mdl waiters thread stopped");
os_event_set(mdl_killer_finished_event);
os_thread_exit();
return os_thread_ret_t(0);
@@ -965,7 +962,7 @@ lock_tables(MYSQL *connection)
}
if (have_backup_locks) {
- msg_ts("Executing LOCK TABLES FOR BACKUP...\n");
+ msg("Executing LOCK TABLES FOR BACKUP...");
xb_mysql_query(connection, "LOCK TABLES FOR BACKUP", false);
return(true);
}
@@ -988,7 +985,7 @@ lock_tables(MYSQL *connection)
compatible with this trick.
*/
- msg_ts("Executing FLUSH NO_WRITE_TO_BINLOG TABLES...\n");
+ msg("Executing FLUSH NO_WRITE_TO_BINLOG TABLES...");
xb_mysql_query(connection,
"FLUSH NO_WRITE_TO_BINLOG TABLES", false);
@@ -1001,7 +998,7 @@ lock_tables(MYSQL *connection)
}
}
- msg_ts("Executing FLUSH TABLES WITH READ LOCK...\n");
+ msg("Executing FLUSH TABLES WITH READ LOCK...");
if (opt_kill_long_queries_timeout) {
start_query_killer();
@@ -1034,7 +1031,7 @@ bool
lock_binlog_maybe(MYSQL *connection)
{
if (have_backup_locks && !opt_no_lock && !binlog_locked) {
- msg_ts("Executing LOCK BINLOG FOR BACKUP...\n");
+ msg("Executing LOCK BINLOG FOR BACKUP...");
xb_mysql_query(connection, "LOCK BINLOG FOR BACKUP", false);
binlog_locked = true;
@@ -1053,20 +1050,20 @@ void
unlock_all(MYSQL *connection)
{
if (opt_debug_sleep_before_unlock) {
- msg_ts("Debug sleep for %u seconds\n",
+ msg("Debug sleep for %u seconds",
opt_debug_sleep_before_unlock);
os_thread_sleep(opt_debug_sleep_before_unlock * 1000);
}
if (binlog_locked) {
- msg_ts("Executing UNLOCK BINLOG\n");
+ msg("Executing UNLOCK BINLOG");
xb_mysql_query(connection, "UNLOCK BINLOG", false);
}
- msg_ts("Executing UNLOCK TABLES\n");
+ msg("Executing UNLOCK TABLES");
xb_mysql_query(connection, "UNLOCK TABLES", false);
- msg_ts("All tables unlocked\n");
+ msg("All tables unlocked");
}
@@ -1117,7 +1114,7 @@ wait_for_safe_slave(MYSQL *connection)
if (!(read_master_log_pos && slave_sql_running)) {
msg("Not checking slave open temp tables for "
- "--safe-slave-backup because host is not a slave\n");
+ "--safe-slave-backup because host is not a slave");
goto cleanup;
}
@@ -1131,36 +1128,36 @@ wait_for_safe_slave(MYSQL *connection)
}
open_temp_tables = get_open_temp_tables(connection);
- msg_ts("Slave open temp tables: %d\n", open_temp_tables);
+ msg("Slave open temp tables: %d", open_temp_tables);
while (open_temp_tables && n_attempts--) {
- msg_ts("Starting slave SQL thread, waiting %d seconds, then "
+ msg("Starting slave SQL thread, waiting %d seconds, then "
"checking Slave_open_temp_tables again (%d attempts "
- "remaining)...\n", sleep_time, n_attempts);
+ "remaining)...", sleep_time, n_attempts);
xb_mysql_query(connection, "START SLAVE SQL_THREAD", false);
os_thread_sleep(sleep_time * 1000000);
xb_mysql_query(connection, "STOP SLAVE SQL_THREAD", false);
open_temp_tables = get_open_temp_tables(connection);
- msg_ts("Slave open temp tables: %d\n", open_temp_tables);
+ msg("Slave open temp tables: %d", open_temp_tables);
}
/* Restart the slave if it was running at start */
if (open_temp_tables == 0) {
- msg_ts("Slave is safe to backup\n");
+ msg("Slave is safe to backup");
goto cleanup;
}
result = false;
if (sql_thread_started) {
- msg_ts("Restarting slave SQL thread.\n");
+ msg("Restarting slave SQL thread.");
xb_mysql_query(connection, "START SLAVE SQL_THREAD", false);
}
- msg_ts("Slave_open_temp_tables did not become zero after "
- "%d seconds\n", opt_safe_slave_backup_timeout);
+ msg("Slave_open_temp_tables did not become zero after "
+ "%d seconds", opt_safe_slave_backup_timeout);
cleanup:
free_mysql_variables(status);
@@ -1202,10 +1199,8 @@ write_slave_info(MYSQL *connection)
if (master == NULL || filename == NULL || position == NULL) {
msg("Failed to get master binlog coordinates "
- "from SHOW SLAVE STATUS\n");
- msg("This means that the server is not a "
- "replication slave. Ignoring the --slave-info "
- "option\n");
+ "from SHOW SLAVE STATUS.This means that the server is not a "
+ "replication slave. Ignoring the --slave-info option");
/* we still want to continue the backup */
result = true;
goto cleanup;
@@ -1288,7 +1283,7 @@ write_galera_info(MYSQL *connection)
if ((state_uuid == NULL && state_uuid55 == NULL)
|| (last_committed == NULL && last_committed55 == NULL)) {
- msg("Failed to get master wsrep state from SHOW STATUS.\n");
+ msg("Failed to get master wsrep state from SHOW STATUS.");
result = false;
goto cleanup;
}
@@ -1801,9 +1796,9 @@ mdl_lock_table(ulint space_id)
std::ostringstream lock_query;
lock_query << "SELECT 1 FROM " << full_table_name << " LIMIT 0";
- msg_ts("Locking MDL for %s\n", full_table_name.c_str());
+ msg("Locking MDL for %s", full_table_name.c_str());
if (mysql_query(mdl_con, lock_query.str().c_str())) {
- msg_ts("Warning : locking MDL failed for space id %zu, name %s\n", space_id, full_table_name.c_str());
+ msg("Warning : locking MDL failed for space id %zu, name %s", space_id, full_table_name.c_str());
} else {
MYSQL_RES *r = mysql_store_result(mdl_con);
mysql_free_result(r);
@@ -1813,7 +1808,7 @@ mdl_lock_table(ulint space_id)
void
mdl_unlock_all()
{
- msg_ts("Unlocking MDL for all tables\n");
+ msg("Unlocking MDL for all tables");
xb_mysql_query(mdl_con, "COMMIT", false, true);
mysql_close(mdl_con);
spaceid_to_tablename.clear();
diff --git a/extra/mariabackup/changed_page_bitmap.cc b/extra/mariabackup/changed_page_bitmap.cc
index b704c3a063d..bff5f64e8fa 100644
--- a/extra/mariabackup/changed_page_bitmap.cc
+++ b/extra/mariabackup/changed_page_bitmap.cc
@@ -203,7 +203,7 @@ log_online_read_bitmap_page(
/* The following call prints an error message */
os_file_get_last_error(TRUE);
msg("InnoDB: Warning: failed reading changed page bitmap "
- "file \'%s\'\n", bitmap_file->name);
+ "file \'%s\'", bitmap_file->name);
return FALSE;
}
@@ -282,7 +282,7 @@ log_online_setup_bitmap_file_range(
bitmap_dir = os_file_opendir(srv_data_home, FALSE);
if (UNIV_UNLIKELY(!bitmap_dir)) {
- msg("InnoDB: Error: failed to open bitmap directory \'%s\'\n",
+ msg("InnoDB: Error: failed to open bitmap directory \'%s\'",
srv_data_home);
return FALSE;
}
@@ -332,7 +332,7 @@ log_online_setup_bitmap_file_range(
if (UNIV_UNLIKELY(os_file_closedir(bitmap_dir))) {
os_file_get_last_error(TRUE);
- msg("InnoDB: Error: cannot close \'%s\'\n",srv_data_home);
+ msg("InnoDB: Error: cannot close \'%s\'",srv_data_home);
return FALSE;
}
@@ -349,7 +349,7 @@ log_online_setup_bitmap_file_range(
bitmap_dir = os_file_opendir(srv_data_home, FALSE);
if (UNIV_UNLIKELY(!bitmap_dir)) {
- msg("InnoDB: Error: failed to open bitmap directory \'%s\'\n",
+ msg("InnoDB: Error: failed to open bitmap directory \'%s\'",
srv_data_home);
return FALSE;
}
@@ -380,7 +380,7 @@ log_online_setup_bitmap_file_range(
if (UNIV_UNLIKELY(array_pos >= bitmap_files->count)) {
msg("InnoDB: Error: inconsistent bitmap file "
- "directory\n");
+ "directory");
free(bitmap_files->files);
return FALSE;
}
@@ -400,7 +400,7 @@ log_online_setup_bitmap_file_range(
if (UNIV_UNLIKELY(os_file_closedir(bitmap_dir))) {
os_file_get_last_error(TRUE);
- msg("InnoDB: Error: cannot close \'%s\'\n", srv_data_home);
+ msg("InnoDB: Error: cannot close \'%s\'", srv_data_home);
free(bitmap_files->files);
return FALSE;
}
@@ -451,7 +451,7 @@ log_online_open_bitmap_file_read_only(
/* Here and below assume that bitmap file names do not
contain apostrophes, thus no need for ut_print_filename(). */
msg("InnoDB: Warning: error opening the changed page "
- "bitmap \'%s\'\n", bitmap_file->name);
+ "bitmap \'%s\'", bitmap_file->name);
return success;
}
@@ -495,7 +495,7 @@ log_online_diagnose_bitmap_eof(
itself. */
msg("InnoDB: Warning: junk at the end of changed "
- "page bitmap file \'%s\'.\n", bitmap_file->name);
+ "page bitmap file \'%s\'.", bitmap_file->name);
}
if (UNIV_UNLIKELY(!last_page_in_run)) {
@@ -506,7 +506,7 @@ log_online_diagnose_bitmap_eof(
for the whole server */
msg("InnoDB: Warning: changed page bitmap "
"file \'%s\' does not contain a complete run "
- "at the end.\n", bitmap_file->name);
+ "at the end.", bitmap_file->name);
return FALSE;
}
}
@@ -537,7 +537,7 @@ xb_msg_missing_lsn_data(
lsn_t missing_interval_end) /*!<in: interval end */
{
msg("mariabackup: warning: changed page data missing for LSNs between "
- LSN_PF " and " LSN_PF "\n", missing_interval_start,
+ LSN_PF " and " LSN_PF, missing_interval_start,
missing_interval_end);
}
@@ -615,7 +615,7 @@ xb_page_bitmap_init(void)
msg("mariabackup: incremental backup LSN " LSN_PF
" is larger than than the last checkpoint LSN " LSN_PF
- "\n", bmp_start_lsn, bmp_end_lsn);
+ , bmp_start_lsn, bmp_end_lsn);
return NULL;
}
@@ -699,7 +699,7 @@ xb_page_bitmap_init(void)
bmp_start_lsn))) {
msg("mariabackup: Warning: changed page bitmap file "
- "\'%s\' corrupted\n", bitmap_file.name);
+ "\'%s\' corrupted", bitmap_file.name);
rbt_free(result);
free(bitmap_files.files);
os_file_close(bitmap_file.file);
@@ -804,7 +804,7 @@ xb_page_bitmap_init(void)
if (UNIV_UNLIKELY(!last_page_ok)) {
msg("mariabackup: warning: changed page bitmap file "
- "\'%s\' corrupted.\n", bitmap_file.name);
+ "\'%s\' corrupted.", bitmap_file.name);
rbt_free(result);
free(bitmap_files.files);
os_file_close(bitmap_file.file);
diff --git a/extra/mariabackup/common.h b/extra/mariabackup/common.h
index fae466adc97..2426f090888 100644
--- a/extra/mariabackup/common.h
+++ b/extra/mariabackup/common.h
@@ -72,7 +72,7 @@ static inline int asprintf(char **strp, const char *fmt,...)
#define xb_a(expr) \
do { \
if (!(expr)) { \
- msg("Assertion \"%s\" failed at %s:%lu\n", \
+ fprintf(stderr,"Assertion \"%s\" failed at %s:%lu\n", \
#expr, __FILE__, (ulong) __LINE__); \
abort(); \
} \
@@ -86,42 +86,55 @@ static inline int asprintf(char **strp, const char *fmt,...)
#define XB_DELTA_INFO_SUFFIX ".meta"
-static inline int msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
-static inline int msg(const char *fmt, ...)
+static inline int msg1(uint thread_num, const char *prefix, const char *fmt, va_list args)
{
- int result;
- va_list args;
-
- va_start(args, fmt);
- result = vfprintf(stderr, fmt, args);
- va_end(args);
-
- return result;
+ int result;
+ time_t t = time(NULL);
+ char date[100];
+ char *line;
+ strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", localtime(&t));
+ result = vasprintf(&line, fmt, args);
+ if (result != -1) {
+ if (fmt && fmt[strlen(fmt)] != '\n')
+ result = fprintf(stderr, "[%02u] %s%s %s\n", thread_num, prefix, date, line);
+ else
+ result = fprintf(stderr, "[%02u] %s%s %s", thread_num, prefix, date, line);
+ free(line);
+ }
+ return result;
}
-static inline int msg_ts(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
-static inline int msg_ts(const char *fmt, ...)
+static inline ATTRIBUTE_FORMAT(printf, 2, 3) int msg(unsigned int thread_num, const char *fmt, ...)
{
- int result;
- time_t t = time(NULL);
- char date[100];
- char *line;
- va_list args;
-
- strftime(date, sizeof(date), "%y%m%d %H:%M:%S", localtime(&t));
-
- va_start(args, fmt);
- result = vasprintf(&line, fmt, args);
- va_end(args);
+ int result;
+ va_list args;
+ va_start(args, fmt);
+ result = msg1(thread_num,"", fmt, args);
+ va_end(args);
+ return result;
+}
- if (result != -1) {
- result = fprintf(stderr, "%s %s", date, line);
- free(line);
- }
+static inline ATTRIBUTE_FORMAT(printf, 1, 2) int msg(const char *fmt, ...)
+{
+ int result;
+ va_list args;
+ va_start(args, fmt);
+ result = msg1(0, "", fmt, args);
+ va_end(args);
+ return result;
+}
- return result;
+static inline ATTRIBUTE_FORMAT(printf, 1,2) ATTRIBUTE_NORETURN void die(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ msg1(0, "FATAL ERROR: ", fmt, args);
+ va_end(args);
+ fflush(stderr);
+ _exit(EXIT_FAILURE);
}
+
/* Use POSIX_FADV_NORMAL when available */
#ifdef POSIX_FADV_NORMAL
diff --git a/extra/mariabackup/datasink.c b/extra/mariabackup/datasink.cc
index f6d924f7e06..d0c51e2b571 100644
--- a/extra/mariabackup/datasink.c
+++ b/extra/mariabackup/datasink.cc
@@ -49,8 +49,7 @@ ds_create(const char *root, ds_type_t type)
#ifdef HAVE_LIBARCHIVE
ds = &datasink_archive;
#else
- msg("Error : mariabackup was built without libarchive support");
- exit(EXIT_FAILURE);
+ die("mariabackup was built without libarchive support");
#endif
break;
case DS_TYPE_XBSTREAM:
@@ -61,8 +60,7 @@ ds_create(const char *root, ds_type_t type)
break;
case DS_TYPE_ENCRYPT:
case DS_TYPE_DECRYPT:
- msg("Error : mariabackup does not support encrypted backups.");
- exit(EXIT_FAILURE);
+ die("mariabackup does not support encrypted backups.");
break;
case DS_TYPE_TMPFILE:
@@ -72,7 +70,7 @@ ds_create(const char *root, ds_type_t type)
ds = &datasink_buffer;
break;
default:
- msg("Unknown datasink type: %d\n", type);
+ msg("Unknown datasink type: %d", type);
xb_ad(0);
return NULL;
}
@@ -81,8 +79,7 @@ ds_create(const char *root, ds_type_t type)
if (ctxt != NULL) {
ctxt->datasink = ds;
} else {
- msg("Error: failed to initialize datasink.\n");
- exit(EXIT_FAILURE);
+ die("failed to initialize datasink.");
}
return ctxt;
diff --git a/extra/mariabackup/ds_archive.c b/extra/mariabackup/ds_archive.cc
index ae473bc3385..ae473bc3385 100644
--- a/extra/mariabackup/ds_archive.c
+++ b/extra/mariabackup/ds_archive.cc
diff --git a/extra/mariabackup/ds_buffer.c b/extra/mariabackup/ds_buffer.cc
index 186b897c675..687311976e8 100644
--- a/extra/mariabackup/ds_buffer.c
+++ b/extra/mariabackup/ds_buffer.cc
@@ -71,7 +71,7 @@ buffer_init(const char *root)
ds_ctxt_t *ctxt;
ds_buffer_ctxt_t *buffer_ctxt;
- ctxt = my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t),
+ ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_buffer_ctxt_t),
MYF(MY_FAE));
buffer_ctxt = (ds_buffer_ctxt_t *) (ctxt + 1);
buffer_ctxt->buffer_size = DS_DEFAULT_BUFFER_SIZE;
@@ -96,7 +96,7 @@ buffer_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
dst_file = ds_open(pipe_ctxt, path, mystat);
if (dst_file == NULL) {
- exit(EXIT_FAILURE);
+ die("ds_open(%s) failed", path);
}
buffer_ctxt = (ds_buffer_ctxt_t *) ctxt->ptr;
diff --git a/extra/mariabackup/ds_compress.c b/extra/mariabackup/ds_compress.cc
index d064068a7e2..7f4744ec972 100644
--- a/extra/mariabackup/ds_compress.c
+++ b/extra/mariabackup/ds_compress.cc
@@ -96,7 +96,7 @@ compress_init(const char *root)
/* Create and initialize the worker threads */
threads = create_worker_threads(xtrabackup_compress_threads);
if (threads == NULL) {
- msg("compress: failed to create worker threads.\n");
+ msg("compress: failed to create worker threads.");
return NULL;
}
@@ -244,7 +244,7 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
write_uint64_le(dest_file,
comp_file->bytes_processed)) {
msg("compress: write to the destination stream "
- "failed.\n");
+ "failed.");
return 1;
}
@@ -254,7 +254,7 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
ds_write(dest_file, threads[i].to,
threads[i].to_len)) {
msg("compress: write to the destination stream "
- "failed.\n");
+ "failed.");
return 1;
}
@@ -368,7 +368,7 @@ create_worker_threads(uint n)
if (pthread_create(&thd->id, NULL, compress_worker_thread_func,
thd)) {
msg("compress: pthread_create() failed: "
- "errno = %d\n", errno);
+ "errno = %d", errno);
goto err;
}
}
diff --git a/extra/mariabackup/ds_stdout.c b/extra/mariabackup/ds_stdout.cc
index a6555c17352..87c4bf1a99b 100644
--- a/extra/mariabackup/ds_stdout.c
+++ b/extra/mariabackup/ds_stdout.cc
@@ -49,7 +49,7 @@ stdout_init(const char *root)
{
ds_ctxt_t *ctxt;
- ctxt = my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
+ ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t), MYF(MY_FAE));
ctxt->root = my_strdup(root, MYF(MY_FAE));
diff --git a/extra/mariabackup/ds_tmpfile.c b/extra/mariabackup/ds_tmpfile.cc
index 0e5decc5a6e..9af470980e2 100644
--- a/extra/mariabackup/ds_tmpfile.c
+++ b/extra/mariabackup/ds_tmpfile.cc
@@ -61,7 +61,7 @@ tmpfile_init(const char *root)
ds_ctxt_t *ctxt;
ds_tmpfile_ctxt_t *tmpfile_ctxt;
- ctxt = my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t),
+ ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_tmpfile_ctxt_t),
MYF(MY_FAE));
tmpfile_ctxt = (ds_tmpfile_ctxt_t *) (ctxt + 1);
tmpfile_ctxt->file_list = NULL;
@@ -178,12 +178,11 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
/* Walk the files in the order they have been added */
list = list_reverse(list);
while (list != NULL) {
- tmp_file = list->data;
+ tmp_file = (ds_tmp_file_t *)list->data;
/* Stat the file to replace size and mtime on the original
* mystat struct */
if (my_fstat(tmp_file->fd, &mystat, MYF(0))) {
- msg("error: my_fstat() failed.\n");
- exit(EXIT_FAILURE);
+ die("my_fstat() failed.");
}
tmp_file->mystat.st_size = mystat.st_size;
tmp_file->mystat.st_mtime = mystat.st_mtime;
@@ -191,32 +190,29 @@ tmpfile_deinit(ds_ctxt_t *ctxt)
dst_file = ds_open(pipe_ctxt, tmp_file->orig_path,
&tmp_file->mystat);
if (dst_file == NULL) {
- msg("error: could not stream a temporary file to "
- "'%s'\n", tmp_file->orig_path);
- exit(EXIT_FAILURE);
+ die("could not stream a temporary file to "
+ "'%s'", tmp_file->orig_path);
}
/* copy to the destination datasink */
posix_fadvise(tmp_file->fd, 0, 0, POSIX_FADV_SEQUENTIAL);
if (my_seek(tmp_file->fd, 0, SEEK_SET, MYF(0)) ==
MY_FILEPOS_ERROR) {
- msg("error: my_seek() failed for '%s', errno = %d.\n",
+ die("my_seek() failed for '%s', errno = %d.",
tmp_file->file->path, my_errno);
- exit(EXIT_FAILURE);
}
offset = 0;
- while ((bytes = my_read(tmp_file->fd, buf, buf_size,
+ while ((bytes = my_read(tmp_file->fd, (unsigned char *)buf, buf_size,
MYF(MY_WME))) > 0) {
posix_fadvise(tmp_file->fd, offset, buf_size, POSIX_FADV_DONTNEED);
offset += buf_size;
if (ds_write(dst_file, buf, bytes)) {
- msg("error: cannot write to stream for '%s'.\n",
+ die("cannot write to stream for '%s'.",
tmp_file->orig_path);
- exit(EXIT_FAILURE);
}
}
if (bytes == (size_t) -1) {
- exit(EXIT_FAILURE);
+ die("my_read failed for %s", tmp_file->orig_path);
}
my_close(tmp_file->fd, MYF(MY_WME));
diff --git a/extra/mariabackup/ds_xbstream.c b/extra/mariabackup/ds_xbstream.cc
index 74ac27ac428..8f6c231404c 100644
--- a/extra/mariabackup/ds_xbstream.c
+++ b/extra/mariabackup/ds_xbstream.cc
@@ -79,18 +79,18 @@ xbstream_init(const char *root __attribute__((unused)))
ds_stream_ctxt_t *stream_ctxt;
xb_wstream_t *xbstream;
- ctxt = my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t),
+ ctxt = (ds_ctxt_t *)my_malloc(sizeof(ds_ctxt_t) + sizeof(ds_stream_ctxt_t),
MYF(MY_FAE));
stream_ctxt = (ds_stream_ctxt_t *)(ctxt + 1);
if (pthread_mutex_init(&stream_ctxt->mutex, NULL)) {
- msg("xbstream_init: pthread_mutex_init() failed.\n");
+ msg("xbstream_init: pthread_mutex_init() failed.");
goto err;
}
xbstream = xb_stream_write_new();
if (xbstream == NULL) {
- msg("xb_stream_write_new() failed.\n");
+ msg("xb_stream_write_new() failed.");
goto err;
}
stream_ctxt->xbstream = xbstream;
@@ -143,7 +143,7 @@ xbstream_open(ds_ctxt_t *ctxt, const char *path, MY_STAT *mystat)
my_xbstream_write_callback);
if (xbstream_file == NULL) {
- msg("xb_stream_write_open() failed.\n");
+ msg("xb_stream_write_open() failed.");
goto err;
}
@@ -177,7 +177,7 @@ xbstream_write(ds_file_t *file, const uchar *buf, size_t len)
xbstream_file = stream_file->xbstream_file;
if (xb_stream_write_data(xbstream_file, buf, len)) {
- msg("xb_stream_write_data() failed.\n");
+ msg("xb_stream_write_data() failed.");
return 1;
}
@@ -209,7 +209,7 @@ xbstream_deinit(ds_ctxt_t *ctxt)
stream_ctxt = (ds_stream_ctxt_t *) ctxt->ptr;
if (xb_stream_write_done(stream_ctxt->xbstream)) {
- msg("xb_stream_done() failed.\n");
+ msg("xb_stream_done() failed.");
}
if (stream_ctxt->dest_file) {
diff --git a/extra/mariabackup/encryption_plugin.cc b/extra/mariabackup/encryption_plugin.cc
index 6335cdf3cd7..505ae69af7b 100644
--- a/extra/mariabackup/encryption_plugin.cc
+++ b/extra/mariabackup/encryption_plugin.cc
@@ -61,8 +61,7 @@ static std::string get_encryption_plugin_from_cnf()
FILE *f = fopen("backup-my.cnf", "r");
if (!f)
{
- msg("cannot open backup-my.cnf for reading\n");
- exit(EXIT_FAILURE);
+ die("Can't open backup-my.cnf for reading");
}
char line[512];
std::string plugin_load;
@@ -183,7 +182,7 @@ void encryption_plugin_prepare_init(int argc, char **argv)
std::string plugin_load= get_encryption_plugin_from_cnf();
if (plugin_load.size())
{
- msg("Loading encryption plugin from %s\n", plugin_load.c_str());
+ msg("Loading encryption plugin from %s", plugin_load.c_str());
}
else
{
@@ -210,9 +209,9 @@ static void encryption_plugin_init(int argc, char **argv)
/* Patch optional and mandatory plugins, we only need to load the one in xb_plugin_load. */
mysql_optional_plugins[0] = mysql_mandatory_plugins[0] = 0;
plugin_maturity = MariaDB_PLUGIN_MATURITY_UNKNOWN; /* mariabackup accepts all plugins */
- msg("Loading encryption plugin\n");
+ msg("Loading encryption plugin");
for (int i= 1; i < argc; i++)
- msg("\t Encryption plugin parameter : '%s'\n", argv[i]);
+ msg("\t Encryption plugin parameter : '%s'", argv[i]);
plugin_init(&argc, argv, PLUGIN_INIT_SKIP_PLUGIN_TABLE);
}
diff --git a/extra/mariabackup/fil_cur.cc b/extra/mariabackup/fil_cur.cc
index 953b3aa0653..9e9fdb2e1f4 100644
--- a/extra/mariabackup/fil_cur.cc
+++ b/extra/mariabackup/fil_cur.cc
@@ -173,9 +173,8 @@ xb_fil_cur_open(
/* The following call prints an error message */
os_file_get_last_error(TRUE);
- msg("[%02u] mariabackup: error: cannot open "
- "tablespace %s\n",
- thread_n, cursor->abs_path);
+ msg(thread_n, "mariabackup: error: cannot open "
+ "tablespace %s", cursor->abs_path);
return(XB_FIL_CUR_SKIP);
}
@@ -216,8 +215,8 @@ xb_fil_cur_open(
cursor->statinfo.st_size = (ulonglong)max_file_size;
}
if (err) {
- msg("[%02u] mariabackup: error: cannot fstat %s\n",
- thread_n, cursor->abs_path);
+ msg(thread_n, "mariabackup: error: cannot fstat %s",
+ cursor->abs_path);
xb_fil_cur_close(cursor);
@@ -261,8 +260,6 @@ xb_fil_cur_open(
mutex_exit(&fil_system.mutex);
}
- /*msg("crypt: %s,%u\n", node->name, node->space->crypt_data->type);*/
-
cursor->space_size = (ulint)(cursor->statinfo.st_size
/ page_size.physical());
@@ -412,14 +409,8 @@ xb_fil_cur_read(
&& offset + to_read == cursor->statinfo.st_size) {
if (to_read < (ib_int64_t) page_size) {
- msg("[%02u] mariabackup: Warning: junk at the end of "
- "%s:\n", cursor->thread_n, cursor->abs_path);
- msg("[%02u] mariabackup: Warning: offset = %llu, "
- "to_read = %llu\n",
- cursor->thread_n,
- (unsigned long long) offset,
- (unsigned long long) to_read);
-
+ msg(cursor->thread_n, "Warning: junk at the end of "
+ "%s, offset = %llu, to_read = %llu",cursor->abs_path, (ulonglong) offset, (ulonglong) to_read);
return(XB_FIL_CUR_EOF);
}
@@ -463,20 +454,17 @@ read_retry:
retry_count--;
if (retry_count == 0) {
- msg("[%02u] mariabackup: "
+ msg(cursor->thread_n,
"Error: failed to read page after "
"10 retries. File %s seems to be "
- "corrupted.\n", cursor->thread_n,
- cursor->abs_path);
+ "corrupted.", cursor->abs_path);
ret = XB_FIL_CUR_ERROR;
buf_page_print(page, cursor->page_size);
break;
}
- msg("[%02u] mariabackup: "
- "Database page corruption detected at page "
- ULINTPF ", retrying...\n", cursor->thread_n,
+ msg(cursor->thread_n, "Database page corruption detected at page "
+ ULINTPF ", retrying...",
page_no);
-
os_thread_sleep(100000);
goto read_retry;
}
diff --git a/extra/mariabackup/innobackupex.cc b/extra/mariabackup/innobackupex.cc
index 3f74f25f5ba..ac2272bf9b0 100644
--- a/extra/mariabackup/innobackupex.cc
+++ b/extra/mariabackup/innobackupex.cc
@@ -738,7 +738,7 @@ ibx_get_one_option(int optid,
exit(0);
break;
case 'v':
- msg("innobackupex version %s %s (%s)\n",
+ printf("innobackupex version %s %s (%s)",
MYSQL_SERVER_VERSION,
SYSTEM_TYPE, MACHINE_TYPE);
exit(0);
diff --git a/extra/mariabackup/write_filt.cc b/extra/mariabackup/write_filt.cc
index 382a31f859f..63b11850bfb 100644
--- a/extra/mariabackup/write_filt.cc
+++ b/extra/mariabackup/write_filt.cc
@@ -80,9 +80,8 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
cp->delta_buf = (unsigned char *)os_mem_alloc_large(&cp->delta_buf_size);
if (!cp->delta_buf) {
- msg("[%02u] mariabackup: Error: "
- "cannot allocate %zu bytes\n",
- cursor->thread_n, (size_t) cp->delta_buf_size);
+ msg(cursor->thread_n,"Can't allocate %zu bytes",
+ (size_t) cp->delta_buf_size);
return (FALSE);
}
@@ -91,9 +90,9 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
XB_DELTA_INFO_SUFFIX);
const xb_delta_info_t info(cursor->page_size, cursor->space_id);
if (!xb_write_delta_metadata(meta_name, &info)) {
- msg("[%02u] mariabackup: Error: "
- "failed to write meta info for %s\n",
- cursor->thread_n, cursor->rel_path);
+ msg(cursor->thread_n,"Error: "
+ "failed to write meta info for %s",
+ cursor->rel_path);
return(FALSE);
}
diff --git a/extra/mariabackup/wsrep.cc b/extra/mariabackup/wsrep.cc
index c3ad1b53a21..6b57dd4e712 100644
--- a/extra/mariabackup/wsrep.cc
+++ b/extra/mariabackup/wsrep.cc
@@ -92,7 +92,7 @@ xb_write_galera_info(bool incremental_prepare)
fp = fopen(XB_GALERA_INFO_FILENAME, "w");
if (fp == NULL) {
- msg("mariabackup: error: "
+ die(
"could not create " XB_GALERA_INFO_FILENAME
", errno = %d\n",
errno);
@@ -106,11 +106,10 @@ xb_write_galera_info(bool incremental_prepare)
if (fprintf(fp, "%s:%lld", uuid_str, (long long) seqno) < 0) {
- msg("mariabackup: error: "
+ die(
"could not write to " XB_GALERA_INFO_FILENAME
", errno = %d\n",
- errno);
- exit(EXIT_FAILURE);
+ errno);;
}
fclose(fp);
diff --git a/extra/mariabackup/xbstream.c b/extra/mariabackup/xbstream.cc
index 03bd2fda646..04d2c51b5d1 100644
--- a/extra/mariabackup/xbstream.c
+++ b/extra/mariabackup/xbstream.cc
@@ -45,7 +45,6 @@ datasink_t datasink_archive;
datasink_t datasink_xbstream;
datasink_t datasink_compress;
datasink_t datasink_tmpfile;
-datasink_t datasink_buffer;
static run_mode_t opt_mode;
static char * opt_directory = NULL;
@@ -106,7 +105,7 @@ main(int argc, char **argv)
}
if (opt_mode == RUN_MODE_NONE) {
- msg("%s: either -c or -x must be specified.\n", my_progname);
+ msg("%s: either -c or -x must be specified.", my_progname);
goto err;
}
@@ -184,7 +183,7 @@ int
set_run_mode(run_mode_t mode)
{
if (opt_mode != RUN_MODE_NONE) {
- msg("%s: can't set specify both -c and -x.\n", my_progname);
+ msg("%s: can't set specify both -c and -x.", my_progname);
return 1;
}
@@ -233,7 +232,7 @@ stream_one_file(File file, xb_wstream_file_t *xbfile)
while ((bytes = (ssize_t)my_read(file, buf, XBSTREAM_BUFFER_SIZE,
MYF(MY_WME))) > 0) {
if (xb_stream_write_data(xbfile, buf, bytes)) {
- msg("%s: xb_stream_write_data() failed.\n",
+ msg("%s: xb_stream_write_data() failed.",
my_progname);
my_free(buf);
return 1;
@@ -262,13 +261,13 @@ mode_create(int argc, char **argv)
xb_wstream_t *stream;
if (argc < 1) {
- msg("%s: no files are specified.\n", my_progname);
+ msg("%s: no files are specified.", my_progname);
return 1;
}
stream = xb_stream_write_new();
if (stream == NULL) {
- msg("%s: xb_stream_write_new() failed.\n", my_progname);
+ msg("%s: xb_stream_write_new() failed.", my_progname);
return 1;
}
@@ -281,13 +280,13 @@ mode_create(int argc, char **argv)
goto err;
}
if (!MY_S_ISREG(mystat.st_mode)) {
- msg("%s: %s is not a regular file, exiting.\n",
+ msg("%s: %s is not a regular file, exiting.",
my_progname, filepath);
goto err;
}
if ((src_file = my_open(filepath, O_RDONLY, MYF(MY_WME))) < 0) {
- msg("%s: failed to open %s.\n", my_progname, filepath);
+ msg("%s: failed to open %s.", my_progname, filepath);
goto err;
}
@@ -297,7 +296,7 @@ mode_create(int argc, char **argv)
}
if (opt_verbose) {
- msg("%s\n", filepath);
+ msg("%s", filepath);
}
if (stream_one_file(src_file, file) ||
@@ -338,12 +337,12 @@ file_entry_new(extract_ctxt_t *ctxt, const char *path, uint pathlen)
file = ds_open(ctxt->ds_ctxt, path, NULL);
if (file == NULL) {
- msg("%s: failed to create file.\n", my_progname);
+ msg("%s: failed to create file.", my_progname);
goto err;
}
if (opt_verbose) {
- msg("%s\n", entry->path);
+ msg("%s", entry->path);
}
entry->file = file;
@@ -425,7 +424,7 @@ extract_worker_thread_func(void *arg)
break;
}
if (my_hash_insert(ctxt->filehash, (uchar *) entry)) {
- msg("%s: my_hash_insert() failed.\n",
+ msg("%s: my_hash_insert() failed.",
my_progname);
pthread_mutex_unlock(ctxt->mutex);
break;
@@ -454,7 +453,7 @@ extract_worker_thread_func(void *arg)
if (entry->offset != chunk.offset) {
msg("%s: out-of-order chunk: real offset = 0x%llx, "
- "expected offset = 0x%llx\n", my_progname,
+ "expected offset = 0x%llx", my_progname,
chunk.offset, entry->offset);
pthread_mutex_unlock(&entry->mutex);
res = XB_STREAM_READ_ERROR;
@@ -462,7 +461,7 @@ extract_worker_thread_func(void *arg)
}
if (ds_write(entry->file, chunk.data, chunk.length)) {
- msg("%s: my_write() failed.\n", my_progname);
+ msg("%s: my_write() failed.", my_progname);
pthread_mutex_unlock(&entry->mutex);
res = XB_STREAM_READ_ERROR;
break;
@@ -500,12 +499,12 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
if (my_hash_init(&filehash, &my_charset_bin, START_FILE_HASH_SIZE,
0, 0, (my_hash_get_key) get_file_entry_key,
(my_hash_free_key) file_entry_free, MYF(0))) {
- msg("%s: failed to initialize file hash.\n", my_progname);
+ msg("%s: failed to initialize file hash.", my_progname);
return 1;
}
if (pthread_mutex_init(&mutex, NULL)) {
- msg("%s: failed to initialize mutex.\n", my_progname);
+ msg("%s: failed to initialize mutex.", my_progname);
my_hash_free(&filehash);
return 1;
}
@@ -520,7 +519,7 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
stream = xb_stream_read_new();
if (stream == NULL) {
- msg("%s: xb_stream_read_new() failed.\n", my_progname);
+ msg("%s: xb_stream_read_new() failed.", my_progname);
pthread_mutex_destroy(&mutex);
ret = 1;
goto exit;
@@ -531,8 +530,8 @@ mode_extract(int n_threads, int argc __attribute__((unused)),
ctxt.ds_ctxt = ds_ctxt;
ctxt.mutex = &mutex;
- tids = calloc(n_threads, sizeof(pthread_t));
- retvals = calloc(n_threads, sizeof(void*));
+ tids = (pthread_t *)calloc(n_threads, sizeof(pthread_t));
+ retvals = (void **)calloc(n_threads, sizeof(void*));
for (i = 0; i < n_threads; i++)
pthread_create(tids + i, NULL, extract_worker_thread_func,
diff --git a/extra/mariabackup/xbstream.h b/extra/mariabackup/xbstream.h
index 08b017ca5ce..5ee909d0a8e 100644
--- a/extra/mariabackup/xbstream.h
+++ b/extra/mariabackup/xbstream.h
@@ -101,6 +101,6 @@ xb_rstream_result_t xb_stream_read_chunk(xb_rstream_t *stream,
int xb_stream_read_done(xb_rstream_t *stream);
-int xb_stream_validate_checksum(xb_rstream_chunk_t *chunk);
+xb_rstream_result_t xb_stream_validate_checksum(xb_rstream_chunk_t *chunk);
#endif
diff --git a/extra/mariabackup/xbstream_read.c b/extra/mariabackup/xbstream_read.cc
index 3e38cffddae..a2bcea1c7a5 100644
--- a/extra/mariabackup/xbstream_read.c
+++ b/extra/mariabackup/xbstream_read.cc
@@ -67,15 +67,15 @@ validate_chunk_type(uchar code)
}
}
-int
+xb_rstream_result_t
xb_stream_validate_checksum(xb_rstream_chunk_t *chunk)
{
ulong checksum;
- checksum = crc32_iso3309(0, chunk->data, (uint)chunk->length);
+ checksum = crc32_iso3309(0, (unsigned char *)chunk->data, (uint)chunk->length);
if (checksum != chunk->checksum) {
msg("xb_stream_read_chunk(): invalid checksum at offset "
- "0x%llx: expected 0x%lx, read 0x%lx.\n",
+ "0x%llx: expected 0x%lx, read 0x%lx.",
(ulonglong) chunk->checksum_offset, chunk->checksum,
checksum);
return XB_STREAM_READ_ERROR;
@@ -86,8 +86,8 @@ xb_stream_validate_checksum(xb_rstream_chunk_t *chunk)
#define F_READ(buf,len) \
do { \
- if (xb_read_full(fd, buf, len) < len) { \
- msg("xb_stream_read_chunk(): my_read() failed.\n"); \
+ if (xb_read_full(fd, (uchar *)buf, len) < len) { \
+ msg("xb_stream_read_chunk(): my_read() failed."); \
goto err; \
} \
} while (0)
@@ -111,7 +111,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
return XB_STREAM_READ_EOF;
} else if (tbytes < CHUNK_HEADER_CONSTANT_LEN) {
msg("xb_stream_read_chunk(): unexpected end of stream at "
- "offset 0x%llx.\n", stream->offset);
+ "offset 0x%llx.", stream->offset);
goto err;
}
@@ -120,7 +120,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
/* Chunk magic value */
if (memcmp(tmpbuf, XB_STREAM_CHUNK_MAGIC, 8)) {
msg("xb_stream_read_chunk(): wrong chunk magic at offset "
- "0x%llx.\n", (ulonglong) stream->offset);
+ "0x%llx.", (ulonglong) stream->offset);
goto err;
}
ptr += 8;
@@ -135,7 +135,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
if (chunk->type == XB_CHUNK_TYPE_UNKNOWN &&
!(chunk->flags & XB_STREAM_FLAG_IGNORABLE)) {
msg("xb_stream_read_chunk(): unknown chunk type 0x%lu at "
- "offset 0x%llx.\n", (ulong) *ptr,
+ "offset 0x%llx.", (ulong) *ptr,
(ulonglong) stream->offset);
goto err;
}
@@ -146,7 +146,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
pathlen = uint4korr(ptr);
if (pathlen >= FN_REFLEN) {
msg("xb_stream_read_chunk(): path length (%lu) is too large at "
- "offset 0x%llx.\n", (ulong) pathlen, stream->offset);
+ "offset 0x%llx.", (ulong) pathlen, stream->offset);
goto err;
}
chunk->pathlen = pathlen;
@@ -170,7 +170,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
ullval = uint8korr(tmpbuf);
if (ullval > (ulonglong) SIZE_T_MAX) {
msg("xb_stream_read_chunk(): chunk length is too large at "
- "offset 0x%llx: 0x%llx.\n", (ulonglong) stream->offset,
+ "offset 0x%llx: 0x%llx.", (ulonglong) stream->offset,
ullval);
goto err;
}
@@ -181,7 +181,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
ullval = uint8korr(tmpbuf + 8);
if (ullval > (ulonglong) MY_OFF_T_MAX) {
msg("xb_stream_read_chunk(): chunk offset is too large at "
- "offset 0x%llx: 0x%llx.\n", (ulonglong) stream->offset,
+ "offset 0x%llx: 0x%llx.", (ulonglong) stream->offset,
ullval);
goto err;
}
@@ -194,7 +194,7 @@ xb_stream_read_chunk(xb_rstream_t *stream, xb_rstream_chunk_t *chunk)
MYF(MY_WME | MY_ALLOW_ZERO_PTR));
if (chunk->data == NULL) {
msg("xb_stream_read_chunk(): failed to increase buffer "
- "to %lu bytes.\n", (ulong) chunk->length);
+ "to %lu bytes.", (ulong) chunk->length);
goto err;
}
chunk->buflen = chunk->length;
diff --git a/extra/mariabackup/xbstream_write.c b/extra/mariabackup/xbstream_write.cc
index 649bce28788..8c27db78c83 100644
--- a/extra/mariabackup/xbstream_write.c
+++ b/extra/mariabackup/xbstream_write.cc
@@ -55,7 +55,7 @@ xb_stream_default_write_callback(xb_wstream_file_t *file __attribute__((unused))
void *userdata __attribute__((unused)),
const void *buf, size_t len)
{
- if (my_write(my_fileno(stdout), buf, len, MYF(MY_WME | MY_NABP)))
+ if (my_write(my_fileno(stdout), (const uchar *)buf, len, MYF(MY_WME | MY_NABP)))
return -1;
return len;
}
@@ -83,7 +83,7 @@ xb_stream_write_open(xb_wstream_t *stream, const char *path,
path_len = strlen(path);
if (path_len > FN_REFLEN) {
- msg("xb_stream_write_open(): file path is too long.\n");
+ msg("xb_stream_write_open(): file path is too long.");
return NULL;
}
@@ -216,7 +216,7 @@ xb_stream_write_chunk(xb_wstream_file_t *file, const void *buf, size_t len)
int8store(ptr, len); /* Payload length */
ptr += 8;
- checksum = crc32_iso3309(0, buf, (uint)len); /* checksum */
+ checksum = crc32_iso3309(0, (const uchar *)buf, (uint)len); /* checksum */
pthread_mutex_lock(&stream->mutex);
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 0970e2df160..5e1fb20fbb7 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -185,7 +185,7 @@ xb_stream_fmt_t xtrabackup_stream_fmt = XB_STREAM_FMT_NONE;
ibool xtrabackup_stream = FALSE;
const char *xtrabackup_compress_alg = NULL;
-ibool xtrabackup_compress = FALSE;
+uint xtrabackup_compress = FALSE;
uint xtrabackup_compress_threads;
ulonglong xtrabackup_compress_chunk_size = 0;
@@ -530,13 +530,13 @@ static os_event_t dbug_start_query_thread(
if (exists) {
goto end;
}
- msg_ts("Waiting for query '%s' on connection %lu to "
+ msg("Waiting for query '%s' on connection %lu to "
" reach state '%s'", query, mysql_thread_id(par->con),
wait_state);
my_sleep(1000);
}
end:
- msg_ts("query '%s' on connection %lu reached state '%s'", query,
+ msg("query '%s' on connection %lu reached state '%s'", query,
mysql_thread_id(par->con), wait_state);
return par->done_event;
}
@@ -607,16 +607,16 @@ static void backup_file_op(ulint space_id, const byte* flags,
if (flags) {
ddl_tracker.id_to_name[space_id] = filename_to_spacename(name, len);
- msg("DDL tracking : create %zu \"%.*s\": %x\n",
+ msg("DDL tracking : create %zu \"%.*s\": %x",
space_id, int(len), name, mach_read_from_4(flags));
}
else if (new_name) {
ddl_tracker.id_to_name[space_id] = filename_to_spacename(new_name, new_len);
- msg("DDL tracking : rename %zu \"%.*s\",\"%.*s\"\n",
+ msg("DDL tracking : rename %zu \"%.*s\",\"%.*s\"",
space_id, int(len), name, int(new_len), new_name);
} else {
ddl_tracker.drops.insert(space_id);
- msg("DDL tracking : delete %zu \"%.*s\"\n", space_id, int(len), name);
+ msg("DDL tracking : delete %zu \"%.*s\"", space_id, int(len), name);
}
pthread_mutex_unlock(&backup_mutex);
}
@@ -638,13 +638,13 @@ static void backup_file_op_fail(ulint space_id, const byte* flags,
ut_a(opt_no_lock);
bool fail;
if (flags) {
- msg("DDL tracking : create %zu \"%.*s\": %x\n",
+ msg("DDL tracking : create %zu \"%.*s\": %x",
space_id, int(len), name, mach_read_from_4(flags));
std::string spacename = filename_to_spacename(name, len);
fail = !check_if_skip_table(spacename.c_str());
}
else if (new_name) {
- msg("DDL tracking : rename %zu \"%.*s\",\"%.*s\"\n",
+ msg("DDL tracking : rename %zu \"%.*s\",\"%.*s\"",
space_id, int(len), name, int(new_len), new_name);
std::string spacename = filename_to_spacename(name, len);
std::string new_spacename = filename_to_spacename(new_name, new_len);
@@ -653,13 +653,11 @@ static void backup_file_op_fail(ulint space_id, const byte* flags,
else {
std::string spacename = filename_to_spacename(name, len);
fail = !check_if_skip_table(spacename.c_str());
- msg("DDL tracking : delete %zu \"%.*s\"\n", space_id, int(len), name);
+ msg("DDL tracking : delete %zu \"%.*s\"", space_id, int(len), name);
}
if (fail) {
- msg("ERROR : DDL operation detected in the late phase of backup."
- "Backup is inconsistent. Remove --no-lock option to fix.\n");
- log_mutex_exit();
- exit(EXIT_FAILURE);
+ die("DDL operation detected in the late phase of backup."
+ "Backup is inconsistent. Remove --no-lock option to fix.");
}
}
@@ -679,10 +677,10 @@ static void backup_optimized_ddl_op(ulint space_id)
*/
static void backup_optimized_ddl_op_fail(ulint space_id) {
ut_a(opt_no_lock);
- msg("DDL tracking : optimized DDL on space %zu\n", space_id);
+ msg("DDL tracking : optimized DDL on space %zu", space_id);
if (ddl_tracker.tables_in_backup.find(space_id) != ddl_tracker.tables_in_backup.end()) {
msg("ERROR : Optimized DDL operation detected in the late phase of backup."
- "Backup is inconsistent. Remove --no-lock option to fix.\n");
+ "Backup is inconsistent. Remove --no-lock option to fix.");
exit(EXIT_FAILURE);
}
}
@@ -691,7 +689,7 @@ static void backup_optimized_ddl_op_fail(ulint space_id) {
/** Callback whenever MLOG_TRUNCATE happens. */
static void backup_truncate_fail()
{
- msg("mariabackup: Incompatible TRUNCATE operation detected.%s\n",
+ msg("mariabackup: Incompatible TRUNCATE operation detected.%s",
opt_lock_ddl_per_table
? ""
: " Use --lock-ddl-per-table to lock all tables before backup.");
@@ -1451,14 +1449,13 @@ debug_sync_point(const char *name)
xtrabackup_target_dir);
fp = fopen(pid_path, "w");
if (fp == NULL) {
- msg("mariabackup: Error: cannot open %s\n", pid_path);
- exit(EXIT_FAILURE);
+ die("Can't open open %s", pid_path);
}
fprintf(fp, "%u\n", (uint) pid);
fclose(fp);
msg("mariabackup: DEBUG: Suspending at debug sync point '%s'. "
- "Resume with 'kill -SIGCONT %u'.\n", name, (uint) pid);
+ "Resume with 'kill -SIGCONT %u'.", name, (uint) pid);
debug_sync_resumed= 0;
kill(pid, SIGSTOP);
@@ -1467,7 +1464,7 @@ debug_sync_point(const char *name)
}
/* On resume */
- msg("mariabackup: DEBUG: removing the pid file.\n");
+ msg("mariabackup: DEBUG: removing the pid file.");
my_delete(pid_path, MYF(MY_WME));
#endif
}
@@ -1587,7 +1584,7 @@ static const char *xb_server_default_groups[]=
static void print_version(void)
{
- msg("%s based on MariaDB server %s %s (%s) \n",
+ msg("%s based on MariaDB server %s %s (%s)",
my_progname, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
}
@@ -1712,7 +1709,7 @@ xb_get_one_option(int optid,
xtrabackup_stream_fmt = XB_STREAM_FMT_XBSTREAM;
else
{
- msg("Invalid --stream argument: %s\n", argument);
+ msg("Invalid --stream argument: %s", argument);
return 1;
}
xtrabackup_stream = TRUE;
@@ -1722,7 +1719,7 @@ xb_get_one_option(int optid,
xtrabackup_compress_alg = "quicklz";
else if (strcasecmp(argument, "quicklz"))
{
- msg("Invalid --compress argument: %s\n", argument);
+ msg("Invalid --compress argument: %s", argument);
return 1;
}
xtrabackup_compress = TRUE;
@@ -1787,8 +1784,10 @@ static bool innodb_init_param()
/* === some variables from mysqld === */
memset((G_PTR) &mysql_tmpdir_list, 0, sizeof(mysql_tmpdir_list));
- if (init_tmpdir(&mysql_tmpdir_list, opt_mysql_tmpdir))
+ if (init_tmpdir(&mysql_tmpdir_list, opt_mysql_tmpdir)) {
+ msg("init_tmpdir() failed");
return true;
+ }
xtrabackup_tmpdir = my_tmpdir(&mysql_tmpdir_list);
/* dummy for initialize all_charsets[] */
get_charset_name(0);
@@ -1806,9 +1805,9 @@ static bool innodb_init_param()
srv_page_size_shift = ulong(n_shift);
srv_page_size = 1U << n_shift;
msg("InnoDB: The universal page size of the "
- "database is set to %lu.\n", srv_page_size);
+ "database is set to %lu.", srv_page_size);
} else {
- msg("InnoDB: Error: invalid value of "
+ msg("invalid value of "
"innobase_page_size: %lld", innobase_page_size);
goto error;
}
@@ -1821,12 +1820,12 @@ static bool innodb_init_param()
if (sizeof(ulint) == 4) {
if (xtrabackup_use_memory > UINT_MAX32) {
msg("mariabackup: use-memory can't be over 4GB"
- " on 32-bit systems\n");
+ " on 32-bit systems");
}
if (innobase_buffer_pool_size > UINT_MAX32) {
msg("mariabackup: innobase_buffer_pool_size can't be "
- "over 4GB on 32-bit systems\n");
+ "over 4GB on 32-bit systems");
goto error;
}
@@ -1839,10 +1838,10 @@ static bool innodb_init_param()
read from MySQL .cnf file */
if (xtrabackup_backup) {
- msg("mariabackup: using the following InnoDB configuration:\n");
+ msg("mariabackup: using the following InnoDB configuration:");
} else {
msg("mariabackup: using the following InnoDB configuration "
- "for recovery:\n");
+ "for recovery:");
}
/*--------------- Data files -------------------------*/
@@ -1851,7 +1850,7 @@ static bool innodb_init_param()
srv_data_home = (xtrabackup_backup && innobase_data_home_dir
? innobase_data_home_dir : default_path);
- msg("mariabackup: innodb_data_home_dir = %s\n", srv_data_home);
+ msg("innodb_data_home_dir = %s", srv_data_home);
/* Set default InnoDB data file size to 10 MB and let it be
auto-extending. Thus users can use InnoDB in >= 4.0 without having
@@ -1860,7 +1859,7 @@ static bool innodb_init_param()
if (!innobase_data_file_path) {
innobase_data_file_path = (char*) "ibdata1:10M:autoextend";
}
- msg("mariabackup: innodb_data_file_path = %s\n",
+ msg("innodb_data_file_path = %s",
innobase_data_file_path);
/* This is the first time univ_page_size is used.
@@ -1890,13 +1889,12 @@ static bool innodb_init_param()
if (xtrabackup_prepare && xtrabackup_incremental_dir) {
srv_log_group_home_dir = xtrabackup_incremental_dir;
}
- msg("mariabackup: innodb_log_group_home_dir = %s\n",
+ msg("innodb_log_group_home_dir = %s",
srv_log_group_home_dir);
os_normalize_path(srv_log_group_home_dir);
if (strchr(srv_log_group_home_dir, ';')) {
-
msg("syntax error in innodb_log_group_home_dir, ");
goto error;
}
@@ -1944,8 +1942,7 @@ static bool innodb_init_param()
#elif defined(LINUX_NATIVE_AIO)
if (srv_use_native_aio) {
- ut_print_timestamp(stderr);
- msg(" InnoDB: Using Linux native AIO\n");
+ msg("InnoDB: Using Linux native AIO");
}
#else
/* Currently native AIO is supported only on windows and linux
@@ -1990,7 +1987,7 @@ static bool innodb_init()
}
if (err != DB_SUCCESS) {
- msg("mariabackup: innodb_init() returned %d (%s).\n",
+ msg("mariabackup: innodb_init() returned %d (%s).",
err, ut_strerr(err));
innodb_shutdown();
return(TRUE);
@@ -2014,7 +2011,7 @@ xtrabackup_read_metadata(char *filename)
fp = fopen(filename,"r");
if(!fp) {
- msg("mariabackup: Error: cannot open %s\n", filename);
+ msg("Error: cannot open %s", filename);
return(FALSE);
}
@@ -2093,8 +2090,7 @@ xtrabackup_stream_metadata(ds_ctxt_t *ds_ctxt)
stream = ds_open(ds_ctxt, XTRABACKUP_METADATA_FILENAME, &mystat);
if (stream == NULL) {
- msg("mariabackup: Error: cannot open output stream "
- "for %s\n", XTRABACKUP_METADATA_FILENAME);
+ msg("Error: cannot open output stream for %s", XTRABACKUP_METADATA_FILENAME);
return(FALSE);
}
@@ -2126,7 +2122,7 @@ xtrabackup_write_metadata(const char *filepath)
fp = fopen(filepath, "w");
if(!fp) {
- msg("mariabackup: Error: cannot open %s\n", filepath);
+ msg("Error: cannot open %s", filepath);
return(FALSE);
}
if (fwrite(buf, len, 1, fp) < 1) {
@@ -2175,7 +2171,7 @@ xb_read_delta_metadata(const char *filepath, xb_delta_info_t *info)
fclose(fp);
if (page_size == ULINT_UNDEFINED) {
- msg("mariabackup: page_size is required in %s\n", filepath);
+ msg("page_size is required in %s", filepath);
r = FALSE;
} else {
info->page_size = page_size_t(zip_size ? zip_size : page_size,
@@ -2185,7 +2181,7 @@ xb_read_delta_metadata(const char *filepath, xb_delta_info_t *info)
if (info->space_id == ULINT_UNDEFINED) {
msg("mariabackup: Warning: This backup was taken with XtraBackup 2.0.1 "
"or earlier, some DDL operations between full and incremental "
- "backups may be handled incorrectly\n");
+ "backups may be handled incorrectly");
}
return(r);
@@ -2218,8 +2214,7 @@ xb_write_delta_metadata(const char *filename, const xb_delta_info_t *info)
f = ds_open(ds_meta, filename, &mystat);
if (f == NULL) {
- msg("mariabackup: Error: cannot open output stream for %s\n",
- filename);
+ msg("Error: Can't open output stream for %s",filename);
return(FALSE);
}
@@ -2527,7 +2522,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if (fil_is_user_tablespace_id(node->space->id)
&& check_if_skip_table(node_name)) {
- msg("[%02u] Skipping %s.\n", thread_n, node_name);
+ msg(thread_n, "Skipping %s.", node_name);
return(FALSE);
}
@@ -2573,26 +2568,22 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
if (write_filter->init != NULL &&
!write_filter->init(&write_filt_ctxt, dst_name, &cursor)) {
- msg("[%02u] mariabackup: error: "
- "failed to initialize page write filter.\n", thread_n);
+ msg (thread_n, "mariabackup: error: failed to initialize page write filter.");
goto error;
}
dstfile = ds_open(ds_data, dst_name, &cursor.statinfo);
if (dstfile == NULL) {
- msg("[%02u] mariabackup: error: "
- "cannot open the destination stream for %s\n",
- thread_n, dst_name);
+ msg(thread_n,"mariabackup: error: can't open the destination stream for %s", dst_name);
goto error;
}
action = xb_get_copy_action();
if (xtrabackup_stream) {
- msg_ts("[%02u] %s %s\n", thread_n, action, node_path);
+ msg(thread_n, "%s %s", action, node_path);
} else {
- msg_ts("[%02u] %s %s to %s\n", thread_n, action,
- node_path, dstfile->path);
+ msg(thread_n, "%s %s to %s", action, node_path, dstfile->path);
}
/* The main copy loop */
@@ -2616,7 +2607,7 @@ xtrabackup_copy_datafile(fil_node_t* node, uint thread_n, const char *dest_name=
pthread_mutex_unlock(&backup_mutex);
/* close */
- msg_ts("[%02u] ...done\n", thread_n);
+ msg(thread_n," ...done");
xb_fil_cur_close(&cursor);
if (ds_close(dstfile)) {
rc = TRUE;
@@ -2634,8 +2625,7 @@ error:
if (write_filter && write_filter->deinit) {
write_filter->deinit(&write_filt_ctxt);;
}
- msg("[%02u] mariabackup: Error: "
- "xtrabackup_copy_datafile() failed.\n", thread_n);
+ msg(thread_n, "mariabackup: xtrabackup_copy_datafile() failed.");
return(TRUE); /*ERROR*/
skip:
@@ -2646,11 +2636,7 @@ skip:
if (write_filter && write_filter->deinit) {
write_filter->deinit(&write_filt_ctxt);
}
- msg("[%02u] mariabackup: Warning: We assume the "
- "table was dropped during xtrabackup execution "
- "and ignore the file.\n", thread_n);
- msg("[%02u] mariabackup: Warning: skipping tablespace %s.\n",
- thread_n, node_name);
+ msg(thread_n,"Warning: We assume the table was dropped during xtrabackup execution and ignore the tablespace %s", node_name);
return(FALSE);
}
@@ -2675,9 +2661,8 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
&& scanned_checkpoint - checkpoint >= 0x80000000UL) {
/* Garbage from a log buffer flush which was made
before the most recent database recovery */
- msg("mariabackup: checkpoint wrap: "
- LSN_PF ",%zx,%zx\n",
- scanned_lsn, scanned_checkpoint, checkpoint);
+ msg(0,"checkpoint wrap: " LSN_PF ",%zx,%zx",
+ scanned_lsn, scanned_checkpoint, checkpoint);
break;
}
@@ -2698,8 +2683,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
>= OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE
|| data_len <= LOG_BLOCK_HDR_SIZE) {
/* We got a garbage block (abrupt end of the log). */
- msg("mariabackup: garbage block: " LSN_PF ",%zu\n",
- scanned_lsn, data_len);
+ msg(0,"garbage block: " LSN_PF ",%zu",scanned_lsn, data_len);
break;
} else {
/* We got a partial block (abrupt end of the log). */
@@ -2710,7 +2694,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
if (more_data && recv_parse_log_recs(0, STORE_NO, false)) {
- msg("mariabackup: copying the log failed \n");
+ msg("Error: copying the log failed");
return(0);
}
@@ -2729,8 +2713,7 @@ static lsn_t xtrabackup_copy_log(lsn_t start_lsn, lsn_t end_lsn, bool last)
}
if (ds_write(dst_log_file, log_sys.buf, write_size)) {
- msg("mariabackup: Error: "
- "write to logfile failed\n");
+ msg("Error: write to logfile failed");
return(0);
}
}
@@ -2766,7 +2749,7 @@ static bool xtrabackup_copy_logfile(bool last = false)
|| lsn != start_lsn) {
break;
}
- msg("Retrying read of log at LSN=" LSN_PF "\n", lsn);
+ msg("Retrying read of log at LSN=" LSN_PF, lsn);
my_sleep(1000);
}
@@ -2776,15 +2759,13 @@ static bool xtrabackup_copy_logfile(bool last = false)
log_mutex_exit();
if (!start_lsn) {
- msg("mariabackup: Error: xtrabackup_copy_logfile()"
- " failed.\n");
- exit(EXIT_FAILURE);
+ die("xtrabackup_copy_logfile() failed.");
}
} while (start_lsn == end_lsn);
ut_ad(start_lsn == log_sys.log.scanned_lsn);
- msg_ts(">> log scanned up to (" LSN_PF ")\n", start_lsn);
+ msg(">> log scanned up to (" LSN_PF ")", start_lsn);
/* update global variable*/
pthread_mutex_lock(&backup_mutex);
@@ -2893,7 +2874,7 @@ static void dbug_mariabackup_event(const char *event,const char *key)
}
char *sql = getenv(envvar);
if (sql) {
- msg("dbug_mariabackup_event : executing '%s'\n", sql);
+ msg("dbug_mariabackup_event : executing '%s'", sql);
xb_mysql_query(mysql_connection, sql, false, true);
}
@@ -2924,15 +2905,10 @@ DECLARE_THREAD(data_copy_thread_func)(
debug_sync_point("data_copy_thread_func");
while ((node = datafiles_iter_next(ctxt->it)) != NULL) {
-
DBUG_MARIABACKUP_EVENT("before_copy", node->space->name);
-
-
/* copy the datafile */
if(xtrabackup_copy_datafile(node, num)) {
- msg("[%02u] mariabackup: Error: "
- "failed to copy datafile.\n", num);
- exit(EXIT_FAILURE);
+ die("failed to copy datafile.");
}
DBUG_MARIABACKUP_EVENT("after_copy", node->space->name);
@@ -3108,9 +3084,7 @@ xb_load_single_table_tablespace(
Datafile *file = xb_new_datafile(name, is_remote);
if (file->open_read_only(true) != DB_SUCCESS) {
- msg("Can't open datafile %s\n", name);
- ut_free(name);
- exit(EXIT_FAILURE);
+ die("Can't open datafile %s", name);
}
err = file->validate_first_page(&flush_lsn);
@@ -3148,7 +3122,7 @@ xb_load_single_table_tablespace(
if (err != DB_SUCCESS && err != DB_CORRUPTION && xtrabackup_backup) {
/* allow corrupted first page for xtrabackup, it could be just
zero-filled page, which we restore from redo log later */
- exit(EXIT_FAILURE);
+ die("Failed to not validate first page of the file %s, error %d",name, (int)err);
}
}
@@ -3311,7 +3285,7 @@ static dberr_t xb_assign_undo_space_start()
OS_FILE_OPEN, OS_FILE_NORMAL, OS_DATA_FILE, true, &ret);
if (!ret) {
- msg("mariabackup: Error in opening %s\n", srv_sys_space.first_datafile()->filepath());
+ msg("Error opening %s", srv_sys_space.first_datafile()->filepath());
return DB_ERROR;
}
@@ -3322,7 +3296,7 @@ retry:
if (!os_file_read(IORequestRead, file, page,
TRX_SYS_PAGE_NO << srv_page_size_shift,
srv_page_size)) {
- msg("mariabackup: Reading TRX_SYS page failed.\n");
+ msg("Reading TRX_SYS page failed.\n");
error = DB_ERROR;
goto func_exit;
}
@@ -3380,8 +3354,7 @@ xb_load_tablespaces()
/* create_new_db must not be true. */
if (err != DB_SUCCESS || create_new_db) {
- msg("mariabackup: could not find data files at the "
- "specified datadir\n");
+ msg("Could not find data files at the specified datadir");
return(DB_ERROR);
}
@@ -3396,7 +3369,7 @@ xb_load_tablespaces()
}
if (err != DB_SUCCESS) {
- msg("mariabackup: Could not open data files.\n");
+ msg("Could not open data files.\n");
return(err);
}
@@ -3418,7 +3391,7 @@ xb_load_tablespaces()
srv_undo_tablespaces_init(), because fil_is_user_tablespace_id() *
relies on srv_undo_tablespaces_open to be properly initialized */
- msg("mariabackup: Generating a list of tablespaces\n");
+ msg("mariabackup: Generating a list of tablespaces");
err = enumerate_ibd_files(xb_load_single_table_tablespace);
if (err != DB_SUCCESS) {
@@ -3521,13 +3494,11 @@ xb_validate_name(
/* perform only basic validation. validate length and
path symbols */
if (len > NAME_LEN) {
- msg("mariabackup: name `%s` is too long.\n", name);
- exit(EXIT_FAILURE);
+ die("name `%s` is too long.", name);
}
p = strpbrk(name, "/\\~");
if (p && (uint) (p - name) < NAME_LEN) {
- msg("mariabackup: name `%s` is not valid.\n", name);
- exit(EXIT_FAILURE);
+ die("name `%s` is not valid.", name);
}
}
@@ -3605,8 +3576,7 @@ xb_register_table(
const char* name) /*!< in: name of table */
{
if (strchr(name, '.') == NULL) {
- msg("mariabackup: `%s` is not fully qualified name.\n", name);
- exit(EXIT_FAILURE);
+ die("`%s` is not fully qualified name.", name);
}
xb_register_include_filter_entry(name);
@@ -3627,7 +3597,7 @@ xb_add_regex_to_list(
if (ret != 0) {
regerror(ret, &compiled_regex, errbuf, sizeof(errbuf));
- msg("mariabackup: error: %s regcomp(%s): %s\n",
+ msg("mariabackup: error: %s regcomp(%s): %s",
error_context, regex, errbuf);
exit(EXIT_FAILURE);
}
@@ -3696,17 +3666,15 @@ xb_load_list_file(
/* read and store the filenames */
fp = fopen(filename, "r");
if (!fp) {
- msg("mariabackup: cannot open %s\n",
+ die("Can't open %s",
filename);
- exit(EXIT_FAILURE);
}
while (fgets(name_buf, sizeof(name_buf), fp) != NULL) {
char* p = strchr(name_buf, '\n');
if (p) {
*p = '\0';
} else {
- msg("mariabackup: `%s...` name is too long", name_buf);
- exit(EXIT_FAILURE);
+ die("`%s...` name is too long", name_buf);
}
ins(name_buf);
@@ -3946,10 +3914,10 @@ static bool xtrabackup_backup_low()
metadata_to_lsn = mach_read_from_8(
log_sys.checkpoint_buf + LOG_CHECKPOINT_LSN);
msg("mariabackup: The latest check point"
- " (for incremental): '" LSN_PF "'\n",
+ " (for incremental): '" LSN_PF "'",
metadata_to_lsn);
} else {
- msg("mariabackup: Error: recv_find_max_checkpoint() failed.\n");
+ msg("Error: recv_find_max_checkpoint() failed.");
}
log_mutex_exit();
}
@@ -3979,7 +3947,7 @@ static bool xtrabackup_backup_low()
metadata_last_lsn = log_copy_scanned_lsn;
if (!xtrabackup_stream_metadata(ds_meta)) {
- msg("mariabackup: Error: failed to stream metadata.\n");
+ msg("Error: failed to stream metadata.");
return false;
}
if (xtrabackup_extra_lsndir) {
@@ -3988,15 +3956,15 @@ static bool xtrabackup_backup_low()
sprintf(filename, "%s/%s", xtrabackup_extra_lsndir,
XTRABACKUP_METADATA_FILENAME);
if (!xtrabackup_write_metadata(filename)) {
- msg("mariabackup: Error: failed to write metadata "
- "to '%s'.\n", filename);
+ msg("Error: failed to write metadata "
+ "to '%s'.", filename);
return false;
}
sprintf(filename, "%s/%s", xtrabackup_extra_lsndir,
XTRABACKUP_INFO);
if (!write_xtrabackup_info(mysql_connection, filename, false)) {
- msg("mariabackup: Error: failed to write info "
- "to '%s'.\n", filename);
+ msg("Error: failed to write info "
+ "to '%s'.", filename);
return false;
}
}
@@ -4019,19 +3987,19 @@ xtrabackup_backup_func()
pthread_cond_init(&scanned_lsn_cond, NULL);
#ifdef USE_POSIX_FADVISE
- msg("mariabackup: uses posix_fadvise().\n");
+ msg("uses posix_fadvise().");
#endif
/* cd to datadir */
if (my_setwd(mysql_real_data_home,MYF(MY_WME)))
{
- msg("mariabackup: cannot my_setwd %s\n", mysql_real_data_home);
+ msg("my_setwd() failed , %s", mysql_real_data_home);
return(false);
}
- msg("mariabackup: cd to %s\n", mysql_real_data_home);
+ msg("cd to %s", mysql_real_data_home);
encryption_plugin_backup_init(mysql_connection);
- msg("mariabackup: open files limit requested %u, set to %u\n",
+ msg("open files limit requested %u, set to %u",
(uint) xb_open_files_limit,
xb_set_max_open_files(xb_open_files_limit));
@@ -4046,12 +4014,6 @@ xtrabackup_backup_func()
log_file_op = backup_file_op;
metadata_to_lsn = 0;
- if (xb_close_files)
- msg("mariabackup: warning: close-files specified. Use it "
- "at your own risk. If there are DDL operations like table DROP TABLE "
- "or RENAME TABLE during the backup, inconsistent backup will be "
- "produced.\n");
-
/* initialize components */
if(innodb_init_param()) {
fail:
@@ -4122,7 +4084,7 @@ fail:
if (xtrabackup_extra_lsndir
&&!my_stat(xtrabackup_extra_lsndir,&stat_info,MYF(0))
&& (my_mkdir(xtrabackup_extra_lsndir,0777,MYF(0)) < 0)) {
- msg("mariabackup: Error: cannot mkdir %d: %s\n",
+ msg("Error: cannot mkdir %d: %s\n",
my_errno, xtrabackup_extra_lsndir);
goto fail;
}
@@ -4130,7 +4092,7 @@ fail:
/* create target dir if not exist */
if (!xtrabackup_stream_str && !my_stat(xtrabackup_target_dir,&stat_info,MYF(0))
&& (my_mkdir(xtrabackup_target_dir,0777,MYF(0)) < 0)){
- msg("mariabackup: Error: cannot mkdir %d: %s\n",
+ msg("Error: cannot mkdir %d: %s\n",
my_errno, xtrabackup_target_dir);
goto fail;
}
@@ -4157,8 +4119,8 @@ log_fail:
if (log_sys.log.format == 0) {
old_format:
- msg("mariabackup: Error: cannot process redo log"
- " before MariaDB 10.2.2\n");
+ msg("Error: cannot process redo log"
+ " before MariaDB 10.2.2");
log_mutex_exit();
goto log_fail;
}
@@ -4197,8 +4159,8 @@ reread_log_header:
memset(&stat_info, 0, sizeof(MY_STAT));
dst_log_file = ds_open(ds_redo, "ib_logfile0", &stat_info);
if (dst_log_file == NULL) {
- msg("mariabackup: error: failed to open the target stream for "
- "'ib_logfile0'.\n");
+ msg("§rror: failed to open the target stream for "
+ "'ib_logfile0'.");
goto fail;
}
@@ -4216,7 +4178,7 @@ reread_log_header:
/* Write the log header. */
if (ds_write(dst_log_file, log_hdr, sizeof log_hdr)) {
log_write_fail:
- msg("mariabackup: error: write to logfile failed\n");
+ msg("error: write to logfile failed");
goto fail;
}
/* Adjust the checkpoint page. */
@@ -4251,8 +4213,8 @@ reread_log_header:
/* Populate fil_system with tablespaces to copy */
err = xb_load_tablespaces();
if (err != DB_SUCCESS) {
- msg("mariabackup: error: xb_load_tablespaces() failed with"
- " error %s.\n", ut_strerr(err));
+ msg("merror: xb_load_tablespaces() failed with"
+ " error %s.", ut_strerr(err));
fail_before_log_copying_thread_start:
log_copying_running = false;
goto fail;
@@ -4281,7 +4243,7 @@ fail_before_log_copying_thread_start:
if (xtrabackup_parallel > 1) {
msg("mariabackup: Starting %u threads for parallel data "
- "files transfer\n", xtrabackup_parallel);
+ "files transfer", xtrabackup_parallel);
}
if (opt_lock_ddl_per_table) {
@@ -4295,7 +4257,7 @@ fail_before_log_copying_thread_start:
datafiles_iter_t *it = datafiles_iter_new();
if (it == NULL) {
- msg("mariabackup: Error: datafiles_iter_new() failed.\n");
+ msg("mariabackup: Error: datafiles_iter_new() failed.");
goto fail;
}
@@ -4356,16 +4318,16 @@ fail_before_log_copying_thread_start:
}
xtrabackup_destroy_datasinks();
- msg("mariabackup: Redo log (from LSN " LSN_PF " to " LSN_PF
- ") was copied.\n", checkpoint_lsn_start, log_copy_scanned_lsn);
+ msg("Redo log (from LSN " LSN_PF " to " LSN_PF
+ ") was copied.", checkpoint_lsn_start, log_copy_scanned_lsn);
xb_filters_free();
xb_data_files_close();
/* Make sure that the latest checkpoint was included */
if (metadata_to_lsn > log_copy_scanned_lsn) {
- msg("mariabackup: error: failed to copy enough redo log ("
- "LSN=" LSN_PF "; checkpoint LSN=" LSN_PF ").\n",
+ msg("Error: failed to copy enough redo log ("
+ "LSN=" LSN_PF "; checkpoint LSN=" LSN_PF ").",
log_copy_scanned_lsn, metadata_to_lsn);
goto fail;
}
@@ -4522,7 +4484,7 @@ void backup_fix_ddl(void)
const char *dbname = buf;
char *p = strchr(buf, '/');
if (p == 0) {
- msg("Unexpected tablespace %s filename %s\n", space_name, name.c_str());
+ msg("Unexpected tablespace %s filename %s", space_name, name.c_str());
ut_a(0);
}
ut_a(p);
@@ -4541,16 +4503,6 @@ void backup_fix_ddl(void)
continue;
std::string dest_name(node->space->name);
dest_name.append(".new");
-#if 0
- bool do_full_copy = ddl_tracker.optimized_ddl.find(n->space->id) != ddl_tracker.optimized_ddl.end();
- if (do_full_copy) {
- msg(
- "Performing a full copy of the tablespace %s, because optimized (without redo logging) DDL operation"
- "ran during backup. You can use set innodb_log_optimize_ddl=OFF to improve backup performance"
- "in the future.\n",
- n->space->name);
- }
-#endif
xtrabackup_copy_datafile(node, 0, dest_name.c_str()/*, do_full_copy ? ULONGLONG_MAX:UNIV_PAGE_SIZE */);
}
@@ -4605,7 +4557,7 @@ xb_space_create_file(
*file = os_file_create_simple_no_error_handling(
0, path, OS_FILE_CREATE, OS_FILE_READ_WRITE, false, &ret);
if (!ret) {
- msg("mariabackup: cannot create file %s\n", path);
+ msg("Can't create file %s", path);
return ret;
}
@@ -4613,7 +4565,7 @@ xb_space_create_file(
FIL_IBD_FILE_INITIAL_SIZE
<< srv_page_size_shift);
if (!ret) {
- msg("mariabackup: cannot set size for file %s\n", path);
+ msg("mariabackup: cannot set size for file %s", path);
os_file_close(*file);
os_file_delete(0, path);
return ret;
@@ -4657,7 +4609,7 @@ xb_space_create_file(
free(buf);
if (!ret) {
- msg("mariabackup: could not write the first page to %s\n",
+ msg("mariabackup: could not write the first page to %s",
path);
os_file_close(*file);
os_file_delete(0, path);
@@ -4728,7 +4680,7 @@ xb_delta_open_matching_space(
/* Create the database directory if it doesn't exist yet */
if (!os_file_create_directory(dest_dir, FALSE)) {
- msg("mariabackup: error: cannot create dir %s\n", dest_dir);
+ msg("mariabackup: error: cannot create dir %s", dest_dir);
return file;
}
@@ -4775,12 +4727,12 @@ exit:
snprintf(tmpname, FN_REFLEN, "%s/xtrabackup_tmp_#" ULINTPF,
dbname, fil_space->id);
- msg("mariabackup: Renaming %s to %s.ibd\n",
+ msg("mariabackup: Renaming %s to %s.ibd",
fil_space->name, tmpname);
if (fil_space->rename(tmpname, NULL, false)
!= DB_SUCCESS) {
- msg("mariabackup: Cannot rename %s to %s\n",
+ msg("mariabackup: Cannot rename %s to %s",
fil_space->name, tmpname);
goto exit;
}
@@ -4789,9 +4741,8 @@ exit:
if (info.space_id == ULINT_UNDEFINED)
{
- msg("mariabackup: Error: Cannot handle DDL operation on tablespace "
+ die("Can't handle DDL operation on tablespace "
"%s\n", dest_space_name);
- exit(EXIT_FAILURE);
}
mutex_enter(&fil_system.mutex);
fil_space = fil_space_get_by_id(info.space_id);
@@ -4801,12 +4752,12 @@ exit:
strncpy(tmpname, dest_space_name, FN_REFLEN);
- msg("mariabackup: Renaming %s to %s\n",
+ msg("mariabackup: Renaming %s to %s",
fil_space->name, dest_space_name);
if (fil_space->rename(tmpname, NULL, false) != DB_SUCCESS)
{
- msg("mariabackup: Cannot rename %s to %s\n",
+ msg("mariabackup: Cannot rename %s to %s",
fil_space->name, dest_space_name);
goto exit;
}
@@ -4834,8 +4785,7 @@ exit:
*success = xb_space_create_file(real_name, info.space_id,
flags, &file);
} else {
- msg("mariabackup: Cannot create tablespace %s\n",
- dest_space_name);
+ msg("Can't create tablespace %s\n", dest_space_name);
}
goto exit;
@@ -4905,12 +4855,12 @@ xtrabackup_apply_delta(
page_size = info.page_size.physical();
page_size_shift = get_bit_shift(page_size);
- msg("mariabackup: page size for %s is %zu bytes\n",
+ msg("page size for %s is %zu bytes",
src_path, page_size);
if (page_size_shift < 10 ||
page_size_shift > UNIV_PAGE_SIZE_SHIFT_MAX) {
- msg("mariabackup: error: invalid value of page_size "
- "(%zu bytes) read from %s\n", page_size, meta_path);
+ msg("error: invalid value of page_size "
+ "(%zu bytes) read from %s", page_size, meta_path);
goto error;
}
@@ -4919,7 +4869,7 @@ xtrabackup_apply_delta(
OS_FILE_OPEN, OS_FILE_READ_WRITE, false, &success);
if (!success) {
os_file_get_last_error(TRUE);
- msg("mariabackup: error: cannot open %s\n", src_path);
+ msg("error: can't open %s", src_path);
goto error;
}
@@ -4929,7 +4879,7 @@ xtrabackup_apply_delta(
dbname, space_name, info,
dst_path, sizeof(dst_path), &success);
if (!success) {
- msg("mariabackup: error: cannot open %s\n", dst_path);
+ msg("error: can't open %s", dst_path);
goto error;
}
@@ -4942,7 +4892,7 @@ xtrabackup_apply_delta(
(ut_align(incremental_buffer_base,
page_size));
- msg("Applying %s to %s...\n", src_path, dst_path);
+ msg("Applying %s to %s...", src_path, dst_path);
while (!last_buffer) {
ulint cluster_header;
@@ -4965,8 +4915,8 @@ xtrabackup_apply_delta(
last_buffer = TRUE;
break;
default:
- msg("mariabackup: error: %s seems not "
- ".delta file.\n", src_path);
+ msg("error: %s seems not "
+ ".delta file.", src_path);
goto error;
}
@@ -5064,7 +5014,7 @@ error:
os_file_close(src_file);
if (dst_file != OS_FILE_CLOSED)
os_file_close(dst_file);
- msg("mariabackup: Error: xtrabackup_apply_delta(): "
+ msg("Error: xtrabackup_apply_delta(): "
"failed to apply %s to %s.\n", src_path, dst_path);
return FALSE;
}
@@ -5082,8 +5032,7 @@ std::string change_extension(std::string filename, std::string new_ext) {
static void rename_file(const char *from,const char *to) {
msg("Renaming %s to %s\n", from, to);
if (my_rename(from, to, MY_WME)) {
- msg("Cannot rename %s to %s errno %d", from, to, errno);
- exit(EXIT_FAILURE);
+ die("Can't rename %s to %s errno %d", from, to, errno);
}
}
@@ -5104,7 +5053,7 @@ typedef ibool (*handle_datadir_entry_func_t)(
/** Rename, and replace destination file, if exists */
static void rename_force(const char *from, const char *to) {
if (access(to, R_OK) == 0) {
- msg("Removing %s\n", to);
+ msg("Removing %s", to);
if (my_delete(to, MYF(MY_WME))) {
msg("Can't remove %s, errno %d", to, errno);
exit(EXIT_FAILURE);
@@ -5224,16 +5173,14 @@ next_file_item_1:
os_file_closedir(dbdir);
} else {
- msg("mariabackup: Cannot open dir %s\n",
- path);
+ msg("Can't open dir %s", path);
}
/* single table tablespaces */
dir = os_file_opendir(path, FALSE);
if (dir == NULL) {
- msg("mariabackup: Cannot open dir %s\n",
- path);
+ msg("Can't open dir %s", path);
}
ret = fil_file_readdir_next_file(&err, path, dir,
@@ -5329,7 +5276,7 @@ store_binlog_info(const char* filename, const char* name, ulonglong pos)
FILE *fp = fopen(filename, "w");
if (!fp) {
- msg("mariabackup: failed to open '%s'\n", filename);
+ msg("mariabackup: failed to open '%s'", filename);
return(false);
}
@@ -5350,7 +5297,7 @@ static std::string read_file_as_string(const std::string file) {
char content[FN_REFLEN];
FILE *f = fopen(file.c_str(), "r");
if (!f) {
- msg("Can not open %s\n", file.c_str());
+ msg("Can not open %s", file.c_str());
}
size_t len = fread(content, 1, FN_REFLEN, f);
fclose(f);
@@ -5362,8 +5309,7 @@ static void delete_file(const std::string& file, bool if_exists = false) {
if (if_exists && !file_exists(file))
return;
if (my_delete(file.c_str(), MYF(MY_WME))) {
- msg("Can't remove %s, errno %d", file.c_str(), errno);
- exit(EXIT_FAILURE);
+ die("Can't remove %s, errno %d", file.c_str(), errno);
}
}
@@ -5447,11 +5393,10 @@ xtrabackup_prepare_func(char** argv)
if (my_setwd(xtrabackup_real_target_dir,MYF(MY_WME)))
{
- msg("mariabackup: cannot my_setwd %s\n",
- xtrabackup_real_target_dir);
+ msg("can't my_setwd %s", xtrabackup_real_target_dir);
return(false);
}
- msg("mariabackup: cd to %s\n", xtrabackup_real_target_dir);
+ msg("cd to %s", xtrabackup_real_target_dir);
fil_path_to_mysql_datadir = ".";
@@ -5487,32 +5432,31 @@ xtrabackup_prepare_func(char** argv)
XTRABACKUP_METADATA_FILENAME);
if (!xtrabackup_read_metadata(metadata_path)) {
- msg("mariabackup: Error: failed to read metadata from '%s'\n",
+ msg("Error: failed to read metadata from '%s'\n",
metadata_path);
return(false);
}
if (!strcmp(metadata_type, "full-backuped")) {
if (xtrabackup_incremental) {
- msg("mariabackup: error: applying incremental backup "
- "needs a prepared target.\n");
+ msg("error: applying incremental backup "
+ "needs a prepared target.");
return(false);
}
- msg("mariabackup: This target seems to be not prepared yet.\n");
+ msg("This target seems to be not prepared yet.");
} else if (!strcmp(metadata_type, "log-applied")) {
- msg("mariabackup: This target seems to be already prepared.\n");
+ msg("This target seems to be already prepared.");
} else {
- msg("mariabackup: This target does not have correct metadata.\n");
+ msg("This target does not have correct metadata.");
return(false);
}
bool ok = !xtrabackup_incremental
|| metadata_to_lsn == incremental_lsn;
if (!ok) {
- msg("mariabackup: error: This incremental backup seems "
- "not to be proper for the target.\n"
- "mariabackup: Check 'to_lsn' of the target and "
- "'from_lsn' of the incremental.\n");
+ msg("error: This incremental backup seems "
+ "not to be proper for the target. Check 'to_lsn' of the target and "
+ "'from_lsn' of the incremental.");
return(false);
}
@@ -5588,9 +5532,10 @@ xtrabackup_prepare_func(char** argv)
srv_n_write_io_threads = 4;
}
- msg("mariabackup: Starting InnoDB instance for recovery.\n"
- "mariabackup: Using %lld bytes for buffer pool "
- "(set by --use-memory parameter)\n", xtrabackup_use_memory);
+ msg("Starting InnoDB instance for recovery.");
+
+ msg("mariabackup: Using %lld bytes for buffer pool "
+ "(set by --use-memory parameter)", xtrabackup_use_memory);
srv_max_buf_pool_modified_pct = (double)max_buf_pool_modified_pct;
@@ -5603,7 +5548,7 @@ xtrabackup_prepare_func(char** argv)
}
if (ok) {
- msg("Last binlog file %s, position %lld\n",
+ msg("Last binlog file %s, position %lld",
trx_sys.recovered_binlog_filename,
longlong(trx_sys.recovered_binlog_offset));
@@ -5627,7 +5572,7 @@ xtrabackup_prepare_func(char** argv)
&& srv_start_lsn < target_lsn) {
msg("mariabackup: error: "
"The log was only applied up to LSN " LSN_PF
- ", instead of " LSN_PF "\n",
+ ", instead of " LSN_PF,
srv_start_lsn, target_lsn);
ok = false;
}
@@ -5655,13 +5600,13 @@ xtrabackup_prepare_func(char** argv)
if (!xtrabackup_write_metadata(filename)) {
msg("mariabackup: Error: failed to write metadata "
- "to '%s'\n", filename);
+ "to '%s'", filename);
ok = false;
} else if (xtrabackup_extra_lsndir) {
sprintf(filename, "%s/%s", xtrabackup_extra_lsndir, XTRABACKUP_METADATA_FILENAME);
if (!xtrabackup_write_metadata(filename)) {
msg("mariabackup: Error: failed to write "
- "metadata to '%s'\n", filename);
+ "metadata to '%s'", filename);
ok = false;
}
}
@@ -5734,7 +5679,7 @@ has_privilege(const std::list<std::string> &granted,
required, db_name, table_name);
if (written < 0 || written == sizeof(buffer)
|| regcomp(&priv_re, buffer, REG_EXTENDED)) {
- exit(EXIT_FAILURE);
+ die("regcomp() failed for '%s'", buffer);
}
typedef std::list<std::string>::const_iterator string_iter;
@@ -5776,7 +5721,7 @@ int check_privilege(
{
if (!has_privilege(granted_priv,
required, target_database, target_table)) {
- msg("%s: missing required privilege %s on %s.%s\n",
+ msg("%s: missing required privilege %s on %s.%s",
(error == PRIVILEGE_ERROR ? "Error" : "Warning"),
required, target_database, target_table);
return error;
@@ -5848,7 +5793,7 @@ check_all_privileges()
if (check_result & PRIVILEGE_ERROR) {
mysql_close(mysql_connection);
- exit(EXIT_FAILURE);
+ die("Insufficient privileges");
}
}
@@ -5865,7 +5810,7 @@ xb_init()
&& !opt_safe_slave_backup) {
msg("Error: --slave-info is used with --no-lock but "
"without --safe-slave-backup. The binlog position "
- "cannot be consistent with the backup data.\n");
+ "cannot be consistent with the backup data.");
return(false);
}
@@ -6087,21 +6032,13 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
char *optend = strcend((argv)[i], '=');
if (optend - argv[i] == 15 &&
- !strncmp(argv[i], "--defaults-file", optend - argv[i])) {
-
- msg("mariabackup: Error: --defaults-file "
- "must be specified first on the command "
- "line\n");
- exit(EXIT_FAILURE);
+ !strncmp(argv[i], "--defaults-file", optend - argv[i])) {
+ die("--defaults-file must be specified first on the command line");
}
- if (optend - argv[i] == 21 &&
- !strncmp(argv[i], "--defaults-extra-file",
- optend - argv[i])) {
-
- msg("mariabackup: Error: --defaults-extra-file "
- "must be specified first on the command "
- "line\n");
- exit(EXIT_FAILURE);
+ if (optend - argv[i] == 21 &&
+ !strncmp(argv[i], "--defaults-extra-file",
+ optend - argv[i])) {
+ die("--defaults-extra-file must be specified first on the command line");
}
}
@@ -6148,7 +6085,7 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
if (!server_option) {
msg("mariabackup: Error:"
- " unknown argument: '%s'\n", opt);
+ " unknown argument: '%s'", opt);
exit(EXIT_FAILURE);
}
}
@@ -6204,7 +6141,7 @@ int main(int argc, char **argv)
if (mysql_server_init(-1, NULL, NULL))
{
- exit(EXIT_FAILURE);
+ die("mysql_server_init() failed");
}
system_charset_info = &my_charset_utf8_general_ci;
@@ -6248,7 +6185,7 @@ int main(int argc, char **argv)
mysql_mutex_destroy(&LOCK_error_log);
if (status == EXIT_SUCCESS) {
- msg_ts("completed OK!\n");
+ msg("completed OK!");
}
return status;
@@ -6266,7 +6203,7 @@ static int main_low(char** argv)
&& !strcmp(mysql_data_home, "./")) {
if (!xtrabackup_print_param)
usage();
- msg("\nmariabackup: Error: Please set parameter 'datadir'\n");
+ msg("mariabackup: Error: Please set parameter 'datadir'");
return(EXIT_FAILURE);
}
@@ -6337,7 +6274,7 @@ static int main_low(char** argv)
if (error) {
msg("mariabackup: value '%s' may be wrong format for "
- "incremental option.\n", xtrabackup_incremental);
+ "incremental option.", xtrabackup_incremental);
return(EXIT_FAILURE);
}
} else if (xtrabackup_backup && xtrabackup_incremental_basedir) {
@@ -6347,7 +6284,7 @@ static int main_low(char** argv)
if (!xtrabackup_read_metadata(filename)) {
msg("mariabackup: error: failed to read metadata from "
- "%s\n", filename);
+ "%s", filename);
return(EXIT_FAILURE);
}
@@ -6360,7 +6297,7 @@ static int main_low(char** argv)
if (!xtrabackup_read_metadata(filename)) {
msg("mariabackup: error: failed to read metadata from "
- "%s\n", filename);
+ "%s", filename);
return(EXIT_FAILURE);
}
@@ -6378,7 +6315,7 @@ static int main_low(char** argv)
}
if (xtrabackup_stream && !xtrabackup_backup) {
- msg("Warning: --stream parameter is ignored, it only works together with --backup.\n");
+ msg("Warning: --stream parameter is ignored, it only works together with --backup.");
}
if (!xb_init()) {
@@ -6393,13 +6330,13 @@ static int main_low(char** argv)
print_version();
if (xtrabackup_incremental) {
- msg("incremental backup from " LSN_PF " is enabled.\n",
+ msg("incremental backup from " LSN_PF " is enabled.",
incremental_lsn);
}
if (xtrabackup_export && innobase_file_per_table == FALSE) {
msg("mariabackup: auto-enabling --innodb-file-per-table due to "
- "the --export option\n");
+ "the --export option");
innobase_file_per_table = TRUE;
}
diff --git a/extra/mariabackup/xtrabackup.h b/extra/mariabackup/xtrabackup.h
index c16e19d1b18..8e0e09f6f07 100644
--- a/extra/mariabackup/xtrabackup.h
+++ b/extra/mariabackup/xtrabackup.h
@@ -71,7 +71,7 @@ extern char *xtrabackup_databases_file;
extern char *xtrabackup_tables_exclude;
extern char *xtrabackup_databases_exclude;
-extern ibool xtrabackup_compress;
+extern uint xtrabackup_compress;
extern my_bool xtrabackup_backup;
extern my_bool xtrabackup_prepare;
@@ -86,14 +86,10 @@ extern int xtrabackup_parallel;
extern my_bool xb_close_files;
extern const char *xtrabackup_compress_alg;
-#ifdef __cplusplus
-extern "C"{
-#endif
- extern uint xtrabackup_compress_threads;
- extern ulonglong xtrabackup_compress_chunk_size;
-#ifdef __cplusplus
-}
-#endif
+
+extern uint xtrabackup_compress_threads;
+extern ulonglong xtrabackup_compress_chunk_size;
+
extern my_bool xtrabackup_export;
extern char *xtrabackup_extra_lsndir;
extern ulint xtrabackup_log_copy_interval;
diff --git a/mysql-test/main/subselect_exists2in.result b/mysql-test/main/subselect_exists2in.result
index 95fc1c19b82..36ca0bf82f2 100644
--- a/mysql-test/main/subselect_exists2in.result
+++ b/mysql-test/main/subselect_exists2in.result
@@ -330,7 +330,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 2 100.00 Using where
Warnings:
Note 1276 Field or reference 'test.t2.b' of SELECT #3 was resolved in SELECT #2
-Note 1003 /* select#1 */ select (/* select#2 */ select 1 from dual where !(1 is not null and <in_optimizer>(1,1 in ( <materialize> (/* select#3 */ select `test`.`t3`.`c` from `test`.`t3` where `test`.`t3`.`c` is not null ), <primary_index_lookup>(1 in <temporary table> on distinct_key where 1 = `<subquery3>`.`c`))))) AS `( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )` from `test`.`t1`
+Note 1003 /* select#1 */ select (/* select#2 */ select 1 from dual where !(1 is not null and <in_optimizer>(1,1 in (<primary_index_lookup>(1 in <temporary table> on distinct_key where 1 = `<subquery3>`.`c`))))) AS `( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )` from `test`.`t1`
SELECT ( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) ) FROM t1;
( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )
1
@@ -344,7 +344,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 2 100.00 Using where
Warnings:
Note 1276 Field or reference 'test.t2.b' of SELECT #3 was resolved in SELECT #2
-Note 1003 /* select#1 */ select (/* select#2 */ select 1 from dual where !(1 is not null and <in_optimizer>(1,1 in ( <materialize> (/* select#3 */ select `test`.`t3`.`c` from `test`.`t3` where `test`.`t3`.`c` is not null ), <primary_index_lookup>(1 in <temporary table> on distinct_key where 1 = `<subquery3>`.`c`))))) AS `( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )` from `test`.`t1`
+Note 1003 /* select#1 */ select (/* select#2 */ select 1 from dual where !(1 is not null and <in_optimizer>(1,1 in (<primary_index_lookup>(1 in <temporary table> on distinct_key where 1 = `<subquery3>`.`c`))))) AS `( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )` from `test`.`t1`
SELECT ( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) ) FROM t1;
( SELECT b FROM t2 WHERE NOT EXISTS ( SELECT c FROM t3 WHERE c = b ) )
1
diff --git a/mysql-test/main/union.result b/mysql-test/main/union.result
index a41148f2600..da99d65dec3 100644
--- a/mysql-test/main/union.result
+++ b/mysql-test/main/union.result
@@ -2150,6 +2150,44 @@ select @advertAcctId as a from dual union all select 1.0 from dual;
a
1000003.0
1.0
+#
+# MDEV-13784: query causes seg fault
+#
+CREATE TABLE t1 (`bug_id` int NOT NULL PRIMARY KEY, `product_id` int NOT NULL);
+INSERT INTO t1 VALUES (45199,1184);
+CREATE TABLE t2 (`product_id` int NOT NULL,`userid` int NOT NULL, PRIMARY KEY (`product_id`,`userid`));
+INSERT INTO t2 VALUES (1184,103),(1184,624),(1184,1577),(1184,1582);
+CREATE TABLE t3 (`id` int NOT NULL PRIMARY KEY,`name` varchar(64));
+CREATE TABLE t4 ( `userid` int NOT NULL PRIMARY KEY, `login_name` varchar(255));
+INSERT INTO t4 VALUES (103,'foo'),(624,'foo'),(1577,'foo'),(1582,'foo');
+CREATE TABLE t5 (`id` int NOT NULL PRIMARY KEY, `name` varchar(64));
+explain select
+(
+select login_name from t4 where userId = (
+select userid from t2 where product_id = t1.product_id
+union
+select userid from t2 where product_id = (
+select id from t5 where name = (select name from t3 where id = t1.product_id)) limit 1 )
+) as x from t1 where (t1.bug_id=45199);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 system PRIMARY NULL NULL NULL 1
+2 SUBQUERY t4 eq_ref PRIMARY PRIMARY 4 func 1 Using where
+3 SUBQUERY t2 ref PRIMARY PRIMARY 4 const 3 Using index
+4 UNION t2 ref PRIMARY PRIMARY 4 func 1 Using where; Using index
+5 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+6 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+NULL UNION RESULT <union3,4> ALL NULL NULL NULL NULL NULL
+select
+(
+select login_name from t4 where userId = (
+select userid from t2 where product_id = t1.product_id
+union
+select userid from t2 where product_id = (
+select id from t5 where name = (select name from t3 where id = t1.product_id)) limit 1 )
+) as x from t1 where (t1.bug_id=45199);
+x
+foo
+drop table t1, t2, t3, t4, t5;
End of 5.5 tests
#
# WL#1763 Avoid creating temporary table in UNION ALL
diff --git a/mysql-test/main/union.test b/mysql-test/main/union.test
index 878d7118ef5..e7543ba4a81 100644
--- a/mysql-test/main/union.test
+++ b/mysql-test/main/union.test
@@ -1485,6 +1485,41 @@ eval SET NAMES $old_charset;
SET @advertAcctId = 1000003;
select @advertAcctId as a from dual union all select 1.0 from dual;
+--echo #
+--echo # MDEV-13784: query causes seg fault
+--echo #
+
+CREATE TABLE t1 (`bug_id` int NOT NULL PRIMARY KEY, `product_id` int NOT NULL);
+INSERT INTO t1 VALUES (45199,1184);
+
+CREATE TABLE t2 (`product_id` int NOT NULL,`userid` int NOT NULL, PRIMARY KEY (`product_id`,`userid`));
+INSERT INTO t2 VALUES (1184,103),(1184,624),(1184,1577),(1184,1582);
+
+CREATE TABLE t3 (`id` int NOT NULL PRIMARY KEY,`name` varchar(64));
+
+
+CREATE TABLE t4 ( `userid` int NOT NULL PRIMARY KEY, `login_name` varchar(255));
+INSERT INTO t4 VALUES (103,'foo'),(624,'foo'),(1577,'foo'),(1582,'foo');
+CREATE TABLE t5 (`id` int NOT NULL PRIMARY KEY, `name` varchar(64));
+
+explain select
+(
+ select login_name from t4 where userId = (
+ select userid from t2 where product_id = t1.product_id
+ union
+ select userid from t2 where product_id = (
+ select id from t5 where name = (select name from t3 where id = t1.product_id)) limit 1 )
+) as x from t1 where (t1.bug_id=45199);
+select
+(
+ select login_name from t4 where userId = (
+ select userid from t2 where product_id = t1.product_id
+ union
+ select userid from t2 where product_id = (
+ select id from t5 where name = (select name from t3 where id = t1.product_id)) limit 1 )
+) as x from t1 where (t1.bug_id=45199);
+drop table t1, t2, t3, t4, t5;
+
--echo End of 5.5 tests
--echo #
diff --git a/mysql-test/main/view.result b/mysql-test/main/view.result
index 2bc82f90e46..d97517d5ce7 100644
--- a/mysql-test/main/view.result
+++ b/mysql-test/main/view.result
@@ -4613,7 +4613,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DEPENDENT SUBQUERY t4 ALL NULL NULL NULL NULL 2 100.00 Using where
Warnings:
Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
-Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or <cache>(NULL is null)) having trigcond(NULL is null))))
+Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or 1) having trigcond(NULL is null))))
SELECT * FROM t1, t2
WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
WHERE t4.a >= t1.a);
@@ -4629,7 +4629,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
2 DEPENDENT SUBQUERY t4 ALL NULL NULL NULL NULL 2 100.00 Using where
Warnings:
Note 1276 Field or reference 'v1.a' of SELECT #2 was resolved in SELECT #1
-Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or <cache>(NULL is null)) having trigcond(NULL is null))))
+Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,10 AS `a` from `test`.`t1` where !<expr_cache><10,`test`.`t1`.`a`>(<in_optimizer>(10,<exists>(/* select#2 */ select NULL from `test`.`t4` where `test`.`t4`.`a` >= `test`.`t1`.`a` and trigcond(<cache>(10) = NULL or 1) having trigcond(NULL is null))))
SELECT * FROM v1, t2
WHERE t2.a NOT IN (SELECT t3.b FROM t3 RIGHT JOIN t4 ON (t4.a = t3.a)
WHERE t4.a >= v1.a);
diff --git a/mysql-test/suite/encryption/r/innodb-encryption-alter.result b/mysql-test/suite/encryption/r/innodb-encryption-alter.result
index 1d5b88bc750..995360a5744 100644
--- a/mysql-test/suite/encryption/r/innodb-encryption-alter.result
+++ b/mysql-test/suite/encryption/r/innodb-encryption-alter.result
@@ -77,7 +77,6 @@ t2 CREATE TABLE `t2` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
-DROP TABLE t2;
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
ERROR HY000: Can't create table `test`.`t3` (errno: 140 "Wrong create options")
SHOW WARNINGS;
@@ -85,3 +84,30 @@ Level Code Message
Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1
Error 1005 Can't create table `test`.`t3` (errno: 140 "Wrong create options")
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
+FLUSH TABLES;
+create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes;
+insert into t1 values(1, 2), (2, 3), (4, 5), (5, 6), (7, 8);
+insert into t1 select * from t1;
+BEGIN;
+INSERT INTO t2 VALUES (1);
+connect con1, localhost, root;
+SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL done WAIT_FOR ever';
+alter table t1 force;
+connection default;
+SET DEBUG_SYNC = 'now WAIT_FOR done';
+SET GLOBAL innodb_flush_log_at_trx_commit=1;
+COMMIT;
+disconnect con1;
+select * from t1;
+f1 f2
+1 2
+2 3
+4 5
+5 6
+7 8
+1 2
+2 3
+4 5
+5 6
+7 8
+drop table t1,t2;
diff --git a/mysql-test/suite/encryption/t/innodb-encryption-alter.test b/mysql-test/suite/encryption/t/innodb-encryption-alter.test
index e8391d97d6c..a6a4dbaff9b 100644
--- a/mysql-test/suite/encryption/t/innodb-encryption-alter.test
+++ b/mysql-test/suite/encryption/t/innodb-encryption-alter.test
@@ -1,13 +1,12 @@
-- source include/have_innodb.inc
+-- source include/have_debug.inc
+-- source include/have_debug_sync.inc
-- source include/have_file_key_management_plugin.inc
#
# MDEV-8817: Failing assertion: new_state->key_version != ENCRYPTION_KEY_VERSION_INVALID
#
-let $encrypt_tables = `SELECT @@innodb_encrypt_tables`;
-let $threads = `SELECT @@innodb_encryption_threads`;
-
SET GLOBAL innodb_encrypt_tables = ON;
SET GLOBAL innodb_encryption_threads = 4;
@@ -99,14 +98,35 @@ ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY;
--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/
SHOW WARNINGS;
SHOW CREATE TABLE t2;
-DROP TABLE t2;
--error ER_CANT_CREATE_TABLE
CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4;
SHOW WARNINGS;
-# reset system
---disable_query_log
-EVAL SET GLOBAL innodb_encrypt_tables = $encrypt_tables;
-EVAL SET GLOBAL innodb_encryption_threads = $threads;
---enable_query_log
+FLUSH TABLES;
+
+create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes;
+insert into t1 values(1, 2), (2, 3), (4, 5), (5, 6), (7, 8);
+insert into t1 select * from t1;
+BEGIN;
+INSERT INTO t2 VALUES (1);
+
+connect con1, localhost, root;
+SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL done WAIT_FOR ever';
+send alter table t1 force;
+
+connection default;
+SET DEBUG_SYNC = 'now WAIT_FOR done';
+SET GLOBAL innodb_flush_log_at_trx_commit=1;
+COMMIT;
+
+--let $shutdown_timeout= 0
+--source include/restart_mysqld.inc
+disconnect con1;
+
+select * from t1;
+drop table t1,t2;
+
+# Work around missing crash recovery at the SQL layer.
+let $datadir= `select @@datadir`;
+--remove_files_wildcard $datadir/test #sql-*.frm
diff --git a/mysql-test/suite/galera/r/galera_FK_duplicate_client_insert.result b/mysql-test/suite/galera/r/galera_FK_duplicate_client_insert.result
new file mode 100644
index 00000000000..3eb638ca49a
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_FK_duplicate_client_insert.result
@@ -0,0 +1,380 @@
+CREATE TABLE user(id int primary key, j int) ENGINE=InnoDB;
+CREATE TABLE user_session(id int primary key, fk1 int, fk2 int) ENGINE=InnoDB;
+alter table user_session add foreign key (fk1) references user(id);
+INSERT INTO user values (1,0), (2,0), (3,0), (4,0);
+INSERT INTO user_session values (1,1,1);
+connect node_1_u, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+connect node_1_i, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+connect node_2_i, 127.0.0.1, root, , test, $NODE_MYPORT_2;
+"Phase 1: plain SQL statements"
+connection node_1;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+update user set j = j + 1 WHERE id > 0;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+insert into user_session(id,fk1,fk2) values (2, 2, 2);
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+insert into user_session(id,fk1,fk2) values (2, 2, 3);
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+"Phase 2: prepared statements"
+connection node_1_u;
+prepare upd from 'update user set j = j + 1 WHERE id > 0';
+connection node_1_i;
+prepare ins1 from 'insert into user_session(id,fk1,fk2) values (2, 2, 2)';
+connection node_2_i;
+prepare ins2 from 'insert into user_session(id,fk1,fk2) values (2, 2, 3)';
+connection node_1;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1_u;
+begin;
+execute upd;
+connection node_1_i;
+set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+execute ins1;
+connection node_1;
+set debug_sync='now WAIT_FOR ins_waiting';
+connection node_2_i;
+execute ins2;
+connection node_1;
+set debug_sync='now SIGNAL cont_ins';
+connection node_1_i;
+connection node_1_u;
+commit;
+connection node_1;
+truncate user_session;
+set debug_sync = reset;
+connection node_1;
+drop table user_session,user;
diff --git a/mysql-test/suite/galera/r/galera_gtid_slave_sst_rsync.result b/mysql-test/suite/galera/r/galera_gtid_slave_sst_rsync.result
index cdf330643c2..380a0235ac2 100644
--- a/mysql-test/suite/galera/r/galera_gtid_slave_sst_rsync.result
+++ b/mysql-test/suite/galera/r/galera_gtid_slave_sst_rsync.result
@@ -150,6 +150,7 @@ connection node_3;
connection node_2;
STOP SLAVE;
RESET SLAVE ALL;
+set global gtid_slave_pos="";
reset master;
#Connection 3
connection node_3;
diff --git a/mysql-test/suite/galera/t/galera_FK_duplicate_client_insert.test b/mysql-test/suite/galera/t/galera_FK_duplicate_client_insert.test
new file mode 100644
index 00000000000..02322fc02ec
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_FK_duplicate_client_insert.test
@@ -0,0 +1,161 @@
+--source include/have_innodb.inc
+--source include/have_debug.inc
+--source include/have_debug_sync.inc
+--source include/galera_cluster.inc
+#
+# This test will reproduce regressions of bugs
+# https://github.com/codership/mysql-wsrep/issues/335
+# https://github.com/codership/mysql-wsrep/issues/336
+#
+# The test will issue duplicate inserts into a table, which has foreign key
+# constraint for a parent table.
+# The inserts happen in separate nodes, and the
+# The test outline is as follows:
+# 1. in node 1, an update is done for the FK parent row, in a transaction,
+# which is left open. The purpose of this is just to establish a X lock on
+# the parent row.
+# 2. in node 1, an insert for the child table is sent. The insert will have to wait
+# for the parent row X lock, because it needs S lock on the same row.
+# However, we have set an DBUG sync point just before the insert will call for
+# innodb suspend
+# 3. in node 2, a similar insert is issued. This will replicate to node 1 and try to
+# abort the conflicting update and blocked insert
+# 4. the inserts dbug sync point is relased, and insert should continue and abort
+# gracefully
+# 5. update is continued to commit, and it should also observe the deadlock
+#
+# This test is run in 3 phases:
+#
+# 1. with plain SQL statement
+# 2. as SQL prepared statements
+# 3. as SQl stored procedures
+#
+# The test phase 3 is for reproducing the issue in bug #336 specifically
+#
+
+#
+# create the test tables and foreign key constraint between them
+#
+CREATE TABLE user(id int primary key, j int) ENGINE=InnoDB;
+CREATE TABLE user_session(id int primary key, fk1 int, fk2 int) ENGINE=InnoDB;
+alter table user_session add foreign key (fk1) references user(id);
+
+# populate a few initial rows
+INSERT INTO user values (1,0), (2,0), (3,0), (4,0);
+INSERT INTO user_session values (1,1,1);
+
+#
+# prepare test connections, for:
+# update of parent row in node1
+# insert of child row in node1
+# insert of child row in node2
+
+--connect node_1_u, 127.0.0.1, root, , test, $NODE_MYPORT_1
+--connect node_1_i, 127.0.0.1, root, , test, $NODE_MYPORT_1
+--connect node_2_i, 127.0.0.1, root, , test, $NODE_MYPORT_2
+
+
+#
+# test phase 1: plain SQL statements
+#
+--echo "Phase 1: plain SQL statements"
+
+
+--connection node_1
+let $counter=10;
+let $sleep_period=1;
+
+while($counter > 0)
+{
+ --connection node_1_u
+ begin;
+ update user set j = j + 1 WHERE id > 0;
+
+ --connection node_1_i
+ set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+ send insert into user_session(id,fk1,fk2) values (2, 2, 2);
+
+ --connection node_1
+ set debug_sync='now WAIT_FOR ins_waiting';
+
+ --connection node_2_i
+ insert into user_session(id,fk1,fk2) values (2, 2, 3);
+
+ --connection node_1
+ set debug_sync='now SIGNAL cont_ins';
+
+ --connection node_1_i
+ --error 0,ER_LOCK_DEADLOCK,ER_DUP_ENTRY
+ reap;
+
+ --connection node_1_u
+ --error 0,ER_LOCK_DEADLOCK
+ commit;
+
+ --connection node_1
+ --error 0,ER_LOCK_DEADLOCK
+ truncate user_session;
+ set debug_sync = reset;
+
+ dec $counter;
+}
+
+#
+# test phase 2: prepared statements
+#
+--echo "Phase 2: prepared statements"
+
+--connection node_1_u
+prepare upd from 'update user set j = j + 1 WHERE id > 0';
+
+--connection node_1_i
+prepare ins1 from 'insert into user_session(id,fk1,fk2) values (2, 2, 2)';
+
+--connection node_2_i
+prepare ins2 from 'insert into user_session(id,fk1,fk2) values (2, 2, 3)';
+
+--connection node_1
+let $counter=10;
+let $sleep_period=1;
+
+while($counter > 0)
+{
+ --connection node_1_u
+ begin;
+ execute upd;
+ #update user set j = j + 1 WHERE id > 0;
+
+ --connection node_1_i
+ set debug_sync='lock_wait_suspend_thread_enter SIGNAL ins_waiting WAIT_FOR cont_ins';
+ send execute ins1;
+
+ --connection node_1
+ set debug_sync='now WAIT_FOR ins_waiting';
+
+ --connection node_2_i
+ execute ins2;
+
+ --connection node_1
+ set debug_sync='now SIGNAL cont_ins';
+
+ --connection node_1_i
+ --error 0,ER_LOCK_DEADLOCK,ER_DUP_ENTRY
+ reap;
+
+ --connection node_1_u
+ --error 0,ER_LOCK_DEADLOCK
+ commit;
+
+ --connection node_1
+
+ --error 0,ER_LOCK_DEADLOCK
+ truncate user_session;
+ set debug_sync = reset;
+
+ dec $counter;
+}
+
+
+--connection node_1
+
+drop table user_session,user;
diff --git a/mysql-test/suite/galera/t/galera_gtid_slave_sst_rsync.test b/mysql-test/suite/galera/t/galera_gtid_slave_sst_rsync.test
index 3fe94ad16b7..3ed7ec1d09e 100644
--- a/mysql-test/suite/galera/t/galera_gtid_slave_sst_rsync.test
+++ b/mysql-test/suite/galera/t/galera_gtid_slave_sst_rsync.test
@@ -196,6 +196,9 @@ DROP TABLE t2,t1;
--connection node_2
STOP SLAVE;
RESET SLAVE ALL;
+--disable_warnings
+set global gtid_slave_pos="";
+--enable_warnings
reset master;
--echo #Connection 3
diff --git a/mysql-test/suite/innodb/r/innodb-virtual-columns.result b/mysql-test/suite/innodb/r/innodb-virtual-columns.result
index 6fbb7dcc58f..bf21e352681 100644
--- a/mysql-test/suite/innodb/r/innodb-virtual-columns.result
+++ b/mysql-test/suite/innodb/r/innodb-virtual-columns.result
@@ -330,3 +330,16 @@ term uw_id plan wdraw_rsn admit_term
1035 2 CSM ACAD 1009
drop table grad_degree;
drop table gso_grad_supr;
+CREATE TABLE t1 (a INT, b CHAR(12), c INT AS (a) VIRTUAL, FULLTEXT KEY(b)) ENGINE=InnoDB;
+INSERT INTO t1 (a,b) VALUES (1,'foo');
+SELECT * FROM t1;
+a b c
+1 foo 1
+DROP TABLE t1;
+CREATE TABLE t1 (a INT, b CHAR(12), c INT AS (a) VIRTUAL) ENGINE=InnoDB;
+INSERT INTO t1 (a,b) VALUES (1,'foo');
+ALTER TABLE t1 ADD FULLTEXT KEY(b);
+SELECT * FROM t1;
+a b c
+1 foo 1
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/innodb-virtual-columns.test b/mysql-test/suite/innodb/t/innodb-virtual-columns.test
index 0e0d6dbb2f5..faf542645fb 100644
--- a/mysql-test/suite/innodb/t/innodb-virtual-columns.test
+++ b/mysql-test/suite/innodb/t/innodb-virtual-columns.test
@@ -306,3 +306,14 @@ select * from gso_grad_supr;
drop table grad_degree;
drop table gso_grad_supr;
+
+CREATE TABLE t1 (a INT, b CHAR(12), c INT AS (a) VIRTUAL, FULLTEXT KEY(b)) ENGINE=InnoDB;
+INSERT INTO t1 (a,b) VALUES (1,'foo');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b CHAR(12), c INT AS (a) VIRTUAL) ENGINE=InnoDB;
+INSERT INTO t1 (a,b) VALUES (1,'foo');
+ALTER TABLE t1 ADD FULLTEXT KEY(b);
+SELECT * FROM t1;
+DROP TABLE t1;
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
index efc380a396b..89e5fef60e6 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -4151,7 +4151,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400
-NUMERIC_MAX_VALUE 524288
+NUMERIC_MAX_VALUE 2097152
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
index 47df962b7c4..ca875e7f644 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
@@ -5103,7 +5103,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400
-NUMERIC_MAX_VALUE 524288
+NUMERIC_MAX_VALUE 2097152
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
diff --git a/mysql-test/suite/sys_vars/r/table_definition_cache_basic.result b/mysql-test/suite/sys_vars/r/table_definition_cache_basic.result
index 54b50c5ff75..69f3d42d2fb 100644
--- a/mysql-test/suite/sys_vars/r/table_definition_cache_basic.result
+++ b/mysql-test/suite/sys_vars/r/table_definition_cache_basic.result
@@ -28,14 +28,14 @@ Warning 1292 Truncated incorrect table_definition_cache value: '2'
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
400
-SET @@global.table_definition_cache = 524287;
+SET @@global.table_definition_cache = 2097151;
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
-524287
-SET @@global.table_definition_cache = 524288;
+2097151
+SET @@global.table_definition_cache = 2097152;
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
-524288
+2097152
'#--------------------FN_DYNVARS_019_04-------------------------#'
SET @@global.table_definition_cache = 0;
Warnings:
@@ -49,18 +49,18 @@ Warning 1292 Truncated incorrect table_definition_cache value: '-1024'
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
400
-SET @@global.table_definition_cache = 524289;
+SET @@global.table_definition_cache = 2097153;
Warnings:
-Warning 1292 Truncated incorrect table_definition_cache value: '524289'
+Warning 1292 Truncated incorrect table_definition_cache value: '2097153'
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
-524288
+2097152
SET @@global.table_definition_cache = 42949672950;
Warnings:
Warning 1292 Truncated incorrect table_definition_cache value: '42949672950'
SELECT @@global.table_definition_cache;
@@global.table_definition_cache
-524288
+2097152
SET @@global.table_definition_cache = 21221204.10;
ERROR 42000: Incorrect argument type to variable 'table_definition_cache'
SET @@global.table_definition_cache = ON;
diff --git a/mysql-test/suite/sys_vars/t/table_definition_cache_basic.test b/mysql-test/suite/sys_vars/t/table_definition_cache_basic.test
index dc0903c5d40..d7a6ff25a0b 100644
--- a/mysql-test/suite/sys_vars/t/table_definition_cache_basic.test
+++ b/mysql-test/suite/sys_vars/t/table_definition_cache_basic.test
@@ -64,9 +64,9 @@ SET @@global.table_definition_cache = 1;
SELECT @@global.table_definition_cache;
SET @@global.table_definition_cache = 2;
SELECT @@global.table_definition_cache;
-SET @@global.table_definition_cache = 524287;
+SET @@global.table_definition_cache = 2097151;
SELECT @@global.table_definition_cache;
-SET @@global.table_definition_cache = 524288;
+SET @@global.table_definition_cache = 2097152;
SELECT @@global.table_definition_cache;
@@ -79,7 +79,7 @@ SET @@global.table_definition_cache = 0;
SELECT @@global.table_definition_cache;
SET @@global.table_definition_cache = -1024;
SELECT @@global.table_definition_cache;
-SET @@global.table_definition_cache = 524289;
+SET @@global.table_definition_cache = 2097153;
SELECT @@global.table_definition_cache;
SET @@global.table_definition_cache = 42949672950;
SELECT @@global.table_definition_cache;
diff --git a/mysys/safemalloc.c b/mysys/safemalloc.c
index 024f8ffb49d..2795eb3ffee 100644
--- a/mysys/safemalloc.c
+++ b/mysys/safemalloc.c
@@ -285,8 +285,8 @@ static void warn(const char *format,...)
va_list args;
DBUG_PRINT("error", ("%s", format));
va_start(args,format);
- fflush(stderr);
vfprintf(stderr, format, args);
+ fflush(stderr);
va_end(args);
#ifdef HAVE_BACKTRACE
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 3881f6f28ad..2efdf91f6a9 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -1513,6 +1513,7 @@ void THD::cleanup(void)
auto_inc_intervals_in_cur_stmt_for_binlog.empty();
mysql_ull_cleanup(this);
+ stmt_map.reset();
/* All metadata locks must have been released by now. */
DBUG_ASSERT(!mdl_context.has_locks());
@@ -3983,11 +3984,13 @@ void Statement_map::erase(Statement *statement)
void Statement_map::reset()
{
/* Must be first, hash_free will reset st_hash.records */
- mysql_mutex_lock(&LOCK_prepared_stmt_count);
- DBUG_ASSERT(prepared_stmt_count >= st_hash.records);
- prepared_stmt_count-= st_hash.records;
- mysql_mutex_unlock(&LOCK_prepared_stmt_count);
-
+ if (st_hash.records)
+ {
+ mysql_mutex_lock(&LOCK_prepared_stmt_count);
+ DBUG_ASSERT(prepared_stmt_count >= st_hash.records);
+ prepared_stmt_count-= st_hash.records;
+ mysql_mutex_unlock(&LOCK_prepared_stmt_count);
+ }
my_hash_reset(&names_hash);
my_hash_reset(&st_hash);
last_found_statement= 0;
@@ -3996,12 +3999,8 @@ void Statement_map::reset()
Statement_map::~Statement_map()
{
- /* Must go first, hash_free will reset st_hash.records */
- mysql_mutex_lock(&LOCK_prepared_stmt_count);
- DBUG_ASSERT(prepared_stmt_count >= st_hash.records);
- prepared_stmt_count-= st_hash.records;
- mysql_mutex_unlock(&LOCK_prepared_stmt_count);
-
+ /* Statement_map::reset() should be called prior to destructor. */
+ DBUG_ASSERT(!st_hash.records);
my_hash_free(&names_hash);
my_hash_free(&st_hash);
}
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index c048aeeb585..40d5e53c7a0 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -4049,6 +4049,7 @@ bool st_select_lex::optimize_unflattened_subqueries(bool const_only)
inner_join->select_options|= SELECT_DESCRIBE;
}
res= inner_join->optimize();
+ sl->update_used_tables();
sl->update_correlated_cache();
is_correlated_unit|= sl->is_correlated;
inner_join->select_options= save_options;
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index 369c9a6222a..921d00eaf2a 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -3483,11 +3483,15 @@ static Sys_var_charptr Sys_system_time_zone(
CMD_LINE_HELP_ONLY,
IN_SYSTEM_CHARSET, DEFAULT(system_time_zone));
+/*
+ If One use views with prepared statements this should be bigger than
+ table_open_cache (now we allow 2 times bigger value)
+*/
static Sys_var_ulong Sys_table_def_size(
"table_definition_cache",
"The number of cached table definitions",
GLOBAL_VAR(tdc_size), CMD_LINE(REQUIRED_ARG),
- VALID_RANGE(TABLE_DEF_CACHE_MIN, 512*1024),
+ VALID_RANGE(TABLE_DEF_CACHE_MIN, 2*1024*1024),
DEFAULT(TABLE_DEF_CACHE_DEFAULT), BLOCK_SIZE(1));
@@ -3499,7 +3503,7 @@ static bool fix_table_open_cache(sys_var *, THD *, enum_var_type)
return false;
}
-
+/* Check the table_definition_cache comment if makes changes */
static Sys_var_ulong Sys_table_cache_size(
"table_open_cache", "The number of cached open tables",
GLOBAL_VAR(tc_size), CMD_LINE(REQUIRED_ARG),
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index 640a315c71e..59c04a3d61f 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -495,10 +495,12 @@ fil_parse_write_crypt_data(
uint len = mach_read_from_1(ptr);
ptr += 1;
- ut_a(type == CRYPT_SCHEME_UNENCRYPTED ||
- type == CRYPT_SCHEME_1); // only supported
+ if ((type != CRYPT_SCHEME_1 && type != CRYPT_SCHEME_UNENCRYPTED)
+ || len != CRYPT_SCHEME_1_IV_LEN) {
+ *err = DB_CORRUPTION;
+ return NULL;
+ }
- ut_a(len == CRYPT_SCHEME_1_IV_LEN); // only supported
uint min_key_version = mach_read_from_4(ptr);
ptr += 4;
@@ -517,6 +519,7 @@ fil_parse_write_crypt_data(
crypt_data->page0_offset = offset;
crypt_data->min_key_version = min_key_version;
crypt_data->encryption = encryption;
+ crypt_data->type = type;
memcpy(crypt_data->iv, ptr, len);
ptr += len;
@@ -2363,7 +2366,7 @@ fil_space_crypt_close_tablespace(
{
fil_space_crypt_t* crypt_data = space->crypt_data;
- if (!crypt_data) {
+ if (!crypt_data || srv_n_fil_crypt_threads == 0) {
return;
}
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 1be2063bf60..401d05b6e5a 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -1489,6 +1489,9 @@ public:
/** Page id. Protected by buf_pool mutex. */
page_id_t id;
+ buf_page_t* hash; /*!< node used in chaining to
+ buf_pool->page_hash or
+ buf_pool->zip_hash */
/** Page size. Protected by buf_pool mutex. */
page_size_t size;
@@ -1536,9 +1539,6 @@ public:
buf_tmp_buffer_t* slot; /*!< Slot for temporary memory
used for encryption/compression
or NULL */
- buf_page_t* hash; /*!< node used in chaining to
- buf_pool->page_hash or
- buf_pool->zip_hash */
#ifdef UNIV_DEBUG
ibool in_page_hash; /*!< TRUE if in buf_pool->page_hash */
ibool in_zip_hash; /*!< TRUE if in buf_pool->zip_hash */
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index a2ad0e2e546..8a7074573c2 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -1570,6 +1570,12 @@ struct dict_table_t {
/** Id of the table. */
table_id_t id;
+ /** Hash chain node. */
+ hash_node_t id_hash;
+ /** Table name. */
+ table_name_t name;
+ /** Hash chain node. */
+ hash_node_t name_hash;
/** Memory heap. If you allocate from this heap after the table has
been created then be sure to account the allocation into
@@ -1582,9 +1588,6 @@ struct dict_table_t {
dict_sys->size += new_size - old_size. */
mem_heap_t* heap;
- /** Table name. */
- table_name_t name;
-
/** NULL or the directory path specified by DATA DIRECTORY. */
char* data_dir_path;
@@ -1702,12 +1705,6 @@ struct dict_table_t {
/*!< !DICT_FRM_CONSISTENT==0 if data
dictionary information and
MySQL FRM information mismatch. */
- /** Hash chain node. */
- hash_node_t name_hash;
-
- /** Hash chain node. */
- hash_node_t id_hash;
-
/** The FTS_DOC_ID_INDEX, or NULL if no fulltext indexes exist */
dict_index_t* fts_doc_id_index;
diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h
index a961c94c0f0..e6998b55ca3 100644
--- a/storage/innobase/include/fil0fil.h
+++ b/storage/innobase/include/fil0fil.h
@@ -74,8 +74,9 @@ struct fil_node_t;
/** Tablespace or log data space */
struct fil_space_t {
- char* name; /*!< Tablespace name */
ulint id; /*!< space id */
+ hash_node_t hash; /*!< hash chain node */
+ char* name; /*!< Tablespace name */
lsn_t max_lsn;
/*!< LSN of the most recent
fil_names_write_if_was_clean().
@@ -145,7 +146,6 @@ struct fil_space_t {
Note that fil_node_t::n_pending tracks actual pending I/O requests.
Protected by fil_system.mutex and my_atomic_loadlint() and friends. */
ulint n_pending_ios;
- hash_node_t hash; /*!< hash chain node */
rw_lock_t latch; /*!< latch protecting the file space storage
allocation */
UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index a3b50950393..f878387e17f 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -590,12 +590,14 @@ typedef void* os_thread_ret_t;
#include "ut0ut.h"
#include "sync0types.h"
+#include <my_valgrind.h>
+/* define UNIV macros in terms of my_valgrind.h */
+#define UNIV_MEM_INVALID(addr, size) MEM_UNDEFINED(addr, size)
+#define UNIV_MEM_FREE(addr, size) MEM_NOACCESS(addr, size)
+#define UNIV_MEM_ALLOC(addr, size) UNIV_MEM_INVALID(addr, size)
#ifdef UNIV_DEBUG_VALGRIND
# include <valgrind/memcheck.h>
# define UNIV_MEM_VALID(addr, size) VALGRIND_MAKE_MEM_DEFINED(addr, size)
-# define UNIV_MEM_INVALID(addr, size) VALGRIND_MAKE_MEM_UNDEFINED(addr, size)
-# define UNIV_MEM_FREE(addr, size) VALGRIND_MAKE_MEM_NOACCESS(addr, size)
-# define UNIV_MEM_ALLOC(addr, size) VALGRIND_MAKE_MEM_UNDEFINED(addr, size)
# define UNIV_MEM_DESC(addr, size) VALGRIND_CREATE_BLOCK(addr, size, #addr)
# define UNIV_MEM_UNDESC(b) VALGRIND_DISCARD(b)
# define UNIV_MEM_ASSERT_RW_LOW(addr, size, should_abort) do { \
@@ -630,9 +632,6 @@ typedef void* os_thread_ret_t;
} while (0)
#else
# define UNIV_MEM_VALID(addr, size) do {} while(0)
-# define UNIV_MEM_INVALID(addr, size) do {} while(0)
-# define UNIV_MEM_FREE(addr, size) do {} while(0)
-# define UNIV_MEM_ALLOC(addr, size) do {} while(0)
# define UNIV_MEM_DESC(addr, size) do {} while(0)
# define UNIV_MEM_UNDESC(b) do {} while(0)
# define UNIV_MEM_ASSERT_RW_LOW(addr, size, should_abort) do {} while(0)
diff --git a/storage/innobase/os/os0proc.cc b/storage/innobase/os/os0proc.cc
index 1a6da03a402..0c8f8795be8 100644
--- a/storage/innobase/os/os0proc.cc
+++ b/storage/innobase/os/os0proc.cc
@@ -165,7 +165,6 @@ os_mem_free_large(
if (os_use_large_pages && os_large_page_size && !shmdt(ptr)) {
my_atomic_addlint(
&os_total_large_mem_allocated, -size);
- UNIV_MEM_FREE(ptr, size);
return;
}
#endif /* HAVE_LINUX_LARGE_PAGES && UNIV_LINUX */
@@ -178,7 +177,6 @@ os_mem_free_large(
} else {
my_atomic_addlint(
&os_total_large_mem_allocated, -lint(size));
- UNIV_MEM_FREE(ptr, size);
}
#elif !defined OS_MAP_ANON
ut_free(ptr);
@@ -193,7 +191,6 @@ os_mem_free_large(
} else {
my_atomic_addlint(
&os_total_large_mem_allocated, -size);
- UNIV_MEM_FREE(ptr, size);
}
#endif
}
diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc
index 941b7798c39..19b6dfd0763 100644
--- a/storage/innobase/row/row0ftsort.cc
+++ b/storage/innobase/row/row0ftsort.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2015, 2018, MariaDB Corporation.
+Copyright (c) 2015, 2019, MariaDB Corporation.
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
@@ -905,7 +905,7 @@ loop:
goto func_exit;
}
- UNIV_MEM_INVALID(block[t_ctx.buf_used][0], srv_sort_buf_size);
+ UNIV_MEM_INVALID(block[t_ctx.buf_used], srv_sort_buf_size);
buf[t_ctx.buf_used] = row_merge_buf_empty(buf[t_ctx.buf_used]);
mycount[t_ctx.buf_used] += t_ctx.rows_added[t_ctx.buf_used];
t_ctx.rows_added[t_ctx.buf_used] = 0;
@@ -999,12 +999,11 @@ exit:
goto func_exit;
}
- UNIV_MEM_INVALID(block[i][0],
- srv_sort_buf_size);
+ UNIV_MEM_INVALID(block[i], srv_sort_buf_size);
if (crypt_block[i]) {
- UNIV_MEM_INVALID(crypt_block[i][0],
- srv_sort_buf_size);
+ UNIV_MEM_INVALID(crypt_block[i],
+ srv_sort_buf_size);
}
}