403Webshell
Server IP : 104.21.38.3  /  Your IP : 104.23.175.184
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/mysql-test/suite/group_replication/t/gr_compression_options.test
################################################################################
# WL#9052 - GCS compression options
#
# This test case checks compression options for group replication
#
# Test:
# 0. The test requires two servers: M1 and M2.
# 1. When GROUP is OFFLINE. Set variable group_replication_compression_threshold
#    to 0 i.e. disabled.
# 2. Check it asserts that:
#  - The variable does not take invalid inputs.
#  - The variable does not take over the max inputs.
#  - The variable does not take negative inputs.
#  - The variable can be set to valid value.
#  - The default value is 0.
# 3. Set variable to valid value. Bootstrap M1 and start M2 to make them ONLINE.
# 4. Assert that on running member variable cannot be changed.
# 5. Then the test checks if two servers with and without compression enabled
#    are able to exchange messages and still comunicate with each other.
################################################################################

--source ../inc/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source ../inc/group_replication.inc

--let $saved_threshold= `SELECT @@group_replication_compression_threshold`
--let $sound_threshold= 512
--let $double_sound_threshold= `SELECT $sound_threshold * 2`
--let $half_sound_threshold= `SELECT $sound_threshold / 2`
--let $default_threshold= 1000000
--let $incorrect_threshold= "AAAA"
--let $overflow_threshold= 4294967297
--let $negative_threshold= -1

##
## Set group_replication_compression_threshold to 0 initially on both
## servers
##
# make sure that compression is disabled
--let $rpl_connection_name= server2
--source include/rpl_connection.inc

SET GLOBAL group_replication_compression_threshold= 0;

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

SET GLOBAL group_replication_compression_threshold= 0;

##
## Perform tests
##

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

#
# Assert that the wrong input results in an error
#
--error ER_WRONG_TYPE_FOR_VAR
--eval SET GLOBAL group_replication_compression_threshold=$incorrect_threshold

#
# Assert that a wrong value - over the max - for the variable results in an error
#
--error ER_WRONG_VALUE_FOR_VAR
--eval SET GLOBAL group_replication_compression_threshold=$overflow_threshold

#
# Assert that a wrong value - lower than the minimum results in an error
#
--error ER_WRONG_VALUE_FOR_VAR
--eval SET GLOBAL group_replication_compression_threshold=$negative_threshold

#
# Assert that we can set compression to a sound value
#
--eval SET GLOBAL group_replication_compression_threshold=$sound_threshold

#
# Assert that the threshold was actually changed
#
--let $threshold= `SELECT @@group_replication_compression_threshold`
--let $assert_cond= $threshold = $sound_threshold
--let $assert_text= Assert that the compression_threshold is set to the default
--source include/assert.inc

#
# We are not allowed to use DEFAULT as a value.
#
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_compression_threshold=DEFAULT;

##
## Now lets test with the system running
##
--eval SET GLOBAL group_replication_compression_threshold=$sound_threshold

## Start GR on server1
--source ../inc/start_and_bootstrap_group_replication.inc

## Start GR on server2
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/start_group_replication.inc

## Go back to server1
--let $rpl_connection_name= server1
--source include/rpl_connection.inc

#
# Assert that we cannot change the variable while group replication
# is running
#
--error ER_GROUP_REPLICATION_RUNNING
--eval SET GLOBAL group_replication_compression_threshold=$double_sound_threshold

#
# Assert that despite the error the value remains unchanged
#
--let $threshold= `SELECT @@group_replication_compression_threshold`
--let $assert_cond= $threshold = $sound_threshold
--let $assert_text= Assert that the compression_threshold remains unchanged
--source include/assert.inc

##
## Now lets verify that the data goes across, both when it
## is compressed and not compressed
##

CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB) ENGINE=InnoDB;

## This will trigger on the wire compression since we are generating
## a row insert larger than the compression threshold
--eval INSERT INTO t1 VALUES(1, REPEAT('A', $double_sound_threshold))

## This will not be compressed on the wire
--eval INSERT INTO t1 VALUES(2, REPEAT('B', $half_sound_threshold))

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--source include/rpl_sync.inc

#
# Assert that compression is disabled on server2
# given that we had set threshold to 0 earlier in the test
#
--let $threshold= `SELECT @@group_replication_compression_threshold`
--let $assert_cond= $threshold = 0
--let $assert_text= Assert that the compression_threshold is disabled
--source include/assert.inc

# Server2 has no compression enabled, so lets see if it
# is able to speak with server1 which has compression on
--eval INSERT INTO t1 VALUES(3, REPEAT('C', $double_sound_threshold))

--source include/rpl_sync.inc

#
# Assert that the data made it through
#
--let $diff_tables= server1:test.t1,server2:test.t1
--source include/diff_tables.inc

#
# One last assert - entries in the error log are correct
#

#
# Assert that GR on server1 was started with compression enabled
# It was only started once
#
--let $assert_file=$MYSQLTEST_VARDIR/tmp/group_replication_compression_options_mysqld.1.err
--let $assert_text= LZ4 compression was active and logged to the error log
--let $assert_select=.*group_replication_compression_threshold: 512.*
--let $assert_count= 1
--source include/assert_grep.inc

#
# Assert that GR on server1 was never started with compression disabled
#
--let $assert_file=$MYSQLTEST_VARDIR/tmp/group_replication_compression_options_mysqld.1.err
--let $assert_text= LZ4 compression was disabled and logged to the error log
--let $assert_select=.*group_replication_compression_threshold: 0.*
--let $assert_count= 0
--source include/assert_grep.inc

#
# Assert that GR on server2 was never started with compression enabled
# It was started twice, btw
#
--let $assert_file=$MYSQLTEST_VARDIR/tmp/group_replication_compression_options_mysqld.2.err
--let $assert_text= LZ4 compression was disabled always
--let $assert_select=.*group_replication_compression_threshold: 0.*
--let $assert_count= 1
--source include/assert_grep.inc

##
## Clean up
##

DROP TABLE t1;

--source include/rpl_sync.inc

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
--replace_result $saved_threshold SAVED_THRESHOLD
--eval SET GLOBAL group_replication_compression_threshold= $saved_threshold
--source include/start_group_replication.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
--replace_result $saved_threshold SAVED_THRESHOLD
--eval SET GLOBAL group_replication_compression_threshold= $saved_threshold
--source include/start_group_replication.inc

## This is the end... My only friend the end!
--source ../inc/group_replication_end.inc

Youez - 2016 - github.com/yon3zu
LinuXploit