Commit 03a7a2dd authored by mats@romeo.(none)'s avatar mats@romeo.(none)

BUG#26286 (row-based logging scales worse than statement-based logging):

Submitting patch on Guilhem's behalf (he found the solution).
  
Correcting a typo that caused very big increases in memory usage when
more memory needed to be allocated for row-based events. Also correcting
a border case check when more memory needed to be allocated.
parent 54b04ff5
...@@ -5515,13 +5515,13 @@ int Rows_log_event::do_add_row_data(byte *const row_data, ...@@ -5515,13 +5515,13 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
DBUG_ASSERT(m_rows_cur <= m_rows_end); DBUG_ASSERT(m_rows_cur <= m_rows_end);
/* The cast will always work since m_rows_cur <= m_rows_end */ /* The cast will always work since m_rows_cur <= m_rows_end */
if (static_cast<my_size_t>(m_rows_end - m_rows_cur) < length) if (static_cast<my_size_t>(m_rows_end - m_rows_cur) <= length)
{ {
my_size_t const block_size= 1024; my_size_t const block_size= 1024;
my_ptrdiff_t const old_alloc= m_rows_end - m_rows_buf; my_ptrdiff_t const old_alloc= m_rows_end - m_rows_buf;
my_ptrdiff_t const cur_size= m_rows_cur - m_rows_buf; my_ptrdiff_t const cur_size= m_rows_cur - m_rows_buf;
my_ptrdiff_t const new_alloc= my_ptrdiff_t const new_alloc=
block_size * ((cur_size + length) / block_size + block_size - 1); block_size * ((cur_size + length + block_size - 1) / block_size);
byte* const new_buf= (byte*)my_realloc((gptr)m_rows_buf, new_alloc, byte* const new_buf= (byte*)my_realloc((gptr)m_rows_buf, new_alloc,
MYF(MY_ALLOW_ZERO_PTR|MY_WME)); MYF(MY_ALLOW_ZERO_PTR|MY_WME));
...@@ -5542,7 +5542,7 @@ int Rows_log_event::do_add_row_data(byte *const row_data, ...@@ -5542,7 +5542,7 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
m_rows_end= m_rows_buf + new_alloc; m_rows_end= m_rows_buf + new_alloc;
} }
DBUG_ASSERT(m_rows_cur + length < m_rows_end); DBUG_ASSERT(m_rows_cur + length <= m_rows_end);
memcpy(m_rows_cur, row_data, length); memcpy(m_rows_cur, row_data, length);
m_rows_cur+= length; m_rows_cur+= length;
m_row_count++; m_row_count++;
......
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