• Alfranio Correia's avatar
    BUG#56343 binlog_cache_use status is bigger than expected · 8504580c
    Alfranio Correia authored
    The binlog_cache_use is incremented twice when changes to a transactional table
    are committed, i.e. TC_LOG_BINLOG::log_xid calls is called. The problem happens
    because log_xid calls both binlog_flush_stmt_cache and binlog_flush_trx_cache
    without checking if such caches are empty thus unintentionally increasing the
    binlog_cache_use value twice.
    
    To fix the problem we avoided incrementing the binlog_cache_use if the cache is
    empty. We also decided to increment binlog_cache_use when the cache is truncated
    as the cache is used although its content is discarded and is not written to the
    binary log.
    
    Note that binlog_cache_use is incremented for both types of cache, transactional
    and non-transactional and that the behavior presented in this patch also applies
    to the binlog_cache_disk_use.
    
    Finally, we re-organized the code around the functions binlog_flush_trx_cache and
    binlog_flush_stmt_cache.
    
    mysql-test/extra/binlog_tests/binlog_cache_stat.test:
      Updated the test case with comments and additional tests to check both
      transactional and non-transactional changes and what happens when a 
      is transaction either committed or aborted.
    mysql-test/suite/binlog/r/binlog_innodb.result:
      Updated the result file.
    mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result:
      Updated the result file.
    mysql-test/suite/binlog/r/binlog_row_cache_stat.result:
      Updated the result file.
    mysql-test/suite/binlog/r/binlog_stm_cache_stat.result:
      Updated the result file.
    mysql-test/suite/binlog/t/binlog_mixed_cache_stat.test:
      Updated the test case with a new source file.
    mysql-test/suite/binlog/t/binlog_row_cache_stat.test:
      Updated the test case with a new source file.
    mysql-test/suite/binlog/t/binlog_stm_cache_stat.test:
      Updated the test case with a new source file.
    sql/log_event.cc:
      Introduced debug information to check if Query_log_event("BEGIN"),
      Query_log_event("COMMIT") and Query_log_event("ROLLBACK").
    sql/log_event.h:
      Guaranteed Xid_log_event is always classified as a transactional event.
    8504580c
binlog_stm_cache_stat.test 240 Bytes