Server IP : 104.21.38.3 / Your IP : 162.158.170.174 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/mysql-test/suite/group_replication/t/ |
Upload File : |
################################################################################ # Verify that group_replication_force_members does behave as expected # when: # 0) The test requires two servers: M1 and M2. # 1) A empty value is set on a OFFLINE member. It should succeed. # 2) A value is set on a OFFLINE member. It should fail. # 3) A empty value is set on a ONLINE member. It should succeed. # 4) An IP is set on group with majority reachable. It should fail. # 5) A empty value is set on a RECOVERING member. It should succeed. # 6) A value is set on a RECOVERING member. It should fail. # 7) Restart member with group_replication_force_members set. Group # Replication automatic start will error out. # 8) Start Group Replication with group_replication_force_members set, # start will error out. # 9) Clear group_replication_force_members, start will work. # 10) Kill and restart a member to group loose majority. # 11) Invalid address is set on a ONLINE member with majority unreachable. It # should fail. # 12) IP address is set on a ONLINE member with majority unreachable. It # should succeed. # 13) Clean up. ################################################################################ --source include/big_test.inc --source ../inc/have_group_replication_plugin.inc --source include/force_restart.inc --let $rpl_skip_group_replication_start= 1 --source ../inc/group_replication.inc --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $uuid_server2= `SELECT @@GLOBAL.SERVER_UUID` --let $member2_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` SET SESSION sql_log_bin= 0; call mtr.add_suppression("Member is not ONLINE, it is not possible to force a new group membership"); call mtr.add_suppression("group_replication_force_members must be empty on group start. Current value: '127.0.0.1:10000'"); call mtr.add_suppression("Unable to start Group Replication on boot"); call mtr.add_suppression("force_members can only be updated when Group Replication is running*"); call mtr.add_suppression("The member lost contact with a majority of the members in the group. Until the network is restored.*"); call mtr.add_suppression("\\[GCS\\] Peer address .* is not valid."); call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses. Please provide a list with only valid addresses."); call mtr.add_suppression("Error setting group_replication_force_members value .* on group communication interfaces"); call mtr.add_suppression("The member resumed contact with a majority of the members in the group.*"); SET SESSION sql_log_bin= 1; --let $rpl_connection_name= server1 --source include/rpl_connection.inc --let $member1_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` --let $group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` --let $member1_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1) --let $uuid_server1= `SELECT @@GLOBAL.SERVER_UUID` SET SESSION sql_log_bin= 0; call mtr.add_suppression("Member is OFFLINE, it is not possible to force a new group membership"); call mtr.add_suppression("force_members can only be updated when Group Replication is running*"); SET SESSION sql_log_bin= 1; --echo --echo ############################################################ --echo # 1. Set empty string value to --echo # group_replication_force_members on a OFFLINE --echo # member. SET GLOBAL group_replication_force_members= ""; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 2. Set group_replication_force_members on a OFFLINE --echo # member. --error ER_WRONG_VALUE_FOR_VAR SET GLOBAL group_replication_force_members= "127.0.0.1:10000"; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 3. Set empty string value to --echo # group_replication_force_members on a ONLINE --echo # member. --source ../inc/start_and_bootstrap_group_replication.inc SET GLOBAL group_replication_force_members= ""; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 4. Set valid IP string value to --echo # group_replication_force_members on a ONLINE member and --echo # majority of group members are reachable --error ER_WRONG_VALUE_FOR_VAR SET GLOBAL group_replication_force_members= "127.0.0.1:10001"; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 5. Set empty string value to --echo # group_replication_force_members on a RECOVERING --echo # member. # Stop applier on member 1 so that member 2 will block when # recovering from it. STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $group_replication_start_member_state= RECOVERING --source include/start_group_replication.inc SET GLOBAL group_replication_force_members= ""; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 6. Set group_replication_force_members on a RECOVERING --echo # member. --let $group_replication_member_state= RECOVERING --source ../inc/gr_wait_for_member_state.inc --error ER_WRONG_VALUE_FOR_VAR SET GLOBAL group_replication_force_members= "127.0.0.1:10000"; --let $rpl_connection_name= server1 --source include/rpl_connection.inc START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $group_replication_member_state= ONLINE --source ../inc/gr_wait_for_member_state.inc --echo --echo ############################################################ --echo # 7. Restart member with group_replication_force_members --echo # set. Group Replication start will error out. --echo # 2 members. --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $allow_rpl_inited=1 --let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` --let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` --let $_group_replication_group_whitelist= `SELECT @@GLOBAL.group_replication_ip_whitelist` --let $restart_parameters=restart:--group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group_replication_start_on_boot=1 --group-replication-group-name=$group_replication_group_name --group_replication_force_members="127.0.0.1:10000" --group_replication_ip_whitelist=$_group_replication_group_whitelist --replace_result $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $_group_replication_group_whitelist GROUP_REPLICATION_GROUP_WHITELIST --source include/restart_mysqld.inc --let $rpl_server_number= 2 --source include/rpl_reconnect.inc --let $assert_text= Member 2 is OFFLINE --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE"] = 1 --source include/assert.inc --echo --echo ############################################################ --echo # 8. Start Group Replication while --echo # group_replication_force_members is set. Start --echo # will error out. --let $assert_text= group_replication_force_members must be 127.0.0.1:10000 --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "127.0.0.1:10000" --source include/assert.inc --error ER_GROUP_REPLICATION_CONFIGURATION START GROUP_REPLICATION; --let $assert_text= Member 2 is OFFLINE --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE"] = 1 --source include/assert.inc --echo --echo ############################################################ --echo # 9. Clear group_replication_force_members and start --echo # Group Replication. Group will have the 2 members. SET GLOBAL group_replication_force_members= ""; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --source include/start_group_replication.inc # Server 1 --let $rpl_connection_name= server1 --source include/rpl_connection.inc --let $group_replication_number_of_members= 2 --source ../inc/gr_wait_for_number_of_members.inc --let $assert_text= Server 1 must be present on group members --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server1"] = 1 --source include/assert.inc --let $assert_text= Server 2 must be present on group members --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server2"] = 1 --source include/assert.inc # Server 2 --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $group_replication_number_of_members= 2 --source ../inc/gr_wait_for_number_of_members.inc --let $assert_text= Server 1 must be present on group members --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server1"] = 1 --source include/assert.inc --let $assert_text= Server 2 must be present on group members --let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server2"] = 1 --source include/assert.inc --let $assert_text= group_replication_force_members must be empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 10. Kill and restart a member to group loose majority. --let $rpl_connection_name= server1 --source include/rpl_connection.inc --let $restart_parameters=restart:--group_replication_local_address=$member1_group_replication_local_address --group_replication_group_seeds=$group_replication_group_seeds --group_replication_group_name=$group_replication_group_name --group_replication_ip_whitelist=$_group_replication_group_whitelist --replace_result $member1_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS1 $group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $_group_replication_group_whitelist GROUP_REPLICATION_GROUP_WHITELIST --source ../inc/kill_and_restart_mysqld.inc --let $rpl_server_number= 1 --source include/rpl_reconnect.inc --let $rpl_connection_name= server2 --source include/rpl_connection.inc # confirm member is unreachable --let $group_replication_member_state= UNREACHABLE --let $group_replication_member_id= $member1_uuid --source ../inc/gr_wait_for_member_state.inc --echo --echo ############################################################ --echo # 11. Set invalid IP string value to --echo # group_replication_force_members on a ONLINE member and --echo # majority of group members are unreachable. --error ER_WRONG_VALUE_FOR_VAR SET GLOBAL group_replication_force_members= "256.256.256.777:1234"; --let $assert_text= group_replication_force_members is empty --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "" --source include/assert.inc --echo --echo ############################################################ --echo # 12. Set valid IP string value to --echo # group_replication_force_members on a ONLINE member and --echo # majority of group members are unreachable # unblock group --replace_result $member2_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS1 eval SET GLOBAL group_replication_force_members= "$member2_group_replication_local_address"; --let $assert_text= group_replication_force_members has member2 local address --let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "$member2_group_replication_local_address" --source include/assert.inc --echo --echo ############################################################ --echo # 11. Clean up. # rejoin M1 to group --let $rpl_connection_name= server1 --source include/rpl_connection.inc --source include/start_group_replication.inc --source ../inc/group_replication_end.inc