mysql-test/include/rpl_raft_make_master_leader.inc (90 lines of code) (raw):

# ==== Purpose ==== # # Promote mysql master to raft leader # let $include_filename= rpl_raft_make_master_leader.inc; source include/begin_include_file.inc; if ($rpl_enable_raft) { let $_master= 0; let $_leader= 0; let $_master_uuid= ''; while ($_leader == 0) { let $_rpl_server= $rpl_server_count; while ($_rpl_server) { let $rpl_connection_name= server_$_rpl_server; if ($_rpl_server == 1) { let $rpl_connection_name= master; } if ($_rpl_server == 2) { let $rpl_connection_name= slave; } source include/rpl_connection.inc; let $_is_master= `SELECT SUBSTRING('$rpl_master_list', 1 + ($_rpl_server - 1) * $rpl_server_count_length, $rpl_server_count_length) = ''`; let $_is_leader= `SELECT VARIABLE_VALUE = 'LEADER' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'RPL_RAFT_ROLE'`; if ($_is_master) { let $_master= $_rpl_server; let $_master_uuid = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'RPL_RAFT_PEER_UUID'`; } if ($_is_leader) { let $_leader= $_rpl_server; } dec $_rpl_server; } } if ($rpl_debug) { echo "Leader: server_$_leader, Master: server_$_master"; } if ($_master != $_leader) { if ($rpl_debug) { echo "Starting election"; } let $rpl_connection_name= server_$_leader; if ($_leader == 1) { let $rpl_connection_name= master; } if ($_leader == 2) { let $rpl_connection_name= slave; } source include/rpl_connection.inc; disable_query_log; eval set @@global.rpl_raft_new_leader_uuid = '$_master_uuid'; enable_query_log; } # Wait for master to be writable if ($rpl_debug) { echo "Waiting for master to be writable"; } let $_leader_writeable= 0; let $rpl_connection_name= server_$_master; if ($_master == 1) { let $rpl_connection_name= master; } if ($_master == 2) { let $rpl_connection_name= slave; } source include/rpl_connection.inc; let $max_sleep= 300; while (!$_leader_writeable) { let $_leader_writeable= `SELECT @@GLOBAL.READ_ONLY = 0`; sleep 1; let $max_sleep= $max_sleep - 1; if ($max_sleep == 0) { die "Timeout while waiting for read_only = 0 on leader"; } } # Wait for SQL thread to start on all followers let $_rpl_server= $rpl_server_count; while ($_rpl_server) { let $rpl_connection_name= server_$_rpl_server; if ($_rpl_server == 1) { let $rpl_connection_name= master; } if ($_rpl_server == 2) { let $rpl_connection_name= slave; } source include/rpl_connection.inc; let $_is_master= `SELECT SUBSTRING('$rpl_master_list', 1 + ($_rpl_server - 1) * $rpl_server_count_length, $rpl_server_count_length) = ''`; if (!$_is_master) { source include/wait_for_slave_sql_to_start.inc; } dec $_rpl_server; } } if ($rpl_debug) { echo "rpl_raft_make_master_leader.inc is done"; } source include/end_include_file.inc;