diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-06-29 22:24:48 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-06-29 22:24:48 +0300 |
commit | 859714e73d00e24268ac180341612e4ac9ac5788 (patch) | |
tree | fba9fa38f52717ab6c1c83b6985c0bcd9ed5eb5a | |
parent | 8143ef1b7ca144f828f0a1d22671a76685825166 (diff) | |
download | mariadb-git-859714e73d00e24268ac180341612e4ac9ac5788.tar.gz |
Simplify up InnoDB redo log system startup and shutdown
recv_sys_init(): Remove the parameter.
recv_sys_create(): Merge to recv_sys_init().
recv_sys_mem_free(): Merge to recv_sys_close().
log_mem_free(): Merge to log_shutdown().
-rw-r--r-- | storage/innobase/include/log0log.h | 11 | ||||
-rw-r--r-- | storage/innobase/include/log0recv.h | 23 | ||||
-rw-r--r-- | storage/innobase/log/log0log.cc | 22 | ||||
-rw-r--r-- | storage/innobase/log/log0recv.cc | 61 | ||||
-rw-r--r-- | storage/innobase/srv/srv0start.cc | 6 |
5 files changed, 25 insertions, 98 deletions
diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h index 05e53e23f28..32668d7b929 100644 --- a/storage/innobase/include/log0log.h +++ b/storage/innobase/include/log0log.h @@ -407,16 +407,9 @@ Closes all log groups. */ void log_group_close_all(void); /*=====================*/ -/********************************************************//** -Shutdown the log system but do not release all the memory. */ -void -log_shutdown(void); -/*==============*/ -/********************************************************//** -Free the log system data structures. */ +/** Shut down the redo log subsystem. */ void -log_mem_free(void); -/*==============*/ +log_shutdown(); /** Whether to generate and require checksums on the redo log pages */ extern my_bool innodb_log_checksums; diff --git a/storage/innobase/include/log0recv.h b/storage/innobase/include/log0recv.h index 784699279d4..bacfb86cc07 100644 --- a/storage/innobase/include/log0recv.h +++ b/storage/innobase/include/log0recv.h @@ -81,27 +81,12 @@ recv_reset_logs( OS_FILE_LOG_BLOCK_SIZE, after which we add LOG_BLOCK_HDR_SIZE */ -/********************************************************//** -Creates the recovery system. */ -void -recv_sys_create(void); -/*=================*/ -/**********************************************************//** -Release recovery system mutexes. */ -void -recv_sys_close(void); -/*================*/ -/********************************************************//** -Frees the recovery system memory. */ +/** Clean up after recv_sys_init() */ void -recv_sys_mem_free(void); -/*===================*/ -/********************************************************//** -Inits the recovery system for a recovery operation. */ +recv_sys_close(); +/** Initialize the redo log recovery subsystem. */ void -recv_sys_init( -/*==========*/ - ulint available_memory); /*!< in: available memory in bytes */ +recv_sys_init(); /********************************************************//** Frees the recovery system. */ void diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 4f924e064a8..71c9b23c439 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -2261,11 +2261,9 @@ log_group_close_all(void) log_group_close(&log_sys->log); } -/********************************************************//** -Shutdown the log system but do not release all the memory. */ +/** Shut down the redo log subsystem. */ void -log_shutdown(void) -/*==============*/ +log_shutdown() { log_group_close_all(); @@ -2289,20 +2287,8 @@ log_shutdown(void) } recv_sys_close(); -} - -/********************************************************//** -Free the log system data structures. */ -void -log_mem_free(void) -/*==============*/ -{ - if (log_sys != NULL) { - recv_sys_mem_free(); - ut_free(log_sys); - - log_sys = NULL; - } + ut_free(log_sys); + log_sys = NULL; } /******************************************************//** diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 71ce7c82a65..021d897e172 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -415,31 +415,9 @@ fil_name_parse( return(end_ptr); } -/********************************************************//** -Creates the recovery system. */ -void -recv_sys_create(void) -/*=================*/ -{ - if (recv_sys != NULL) { - - return; - } - - recv_sys = static_cast<recv_sys_t*>(ut_zalloc_nokey(sizeof(*recv_sys))); - - mutex_create(LATCH_ID_RECV_SYS, &recv_sys->mutex); - mutex_create(LATCH_ID_RECV_WRITER, &recv_sys->writer_mutex); - - recv_sys->heap = NULL; - recv_sys->addr_hash = NULL; -} - -/********************************************************//** -Release recovery system mutexes. */ +/** Clean up after recv_sys_init() */ void -recv_sys_close(void) -/*================*/ +recv_sys_close() { if (recv_sys != NULL) { recv_sys->dblwr.pages.clear(); @@ -578,56 +556,41 @@ DECLARE_THREAD(recv_writer_thread)( OS_THREAD_DUMMY_RETURN; } -/************************************************************ -Inits the recovery system for a recovery operation. */ +/** Initialize the redo log recovery subsystem. */ void -recv_sys_init( -/*==========*/ - ulint available_memory) /*!< in: available memory in bytes */ +recv_sys_init() { - if (recv_sys->heap != NULL) { + ut_ad(recv_sys == NULL); - return; - } + recv_sys = static_cast<recv_sys_t*>(ut_zalloc_nokey(sizeof(*recv_sys))); - mutex_enter(&(recv_sys->mutex)); + mutex_create(LATCH_ID_RECV_SYS, &recv_sys->mutex); + mutex_create(LATCH_ID_RECV_WRITER, &recv_sys->writer_mutex); - recv_sys->heap = mem_heap_create_typed(256, - MEM_HEAP_FOR_RECV_SYS); + recv_sys->heap = mem_heap_create_typed(256, MEM_HEAP_FOR_RECV_SYS); if (!srv_read_only_mode) { recv_sys->flush_start = os_event_create(0); recv_sys->flush_end = os_event_create(0); } + ulint size = buf_pool_get_curr_size(); /* Set appropriate value of recv_n_pool_free_frames. */ - if (buf_pool_get_curr_size() >= (10 * 1024 * 1024)) { + if (size >= 10 << 20) { /* Buffer pool of size greater than 10 MB. */ recv_n_pool_free_frames = 512; } recv_sys->buf = static_cast<byte*>( ut_malloc_nokey(RECV_PARSING_BUF_SIZE)); - recv_sys->len = 0; - recv_sys->recovered_offset = 0; - recv_sys->addr_hash = hash_create(available_memory / 512); - recv_sys->n_addrs = 0; - - recv_sys->apply_log_recs = FALSE; - recv_sys->apply_batch_on = FALSE; - - recv_sys->found_corrupt_log = false; - recv_sys->found_corrupt_fs = false; - recv_sys->mlog_checkpoint_lsn = 0; + recv_sys->addr_hash = hash_create(size / 512); recv_sys->progress_time = ut_time(); recv_max_page_lsn = 0; /* Call the constructor for recv_sys_t::dblwr member */ new (&recv_sys->dblwr) recv_dblwr_t(); - - mutex_exit(&(recv_sys->mutex)); } /** Empty a fully processed hash table. */ diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index dfdea96d85d..1d72a700bba 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -1831,8 +1831,7 @@ innobase_start_or_create_for_mysql() fsp_init(); log_sys_init(); - recv_sys_create(); - recv_sys_init(buf_pool_get_curr_size()); + recv_sys_init(); lock_sys_create(srv_lock_table_size); /* Create i/o-handler threads: */ @@ -2907,7 +2906,8 @@ innodb_shutdown() /* 4. Free all allocated memory */ pars_lexer_close(); - log_mem_free(); + recv_sys_close(); + ut_ad(buf_pool_ptr || !srv_was_started); if (buf_pool_ptr) { buf_pool_free(srv_buf_pool_instances); |