Make transaction mode a dynamic configuration #5057
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Online DDL flow - Upgrade Downgrade Testing | |
on: | |
push: | |
pull_request: | |
concurrency: | |
group: format('{0}-{1}', ${{ github.ref }}, 'Upgrade Downgrade Testing Online DDL flow') | |
cancel-in-progress: true | |
permissions: read-all | |
# This test ensures that our Online DDL + VReplication + throttler components | |
# work using primary and replica vttablets built on different versions. | |
jobs: | |
upgrade_downgrade_test: | |
name: Run Upgrade Downgrade Test - Online DDL flow | |
runs-on: gh-hosted-runners-16cores-1-24.04 | |
steps: | |
- name: Skip CI | |
run: | | |
if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then | |
echo "skipping CI due to the 'Skip CI' label" | |
exit 1 | |
fi | |
- name: Check if workflow needs to be skipped | |
id: skip-workflow | |
run: | | |
skip='false' | |
if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then | |
skip='true' | |
fi | |
echo Skip ${skip} | |
echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT | |
- name: Check out commit's code | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
fetch-depth: 0 | |
- name: Check for changes in relevant files | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' | |
uses: dorny/paths-filter@ebc4d7e9ebcb0b1eb21480bb8f43113e996ac77a # v3.0.1 | |
id: changes | |
with: | |
token: '' | |
filters: | | |
end_to_end: | |
- 'go/**' | |
- 'go/**/*.go' | |
- 'test.go' | |
- 'Makefile' | |
- 'build.env' | |
- 'go.sum' | |
- 'go.mod' | |
- 'proto/*.proto' | |
- 'tools/**' | |
- 'config/**' | |
- 'bootstrap.sh' | |
- '.github/workflows/upgrade_downgrade_test_onlineddl_flow.yml' | |
- name: Set output with latest release branch | |
id: output-previous-release-ref | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' | |
run: | | |
previous_release_ref=$(./tools/get_previous_release.sh ${{github.base_ref}} ${{github.ref}}) | |
echo $previous_release_ref | |
echo "previous_release_ref=${previous_release_ref}" >> $GITHUB_OUTPUT | |
- name: Set output with next release branch | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' | |
id: output-next-release-ref | |
run: | | |
next_release_ref=$(./tools/get_next_release.sh ${{github.base_ref}} ${{github.ref}}) | |
echo $next_release_ref | |
echo "next_release_ref=${next_release_ref}" >> $GITHUB_OUTPUT | |
- name: Set up Go | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 | |
with: | |
go-version: 1.22.7 | |
- name: Set up python | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 | |
- name: Tune the OS | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" | |
- name: Get base dependencies | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
sudo DEBIAN_FRONTEND="noninteractive" apt-get update | |
# Uninstall any previously installed MySQL first | |
sudo systemctl stop apparmor | |
sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common | |
sudo apt-get -y autoremove | |
sudo apt-get -y autoclean | |
sudo deluser mysql | |
sudo rm -rf /var/lib/mysql | |
sudo rm -rf /etc/mysql | |
# Install mysql80 | |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C | |
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb | |
echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections | |
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* | |
sudo apt-get update | |
sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-server mysql-client | |
# Install everything else we need, and configure | |
sudo apt-get install -y make unzip g++ etcd-client etcd-server curl git wget eatmydata | |
sudo service mysql stop | |
sudo service etcd stop | |
sudo bash -c "echo '/usr/sbin/mysqld { }' > /etc/apparmor.d/usr.sbin.mysqld" # https://bugs.launchpad.net/ubuntu/+source/mariadb-10.1/+bug/1806263 | |
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ | |
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld || echo "could not remove mysqld profile" | |
# install JUnit report formatter | |
go install github.com/vitessio/go-junit-report@HEAD | |
# Checkout to the last release of Vitess | |
- name: Check out last version's code (${{ steps.output-previous-release-ref.outputs.previous_release_ref }}) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
ref: ${{ steps.output-previous-release-ref.outputs.previous_release_ref }} | |
- name: Get dependencies for the last release | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
go mod download | |
- name: Building last release's binaries | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
timeout-minutes: 10 | |
run: | | |
echo "building last release: $(git rev-parse HEAD)" | |
source build.env | |
make build | |
mkdir -p /tmp/vitess-build-last/ | |
cp -R bin /tmp/vitess-build-last/ | |
rm -Rf bin/* | |
# Checkout to the next release of Vitess | |
- name: Check out next version's code (${{ steps.output-next-release-ref.outputs.next_release_ref }}) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
with: | |
ref: ${{ steps.output-next-release-ref.outputs.next_release_ref }} | |
- name: Get dependencies for the next release | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
go mod download | |
- name: Building next release's binaries | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
timeout-minutes: 10 | |
run: | | |
echo "building next release: $(git rev-parse HEAD)" | |
source build.env | |
NOVTADMINBUILD=1 make build | |
mkdir -p /tmp/vitess-build-next/ | |
cp -R bin /tmp/vitess-build-next/ | |
rm -Rf bin/* | |
# Checkout to this build's commit | |
- name: Check out commit's code | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
- name: Get dependencies for this commit | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
go mod download | |
- name: Building the binaries for this commit | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
timeout-minutes: 10 | |
run: | | |
echo "building this SHA: $(git rev-parse HEAD)" | |
source build.env | |
make build | |
mkdir -p /tmp/vitess-build-current/ | |
cp -R bin /tmp/vitess-build-current/ | |
# Copy vttablet and related binaries under new names | |
- name: Use current version Vtctl, and other version VTTablet | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
source build.env | |
cp /tmp/vitess-build-last/bin/vttablet $PWD/bin/vttablet-last | |
cp /tmp/vitess-build-last/bin/mysqlctl $PWD/bin/mysqlctl-last | |
cp /tmp/vitess-build-last/bin/mysqlctld $PWD/bin/mysqlctld-last | |
cp /tmp/vitess-build-next/bin/vttablet $PWD/bin/vttablet-next | |
cp /tmp/vitess-build-next/bin/mysqlctl $PWD/bin/mysqlctl-next | |
cp /tmp/vitess-build-next/bin/mysqlctld $PWD/bin/mysqlctld-next | |
$PWD/bin/vttablet-last --version | |
$PWD/bin/vttablet --version | |
$PWD/bin/vttablet-next --version | |
# Running a test with primary tablet at version n (current SHA) and replica vttablet at version n-1 | |
- name: Run Online DDL tests (primary=N, replica=N-1) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
rm -rf /tmp/vtdataroot | |
mkdir -p /tmp/vtdataroot | |
source build.env | |
export PRIMARY_TABLET_BINARY_SUFFIX="" | |
export REPLICA_TABLET_BINARY_SUFFIX="-last" | |
eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_onlineddl_flow | |
# Running a test with primary tablet at version n-1 and replica vttablet at version n (current SHA) | |
- name: Run Online DDL tests (primary=N-1, replica=N) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
rm -rf /tmp/vtdataroot | |
mkdir -p /tmp/vtdataroot | |
source build.env | |
export PRIMARY_TABLET_BINARY_SUFFIX="-last" | |
export REPLICA_TABLET_BINARY_SUFFIX="" | |
eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_onlineddl_flow | |
# Running a test with primary tablet at version n+1 and replica vttablet at version n (current SHA) | |
- name: Run Online DDL tests (primary=N+1, replica=N) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
rm -rf /tmp/vtdataroot | |
mkdir -p /tmp/vtdataroot | |
source build.env | |
export PRIMARY_TABLET_BINARY_SUFFIX="-next" | |
export REPLICA_TABLET_BINARY_SUFFIX="" | |
eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_onlineddl_flow | |
# Running a test with primary tablet at version n (current SHA) and replica vttablet at version n+1 | |
- name: Run Online DDL tests (primary=N, replica=N+1) | |
if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' | |
run: | | |
rm -rf /tmp/vtdataroot | |
mkdir -p /tmp/vtdataroot | |
source build.env | |
export PRIMARY_TABLET_BINARY_SUFFIX="" | |
export REPLICA_TABLET_BINARY_SUFFIX="-next" | |
eatmydata -- go run test.go -skip-build -keep-data=false -docker=false -print-log -follow -tag upgrade_downgrade_onlineddl_flow |