зеркало из https://github.com/github/vitess-gh.git
Address flakiness of vreplication tests (#9935)
* Address flakiness of vrepl across db versions test Signed-off-by: Matt Lord <mattalord@gmail.com> * Use docker by default for vreplication MySQL 8.0 / Ubuntu 20.20 tests Signed-off-by: Matt Lord <mattalord@gmail.com> * Give up on using Docker The Debian 10 based boostrap images don't have the libncurses dep installed and it will make the test signifcantly slower so giving up on it for now at least. Signed-off-by: Matt Lord <mattalord@gmail.com> * Start explicitly limiting resource usage in some vrepl e2e tests Signed-off-by: Matt Lord <mattalord@gmail.com> * Move other vreplication tests off of Docker And add ephemeral ports and FDs Signed-off-by: Matt Lord <mattalord@gmail.com> * Kicking the CI Signed-off-by: Matt Lord <mattalord@gmail.com>
This commit is contained in:
Родитель
e7bfff6e25
Коммит
b10a93b930
|
@ -81,6 +81,26 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql80.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_in_core_file=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_across_db_versions | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
|
|
|
@ -2,11 +2,19 @@
|
|||
|
||||
name: Cluster (vreplication_basic)
|
||||
on: [push, pull_request]
|
||||
concurrency:
|
||||
group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vreplication_basic)')
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
LAUNCHABLE_ORGANIZATION: "vitess"
|
||||
LAUNCHABLE_WORKSPACE: "vitess-app"
|
||||
GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Run endtoend tests on Cluster (vreplication_basic)
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- name: Set up Go
|
||||
|
@ -14,14 +22,83 @@ jobs:
|
|||
with:
|
||||
go-version: 1.18
|
||||
|
||||
- name: Set up python
|
||||
uses: actions/setup-python@v2
|
||||
|
||||
- name: Tune the OS
|
||||
run: |
|
||||
echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range
|
||||
# Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio
|
||||
echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf
|
||||
sudo sysctl -p /etc/sysctl.conf
|
||||
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Get dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata
|
||||
sudo service mysql stop
|
||||
sudo service etcd stop
|
||||
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
|
||||
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
|
||||
go mod download
|
||||
|
||||
# install JUnit report formatter
|
||||
go install github.com/jstemmer/go-junit-report@latest
|
||||
|
||||
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
|
||||
sudo apt-get install -y gnupg2
|
||||
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
|
||||
sudo apt-get update
|
||||
sudo apt-get install percona-xtrabackup-24
|
||||
|
||||
- name: Setup launchable dependencies
|
||||
run: |
|
||||
# Get Launchable CLI installed. If you can, make it a part of the builder image to speed things up
|
||||
pip3 install --user launchable~=1.0 > /dev/null
|
||||
|
||||
# verify that launchable setup is all correct.
|
||||
launchable verify || true
|
||||
|
||||
# Tell Launchable about the build you are producing and testing
|
||||
launchable record build --name "$GITHUB_RUN_ID" --source .
|
||||
|
||||
- name: Run cluster endtoend test
|
||||
timeout-minutes: 30
|
||||
run: |
|
||||
go run test.go -docker=true --follow -shard vreplication_basic
|
||||
source build.env
|
||||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_basic | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
- name: Print test output and Record test result in launchable
|
||||
run: |
|
||||
# send recorded tests to launchable
|
||||
launchable record tests --build "$GITHUB_RUN_ID" go-test . || true
|
||||
|
||||
# print test output
|
||||
cat output.txt
|
||||
if: always()
|
||||
|
|
|
@ -72,6 +72,25 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_cellalias | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
|
|
|
@ -72,6 +72,25 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_migrate | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
|
|
|
@ -72,6 +72,25 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_multicell | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
|
|
|
@ -2,11 +2,19 @@
|
|||
|
||||
name: Cluster (vreplication_v2)
|
||||
on: [push, pull_request]
|
||||
concurrency:
|
||||
group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (vreplication_v2)')
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
LAUNCHABLE_ORGANIZATION: "vitess"
|
||||
LAUNCHABLE_WORKSPACE: "vitess-app"
|
||||
GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Run endtoend tests on Cluster (vreplication_v2)
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- name: Set up Go
|
||||
|
@ -14,14 +22,83 @@ jobs:
|
|||
with:
|
||||
go-version: 1.18
|
||||
|
||||
- name: Set up python
|
||||
uses: actions/setup-python@v2
|
||||
|
||||
- name: Tune the OS
|
||||
run: |
|
||||
echo '1024 65535' | sudo tee -a /proc/sys/net/ipv4/ip_local_port_range
|
||||
# Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio
|
||||
echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf
|
||||
sudo sysctl -p /etc/sysctl.conf
|
||||
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Get dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata
|
||||
sudo service mysql stop
|
||||
sudo service etcd stop
|
||||
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
|
||||
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
|
||||
go mod download
|
||||
|
||||
# install JUnit report formatter
|
||||
go install github.com/jstemmer/go-junit-report@latest
|
||||
|
||||
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
|
||||
sudo apt-get install -y gnupg2
|
||||
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
|
||||
sudo apt-get update
|
||||
sudo apt-get install percona-xtrabackup-24
|
||||
|
||||
- name: Setup launchable dependencies
|
||||
run: |
|
||||
# Get Launchable CLI installed. If you can, make it a part of the builder image to speed things up
|
||||
pip3 install --user launchable~=1.0 > /dev/null
|
||||
|
||||
# verify that launchable setup is all correct.
|
||||
launchable verify || true
|
||||
|
||||
# Tell Launchable about the build you are producing and testing
|
||||
launchable record build --name "$GITHUB_RUN_ID" --source .
|
||||
|
||||
- name: Run cluster endtoend test
|
||||
timeout-minutes: 30
|
||||
run: |
|
||||
go run test.go -docker=true --follow -shard vreplication_v2
|
||||
source build.env
|
||||
|
||||
set -x
|
||||
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard vreplication_v2 | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
- name: Print test output and Record test result in launchable
|
||||
run: |
|
||||
# send recorded tests to launchable
|
||||
launchable record tests --build "$GITHUB_RUN_ID" go-test . || true
|
||||
|
||||
# print test output
|
||||
cat output.txt
|
||||
if: always()
|
||||
|
|
|
@ -116,7 +116,9 @@ func testBasicVreplicationWorkflow(t *testing.T) {
|
|||
vc = NewVitessCluster(t, "TestBasicVreplicationWorkflow", allCells, mainClusterConfig)
|
||||
|
||||
require.NotNil(t, vc)
|
||||
defaultReplicas = 0 // because of CI resource constraints we can only run this test with primary tablets
|
||||
// Keep the cluster processes minimal to deal with CI resource constraints
|
||||
defaultReplicas = 0
|
||||
defaultRdonly = 0
|
||||
defer func() { defaultReplicas = 1 }()
|
||||
|
||||
defer vc.TearDown(t)
|
||||
|
|
|
@ -105,15 +105,14 @@ var (
|
|||
"vreplication_across_db_versions",
|
||||
"vreplication_multicell",
|
||||
"vreplication_cellalias",
|
||||
"vreplication_basic",
|
||||
"vreplication_v2",
|
||||
"vtorc",
|
||||
"schemadiff_vrepl",
|
||||
}
|
||||
|
||||
clusterSelfHostedList []string
|
||||
clusterDockerList = []string{
|
||||
"vreplication_basic",
|
||||
"vreplication_v2",
|
||||
}
|
||||
clusterDockerList = []string{}
|
||||
// TODO: currently some percona tools including xtrabackup are installed on all clusters, we can possibly optimize
|
||||
// this by only installing them in the required clusters
|
||||
clustersRequiringXtraBackup = append(clusterList, clusterSelfHostedList...)
|
||||
|
@ -136,12 +135,13 @@ type unitTest struct {
|
|||
type clusterTest struct {
|
||||
Name, Shard, Platform string
|
||||
MakeTools, InstallXtraBackup bool
|
||||
Ubuntu20 bool
|
||||
Ubuntu20, Docker bool
|
||||
LimitResourceUsage bool
|
||||
}
|
||||
|
||||
type selfHostedTest struct {
|
||||
Name, Platform, Dockerfile, Shard, ImageName, directoryName string
|
||||
MakeTools, InstallXtraBackup bool
|
||||
MakeTools, InstallXtraBackup, Docker bool
|
||||
}
|
||||
|
||||
func mergeBlankLines(buf *bytes.Buffer) string {
|
||||
|
@ -304,6 +304,9 @@ func generateClusterWorkflows(list []string, tpl string) {
|
|||
break
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(cluster, "vreplication") {
|
||||
test.LimitResourceUsage = true
|
||||
}
|
||||
|
||||
path := fmt.Sprintf("%s/cluster_endtoend_%s.yml", workflowConfigDir, cluster)
|
||||
template := tpl
|
||||
|
|
|
@ -82,6 +82,27 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
{{if .LimitResourceUsage}}
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql57.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
{{end}}
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard {{.Shard}} | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
|
|
|
@ -91,8 +91,30 @@ jobs:
|
|||
|
||||
set -x
|
||||
|
||||
{{if .LimitResourceUsage}}
|
||||
# Increase our local ephemeral port range as we could exhaust this
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="22768 61999"
|
||||
# Increase our open file descriptor limit as we could hit this
|
||||
ulimit -n 65536
|
||||
cat <<-EOF>>./config/mycnf/mysql80.cnf
|
||||
innodb_buffer_pool_dump_at_shutdown=OFF
|
||||
innodb_buffer_pool_in_core_file=OFF
|
||||
innodb_buffer_pool_load_at_startup=OFF
|
||||
innodb_buffer_pool_size=64M
|
||||
innodb_doublewrite=OFF
|
||||
innodb_flush_log_at_trx_commit=0
|
||||
innodb_flush_method=O_DIRECT
|
||||
innodb_numa_interleave=ON
|
||||
innodb_adaptive_hash_index=OFF
|
||||
sync_binlog=0
|
||||
sync_relay_log=0
|
||||
performance_schema=OFF
|
||||
slow-query-log=OFF
|
||||
EOF
|
||||
{{end}}
|
||||
|
||||
# run the tests however you normally do, then produce a JUnit XML file
|
||||
eatmydata -- go run test.go -docker=false -follow -shard {{.Shard}} | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
eatmydata -- go run test.go -docker={{if .Docker}}true -flavor={{.Platform}}{{else}}false{{end}} -follow -shard {{.Shard}} | tee -a output.txt | go-junit-report -set-exit-code > report.xml
|
||||
|
||||
- name: Print test output and Record test result in launchable
|
||||
run: |
|
||||
|
|
Загрузка…
Ссылка в новой задаче