summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Lesin <vlad_lesin@mail.ru>2020-05-13 14:32:12 +0300
committerVlad Lesin <vlad_lesin@mail.ru>2020-05-18 17:27:54 +0300
commitd82dc4716b6069d6ad622d188d64f012d35e503a (patch)
tree9720fda265fb951a9e2ee30c863e14128c92a744
parent5b6bcb59ac7791cf99caf683fb131b7be4b02341 (diff)
downloadmariadb-git-bb-10.2-MDEV-22554-ib_error_flag.tar.gz
MDEV-22554: "mariabackup --prepare" exits with code 0 even though innodbbb-10.2-MDEV-22554-ib_error_flag
error is logged The fix is to set flag in ib::error::~error() and check it in mariabackup. ib::error::error() is replaced to ib::warn::warn() in AIO::linux_create_io_ctx() because of two reasons: 1) if we leave it as is, then mariabackup MTR tests with --mem MTR option will fail, :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.
-rw-r--r--extra/mariabackup/xtrabackup.cc2
-rw-r--r--storage/innobase/include/ut0ut.h8
-rw-r--r--storage/innobase/os/os0file.cc6
-rw-r--r--storage/innobase/ut/ut0ut.cc4
4 files changed, 16 insertions, 4 deletions
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 040fbeb8f32..b1120ba29f7 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -5770,7 +5770,7 @@ static bool xtrabackup_prepare_func(char** argv)
error_cleanup:
xb_filters_free();
- return ok;
+ return ok && !ib::error::was_logged();
}
/**************************************************************************
diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h
index 000d8b6b379..741687c07d7 100644
--- a/storage/innobase/include/ut0ut.h
+++ b/storage/innobase/include/ut0ut.h
@@ -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
diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc
index f7061388cb8..e468b842ce2 100644
--- a/storage/innobase/os/os0file.cc
+++ b/storage/innobase/os/os0file.cc
@@ -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"
@@ -2254,7 +2254,7 @@ AIO::linux_create_io_ctx(
break;
default:
- ib::error()
+ ib::warn()
<< "Linux Native AIO setup"
<< " returned following error["
<< ret << "]";
diff --git a/storage/innobase/ut/ut0ut.cc b/storage/innobase/ut/ut0ut.cc
index 252f3a50ae1..b50735a391d 100644
--- a/storage/innobase/ut/ut0ut.cc
+++ b/storage/innobase/ut/ut0ut.cc
@@ -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