diff options
Diffstat (limited to 'storage/innobase/mtr/mtr0log.cc')
| -rw-r--r-- | storage/innobase/mtr/mtr0log.cc | 76 |
1 files changed, 33 insertions, 43 deletions
diff --git a/storage/innobase/mtr/mtr0log.cc b/storage/innobase/mtr/mtr0log.cc index 92ab6466fc3..b789e24f19c 100644 --- a/storage/innobase/mtr/mtr0log.cc +++ b/storage/innobase/mtr/mtr0log.cc @@ -144,7 +144,7 @@ mlog_parse_nbytes( offset = mach_read_from_2(ptr); ptr += 2; - if (offset >= UNIV_PAGE_SIZE) { + if (offset >= srv_page_size) { recv_sys->found_corrupt_log = TRUE; return(NULL); @@ -312,7 +312,7 @@ mlog_write_string( mtr_t* mtr) /*!< in: mini-transaction handle */ { ut_ad(ptr && mtr); - ut_a(len < UNIV_PAGE_SIZE); + ut_a(len < srv_page_size); memcpy(ptr, str, len); @@ -332,7 +332,7 @@ mlog_log_string( byte* log_ptr; ut_ad(ptr && mtr); - ut_ad(len <= UNIV_PAGE_SIZE); + ut_ad(len <= srv_page_size); log_ptr = mlog_open(mtr, 30); @@ -383,7 +383,7 @@ mlog_parse_string( len = mach_read_from_2(ptr); ptr += 2; - if (offset >= UNIV_PAGE_SIZE || len + offset > UNIV_PAGE_SIZE) { + if (offset >= srv_page_size || len + offset > srv_page_size) { recv_sys->found_corrupt_log = TRUE; return(NULL); @@ -426,11 +426,20 @@ mlog_open_and_write_index( ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table)); + mtr->set_modified(); + switch (mtr->get_log_mode()) { + case MTR_LOG_NONE: + case MTR_LOG_NO_REDO: + return NULL; + case MTR_LOG_SHORT_INSERTS: + ut_ad(0); + /* fall through */ + case MTR_LOG_ALL: + break; + } + if (!page_rec_is_comp(rec)) { - log_start = log_ptr = mlog_open(mtr, 11 + size); - if (!log_ptr) { - return(NULL); /* logging is disabled */ - } + log_start = log_ptr = mtr->get_log()->open(11 + size); log_ptr = mlog_write_initial_log_record_fast(rec, type, log_ptr, mtr); log_end = log_ptr + 11 + size; @@ -439,11 +448,8 @@ mlog_open_and_write_index( bool is_instant = index->is_instant(); ulint n = dict_index_get_n_fields(index); ulint total = 11 + (is_instant ? 2 : 0) + size + (n + 2) * 2; - ulint alloc = total; - - if (alloc > mtr_buf_t::MAX_DATA_SIZE) { - alloc = mtr_buf_t::MAX_DATA_SIZE; - } + ulint alloc = std::min(total, + ulint(mtr_buf_t::MAX_DATA_SIZE)); const bool is_leaf = page_is_leaf(page_align(rec)); @@ -453,12 +459,7 @@ mlog_open_and_write_index( n = DICT_INDEX_SPATIAL_NODEPTR_SIZE; } - log_start = log_ptr = mlog_open(mtr, alloc); - - if (!log_ptr) { - return(NULL); /* logging is disabled */ - } - + log_start = log_ptr = mtr->get_log()->open(alloc); log_end = log_ptr + alloc; log_ptr = mlog_write_initial_log_record_fast( @@ -477,16 +478,10 @@ mlog_open_and_write_index( } log_ptr += 2; - - if (is_leaf) { - mach_write_to_2( - log_ptr, dict_index_get_n_unique_in_tree(index)); - } else { - mach_write_to_2( - log_ptr, - dict_index_get_n_unique_in_tree_nonleaf(index)); - } - + mach_write_to_2( + log_ptr, is_leaf + ? dict_index_get_n_unique_in_tree(index) + : dict_index_get_n_unique_in_tree_nonleaf(index)); log_ptr += 2; for (i = 0; i < n; i++) { @@ -509,19 +504,14 @@ mlog_open_and_write_index( } if (log_ptr + 2 > log_end) { mlog_close(mtr, log_ptr); - ut_a(total > (ulint) (log_ptr - log_start)); - total -= log_ptr - log_start; - alloc = total; - - if (alloc > mtr_buf_t::MAX_DATA_SIZE) { - alloc = mtr_buf_t::MAX_DATA_SIZE; - } - - log_start = log_ptr = mlog_open(mtr, alloc); - - if (!log_ptr) { - return(NULL); /* logging is disabled */ - } + ut_a(total > ulint(log_ptr - log_start)); + total -= ulint(log_ptr - log_start); + alloc = std::min( + total, + ulint(mtr_buf_t::MAX_DATA_SIZE)); + + log_start = log_ptr = mtr->get_log()->open( + alloc); log_end = log_ptr + alloc; } mach_write_to_2(log_ptr, len); @@ -641,7 +631,7 @@ mlog_parse_index( ind->get_n_nullable(n_core_fields)); } else { ind->n_core_null_bytes = UT_BITS_IN_BYTES( - ind->n_nullable); + unsigned(ind->n_nullable)); ind->n_core_fields = ind->n_fields; } } |
