mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#12662190:COM_COMMIT IS NOT INCREMENTED FROM THE BINARY LOGS ON SLAVE, COM_BEGIN IS
PROBLEM: -------- When binary log statements are replayed on the slave, BEGIN is represented in com_counters but COMMIT is not. Similarly in 'ROW' based replication 'INSERT','UPDATE',and 'DELETE' com_counters are not getting incremented when the binary log statements are replayed at slave. ANALYSIS: --------- In 'ROW' based replication for COMMIT,INSERT,UPDATE and DELETE operations following special events are invoked. Xid_log_event,Write_rows_log_event,Update_rows_log_event,Update_rows_log_event. The above mentioned events doesn't go through the parser where the 'COM_COUNTERS' are incremented. FIX: ----- Increment statements are added at appropriate events. Respective functions are listed below. 'Xid_log_event::do_apply_event' 'Write_rows_log_event::do_before_row_operations' 'Update_rows_log_event::do_before_row_operations' 'Delete_rows_log_event::do_before_row_operations' sql/log_event.cc: Added code to increment counts for 'COM_INSERT','COM_UPDATE', 'COM_DELETE' and 'COM_COMMIT'during ROW based replicaiton
This commit is contained in:
@ -6,6 +6,15 @@
|
|||||||
# First we test tables with only an index.
|
# First we test tables with only an index.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#BUG#12662190 - COM_COMMIT IS NOT INCREMENTED FROM THE BINARY LOGS ON SLAVE, COM_BEGIN IS
|
||||||
|
#Testing command counters -BEFORE
|
||||||
|
#Storing the before counts of Slave
|
||||||
|
connection slave;
|
||||||
|
let $slave_com_commit_before= query_get_value(SHOW GLOBAL STATUS LIKE 'com_commit', Value, 1);
|
||||||
|
let $slave_com_insert_before= query_get_value(SHOW GLOBAL STATUS LIKE 'com_insert', Value, 1);
|
||||||
|
let $slave_com_delete_before= query_get_value(SHOW GLOBAL STATUS LIKE 'com_delete', Value, 1);
|
||||||
|
let $slave_com_update_before= query_get_value(SHOW GLOBAL STATUS LIKE 'com_update', Value, 1);
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
eval CREATE TABLE t1 (C1 CHAR(1), C2 CHAR(1), INDEX (C1)$extra_index_t1) ENGINE = $type ;
|
eval CREATE TABLE t1 (C1 CHAR(1), C2 CHAR(1), INDEX (C1)$extra_index_t1) ENGINE = $type ;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
@ -40,6 +49,32 @@ SELECT * FROM t1 ORDER BY C1,C2;
|
|||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
SELECT * FROM t1 ORDER BY C1,C2;
|
SELECT * FROM t1 ORDER BY C1,C2;
|
||||||
|
|
||||||
|
#BUG#12662190 - COM_COMMIT IS NOT INCREMENTED FROM THE BINARY LOGS ON SLAVE, COM_BEGIN IS
|
||||||
|
#Testing command counters -AFTER
|
||||||
|
#Storing the after counts of Slave
|
||||||
|
connection slave;
|
||||||
|
let $slave_com_commit_after= query_get_value(SHOW GLOBAL STATUS LIKE 'com_commit', Value, 1);
|
||||||
|
let $slave_com_insert_after= query_get_value(SHOW GLOBAL STATUS LIKE 'com_insert', Value, 1);
|
||||||
|
let $slave_com_delete_after= query_get_value(SHOW GLOBAL STATUS LIKE 'com_delete', Value, 1);
|
||||||
|
let $slave_com_update_after= query_get_value(SHOW GLOBAL STATUS LIKE 'com_update', Value, 1);
|
||||||
|
|
||||||
|
#Commit count check
|
||||||
|
--let $assert_text= Counter for COM_COMMIT is consistent with the number of actual commits
|
||||||
|
--let $assert_cond= $slave_com_commit_after - $slave_com_commit_before = 4
|
||||||
|
--source include/assert.inc
|
||||||
|
#Insert count check
|
||||||
|
--let $assert_text= Counter for COM_INSERT is consistent with the number of actual inserts
|
||||||
|
--let $assert_cond= $slave_com_insert_after - $slave_com_insert_before = 2
|
||||||
|
--source include/assert.inc
|
||||||
|
#Delete count check
|
||||||
|
--let $assert_text= Counter for COM_DELETE is consistent with the number of actual deletes
|
||||||
|
--let $assert_cond= $slave_com_delete_after - $slave_com_delete_before = 1
|
||||||
|
--source include/assert.inc
|
||||||
|
#Update count check
|
||||||
|
--let $assert_text= Counter for COM_UPDATE is consistent with the number of actual updates
|
||||||
|
--let $assert_cond= $slave_com_update_after - $slave_com_update_before = 1
|
||||||
|
--source include/assert.inc
|
||||||
|
|
||||||
# Testing update with a condition that does not match any rows, but
|
# Testing update with a condition that does not match any rows, but
|
||||||
# which has a match for the index.
|
# which has a match for the index.
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -49,6 +49,10 @@ A B
|
|||||||
A I
|
A I
|
||||||
X Y
|
X Y
|
||||||
X Z
|
X Z
|
||||||
|
include/assert.inc [Counter for COM_COMMIT is consistent with the number of actual commits]
|
||||||
|
include/assert.inc [Counter for COM_INSERT is consistent with the number of actual inserts]
|
||||||
|
include/assert.inc [Counter for COM_DELETE is consistent with the number of actual deletes]
|
||||||
|
include/assert.inc [Counter for COM_UPDATE is consistent with the number of actual updates]
|
||||||
UPDATE t1 SET c2 = 'Q' WHERE c1 = 'A' AND c2 = 'N';
|
UPDATE t1 SET c2 = 'Q' WHERE c1 = 'A' AND c2 = 'N';
|
||||||
SELECT * FROM t1 ORDER BY c1,c2;
|
SELECT * FROM t1 ORDER BY c1,c2;
|
||||||
C1 C2
|
C1 C2
|
||||||
|
@ -49,6 +49,10 @@ A B
|
|||||||
A I
|
A I
|
||||||
X Y
|
X Y
|
||||||
X Z
|
X Z
|
||||||
|
include/assert.inc [Counter for COM_COMMIT is consistent with the number of actual commits]
|
||||||
|
include/assert.inc [Counter for COM_INSERT is consistent with the number of actual inserts]
|
||||||
|
include/assert.inc [Counter for COM_DELETE is consistent with the number of actual deletes]
|
||||||
|
include/assert.inc [Counter for COM_UPDATE is consistent with the number of actual updates]
|
||||||
UPDATE t1 SET c2 = 'Q' WHERE c1 = 'A' AND c2 = 'N';
|
UPDATE t1 SET c2 = 'Q' WHERE c1 = 'A' AND c2 = 'N';
|
||||||
SELECT * FROM t1 ORDER BY c1,c2;
|
SELECT * FROM t1 ORDER BY c1,c2;
|
||||||
C1 C2
|
C1 C2
|
||||||
|
@ -5594,6 +5594,11 @@ int Xid_log_event::do_apply_event(Relay_log_info const *rli)
|
|||||||
res= trans_commit(thd); /* Automatically rolls back on error. */
|
res= trans_commit(thd); /* Automatically rolls back on error. */
|
||||||
thd->mdl_context.release_transactional_locks();
|
thd->mdl_context.release_transactional_locks();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Increment the global status commit count variable
|
||||||
|
*/
|
||||||
|
status_var_increment(thd->status_var.com_stat[SQLCOM_COMMIT]);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8749,6 +8754,12 @@ Write_rows_log_event::do_before_row_operations(const Slave_reporting_capability
|
|||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Increment the global status insert count variable
|
||||||
|
*/
|
||||||
|
if (get_flags(STMT_END_F))
|
||||||
|
status_var_increment(thd->status_var.com_stat[SQLCOM_INSERT]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
todo: to introduce a property for the event (handler?) which forces
|
todo: to introduce a property for the event (handler?) which forces
|
||||||
applying the event in the replace (idempotent) fashion.
|
applying the event in the replace (idempotent) fashion.
|
||||||
@ -9682,6 +9693,12 @@ Delete_rows_log_event::Delete_rows_log_event(const char *buf, uint event_len,
|
|||||||
int
|
int
|
||||||
Delete_rows_log_event::do_before_row_operations(const Slave_reporting_capability *const)
|
Delete_rows_log_event::do_before_row_operations(const Slave_reporting_capability *const)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Increment the global status delete count variable
|
||||||
|
*/
|
||||||
|
if (get_flags(STMT_END_F))
|
||||||
|
status_var_increment(thd->status_var.com_stat[SQLCOM_DELETE]);
|
||||||
|
|
||||||
if ((m_table->file->ha_table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) &&
|
if ((m_table->file->ha_table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) &&
|
||||||
m_table->s->primary_key < MAX_KEY)
|
m_table->s->primary_key < MAX_KEY)
|
||||||
{
|
{
|
||||||
@ -9811,6 +9828,12 @@ Update_rows_log_event::Update_rows_log_event(const char *buf, uint event_len,
|
|||||||
int
|
int
|
||||||
Update_rows_log_event::do_before_row_operations(const Slave_reporting_capability *const)
|
Update_rows_log_event::do_before_row_operations(const Slave_reporting_capability *const)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Increment the global status update count variable
|
||||||
|
*/
|
||||||
|
if (get_flags(STMT_END_F))
|
||||||
|
status_var_increment(thd->status_var.com_stat[SQLCOM_UPDATE]);
|
||||||
|
|
||||||
if (m_table->s->keys > 0)
|
if (m_table->s->keys > 0)
|
||||||
{
|
{
|
||||||
// Allocate buffer for key searches
|
// Allocate buffer for key searches
|
||||||
|
Reference in New Issue
Block a user