Skip to content

Commit

Permalink
MDEV-22554: "mariabackup --prepare" exits with code 0 even though innodb
Browse files Browse the repository at this point in the history
error is logged

The fix is to set flag in ib::error::~error() and check it in
mariabackup.

ib::error::error() is replaced with ib::warn::warn() in
AIO::linux_create_io_ctx() because of two reasons:

1) if we leave it as is, then mariabackup MTR tests will fail with --mem
option, because Linux AIO can not be used on tmpfs,

2) when Linux AIO can not be initialized, InnoDB falls back to simulated
AIO, so such sutiation is not fatal error, it should be treated as warning.
  • Loading branch information
vlad-lesin committed May 19, 2020
1 parent a840605 commit 0f9bfcc
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion extra/mariabackup/xtrabackup.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5770,7 +5770,7 @@ static bool xtrabackup_prepare_func(char** argv)

error_cleanup:
xb_filters_free();
return ok;
return ok && !ib::error::was_logged();
}

/**************************************************************************
Expand Down
8 changes: 8 additions & 0 deletions storage/innobase/include/ut0ut.h
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,14 @@ class error : public logger {
public:
ATTRIBUTE_COLD
~error();
/** Indicates that error::~error() was invoked. Can be used to
determine if error messages were logged during innodb code execution.
@return true if there were error messages, false otherwise. */
static bool was_logged() { return logged; }

private:
/** true if error::~error() was invoked, false otherwise */
static bool logged;
};

/** The class fatal is used to emit an error message and stop the server
Expand Down
6 changes: 3 additions & 3 deletions storage/innobase/os/os0file.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2238,14 +2238,14 @@ AIO::linux_create_io_ctx(
}

/* Have tried enough. Better call it a day. */
ib::error()
ib::warn()
<< "io_setup() failed with EAGAIN after "
<< OS_AIO_IO_SETUP_RETRY_ATTEMPTS
<< " attempts.";
break;

case -ENOSYS:
ib::error()
ib::warn()
<< "Linux Native AIO interface"
" is not supported on this platform. Please"
" check your OS documentation and install"
Expand All @@ -2254,7 +2254,7 @@ AIO::linux_create_io_ctx(
break;

default:
ib::error()
ib::warn()
<< "Linux Native AIO setup"
<< " returned following error["
<< ret << "]";
Expand Down
4 changes: 4 additions & 0 deletions storage/innobase/ut/ut0ut.cc
Original file line number Diff line number Diff line change
Expand Up @@ -624,9 +624,13 @@ warn::~warn()
sql_print_warning("InnoDB: %s", m_oss.str().c_str());
}

/** true if error::~error() was invoked, false otherwise */
bool error::logged;

error::~error()
{
sql_print_error("InnoDB: %s", m_oss.str().c_str());
logged = true;
}

#ifdef _MSC_VER
Expand Down

0 comments on commit 0f9bfcc

Please sign in to comment.