summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislav Vaintroub <wlad@mariadb.com>2019-01-15 22:47:54 +0100
committerVladislav Vaintroub <wlad@mariadb.com>2019-01-16 08:39:49 +0100
commit2153aaf66eeff70b2191806e187c2b845b91f3a2 (patch)
tree28d36ccb5f4d2c70859759b41e221a09745024fd
parenta8a27e65a8d2f7284b1a4e8c45d0f6759b97a79f (diff)
downloadmariadb-git-2153aaf66eeff70b2191806e187c2b845b91f3a2.tar.gz
mariabackup : use die() macro for fatal exit with error message.
-rw-r--r--extra/mariabackup/backup_copy.cc5
-rw-r--r--extra/mariabackup/backup_mysql.cc11
-rw-r--r--extra/mariabackup/common.h29
-rw-r--r--extra/mariabackup/datasink.cc9
-rw-r--r--extra/mariabackup/ds_buffer.cc2
-rw-r--r--extra/mariabackup/ds_tmpfile.cc14
-rw-r--r--extra/mariabackup/encryption_plugin.cc3
-rw-r--r--extra/mariabackup/wsrep.cc7
-rw-r--r--extra/mariabackup/xtrabackup.cc73
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;