diff options
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); } } |