Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-41413

rpl_semi_sync_master_trace_level and rpl_semi_sync_slave_trace_level have no effect (dead system variables)

    XMLWordPrintable

Details

    • 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

          Activity

            People

              ParadoxV5 Jimmy Hú
              Deepthi ES Deepthi Eranti Sreenivas
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0d
                  0d
                  Logged:
                  Time Spent - 5m
                  5m

                  Git Integration

                    Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.