summaryrefslogtreecommitdiff
path: root/storage/innobase/buf/buf0dump.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/buf/buf0dump.cc')
-rw-r--r--storage/innobase/buf/buf0dump.cc118
1 files changed, 50 insertions, 68 deletions
diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc
index 945a1543b72..ea660ad3a50 100644
--- a/storage/innobase/buf/buf0dump.cc
+++ b/storage/innobase/buf/buf0dump.cc
@@ -47,7 +47,6 @@ Created April 08, 2011 Vasil Dimov
#include "mysql/service_wsrep.h" /* wsrep_recovery */
enum status_severity {
- STATUS_VERBOSE,
STATUS_INFO,
STATUS_ERR
};
@@ -120,7 +119,7 @@ buf_dump_status(
va_start(ap, fmt);
- ut_vsnprintf(
+ vsnprintf(
export_vars.innodb_buffer_pool_dump_status,
sizeof(export_vars.innodb_buffer_pool_dump_status),
fmt, ap);
@@ -133,9 +132,6 @@ buf_dump_status(
case STATUS_ERR:
ib::error() << export_vars.innodb_buffer_pool_dump_status;
break;
-
- case STATUS_VERBOSE:
- break;
}
va_end(ap);
@@ -162,7 +158,7 @@ buf_load_status(
va_start(ap, fmt);
- ut_vsnprintf(
+ vsnprintf(
export_vars.innodb_buffer_pool_load_status,
sizeof(export_vars.innodb_buffer_pool_load_status),
fmt, ap);
@@ -175,9 +171,6 @@ buf_load_status(
case STATUS_ERR:
ib::error() << export_vars.innodb_buffer_pool_load_status;
break;
-
- case STATUS_VERBOSE:
- break;
}
va_end(ap);
@@ -213,8 +206,8 @@ buf_dump_generate_path(
{
char buf[FN_REFLEN];
- ut_snprintf(buf, sizeof(buf), "%s%c%s", get_buf_dump_dir(),
- OS_PATH_SEPARATOR, srv_buf_dump_filename);
+ snprintf(buf, sizeof(buf), "%s%c%s", get_buf_dump_dir(),
+ OS_PATH_SEPARATOR, srv_buf_dump_filename);
os_file_type_t type;
bool exists = false;
@@ -240,14 +233,14 @@ buf_dump_generate_path(
if (srv_data_home_full[strlen(srv_data_home_full) - 1]
== OS_PATH_SEPARATOR) {
- ut_snprintf(path, path_size, "%s%s",
- srv_data_home_full,
- srv_buf_dump_filename);
+ snprintf(path, path_size, "%s%s",
+ srv_data_home_full,
+ srv_buf_dump_filename);
} else {
- ut_snprintf(path, path_size, "%s%c%s",
- srv_data_home_full,
- OS_PATH_SEPARATOR,
- srv_buf_dump_filename);
+ snprintf(path, path_size, "%s%c%s",
+ srv_data_home_full,
+ OS_PATH_SEPARATOR,
+ srv_buf_dump_filename);
}
}
}
@@ -276,8 +269,8 @@ buf_dump(
buf_dump_generate_path(full_filename, sizeof(full_filename));
- ut_snprintf(tmp_filename, sizeof(tmp_filename),
- "%s.incomplete", full_filename);
+ snprintf(tmp_filename, sizeof(tmp_filename),
+ "%s.incomplete", full_filename);
buf_dump_status(STATUS_INFO, "Dumping buffer pool(s) to %s",
full_filename);
@@ -298,8 +291,6 @@ buf_dump(
buf_dump_t* dump;
ulint n_pages;
ulint j;
- ulint limit;
- ulint counter;
buf_pool = buf_pool_from_array(i);
@@ -368,9 +359,6 @@ buf_dump(
buf_pool_mutex_exit(buf_pool);
- limit = (ulint)((double)n_pages * ((double)srv_buf_dump_status_frequency / (double)100));
- counter = 0;
-
for (j = 0; j < n_pages && !SHOULD_QUIT(); j++) {
ret = fprintf(f, ULINTPF "," ULINTPF "\n",
BUF_DUMP_SPACE(dump[j]),
@@ -384,23 +372,6 @@ buf_dump(
/* leave tmp_filename to exist */
return;
}
-
- counter++;
-
- /* Print buffer pool dump status only if
- srv_buf_dump_status_frequency is > 0 and
- we have processed that amount of pages. */
- if (srv_buf_dump_status_frequency &&
- counter == limit) {
- counter = 0;
- buf_dump_status(
- STATUS_VERBOSE,
- "Dumping buffer pool"
- " " ULINTPF "/%lu,"
- " page " ULINTPF "/" ULINTPF,
- i + 1, srv_buf_pool_instances,
- j + 1, n_pages);
- }
}
ut_free(dump);
@@ -442,6 +413,11 @@ buf_dump(
buf_dump_status(STATUS_INFO,
"Buffer pool(s) dump completed at %s", now);
+
+ /* Though dumping doesn't related to an incomplete load,
+ we reset this to 0 here to indicate that a shutdown can also perform
+ a dump */
+ export_vars.innodb_buffer_pool_load_incomplete = 0;
}
/*****************************************************************//**
@@ -605,6 +581,8 @@ buf_load()
rewind(f);
+ export_vars.innodb_buffer_pool_load_incomplete = 1;
+
for (i = 0; i < dump_n && !SHUTTING_DOWN(); i++) {
fscanf_ret = fscanf(f, ULINTPF "," ULINTPF,
&space_id, &page_no);
@@ -653,7 +631,7 @@ buf_load()
ut_sprintf_timestamp(now);
buf_load_status(STATUS_INFO,
"Buffer pool(s) load completed at %s"
- " (%s was empty)", now, full_filename);
+ " (%s was empty or had errors)", now, full_filename);
return;
}
@@ -718,21 +696,6 @@ buf_load()
os_aio_simulated_wake_handler_threads();
}
- /* Update the progress every 32 MiB, which is every Nth page,
- where N = 32*1024^2 / page_size. */
- static const ulint update_status_every_n_mb = 32;
- static const ulint update_status_every_n_pages
- = update_status_every_n_mb * 1024 * 1024
- / page_size.physical();
-
- if (i % update_status_every_n_pages == 0) {
- buf_load_status(STATUS_VERBOSE,
- "Loaded " ULINTPF "/" ULINTPF " pages",
- i + 1, dump_n);
- /* mysql_stage_set_work_completed(pfs_stage_progress,
- i); */
- }
-
if (buf_load_abort_flag) {
if (space != NULL) {
fil_space_release(space);
@@ -757,6 +720,12 @@ buf_load()
buf_load_throttle_if_needed(
&last_check_time, &last_activity_cnt, i);
+
+#ifdef UNIV_DEBUG
+ if ((i+1) >= srv_buf_pool_load_pages_abort) {
+ buf_load_abort_flag = 1;
+ }
+#endif
}
if (space != NULL) {
@@ -767,8 +736,23 @@ buf_load()
ut_sprintf_timestamp(now);
- buf_load_status(STATUS_INFO,
+ if (i == dump_n) {
+ buf_load_status(STATUS_INFO,
"Buffer pool(s) load completed at %s", now);
+ export_vars.innodb_buffer_pool_load_incomplete = 0;
+ } else if (!buf_load_abort_flag) {
+ buf_load_status(STATUS_INFO,
+ "Buffer pool(s) load aborted due to user instigated abort at %s",
+ now);
+ /* intentionally don't reset innodb_buffer_pool_load_incomplete
+ as we don't want a shutdown to save the buffer pool */
+ } else {
+ buf_load_status(STATUS_INFO,
+ "Buffer pool(s) load aborted due to shutdown at %s",
+ now);
+ /* intentionally don't reset innodb_buffer_pool_load_incomplete
+ as we want to abort without saving the buffer pool */
+ }
/* Make sure that estimated = completed when we end. */
/* mysql_stage_set_work_completed(pfs_stage_progress, dump_n); */
@@ -805,9 +789,6 @@ DECLARE_THREAD(buf_dump_thread)(void*)
pfs_register_thread(buf_dump_thread_key);
#endif */ /* UNIV_PFS_THREAD */
- buf_dump_status(STATUS_VERBOSE, "Dumping of buffer pool not started");
- buf_load_status(STATUS_VERBOSE, "Loading of buffer pool not started");
-
if (srv_buffer_pool_load_at_startup) {
#ifdef WITH_WSREP
@@ -840,15 +821,16 @@ DECLARE_THREAD(buf_dump_thread)(void*)
}
if (srv_buffer_pool_dump_at_shutdown && srv_fast_shutdown != 2) {
+ if (export_vars.innodb_buffer_pool_load_incomplete) {
+ buf_dump_status(STATUS_INFO,
+ "Dumping of buffer pool not started"
+ " as load was incomplete");
#ifdef WITH_WSREP
- if (!wsrep_recovery) {
+ } else if (wsrep_recovery) {
#endif /* WITH_WSREP */
-
- buf_dump(FALSE /* ignore shutdown down flag,
- keep going even if we are in a shutdown state */);
-#ifdef WITH_WSREP
+ } else {
+ buf_dump(FALSE/* do complete dump at shutdown */);
}
-#endif /* WITH_WSREP */
}
srv_buf_dump_thread_active = false;