Commit 44d8fe96 authored by Michael Widenius's avatar Michael Widenius

Don't abort InnoDB/XtraDB if one can't allocate resources for AIO

- Better error messages

This fixes that one again can run the test systems with many threads without having to increase fs.aio-max-nr.


mysql-test/include/mtr_check.sql:
  Ignore the INNODB_USE_NATIVE_AIO variable (may change during execution)
mysql-test/mysql-test-run.pl:
  Ignore warnings for failure to setup AIO
storage/innobase/os/os0file.c:
  Continue without AIO even if we can't allocate resources for AIO
storage/xtradb/os/os0file.c:
  Continue without AIO even if we can't allocate resources for AIO
storage/xtradb/srv/srv0start.c:
  Give an error message (instead of core dump) if AIO can't be initialized
parent 07209717
...@@ -30,6 +30,7 @@ BEGIN ...@@ -30,6 +30,7 @@ BEGIN
WHERE variable_name NOT IN ('timestamp', 'innodb_file_format_max') WHERE variable_name NOT IN ('timestamp', 'innodb_file_format_max')
AND variable_name not like "Last_IO_Err*" AND variable_name not like "Last_IO_Err*"
AND variable_name != 'INNODB_IBUF_MAX_SIZE' AND variable_name != 'INNODB_IBUF_MAX_SIZE'
AND variable_name != 'INNODB_USE_NATIVE_AIO'
ORDER BY variable_name; ORDER BY variable_name;
-- Dump all databases, there should be none -- Dump all databases, there should be none
......
...@@ -4738,6 +4738,9 @@ sub extract_warning_lines ($$) { ...@@ -4738,6 +4738,9 @@ sub extract_warning_lines ($$) {
qr|Aborted connection|, qr|Aborted connection|,
qr|table.*is full|, qr|table.*is full|,
qr|Linux Native AIO|, # warning that aio does not work on /dev/shm qr|Linux Native AIO|, # warning that aio does not work on /dev/shm
qr|Error: io_setup\(\) failed|,
qr|Warning: io_setup\(\) failed|,
qr|Warning: io_setup\(\) attempt|,
); );
my $matched_lines= []; my $matched_lines= [];
......
...@@ -3361,12 +3361,23 @@ os_aio_array_create( ...@@ -3361,12 +3361,23 @@ os_aio_array_create(
if (!os_aio_linux_create_io_ctx(n/n_segments, if (!os_aio_linux_create_io_ctx(n/n_segments,
&array->aio_ctx[i])) { &array->aio_ctx[i])) {
/* If something bad happened during aio setup /* If something bad happened during aio setup
we should call it a day and return right away. we disable linux native aio.
We don't care about any leaks because a failure The disadvantage will be a small memory leak
to initialize the io subsystem means that the at shutdown but that's ok compared to a crash
server (or atleast the innodb storage engine) or a not working server.
is not going to startup. */ This frequently happens when running the test suite
return(NULL); with many threads on a system with low fs.aio-max-nr!
*/
fprintf(stderr,
" InnoDB: Warning: Linux Native AIO disabled "
"because os_aio_linux_create_io_ctx() "
"failed. To get rid of this warning you can "
"try increasing system "
"fs.aio-max-nr to 1048576 or larger or "
"setting innodb_use_native_aio = 0 in my.cnf\n");
srv_use_native_aio = FALSE;
goto skip_native_aio;
} }
} }
......
...@@ -3463,12 +3463,23 @@ os_aio_array_create( ...@@ -3463,12 +3463,23 @@ os_aio_array_create(
if (!os_aio_linux_create_io_ctx(n/n_segments, if (!os_aio_linux_create_io_ctx(n/n_segments,
&array->aio_ctx[i])) { &array->aio_ctx[i])) {
/* If something bad happened during aio setup /* If something bad happened during aio setup
we should call it a day and return right away. we disable linux native aio.
We don't care about any leaks because a failure The disadvantage will be a small memory leak
to initialize the io subsystem means that the at shutdown but that's ok compared to a crash
server (or atleast the innodb storage engine) or a not working server.
is not going to startup. */ This frequently happens when running the test suite
return(NULL); with many threads on a system with low fs.aio-max-nr!
*/
fprintf(stderr,
" InnoDB: Warning: Linux Native AIO disabled "
"because os_aio_linux_create_io_ctx() "
"failed. To get rid of this warning you can "
"try increasing system "
"fs.aio-max-nr to 1048576 or larger or "
"setting innodb_use_native_aio = 0 in my.cnf\n");
srv_use_native_aio = FALSE;
goto skip_native_aio;
} }
} }
......
...@@ -1509,10 +1509,20 @@ innobase_start_or_create_for_mysql(void) ...@@ -1509,10 +1509,20 @@ innobase_start_or_create_for_mysql(void)
} }
# endif /* __WIN__ */ # endif /* __WIN__ */
os_aio_init(io_limit, if (!os_aio_init(io_limit,
srv_n_read_io_threads, srv_n_read_io_threads,
srv_n_write_io_threads, srv_n_write_io_threads,
SRV_MAX_N_PENDING_SYNC_IOS); SRV_MAX_N_PENDING_SYNC_IOS))
{
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Fatal error: cannot initialize AIO"
" sub-system\n");
#if defined(LINUX_NATIVE_AIO)
fprintf(stderr, "You can try increasing system fs.aio-max-nr to 1048576 or larger or setting innodb_use_native_aio = 0 in my.cnf\n");
#endif
return(DB_ERROR);
}
fil_init(srv_file_per_table ? 50000 : 5000, fil_init(srv_file_per_table ? 50000 : 5000,
srv_max_n_open_files); srv_max_n_open_files);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment