diff options
author | Vladislav Vaintroub <wlad@mariadb.com> | 2019-01-15 22:47:54 +0100 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2019-01-16 08:39:49 +0100 |
commit | 2153aaf66eeff70b2191806e187c2b845b91f3a2 (patch) | |
tree | 28d36ccb5f4d2c70859759b41e221a09745024fd | |
parent | a8a27e65a8d2f7284b1a4e8c45d0f6759b97a79f (diff) | |
download | mariadb-git-2153aaf66eeff70b2191806e187c2b845b91f3a2.tar.gz |
mariabackup : use die() macro for fatal exit with error message.
-rw-r--r-- | extra/mariabackup/backup_copy.cc | 5 | ||||
-rw-r--r-- | extra/mariabackup/backup_mysql.cc | 11 | ||||
-rw-r--r-- | extra/mariabackup/common.h | 29 | ||||
-rw-r--r-- | extra/mariabackup/datasink.cc | 9 | ||||
-rw-r--r-- | extra/mariabackup/ds_buffer.cc | 2 | ||||
-rw-r--r-- | extra/mariabackup/ds_tmpfile.cc | 14 | ||||
-rw-r--r-- | extra/mariabackup/encryption_plugin.cc | 3 | ||||
-rw-r--r-- | extra/mariabackup/wsrep.cc | 7 | ||||
-rw-r--r-- | extra/mariabackup/xtrabackup.cc | 73 |
9 files changed, 63 insertions, 90 deletions
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc index 1fb5dd0fda6..b0ad000cb90 100644 --- a/extra/mariabackup/backup_copy.cc +++ b/extra/mariabackup/backup_copy.cc @@ -2221,7 +2221,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); @@ -2323,8 +2323,7 @@ static void rocksdb_backup_checkpoint() if (backup_to_directory) { if (my_mkdir(rocksdb_backup_dir, 0777, MYF(0))){ - msg("Can't create rocksdb backup directory %s", 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 0dbd2425363..8936b577a9e 100644 --- a/extra/mariabackup/backup_mysql.cc +++ b/extra/mariabackup/backup_mysql.cc @@ -167,9 +167,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", 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); } @@ -177,9 +178,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", + die("failed to fetch query result %s: %s", query, mysql_error(connection)); - exit(EXIT_FAILURE); } if (!use_result) { @@ -910,8 +910,7 @@ DECLARE_THREAD(kill_mdl_waiters_thread(void *)) 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", query,mysql_error(mysql)); - exit(EXIT_FAILURE); + die("failed to execute query %s: %s", query,mysql_error(mysql)); } } mysql_free_result(result); diff --git a/extra/mariabackup/common.h b/extra/mariabackup/common.h index bdc5e618a6a..2426f090888 100644 --- a/extra/mariabackup/common.h +++ b/extra/mariabackup/common.h @@ -86,9 +86,7 @@ static inline int asprintf(char **strp, const char *fmt,...) #define XB_DELTA_INFO_SUFFIX ".meta" - -static inline int msg1(unsigned int thread_num, const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 2, 3); -static inline int msg1(uint thread_num, const char *fmt, va_list args) +static inline int msg1(uint thread_num, const char *prefix, const char *fmt, va_list args) { int result; time_t t = time(NULL); @@ -98,35 +96,44 @@ static inline int msg1(uint thread_num, const char *fmt, va_list args) result = vasprintf(&line, fmt, args); if (result != -1) { if (fmt && fmt[strlen(fmt)] != '\n') - result = fprintf(stderr, "[%02u] %s %s\n", thread_num, date, line); + result = fprintf(stderr, "[%02u] %s%s %s\n", thread_num, prefix, date, line); else - result = fprintf(stderr, "[%02u] %s %s", thread_num, date, line); + result = fprintf(stderr, "[%02u] %s%s %s", thread_num, prefix, date, line); free(line); } return result; } -static inline int msg(unsigned int, const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 2, 3); -static inline int msg(unsigned int thread_num, const char *fmt, ...) + +static inline ATTRIBUTE_FORMAT(printf, 2, 3) int msg(unsigned int thread_num, const char *fmt, ...) { int result; va_list args; va_start(args, fmt); - result = msg1(thread_num, fmt, args); + result = msg1(thread_num,"", fmt, args); va_end(args); return result; } -static inline int msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2); -static inline int msg(const char *fmt, ...) +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); + result = msg1(0, "", fmt, args); va_end(args); 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 */ diff --git a/extra/mariabackup/datasink.cc b/extra/mariabackup/datasink.cc index 6cd06a09de5..4d12b51a905 100644 --- a/extra/mariabackup/datasink.cc +++ b/extra/mariabackup/datasink.cc @@ -48,8 +48,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: @@ -60,8 +59,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: @@ -80,8 +78,7 @@ ds_create(const char *root, ds_type_t type) if (ctxt != NULL) { ctxt->datasink = ds; } else { - msg("Error: failed to initialize datasink."); - exit(EXIT_FAILURE); + die("failed to initialize datasink."); } return ctxt; diff --git a/extra/mariabackup/ds_buffer.cc b/extra/mariabackup/ds_buffer.cc index 71ee323537a..933c443a4c0 100644 --- a/extra/mariabackup/ds_buffer.cc +++ b/extra/mariabackup/ds_buffer.cc @@ -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_tmpfile.cc b/extra/mariabackup/ds_tmpfile.cc index 25f535100ec..5337fce8e96 100644 --- a/extra/mariabackup/ds_tmpfile.cc +++ b/extra/mariabackup/ds_tmpfile.cc @@ -195,8 +195,7 @@ tmpfile_deinit(ds_ctxt_t *ctxt) /* 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."); - exit(EXIT_FAILURE); + die("my_fstat() failed."); } tmp_file->mystat.st_size = mystat.st_size; tmp_file->mystat.st_mtime = mystat.st_mtime; @@ -204,18 +203,16 @@ 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 " + die("could not stream a temporary file to " "'%s'", tmp_file->orig_path); - exit(EXIT_FAILURE); } /* 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.", + 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, (unsigned char *)buf, buf_size, @@ -223,13 +220,12 @@ tmpfile_deinit(ds_ctxt_t *ctxt) 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'.", + 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/encryption_plugin.cc b/extra/mariabackup/encryption_plugin.cc index 78a74c7b7a8..be530d63ee2 100644 --- a/extra/mariabackup/encryption_plugin.cc +++ b/extra/mariabackup/encryption_plugin.cc @@ -45,8 +45,7 @@ static std::string get_encryption_plugin_from_cnf() FILE *f = fopen("backup-my.cnf", "r"); if (!f) { - msg("Can't open backup-my.cnf for reading"); - exit(EXIT_FAILURE); + die("Can't open backup-my.cnf for reading"); } char line[512]; std::string plugin_load; diff --git a/extra/mariabackup/wsrep.cc b/extra/mariabackup/wsrep.cc index 8e755171647..1db0f9ccd6e 100644 --- a/extra/mariabackup/wsrep.cc +++ b/extra/mariabackup/wsrep.cc @@ -193,7 +193,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); @@ -207,11 +207,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/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index 9d183ea3087..03037e56696 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -657,9 +657,8 @@ static void backup_file_op_fail(ulint space_id, const byte* flags, msg("DDL tracking : delete %zu \"%.*s\"", space_id, int(len), name); } if (fail) { - msg("ERROR : DDL operation detected in the late phase of backup." + die("DDL operation detected in the late phase of backup." "Backup is inconsistent. Remove --no-lock option to fix."); - exit(EXIT_FAILURE); } } @@ -1457,8 +1456,7 @@ debug_sync_point(const char *name) xtrabackup_target_dir); fp = fopen(pid_path, "w"); if (fp == NULL) { - msg("mariabackup: Error: cannot open %s", pid_path); - exit(EXIT_FAILURE); + die("Can't open open %s", pid_path); } fprintf(fp, "%u\n", (uint) pid); fclose(fp); @@ -1794,7 +1792,7 @@ innodb_init_param(void) memset((G_PTR) &mysql_tmpdir_list, 0, sizeof(mysql_tmpdir_list)); if (init_tmpdir(&mysql_tmpdir_list, opt_mysql_tmpdir)) - exit(EXIT_FAILURE); + die("init_tmpdir() failed"); xtrabackup_tmpdir = my_tmpdir(&mysql_tmpdir_list); /* dummy for initialize all_charsets[] */ get_charset_name(0); @@ -1811,9 +1809,8 @@ innodb_init_param(void) msg("InnoDB: The page size of the " "database is set to %lu.", srv_page_size); } else { - msg("InnoDB: Error: invalid value of " + die("invalid value of " "innobase_page_size: %lld", innobase_page_size); - exit(EXIT_FAILURE); } } else { srv_page_size_shift = 14; @@ -2766,8 +2763,7 @@ static bool xtrabackup_copy_logfile(bool last = false) log_mutex_exit(); if (!start_lsn) { - msg("Error: xtrabackup_copy_logfile() failed."); - exit(EXIT_FAILURE); + die("xtrabackup_copy_logfile() failed."); } } while (start_lsn == end_lsn); @@ -2916,8 +2912,7 @@ data_copy_thread_func( DBUG_MARIABACKUP_EVENT("before_copy", node->space->name); /* copy the datafile */ if(xtrabackup_copy_datafile(node, num)) { - msg(num,"mariabackup: Error: failed to copy datafile."); - exit(EXIT_FAILURE); + die("failed to copy datafile."); } DBUG_MARIABACKUP_EVENT("after_copy", node->space->name); @@ -3094,9 +3089,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", name); - ut_free(name); - exit(EXIT_FAILURE); + die("Can't open datafile %s", name); } err = file->validate_first_page(&flush_lsn); @@ -3134,7 +3127,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); } } @@ -3505,13 +3498,11 @@ xb_validate_name( /* perform only basic validation. validate length and path symbols */ if (len > NAME_LEN) { - msg("mariabackup: name `%s` is too long.", 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.", name); - exit(EXIT_FAILURE); + die("name `%s` is not valid.", name); } } @@ -3589,8 +3580,7 @@ xb_register_table( const char* name) /*!< in: name of table */ { if (strchr(name, '.') == NULL) { - msg("mariabackup: `%s` is not fully qualified name.", name); - exit(EXIT_FAILURE); + die("`%s` is not fully qualified name.", name); } xb_register_include_filter_entry(name); @@ -3680,17 +3670,15 @@ xb_load_list_file( /* read and store the filenames */ fp = fopen(filename, "r"); if (!fp) { - msg("mariabackup: cannot open %s", + 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); @@ -4797,9 +4785,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); @@ -5093,8 +5080,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("Can't rename %s to %s errno %d", from, to, errno); - exit(EXIT_FAILURE); + die("Can't rename %s to %s errno %d", from, to, errno); } } @@ -5371,8 +5357,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); } } @@ -5757,7 +5742,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; @@ -5871,7 +5856,7 @@ check_all_privileges() if (check_result & PRIVILEGE_ERROR) { mysql_close(mysql_connection); - exit(EXIT_FAILURE); + die("Insufficient privileges"); } } @@ -6110,21 +6095,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"); - 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"); } } @@ -6227,7 +6204,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; |