Commit 26bf87c9 authored by unknown's avatar unknown

Merge with 3.23.53


Build-tools/Do-compile:
  Auto merged
innobase/btr/btr0cur.c:
  Auto merged
innobase/os/os0file.c:
  Auto merged
innobase/srv/srv0srv.c:
  Auto merged
innobase/sync/sync0arr.c:
  Auto merged
innobase/trx/trx0undo.c:
  Auto merged
sql/ha_innodb.h:
  Auto merged
Docs/manual.texi:
  merge
sql/ha_innodb.cc:
  merge
sql/mysqld.cc:
  merge
parents d221f3ff 6a06c4c5
...@@ -51289,6 +51289,9 @@ Linux-x86 binaries. ...@@ -51289,6 +51289,9 @@ Linux-x86 binaries.
@itemize @bullet @itemize @bullet
@item @item
Fixed buffer overflow problem if someone specified a too long datadir
parameter to mysqld
@item
Add missing @code{<row>} tags for @code{mysqldump} XML output. Add missing @code{<row>} tags for @code{mysqldump} XML output.
@item @item
Fixed problem with @code{crash-me} and @code{gcc} 3.0.4. Fixed problem with @code{crash-me} and @code{gcc} 3.0.4.
...@@ -302,6 +302,9 @@ btr_cur_search_to_nth_level( ...@@ -302,6 +302,9 @@ btr_cur_search_to_nth_level(
rw_lock_s_unlock(&btr_search_latch); rw_lock_s_unlock(&btr_search_latch);
} }
/* Store the position of the tree latch we push to mtr so that we
know how to release it when we have latched leaf node(s) */
savepoint = mtr_set_savepoint(mtr); savepoint = mtr_set_savepoint(mtr);
tree = index->tree; tree = index->tree;
...@@ -506,12 +509,18 @@ btr_cur_open_at_index_side( ...@@ -506,12 +509,18 @@ btr_cur_open_at_index_side(
ulint root_height = 0; /* remove warning */ ulint root_height = 0; /* remove warning */
rec_t* node_ptr; rec_t* node_ptr;
ulint estimate; ulint estimate;
ulint savepoint;
estimate = latch_mode & BTR_ESTIMATE; estimate = latch_mode & BTR_ESTIMATE;
latch_mode = latch_mode & ~BTR_ESTIMATE; latch_mode = latch_mode & ~BTR_ESTIMATE;
tree = index->tree; tree = index->tree;
/* Store the position of the tree latch we push to mtr so that we
know how to release it when we have latched the leaf node */
savepoint = mtr_set_savepoint(mtr);
if (latch_mode == BTR_MODIFY_TREE) { if (latch_mode == BTR_MODIFY_TREE) {
mtr_x_lock(dict_tree_get_lock(tree), mtr); mtr_x_lock(dict_tree_get_lock(tree), mtr);
} else { } else {
...@@ -544,6 +553,22 @@ btr_cur_open_at_index_side( ...@@ -544,6 +553,22 @@ btr_cur_open_at_index_side(
if (height == 0) { if (height == 0) {
btr_cur_latch_leaves(tree, page, space, page_no, btr_cur_latch_leaves(tree, page, space, page_no,
latch_mode, cursor, mtr); latch_mode, cursor, mtr);
/* In versions <= 3.23.52 we had forgotten to
release the tree latch here. If in an index scan
we had to scan far to find a record visible to the
current transaction, that could starve others
waiting for the tree latch. */
if ((latch_mode != BTR_MODIFY_TREE)
&& (latch_mode != BTR_CONT_MODIFY_TREE)) {
/* Release the tree s-latch */
mtr_release_s_latch_at_savepoint(
mtr, savepoint,
dict_tree_get_lock(tree));
}
} }
if (from_left) { if (from_left) {
......
...@@ -2278,7 +2278,7 @@ os_aio_simulated_handle( ...@@ -2278,7 +2278,7 @@ os_aio_simulated_handle(
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
" InnoDB: ERROR: The page to be written seems corrupt!\n"); " InnoDB: ERROR: The page to be written seems corrupt!\n");
page_print(combined_buf + len2); buf_page_print(combined_buf + len2);
fprintf(stderr, fprintf(stderr,
"InnoDB: ERROR: The page to be written seems corrupt!\n"); "InnoDB: ERROR: The page to be written seems corrupt!\n");
} }
......
...@@ -49,6 +49,12 @@ os_event_create( ...@@ -49,6 +49,12 @@ os_event_create(
TRUE, /* Manual reset */ TRUE, /* Manual reset */
FALSE, /* Initial state nonsignaled */ FALSE, /* Initial state nonsignaled */
name); name);
if (!event) {
fprintf(stderr,
"InnoDB: Could not create a Windows event semaphore; Windows error %lu\n",
(ulint)GetLastError());
}
ut_a(event); ut_a(event);
return(event); return(event);
......
...@@ -2825,7 +2825,11 @@ srv_master_thread( ...@@ -2825,7 +2825,11 @@ srv_master_thread(
srv_main_thread_op_info = (char*)"purging"; srv_main_thread_op_info = (char*)"purging";
n_pages_purged = trx_purge(); if (srv_fast_shutdown && srv_shutdown_state > 0) {
n_pages_purged = 0;
} else {
n_pages_purged = trx_purge();
}
srv_main_thread_op_info = (char*)"reserving kernel mutex"; srv_main_thread_op_info = (char*)"reserving kernel mutex";
...@@ -2837,7 +2841,12 @@ srv_master_thread( ...@@ -2837,7 +2841,12 @@ srv_master_thread(
mutex_exit(&kernel_mutex); mutex_exit(&kernel_mutex);
srv_main_thread_op_info = (char*)"doing insert buffer merge"; srv_main_thread_op_info = (char*)"doing insert buffer merge";
n_bytes_merged = ibuf_contract_for_n_pages(TRUE, 20);
if (srv_fast_shutdown && srv_shutdown_state > 0) {
n_bytes_merged = 0;
} else {
n_bytes_merged = ibuf_contract_for_n_pages(TRUE, 20);
}
srv_main_thread_op_info = (char*)"reserving kernel mutex"; srv_main_thread_op_info = (char*)"reserving kernel mutex";
......
...@@ -924,7 +924,7 @@ sync_array_print_long_waits(void) ...@@ -924,7 +924,7 @@ sync_array_print_long_waits(void)
} }
if (cell->wait_object != NULL if (cell->wait_object != NULL
&& difftime(time(NULL), cell->reservation_time) > 420) { && difftime(time(NULL), cell->reservation_time) > 600) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Error: semaphore wait has lasted > 600 seconds\n" "InnoDB: Error: semaphore wait has lasted > 600 seconds\n"
......
...@@ -401,6 +401,10 @@ trx_undo_seg_create( ...@@ -401,6 +401,10 @@ trx_undo_seg_create(
slot_no = trx_rsegf_undo_find_free(rseg_hdr, mtr); slot_no = trx_rsegf_undo_find_free(rseg_hdr, mtr);
if (slot_no == ULINT_UNDEFINED) { if (slot_no == ULINT_UNDEFINED) {
ut_print_timestamp(stderr);
fprintf(stderr,
"InnoDB: Warning: cannot find a free slot for an undo log. Do you have too\n"
"InnoDB: many active transactions running concurrently?");
return(NULL); return(NULL);
} }
...@@ -1532,9 +1536,6 @@ trx_undo_assign_undo( ...@@ -1532,9 +1536,6 @@ trx_undo_assign_undo(
mutex_exit(&(rseg->mutex)); mutex_exit(&(rseg->mutex));
mtr_commit(&mtr); mtr_commit(&mtr);
fprintf(stderr, "InnoDB: no undo log slots free\n");
ut_a(0);
return(NULL); return(NULL);
} }
} }
......
...@@ -101,11 +101,18 @@ char* innobase_unix_file_flush_method = NULL; ...@@ -101,11 +101,18 @@ char* innobase_unix_file_flush_method = NULL;
/* Below we have boolean-valued start-up parameters, and their default /* Below we have boolean-valued start-up parameters, and their default
values */ values */
uint innobase_flush_log_at_trx_commit = 0;
my_bool innobase_log_archive = FALSE; my_bool innobase_log_archive = FALSE;
my_bool innobase_use_native_aio = FALSE; my_bool innobase_use_native_aio = FALSE;
my_bool innobase_fast_shutdown = TRUE; my_bool innobase_fast_shutdown = TRUE;
/* innodb_flush_log_at_trx_commit can now have 3 values:
0 : write to the log file once per second and flush it to disk;
1 : write to the log file at each commit and flush it to disk;
2 : write to the log file at each commit, but flush to disk only once per
second */
uint innobase_flush_log_at_trx_commit = 0;
/* /*
Set default InnoDB data file size to 10 MB and let it be Set default InnoDB data file size to 10 MB and let it be
auto-extending. Thus users can use InnoDB without having to auto-extending. Thus users can use InnoDB without having to
......
...@@ -182,6 +182,7 @@ extern long innobase_force_recovery, innobase_thread_concurrency; ...@@ -182,6 +182,7 @@ extern long innobase_force_recovery, innobase_thread_concurrency;
extern char *innobase_data_home_dir, *innobase_data_file_path; extern char *innobase_data_home_dir, *innobase_data_file_path;
extern char *innobase_log_group_home_dir, *innobase_log_arch_dir; extern char *innobase_log_group_home_dir, *innobase_log_arch_dir;
extern char *innobase_unix_file_flush_method; extern char *innobase_unix_file_flush_method;
extern long innobase_flush_log_at_trx_commit;
/* The following variables have to be my_bool for SHOW VARIABLES to work */ /* The following variables have to be my_bool for SHOW VARIABLES to work */
extern my_bool innobase_log_archive, extern my_bool innobase_log_archive,
innobase_use_native_aio, innobase_fast_shutdown; innobase_use_native_aio, innobase_fast_shutdown;
......
...@@ -3036,10 +3036,10 @@ struct my_option my_long_options[] = ...@@ -3036,10 +3036,10 @@ struct my_option my_long_options[] =
"Set to 1 if you want to have logs archived", 0, 0, 0, GET_LONG, OPT_ARG, "Set to 1 if you want to have logs archived", 0, 0, 0, GET_LONG, OPT_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
{"innodb_flush_log_at_trx_commit", OPT_INNODB_FLUSH_LOG_AT_TRX_COMMIT, {"innodb_flush_log_at_trx_commit", OPT_INNODB_FLUSH_LOG_AT_TRX_COMMIT,
"Set to 0 if you don't want to flush logs", "Set to 0 (write and flush once per second), 1 (write and flush at each commit) or 2 (write at commit, flush once per second)",
(gptr*) &innobase_flush_log_at_trx_commit, (gptr*) &innobase_flush_log_at_trx_commit,
(gptr*) &innobase_flush_log_at_trx_commit, (gptr*) &innobase_flush_log_at_trx_commit,
0, GET_INT, OPT_ARG, 0, 0, 2, 0, 0, 0}, 0, GET_UINT, OPT_ARG, 0, 0, 2, 0, 0, 0},
{"innodb_flush_method", OPT_INNODB_FLUSH_METHOD, {"innodb_flush_method", OPT_INNODB_FLUSH_METHOD,
"With which method to flush data", (gptr*) &innobase_unix_file_flush_method, "With which method to flush data", (gptr*) &innobase_unix_file_flush_method,
(gptr*) &innobase_unix_file_flush_method, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, (gptr*) &innobase_unix_file_flush_method, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
......
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