Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Duplicate
-
10.11, 12.3, 10.6.28, 13.1.1
-
Not for Release Notes
Description
The system variables rpl_semi_sync_master_trace_level and rpl_semi_sync_slave_trace_level are accepted and stored, but changing them has no effect on any output. They are dead variables.
Both variables feed Trace::m_trace_level (sql/semisync.h) through set_trace_level(), on the master and slave semisync objects respectively. A grep of sql/.cc and sql/.h finds no read of m_trace_level. None of the four Trace::k_trace_* bitmask constants (general, detail, net_wait, function; sql/semisync.cc) is tested anywhere. The variable is write-only
codeline checked on: 10.6, 11.4, 11.8.6, 12.3, main, and the BiE branch.
mysql-test/suite/rpl/t/rpl_semi_sync_trace_level_dead.test
#
|
# Confirm rpl_semi_sync_master_trace_level and rpl_semi_sync_slave_trace_level
|
# are dead sysvars.
|
#
|
# Source review: both feed Trace::m_trace_level (sql/semisync.h) via
|
# set_trace_level(), on the master and slave semisync objects respectively.
|
# Grepping all of sql/*.cc and sql/*.h finds no read of m_trace_level, and no
|
# test anywhere against any of the four Trace::k_trace_* bitmask constants
|
# (k_trace_general/detail/net_wait/function, sql/semisync.cc). The variable
|
# is write-only.
|
#
|
# This test proves it live: for each of the master and slave sides, capture
|
# the "semisync" DBUG trace produced by an identical batch of transactions
|
# once at trace_level=0 and once at trace_level=ULONG_MAX, then diff the two
|
# captures after normalizing away everything that legitimately varies
|
# between two different batches of transactions (timestamps, thread ids,
|
# binlog positions, GTID components -- i.e. every number). If trace_level
|
# had any effect, the normalized captures would differ (extra/missing
|
# lines, different message text). They don't.
|
#
|
# If this test ever starts failing, someone has wired trace_level up for
|
# real -- update or remove it rather than "fixing" it blindly.
|
#
|
--source include/have_debug.inc
|
--source include/have_innodb.inc
|
--source include/master-slave.inc
|
|
|
--let $trace_dir= $MYSQLTEST_VARDIR/tmp
|
|
|
--connection master
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
SET GLOBAL rpl_semi_sync_master_enabled= 1;
|
# Long timeout: with a real, connected, acking slave this is never actually
|
# waited out, but keeps the test robust against any scheduling jitter.
|
SET GLOBAL rpl_semi_sync_master_timeout= 3600000;
|
|
|
--connection slave
|
# The IO thread must reconnect for semi-sync to actually be negotiated --
|
# flipping the flag alone does not renegotiate an already-connected thread.
|
--source include/stop_slave.inc
|
SET GLOBAL rpl_semi_sync_slave_enabled= 1;
|
--source include/start_slave.inc
|
|
|
--connection master
|
--let $status_var= Rpl_semi_sync_master_clients
|
--let $status_var_value= 1
|
--source include/wait_for_status_var.inc
|
--let $wait_condition= SELECT VARIABLE_VALUE = 'ON' FROM information_schema.global_status WHERE VARIABLE_NAME = 'RPL_SEMI_SYNC_MASTER_STATUS'
|
--source include/wait_condition.inc
|
|
|
--echo #
|
--echo # --- Master: rpl_semi_sync_master_trace_level, 0 vs ULONG_MAX ---
|
--echo #
|
|
|
--let $mtrace_a= $trace_dir/semisync_master_trace_a.trc
|
--let $mtrace_b= $trace_dir/semisync_master_trace_b.trc
|
--let $mtrace_a_norm= $trace_dir/semisync_master_trace_a.norm
|
--let $mtrace_b_norm= $trace_dir/semisync_master_trace_b.norm
|
|
|
--connection master
|
--disable_query_log
|
SET GLOBAL rpl_semi_sync_master_trace_level= 0;
|
--eval SET GLOBAL debug_dbug= 'd,semisync:O,$mtrace_a'
|
INSERT INTO t1 VALUES (1,1);
|
INSERT INTO t1 VALUES (2,2);
|
INSERT INTO t1 VALUES (3,3);
|
SET GLOBAL debug_dbug= '';
|
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 18446744073709551615;
|
--enable_query_log
|
SELECT @@GLOBAL.rpl_semi_sync_master_trace_level;
|
--disable_query_log
|
--eval SET GLOBAL debug_dbug= 'd,semisync:O,$mtrace_b'
|
INSERT INTO t1 VALUES (4,4);
|
INSERT INTO t1 VALUES (5,5);
|
INSERT INTO t1 VALUES (6,6);
|
SET GLOBAL debug_dbug= '';
|
SET GLOBAL rpl_semi_sync_master_trace_level= 32;
|
--enable_query_log
|
|
|
# Guard against a false pass: fail loudly (nonzero exit) if tracing somehow
|
# didn't produce anything, rather than silently "succeeding" on empty files.
|
--exec test -s $mtrace_a
|
--exec test -s $mtrace_b
|
|
|
--exec sed -E 's/[0-9]+/N/g' $mtrace_a | sort > $mtrace_a_norm
|
--exec sed -E 's/[0-9]+/N/g' $mtrace_b | sort > $mtrace_b_norm
|
|
|
--echo # silence below = identical trace content at trace_level=0 and ULONG_MAX
|
--diff_files $mtrace_a_norm $mtrace_b_norm
|
|
|
--remove_file $mtrace_a
|
--remove_file $mtrace_b
|
--remove_file $mtrace_a_norm
|
--remove_file $mtrace_b_norm
|
|
|
--echo #
|
--echo # --- Slave: rpl_semi_sync_slave_trace_level, 0 vs ULONG_MAX ---
|
--echo #
|
|
|
--let $strace_a= $trace_dir/semisync_slave_trace_a.trc
|
--let $strace_b= $trace_dir/semisync_slave_trace_b.trc
|
--let $strace_a_norm= $trace_dir/semisync_slave_trace_a.norm
|
--let $strace_b_norm= $trace_dir/semisync_slave_trace_b.norm
|
|
|
--connection slave
|
--disable_query_log
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 0;
|
--eval SET GLOBAL debug_dbug= 'd,semisync:O,$strace_a'
|
--enable_query_log
|
|
|
--connection master
|
--disable_query_log
|
INSERT INTO t1 VALUES (7,7);
|
INSERT INTO t1 VALUES (8,8);
|
INSERT INTO t1 VALUES (9,9);
|
--enable_query_log
|
--sync_slave_with_master
|
|
|
--connection slave
|
--disable_query_log
|
SET GLOBAL debug_dbug= '';
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 18446744073709551615;
|
--enable_query_log
|
SELECT @@GLOBAL.rpl_semi_sync_slave_trace_level;
|
--disable_query_log
|
--eval SET GLOBAL debug_dbug= 'd,semisync:O,$strace_b'
|
--enable_query_log
|
|
|
--connection master
|
--disable_query_log
|
INSERT INTO t1 VALUES (10,10);
|
INSERT INTO t1 VALUES (11,11);
|
INSERT INTO t1 VALUES (12,12);
|
--enable_query_log
|
--sync_slave_with_master
|
|
|
--connection slave
|
--disable_query_log
|
SET GLOBAL debug_dbug= '';
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 32;
|
--enable_query_log
|
|
|
--exec test -s $strace_a
|
--exec test -s $strace_b
|
|
|
--exec sed -E 's/[0-9]+/N/g' $strace_a | sort > $strace_a_norm
|
--exec sed -E 's/[0-9]+/N/g' $strace_b | sort > $strace_b_norm
|
|
|
--echo # silence below = identical trace content at trace_level=0 and ULONG_MAX
|
--diff_files $strace_a_norm $strace_b_norm
|
|
|
--remove_file $strace_a
|
--remove_file $strace_b
|
--remove_file $strace_a_norm
|
--remove_file $strace_b_norm
|
|
|
--connection master
|
DROP TABLE t1;
|
SET GLOBAL rpl_semi_sync_master_enabled= 0;
|
SET GLOBAL rpl_semi_sync_master_timeout= default;
|
|
|
--connection slave
|
--source include/stop_slave.inc
|
SET GLOBAL rpl_semi_sync_slave_enabled= 0;
|
--source include/start_slave.inc
|
|
|
--source include/rpl_end.inc
|
rpl_semi_sync_trace_level_dead-master.opt and -slave.opt, identical:
--innodb
Attachments
Issue Links
- causes
-
MDEV-41142 Deprecate rpl_semi_sync_master_trace_level/rpl_semi_sync_slave_trace_level
-
- Open
-
- duplicates
-
MDEV-41142 Deprecate rpl_semi_sync_master_trace_level/rpl_semi_sync_slave_trace_level
-
- Open
-