- I don't think we should crash the server after failing to set
O_DIRECT. This way you are essentially resurrecting http://bugs.mysql.com/bug.php?id=26662
The warning is relatively harmless, the InnoDB will just do buffered
I/O on file systems that do not support O_DIRECT such as tmpfs.
It only becomes a problem in XtraDB in case of ALL_O_DIRECT, because
in this case XtraDB does not flush the log files, even if O_DIRECT
fails (the correctness of not doing fsync() when O_DIRECT succeeds
is a separate issue).
So what we should do is to disable ALL_O_DIRECT (i.e. O_DIRECT for
log files) and switch to O_DIRECT (i.e. O_DIRECT on data files only)
if setting O_DIRECT on a log file fails. That is, essentially use
the fix suggested by Yasufumi, but perhaps a cleaner variant,
i.e. in os_file_create_func() check the value returned by
os_file_set_nocache() introduced by your patch, and if it failed, do
srv_unix_file_flush_method = SRV_UNIX_O_DIRECT). This way we will at
least do fsync() on log files when setting O_DIRECT failed.
- the bug also affects 5.1. I have updated the bug accordingly
- after fixing the above, please put description to revision comments
in addition to MP. Note that it's ok to reference bug numbers by
their number (e.g. "bug #...") rather than by the full URL. It's
unambiguous, but shorter
- to answer your concerns about the test case, I don't think we should
have a regression test for this fix.
Vlad, some comments on the patch:
- I don't think we should crash the server after failing to set bugs.mysql. com/bug. php?id= 26662
O_DIRECT. This way you are essentially resurrecting
http://
The warning is relatively harmless, the InnoDB will just do buffered
I/O on file systems that do not support O_DIRECT such as tmpfs.
It only becomes a problem in XtraDB in case of ALL_O_DIRECT, because
in this case XtraDB does not flush the log files, even if O_DIRECT
fails (the correctness of not doing fsync() when O_DIRECT succeeds
is a separate issue).
So what we should do is to disable ALL_O_DIRECT (i.e. O_DIRECT for create_ func() check the value returned by file_set_ nocache( ) introduced by your patch, and if it failed, do unix_file_ flush_method = SRV_UNIX_O_DIRECT). This way we will at
log files) and switch to O_DIRECT (i.e. O_DIRECT on data files only)
if setting O_DIRECT on a log file fails. That is, essentially use
the fix suggested by Yasufumi, but perhaps a cleaner variant,
i.e. in os_file_
os_
srv_
least do fsync() on log files when setting O_DIRECT failed.
- the bug also affects 5.1. I have updated the bug accordingly
- after fixing the above, please put description to revision comments
in addition to MP. Note that it's ok to reference bug numbers by
their number (e.g. "bug #...") rather than by the full URL. It's
unambiguous, but shorter
- to answer your concerns about the test case, I don't think we should
have a regression test for this fix.